[gnome-settings-daemon] keyboard: Don't save num-lock when caps-lock changes
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] keyboard: Don't save num-lock when caps-lock changes
- Date: Tue, 24 Jan 2012 16:52:48 +0000 (UTC)
commit 89b476ec6196aaad5c65804c8ceade3a92d33e29
Author: Bastien Nocera <hadess hadess net>
Date: Mon Jan 23 18:56:07 2012 +0000
keyboard: Don't save num-lock when caps-lock changes
The code would write the num-lock state even if it didn't change.
https://bugzilla.gnome.org/show_bug.cgi?id=668525
plugins/keyboard/gsd-keyboard-manager.c | 40 +++++++++++++++++++++----------
1 files changed, 27 insertions(+), 13 deletions(-)
---
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index f4a7dad..b9cc406 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -72,6 +72,7 @@ struct GsdKeyboardManagerPrivate
GSettings *settings;
gboolean have_xkb;
gint xkb_event_base;
+ GsdNumLockState old_state;
};
static void gsd_keyboard_manager_class_init (GsdKeyboardManagerClass *klass);
@@ -143,18 +144,30 @@ numlock_xkb_callback (GdkXEvent *xev_,
gpointer user_data)
{
XEvent *xev = (XEvent *) xev_;
+ XkbEvent *xkbev = (XkbEvent *) xev;
GsdKeyboardManager *manager = (GsdKeyboardManager *) user_data;
- if (xev->type == manager->priv->xkb_event_base) {
- XkbEvent *xkbev = (XkbEvent *)xev;
- if (xkbev->any.xkb_type == XkbStateNotify)
- if (xkbev->state.changed & XkbModifierLockMask) {
- unsigned num_mask = numlock_NumLock_modifier_mask ();
- unsigned locked_mods = xkbev->state.locked_mods;
- int numlock_state = !! (num_mask & locked_mods);
- g_settings_set_enum (manager->priv->settings, KEY_NUMLOCK_STATE, numlock_state);
- }
- }
+ if (xev->type != manager->priv->xkb_event_base)
+ return GDK_FILTER_CONTINUE;
+
+ if (xkbev->any.xkb_type != XkbStateNotify)
+ return GDK_FILTER_CONTINUE;
+
+ if (xkbev->state.changed & XkbModifierLockMask) {
+ unsigned num_mask = numlock_NumLock_modifier_mask ();
+ unsigned locked_mods = xkbev->state.locked_mods;
+ GsdNumLockState numlock_state;
+
+ numlock_state = (num_mask & locked_mods) ? GSD_NUM_LOCK_STATE_ON : GSD_NUM_LOCK_STATE_OFF;
+
+ if (numlock_state != manager->priv->old_state) {
+ g_settings_set_enum (manager->priv->settings,
+ KEY_NUMLOCK_STATE,
+ numlock_state);
+ manager->priv->old_state = numlock_state;
+ }
+ }
+
return GDK_FILTER_CONTINUE;
}
@@ -238,9 +251,10 @@ apply_settings (GSettings *settings,
KBKeyClickPercent | KBBellPercent | KBBellPitch | KBBellDuration,
&kbdcontrol);
- if (manager->priv->have_xkb && rnumlock) {
- numlock_set_xkb_state (g_settings_get_enum (manager->priv->settings, KEY_NUMLOCK_STATE));
- }
+ manager->priv->old_state = g_settings_get_enum (manager->priv->settings, KEY_NUMLOCK_STATE);
+
+ if (manager->priv->have_xkb && rnumlock)
+ numlock_set_xkb_state (manager->priv->old_state);
XSync (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), FALSE);
gdk_error_trap_pop_ignored ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]