コード例 #1
0
ファイル: eggcellrendererkeys.c プロジェクト: GNOME/libegg
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);
}
コード例 #2
0
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;
}