Updating branch refs/heads/4.10_panel_support to 93f3b95ec40fef08f96920d1ef0924c8891c608e (commit) from e18da18ad13220a3dc4ca94eff4178e7b0b554be (commit)
commit 93f3b95ec40fef08f96920d1ef0924c8891c608e Author: Igor Slepchin <igor.slepc...@gmail.com> Date: Fri Mar 29 16:50:38 2013 -0400 Ignore xkl config change callbacks caused by our own config changes. libxklavier emits X-config-changed signal from within xkl_config_rec_activate before it gets a chance to fully update its internal state so that xkl_config_rec_get_from_server returns the *old* xkl config when invoked from the callback. This, in turn, updates xkb-plugin's internal state to the old xkl config and causes it go out of sync with the real xkl state. Since X-config-changed signal is synchronous, the easiest work around is to simply ignore the xkl config change notification when we know we're in the middle of updating xkl config. panel-plugin/xkb-config.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/panel-plugin/xkb-config.c b/panel-plugin/xkb-config.c index 08ba9c2..13656bd 100644 --- a/panel-plugin/xkb-config.c +++ b/panel-plugin/xkb-config.c @@ -23,6 +23,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "xfce4-xkb-plugin.h" #include "xkb-config.h" #include <stdio.h> @@ -65,6 +66,7 @@ typedef struct } t_xkb_config; t_xkb_config *config; +gboolean ignore_xkl_config_change = FALSE; void xkb_config_state_changed (XklEngine *engine, XklEngineStateChange *change, @@ -394,7 +396,11 @@ xkb_config_update_settings (t_xkb_settings *settings) } if (activate_settings && !settings->never_modify_config) + { + ignore_xkl_config_change = TRUE; xkl_config_rec_activate (config->config_rec, config->engine); + ignore_xkl_config_change = FALSE; + } xkb_config_initialize_xkb_options (settings); @@ -564,6 +570,10 @@ xkb_config_state_changed (XklEngine *engine, void xkb_config_xkl_config_changed (XklEngine *engine) { + TRACE ("ignore_xkl_config_change: %d ", ignore_xkl_config_change); + + if (ignore_xkl_config_change) return; + kbd_config_free (config->settings->kbd_config); config->settings->kbd_config = NULL; xkb_config_update_settings (config->settings); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits