[gtk+] Turn the private #define for the group-shifting modifier into API
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Turn the private #define for the group-shifting modifier into API
- Date: Fri, 18 Nov 2011 14:18:50 +0000 (UTC)
commit 9c79f9f868617a918e301c14ebeeff1bdc4c7e9d
Author: Michael Natterer <mitch lanedo com>
Date: Fri Nov 18 15:14:31 2011 +0100
Turn the private #define for the group-shifting modifier into API
Add GDK_MODIFIER_INTENT_SHIFT_GROUP to enum GdkModifierIntent
and handle it in gdk_keymap_get_modifier_mask(). Add an X11
impl of the method and return keymap_x11->group_switch_mask.
Return 0 from the default impl because we don't know.
gdk/gdkkeys.c | 3 +++
gdk/gdktypes.h | 5 ++++-
gdk/quartz/gdkkeys-quartz.c | 3 +++
gdk/x11/gdkkeys-x11.c | 18 ++++++++++++++++++
gtk/gtkkeyhash.c | 8 +++++---
gtk/gtkprivate.c | 9 ++++++---
gtk/gtkprivate.h | 7 -------
7 files changed, 39 insertions(+), 14 deletions(-)
---
diff --git a/gdk/gdkkeys.c b/gdk/gdkkeys.c
index a12d68d..bd3f7dd 100644
--- a/gdk/gdkkeys.c
+++ b/gdk/gdkkeys.c
@@ -634,6 +634,9 @@ gdk_keymap_real_get_modifier_mask (GdkKeymap *keymap,
case GDK_MODIFIER_INTENT_NO_TEXT_INPUT:
return GDK_MOD1_MASK | GDK_CONTROL_MASK;
+ case GDK_MODIFIER_INTENT_SHIFT_GROUP:
+ return 0;
+
default:
g_return_val_if_reached (0);
}
diff --git a/gdk/gdktypes.h b/gdk/gdktypes.h
index a0ea893..577ab96 100644
--- a/gdk/gdktypes.h
+++ b/gdk/gdktypes.h
@@ -257,6 +257,8 @@ typedef enum
* @GDK_MODIFIER_INTENT_NO_TEXT_INPUT: when any of these modifiers is pressed, the
* key event cannot produce a symbol directly. This is meant to be used for
* input methods, and for use cases like typeahead search.
+ * @GDK_MODIFIER_INTENT_SHIFT_GROUP: the modifier that switches between keyboard
+ * groups (AltGr on X11/Windows and Option/Alt on OS X).
*
* This enum is used with gdk_keymap_get_modifier_mask() and
* gdk_get_modifier_mask() in order to determine what modifiers the
@@ -274,7 +276,8 @@ typedef enum
GDK_MODIFIER_INTENT_CONTEXT_MENU,
GDK_MODIFIER_INTENT_EXTEND_SELECTION,
GDK_MODIFIER_INTENT_MODIFY_SELECTION,
- GDK_MODIFIER_INTENT_NO_TEXT_INPUT
+ GDK_MODIFIER_INTENT_NO_TEXT_INPUT,
+ GDK_MODIFIER_INTENT_SHIFT_GROUP
} GdkModifierIntent;
typedef enum
diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
index 07d8489..1156591 100644
--- a/gdk/quartz/gdkkeys-quartz.c
+++ b/gdk/quartz/gdkkeys-quartz.c
@@ -757,6 +757,9 @@ gdk_quartz_keymap_get_modifier_mask (GdkKeymap *keymap,
case GDK_MODIFIER_INTENT_NO_TEXT_INPUT:
return GDK_MOD2_MASK | GDK_CONTROL_MASK;
+ case GDK_MODIFIER_INTENT_SHIFT_GROUP:
+ return GDK_MOD1_MASK;
+
default:
g_return_val_if_reached (0);
}
diff --git a/gdk/x11/gdkkeys-x11.c b/gdk/x11/gdkkeys-x11.c
index 80bf711..ec5d0ec 100644
--- a/gdk/x11/gdkkeys-x11.c
+++ b/gdk/x11/gdkkeys-x11.c
@@ -1609,6 +1609,23 @@ gdk_x11_keymap_map_virtual_modifiers (GdkKeymap *keymap,
return retval;
}
+static GdkModifierType
+gdk_x11_keymap_get_modifier_mask (GdkKeymap *keymap,
+ GdkModifierIntent intent)
+{
+ GdkX11Keymap *keymap_x11 = GDK_X11_KEYMAP (keymap);
+
+ switch (intent)
+ {
+ case GDK_MODIFIER_INTENT_SHIFT_GROUP:
+ return keymap_x11->group_switch_mask;
+
+ default:
+ GDK_KEYMAP_CLASS (gdk_x11_keymap_parent_class)->get_modifier_mask (keymap,
+ intent);
+ }
+}
+
static void
gdk_x11_keymap_class_init (GdkX11KeymapClass *klass)
{
@@ -1627,4 +1644,5 @@ gdk_x11_keymap_class_init (GdkX11KeymapClass *klass)
keymap_class->translate_keyboard_state = gdk_x11_keymap_translate_keyboard_state;
keymap_class->add_virtual_modifiers = gdk_x11_keymap_add_virtual_modifiers;
keymap_class->map_virtual_modifiers = gdk_x11_keymap_map_virtual_modifiers;
+ keymap_class->get_modifier_mask = gdk_x11_keymap_get_modifier_mask;
}
diff --git a/gtk/gtkkeyhash.c b/gtk/gtkkeyhash.c
index 954b9a1..fd26739 100644
--- a/gtk/gtkkeyhash.c
+++ b/gtk/gtkkeyhash.c
@@ -395,6 +395,7 @@ _gtk_key_hash_lookup (GtkKeyHash *key_hash,
gint level;
GdkModifierType modifiers;
GdkModifierType consumed_modifiers;
+ GdkModifierType shift_group_mask;
gboolean group_mod_is_accel_mod = FALSE;
const GdkModifierType xmods = GDK_MOD2_MASK|GDK_MOD3_MASK|GDK_MOD4_MASK|GDK_MOD5_MASK;
const GdkModifierType vmods = GDK_SUPER_MASK|GDK_HYPER_MASK|GDK_META_MASK;
@@ -411,7 +412,9 @@ _gtk_key_hash_lookup (GtkKeyHash *key_hash,
/* if the group-toggling modifier is part of the default accel mod
* mask, and it is active, disable it for matching
*/
- if (mask & GTK_TOGGLE_GROUP_MOD_MASK)
+ shift_group_mask = gdk_keymap_get_modifier_mask (key_hash->keymap,
+ GDK_MODIFIER_INTENT_SHIFT_GROUP);
+ if (mask & shift_group_mask)
group_mod_is_accel_mod = TRUE;
gdk_keymap_map_virtual_modifiers (key_hash->keymap, &mask);
@@ -449,8 +452,7 @@ _gtk_key_hash_lookup (GtkKeyHash *key_hash,
* otherwise we can get multiple exact matches, some being
* bogus */
(!group_mod_is_accel_mod ||
- (state & GTK_TOGGLE_GROUP_MOD_MASK) ==
- (entry->modifiers & GTK_TOGGLE_GROUP_MOD_MASK)))
+ (state & shift_group_mask) == (entry->modifiers & shift_group_mask)))
{
GTK_NOTE (KEYBINDINGS,
diff --git a/gtk/gtkprivate.c b/gtk/gtkprivate.c
index 1ec0814..ed5f1f7 100644
--- a/gtk/gtkprivate.c
+++ b/gtk/gtkprivate.c
@@ -216,15 +216,18 @@ _gtk_translate_keyboard_accel_state (GdkKeymap *keymap,
gint *level,
GdkModifierType *consumed_modifiers)
{
+ GdkModifierType shift_group_mask;
gboolean group_mask_disabled = FALSE;
gboolean retval;
/* if the group-toggling modifier is part of the accel mod mask, and
* it is active, disable it for matching
*/
- if (accel_mask & state & GTK_TOGGLE_GROUP_MOD_MASK)
+ shift_group_mask = gdk_keymap_get_modifier_mask (keymap,
+ GDK_MODIFIER_INTENT_SHIFT_GROUP);
+ if (accel_mask & state & shift_group_mask)
{
- state &= ~GTK_TOGGLE_GROUP_MOD_MASK;
+ state &= ~shift_group_mask;
group = 0;
group_mask_disabled = TRUE;
}
@@ -244,7 +247,7 @@ _gtk_translate_keyboard_accel_state (GdkKeymap *keymap,
*effective_group = 1;
if (consumed_modifiers)
- *consumed_modifiers &= ~GTK_TOGGLE_GROUP_MOD_MASK;
+ *consumed_modifiers &= ~shift_group_mask;
}
return retval;
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index e243199..ba18f04 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -62,13 +62,6 @@ GdkModifierType _gtk_replace_virtual_modifiers (GdkKeymap *keymap,
GdkModifierType modifiers);
GdkModifierType _gtk_get_primary_accel_mod (void);
-/* temp hack, will go away soon --mitch */
-#ifndef GDK_WINDOWING_QUARTZ
-#define GTK_TOGGLE_GROUP_MOD_MASK 0
-#else
-#define GTK_TOGGLE_GROUP_MOD_MASK GDK_MOD1_MASK
-#endif
-
gboolean _gtk_translate_keyboard_accel_state (GdkKeymap *keymap,
guint hardware_keycode,
GdkModifierType state,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]