26
28
#include "debug.hh"
28
31
#include "CoreFactory.hh"
29
32
#include "IConfigurator.hh"
33
#include "StringUtil.hh"
31
35
#include "UnixInputMonitorFactory.hh"
36
#include "RecordInputMonitor.hh"
32
37
#include "X11InputMonitor.hh"
38
#include "XScreenSaverMonitor.hh"
34
40
UnixInputMonitorFactory::UnixInputMonitorFactory()
41
: error_reported(false)
40
48
UnixInputMonitorFactory::init(const std::string &display)
47
55
UnixInputMonitorFactory::get_monitor(IInputMonitorFactory::MonitorCapability capability)
57
TRACE_ENTER("UnixInputMonitorFactory::get_monitor");
51
60
if (monitor == NULL)
53
monitor = new X11InputMonitor(display);
55
bool init_ok = monitor->init();
62
bool initialized = false;
63
string configure_monitor_method;
65
vector<string> available_monitors;
66
StringUtil::split(HAVE_MONITORS, ',', available_monitors);
68
TRACE_MSG("available_monitors " << HAVE_MONITORS << " " << available_monitors.size());
70
CoreFactory::get_configurator()->get_value_with_default("advanced/monitor",
71
configure_monitor_method,
74
vector<string>::const_iterator start = available_monitors.end();
76
if (configure_monitor_method != "default")
78
TRACE_MSG("use configured: " << configure_monitor_method);
79
start = find(available_monitors.begin(), available_monitors.end(), configure_monitor_method);
82
if (start == available_monitors.end())
84
start = available_monitors.begin();
85
TRACE_MSG("Start first available");
88
vector<string>::const_iterator loop = start;
91
string actual_monitor_method = *loop;
92
TRACE_MSG("Test " << actual_monitor_method);
94
if (actual_monitor_method == "record")
96
monitor = new RecordInputMonitor(display);
98
else if (actual_monitor_method == "screensaver")
100
monitor = new XScreenSaverMonitor();
102
else if (actual_monitor_method == "x11events")
104
monitor = new X11InputMonitor(display);
107
initialized = monitor->init();
111
TRACE_MSG("Success");
119
if (loop == available_monitors.end())
121
loop = available_monitors.begin();
132
TRACE_MSG("Non found");
136
error_reported = true;
137
g_idle_add(static_report_failure, NULL);
140
CoreFactory::get_configurator()->set_value("advanced/monitor", "default");
141
CoreFactory::get_configurator()->save();
143
actual_monitor_method = "";
147
if (configure_monitor_method != "default")
149
CoreFactory::get_configurator()->set_value("advanced/monitor", actual_monitor_method);
150
CoreFactory::get_configurator()->save();
153
TRACE_MSG("using " << actual_monitor_method);
162
UnixInputMonitorFactory::static_report_failure(void *data)
166
Core *core = Core::get_instance();
167
core->post_event(CORE_EVENT_MONITOR_FAILURE);