Lines 29-34
Link Here
|
29 |
#include <glib.h> |
29 |
#include <glib.h> |
30 |
#include <glib-object.h> |
30 |
#include <glib-object.h> |
31 |
|
31 |
|
|
|
32 |
#include <gdk/gdkx.h> |
33 |
#include <X11/keysym.h> |
34 |
#include <X11/extensions/XTest.h> |
35 |
|
32 |
#include "gnome-screensaver.h" |
36 |
#include "gnome-screensaver.h" |
33 |
|
37 |
|
34 |
#include "gs-manager.h" |
38 |
#include "gs-manager.h" |
Lines 56-61
Link Here
|
56 |
GSFade *fade; |
60 |
GSFade *fade; |
57 |
GSGrab *grab; |
61 |
GSGrab *grab; |
58 |
guint release_grab_id; |
62 |
guint release_grab_id; |
|
|
63 |
gboolean have_xtest; |
64 |
int keycode1; |
65 |
int keycode2; |
66 |
int *keycode; |
59 |
}; |
67 |
}; |
60 |
|
68 |
|
61 |
#define FADE_TIMEOUT 10000 |
69 |
#define FADE_TIMEOUT 10000 |
Lines 186-192
Link Here
|
186 |
static void |
194 |
static void |
187 |
gs_monitor_simulate_user_activity (GSMonitor *monitor) |
195 |
gs_monitor_simulate_user_activity (GSMonitor *monitor) |
188 |
{ |
196 |
{ |
189 |
/* FIXME: reset the xsync timer? */ |
197 |
if (monitor->priv->have_xtest) { |
|
|
198 |
XLockDisplay (GDK_DISPLAY ()); |
199 |
XTestFakeKeyEvent (GDK_DISPLAY(), *monitor->priv->keycode, |
200 |
True, CurrentTime); |
201 |
XTestFakeKeyEvent (GDK_DISPLAY(), *monitor->priv->keycode, |
202 |
False, CurrentTime); |
203 |
XUnlockDisplay (GDK_DISPLAY()); |
204 |
/* Swap the keycode */ |
205 |
if (monitor->priv->keycode == &monitor->priv->keycode1) |
206 |
monitor->priv->keycode = &monitor->priv->keycode2; |
207 |
else |
208 |
monitor->priv->keycode = &monitor->priv->keycode1; |
209 |
} |
190 |
|
210 |
|
191 |
/* request that the manager unlock - |
211 |
/* request that the manager unlock - |
192 |
will pop up a dialog if necessary */ |
212 |
will pop up a dialog if necessary */ |
Lines 416-421
Link Here
|
416 |
static void |
436 |
static void |
417 |
gs_monitor_init (GSMonitor *monitor) |
437 |
gs_monitor_init (GSMonitor *monitor) |
418 |
{ |
438 |
{ |
|
|
439 |
int a, b, c, d; |
419 |
|
440 |
|
420 |
monitor->priv = GS_MONITOR_GET_PRIVATE (monitor); |
441 |
monitor->priv = GS_MONITOR_GET_PRIVATE (monitor); |
421 |
|
442 |
|
Lines 435-440
Link Here
|
435 |
connect_manager_signals (monitor); |
456 |
connect_manager_signals (monitor); |
436 |
|
457 |
|
437 |
_gs_monitor_update_from_prefs (monitor, monitor->priv->prefs); |
458 |
_gs_monitor_update_from_prefs (monitor, monitor->priv->prefs); |
|
|
459 |
|
460 |
XLockDisplay (GDK_DISPLAY()); |
461 |
monitor->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY(), &a, &b, &c, &d) == True); |
462 |
if (monitor->priv->have_xtest != FALSE) |
463 |
{ |
464 |
monitor->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L); |
465 |
if (monitor->priv->keycode1 == 0) { |
466 |
g_warning ("monitor->priv->keycode1 not existant"); |
467 |
} |
468 |
monitor->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_R); |
469 |
if (monitor->priv->keycode2 == 0) { |
470 |
monitor->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L); |
471 |
if (monitor->priv->keycode2 == 0) { |
472 |
g_warning ("monitor->priv->keycode2 not existant"); |
473 |
} |
474 |
} |
475 |
monitor->priv->keycode = &monitor->priv->keycode1; |
476 |
} |
477 |
XUnlockDisplay (GDK_DISPLAY()); |
438 |
} |
478 |
} |
439 |
|
479 |
|
440 |
static void |
480 |
static void |