diff options
author | Nick Schermer <nick@xfce.org> | 2012-01-05 20:11:08 +0100 |
---|---|---|
committer | Nick Schermer <nick@xfce.org> | 2012-01-05 20:11:08 +0100 |
commit | fabc8dfa6f286efcd988df401ef740362335bfcb (patch) | |
tree | 613382eeea37ac6a3bac16a078cd2a89eea28637 /xfsettingsd/keyboards.c | |
parent | cdcaee8e5738e8ddf1268751836765157fe1e8df (diff) | |
download | xfce4-settings-fabc8dfa6f286efcd988df401ef740362335bfcb.tar.gz |
Improve numlock state saving.
- Add a property /Default/RestoreNumlock to enable or disable
numlock restoring.
- Don't set a value if it does not exist.
- Add error traps around the x11 code.
Diffstat (limited to 'xfsettingsd/keyboards.c')
-rw-r--r-- | xfsettingsd/keyboards.c | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/xfsettingsd/keyboards.c b/xfsettingsd/keyboards.c index 05125134..976e2ba2 100644 --- a/xfsettingsd/keyboards.c +++ b/xfsettingsd/keyboards.c @@ -73,7 +73,7 @@ struct _XfceKeyboardsHelper -G_DEFINE_TYPE (XfceKeyboardsHelper, xfce_keyboards_helper, G_TYPE_OBJECT); +G_DEFINE_TYPE (XfceKeyboardsHelper, xfce_keyboards_helper, G_TYPE_OBJECT) @@ -227,14 +227,26 @@ xfce_keyboards_helper_restore_numlock_state (XfconfChannel *channel) Display *dpy; gboolean state; - dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); - state = xfconf_channel_get_bool (channel, "/Default/Numlock", FALSE); + if (xfconf_channel_has_property (channel, "/Default/Numlock") + && xfconf_channel_get_bool (channel, "/Default/RestoreNumlock", TRUE)) + { + state = xfconf_channel_get_bool (channel, "/Default/Numlock", FALSE); - numlock_mask = XkbKeysymToModifiers (dpy, XK_Num_Lock); + gdk_error_trap_push (); - XkbLockModifiers (dpy, XkbUseCoreKbd, numlock_mask, state ? numlock_mask : 0); + dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); + numlock_mask = XkbKeysymToModifiers (dpy, XK_Num_Lock); + XkbLockModifiers (dpy, XkbUseCoreKbd, numlock_mask, state ? numlock_mask : 0); - xfsettings_dbg (XFSD_DEBUG_KEYBOARDS, "set numlock %s", state ? "on" : "off"); + if (gdk_error_trap_pop () != 0) + g_critical ("Failed to change numlock modifier"); + + xfsettings_dbg (XFSD_DEBUG_KEYBOARDS, "set numlock %s", state ? "on" : "off"); + } + else + { + xfsettings_dbg (XFSD_DEBUG_KEYBOARDS, "don't set numlock"); + } } @@ -246,10 +258,16 @@ xfce_keyboards_helper_save_numlock_state (XfconfChannel *channel) Bool numlock_state; Atom numlock; + gdk_error_trap_push (); + dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); numlock = XInternAtom(dpy, "Num Lock", False); - XkbGetNamedIndicator (dpy, numlock, NULL, &numlock_state, NULL, NULL); + if (gdk_error_trap_pop () != 0) + g_critical ("Failed to get numlock state"); + + xfsettings_dbg (XFSD_DEBUG_KEYBOARDS, "save numlock %s", numlock_state ? "on" : "off"); + xfconf_channel_set_bool (channel, "/Default/Numlock", numlock_state); } |