summaryrefslogtreecommitdiff
path: root/services
diff options
Diffstat (limited to 'services')
-rw-r--r--services/panel-service.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/services/panel-service.c b/services/panel-service.c
index 73c9d0cd2..6e5c37310 100644
--- a/services/panel-service.c
+++ b/services/panel-service.c
@@ -75,7 +75,7 @@ struct _PanelServicePrivate
gint last_bottom;
guint32 last_menu_button;
- KeySym toggle_key;
+ KeyCode toggle_key;
guint32 toggle_modifiers;
guint32 key_monitor_id;
@@ -410,8 +410,7 @@ event_filter (GdkXEvent *ev, GdkEvent *gev, PanelService *self)
if (event->evtype == XI_KeyPress)
{
- if (event->mods.base == priv->toggle_modifiers &&
- XkbKeycodeToKeysym(event->display, event->detail, 0, 0) == priv->toggle_key)
+ if (event->mods.base == priv->toggle_modifiers && event->detail == priv->toggle_key)
{
if (GTK_IS_MENU (priv->last_menu))
gtk_menu_popdown (GTK_MENU (priv->last_menu));
@@ -520,7 +519,8 @@ panel_service_update_menu_keybinding (PanelService *self)
GConfClient *client = gconf_client_get_default ();
gchar *binding = gconf_client_get_string (client, MENU_TOGGLE_KEYBINDING_PATH, NULL);
- KeySym key = 0;
+ KeyCode keycode = 0;
+ KeySym keysym = NoSymbol;
guint32 modifiers = 0;
gchar *keystart = (binding) ? strrchr(binding, '>') : NULL;
@@ -539,11 +539,14 @@ panel_service_update_menu_keybinding (PanelService *self)
if (keystart != keyend)
{
gchar *keystr = g_strndup (keystart, keyend-keystart);
- key = XStringToKeysym (keystr);
+ keysym = XStringToKeysym (keystr);
}
- if (key)
+ if (keysym != NoSymbol)
{
+ Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
+ keycode = XKeysymToKeycode(dpy, keysym);
+
if (g_strrstr (binding, "<Shift>"))
{
modifiers |= GDK_SHIFT_MASK;
@@ -562,7 +565,7 @@ panel_service_update_menu_keybinding (PanelService *self)
}
}
- self->priv->toggle_key = key;
+ self->priv->toggle_key = keycode;
self->priv->toggle_modifiers = modifiers;
g_free (binding);