static gchar * convert_keysym_state_to_string (guint keysym, guint keycode, EggVirtualModifierType mask) { if (keysym == 0 && keycode == 0) return g_strdup (_("Disabled")); else return egg_virtual_accelerator_name (keysym, keycode, mask); }
static gboolean ccm_config_entry_shortcut_key_release_event (GtkWidget * widget, GdkEventKey * event) { CCMConfigEntryShortcut *self = CCM_CONFIG_ENTRY_SHORTCUT (widget); gboolean ret = FALSE; if (self->priv->edited && event->type == GDK_KEY_RELEASE) { gchar *value = g_strdup (""); gchar *tmp; if (event->keyval == GDK_BackSpace) value = g_strdup (_("Disabled")); else if (event->keyval == GDK_Escape) value = g_strdup (self->priv->old_value); else { guint keyval = 0; GdkModifierType mods = 0; GdkModifierType consumed_modifiers; EggVirtualModifierType modifier; consumed_modifiers = 0; keyval = gdk_keyval_to_lower (event->keyval); if (keyval == GDK_ISO_Left_Tab) keyval = GDK_Tab; gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (), event->hardware_keycode, event->state, event->group, &keyval, NULL, NULL, &consumed_modifiers); if (event->keyval != keyval && (consumed_modifiers & GDK_SHIFT_MASK)) consumed_modifiers &= ~(GDK_SHIFT_MASK); mods = event->state & GDK_MODIFIER_MASK & ~(consumed_modifiers); egg_keymap_virtualize_modifiers (gdk_keymap_get_default (), mods, &modifier); switch (keyval) { case GDK_Shift_L: case GDK_Shift_R: modifier |= EGG_VIRTUAL_SHIFT_MASK; keyval = 0; break; case GDK_Control_L: case GDK_Control_R: modifier |= EGG_VIRTUAL_CONTROL_MASK; keyval = 0; break; case GDK_Alt_L: case GDK_Alt_R: modifier |= EGG_VIRTUAL_ALT_MASK; keyval = 0; break; case GDK_Super_L: case GDK_Super_R: modifier |= EGG_VIRTUAL_SUPER_MASK; keyval = 0; break; default: break; } if (event->is_modifier) keyval = 0; modifier &= ~(EGG_VIRTUAL_META_MASK); modifier &= ~(EGG_VIRTUAL_HYPER_MASK); value = egg_virtual_accelerator_name (keyval, 0, modifier); if (self->priv->mouse) { if (event->state & GDK_BUTTON1_MASK) { tmp = g_strconcat (value, "Button1", NULL); g_free (value); value = tmp; } if (event->state & GDK_BUTTON2_MASK) { tmp = g_strconcat (value, "Button2", NULL); g_free (value); value = tmp; } if (event->state & GDK_BUTTON3_MASK) { tmp = g_strconcat (value, "Button3", NULL); g_free (value); value = tmp; } if (self->priv->button & GDK_BUTTON4_MASK) { tmp = g_strconcat (value, "Button4", NULL); g_free (value); value = tmp; } if (self->priv->button & GDK_BUTTON5_MASK) { tmp = g_strconcat (value, "Button5", NULL); g_free (value); value = tmp; } } } self->priv->edited = FALSE; gdk_keyboard_ungrab (GDK_CURRENT_TIME); gdk_pointer_ungrab (GDK_CURRENT_TIME); gtk_entry_set_text (GTK_ENTRY (self), value); if (self->priv->config) ccm_config_set_string (self->priv->config, value, NULL); g_free (value); } if (GTK_WIDGET_CLASS (ccm_config_entry_shortcut_parent_class)->key_release_event) ret = GTK_WIDGET_CLASS (ccm_config_entry_shortcut_parent_class)->key_release_event (widget, event); return ret; }