This is an automated email from the git hooks/post-receive script. olivier pushed a commit to branch master in repository xfce/xfwm4.
commit ec233f961cdccb31c09eb22a3c50f5bb4c270f52 Author: Olivier Fourdan <four...@xfce.org> Date: Fri Feb 6 22:02:38 2015 +0100 Fix keyboard shortcuts vs. layout change When changing keyboard layouts, if a shortcut is using a key which is placed at a different location (e.g. QWERTY vs. AZERTY), it would stop working with the different layout. Parse all shortcuts on keymap layout changes to update keys shortcut. Signed-off-by: Olivier Fourdan <four...@xfce.org> --- src/settings.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/settings.c b/src/settings.c index 061da7b..502e51b 100644 --- a/src/settings.c +++ b/src/settings.c @@ -48,6 +48,9 @@ #define THEMERC "themerc" #define XPM_COLOR_SYMBOL_SIZE 24 +#define KEYMAP_UPDATE_TIMEOUT 250 /* ms */ +static guint keymap_timeout = 0; + /* Forward static decls. */ static void update_grabs (ScreenInfo *); @@ -1441,18 +1444,46 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_ } } -static void -cb_keys_changed (GdkKeymap *keymap, ScreenInfo *screen_info) + +static gboolean +keymap_reload (gpointer data) { + ScreenInfo *screen_info = (ScreenInfo *) data; + + g_return_val_if_fail (screen_info != NULL, FALSE); + TRACE ("entering keymap_reload"); + /* Recompute modifiers mask in case it changed */ initModifiers (myScreenGetXDisplay (screen_info)); - /* Ungrab/regrab shortcuts */ + /* Ungrab shortcuts and clear existing bindings */ myScreenUngrabKeys (screen_info); + unloadKeyBindings (screen_info); + + /* Reload new key bindings and regrab shortcuts */ + loadKeyBindings (screen_info); myScreenGrabKeys (screen_info); - /* Uupdate all grabs for mouse buttons */ + /* Update all grabs for mouse buttons */ clientUpdateAllFrames (screen_info, UPDATE_BUTTON_GRABS); + + /* We're done */ + keymap_timeout = 0; + + return FALSE; +} + +static void +cb_keys_changed (GdkKeymap *keymap, ScreenInfo *screen_info) +{ + if (keymap_timeout) + { + g_source_remove (keymap_timeout); + } + keymap_timeout = g_timeout_add_full (G_PRIORITY_DEFAULT, + KEYMAP_UPDATE_TIMEOUT, + (GSourceFunc) keymap_reload, + (gpointer) screen_info, NULL); } static void -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits