[gtk+] [gdk] Add gdk_keymap_get_num_lock_state
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] [gdk] Add gdk_keymap_get_num_lock_state
- Date: Fri, 2 Jul 2010 01:46:44 +0000 (UTC)
commit 0cfb94cdd44d2dfaf018a23edc5fcf6fd9597928
Author: William Jon McCann <jmccann redhat com>
Date: Thu Jul 1 18:45:06 2010 -0400
[gdk] Add gdk_keymap_get_num_lock_state
https://bugzilla.gnome.org/show_bug.cgi?id=623239
gdk/directfb/gdkkeys-directfb.c | 18 ++++++++++++++++++
gdk/gdk.symbols | 2 ++
gdk/gdkkeys.h | 1 +
gdk/quartz/gdkkeys-quartz.c | 7 +++++++
gdk/win32/gdkkeys-win32.c | 6 ++++++
gdk/x11/gdkkeys-x11.c | 37 +++++++++++++++++++++++++++++++++----
6 files changed, 67 insertions(+), 4 deletions(-)
---
diff --git a/gdk/directfb/gdkkeys-directfb.c b/gdk/directfb/gdkkeys-directfb.c
index fb72321..7ca2597 100644
--- a/gdk/directfb/gdkkeys-directfb.c
+++ b/gdk/directfb/gdkkeys-directfb.c
@@ -1759,6 +1759,24 @@ gdk_keymap_get_caps_lock_state (GdkKeymap *keymap)
}
/**
+ * gdk_keymap_get_num_lock_state:
+ * @keymap: a #GdkKeymap
+ *
+ * Returns whether the Num Lock modifer is locked.
+ *
+ * Returns: %TRUE if Num Lock is on
+ *
+ * Since: 3.0
+ */
+gboolean
+gdk_keymap_get_num_lock_state (GdkKeymap *keymap)
+{
+ /* FIXME: Can we implement this? */
+
+ return FALSE;
+}
+
+/**
* gdk_keymap_get_entries_for_keycode:
* @keymap: a #GdkKeymap or %NULL to use the default keymap
* @hardware_keycode: a keycode
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index ca44318..455cace 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -861,6 +861,7 @@ gdk_keymap_get_entries_for_keyval
gdk_keymap_get_for_display
gdk_keymap_have_bidi_layouts
gdk_keymap_get_caps_lock_state
+gdk_keymap_get_num_lock_state
gdk_keymap_lookup_key
gdk_keymap_translate_keyboard_state
gdk_keymap_add_virtual_modifiers
@@ -878,6 +879,7 @@ gdk_keymap_get_entries_for_keycode
gdk_keymap_get_entries_for_keyval
gdk_keymap_get_for_display
gdk_keymap_get_caps_lock_state
+gdk_keymap_get_num_lock_state
gdk_keymap_lookup_key
gdk_keymap_translate_keyboard_state
gdk_keymap_add_virtual_modifiers
diff --git a/gdk/gdkkeys.h b/gdk/gdkkeys.h
index ebab21b..212c680 100644
--- a/gdk/gdkkeys.h
+++ b/gdk/gdkkeys.h
@@ -108,6 +108,7 @@ gboolean gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap,
PangoDirection gdk_keymap_get_direction (GdkKeymap *keymap);
gboolean gdk_keymap_have_bidi_layouts (GdkKeymap *keymap);
gboolean gdk_keymap_get_caps_lock_state (GdkKeymap *keymap);
+gboolean gdk_keymap_get_num_lock_state (GdkKeymap *keymap);
void gdk_keymap_add_virtual_modifiers (GdkKeymap *keymap,
GdkModifierType *state);
gboolean gdk_keymap_map_virtual_modifiers (GdkKeymap *keymap,
diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
index 52b0867..729f320 100644
--- a/gdk/quartz/gdkkeys-quartz.c
+++ b/gdk/quartz/gdkkeys-quartz.c
@@ -452,6 +452,13 @@ gdk_keymap_get_caps_lock_state (GdkKeymap *keymap)
}
gboolean
+gdk_keymap_get_num_lock_state (GdkKeymap *keymap)
+{
+ /* FIXME: Implement this. */
+ return FALSE;
+}
+
+gboolean
gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap,
guint keyval,
GdkKeymapKey **keys,
diff --git a/gdk/win32/gdkkeys-win32.c b/gdk/win32/gdkkeys-win32.c
index eff2ebe..bd6a096 100644
--- a/gdk/win32/gdkkeys-win32.c
+++ b/gdk/win32/gdkkeys-win32.c
@@ -537,6 +537,12 @@ gdk_keymap_get_caps_lock_state (GdkKeymap *keymap)
}
gboolean
+gdk_keymap_get_num_lock_state (GdkKeymap *keymap)
+{
+ return ((GetKeyState (VK_NUMLOCK) & 1) != 0);
+}
+
+gboolean
gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap,
guint keyval,
GdkKeymapKey **keys,
diff --git a/gdk/x11/gdkkeys-x11.c b/gdk/x11/gdkkeys-x11.c
index 784e0ff..0804700 100644
--- a/gdk/x11/gdkkeys-x11.c
+++ b/gdk/x11/gdkkeys-x11.c
@@ -86,6 +86,7 @@ struct _GdkKeymapX11
guint sun_keypad : 1;
guint have_direction : 1;
guint caps_lock_state : 1;
+ guint num_lock_state : 1;
guint current_serial;
#ifdef HAVE_XKB
@@ -276,6 +277,9 @@ get_xkb (GdkKeymapX11 *keymap_x11)
keymap_x11->current_serial = display_x11->keymap_serial;
+ if (keymap_x11->num_lock_mask == 0)
+ keymap_x11->num_lock_mask = XkbKeysymToModifiers (KEYMAP_XDISPLAY (GDK_KEYMAP (keymap_x11)), XK_Num_Lock);
+
return keymap_x11->xkb_desc;
}
#endif /* HAVE_XKB */
@@ -687,12 +691,16 @@ update_lock_state (GdkKeymapX11 *keymap_x11,
gint locked_mods)
{
gboolean caps_lock_state;
-
+ gboolean num_lock_state;
+
caps_lock_state = keymap_x11->caps_lock_state;
+ num_lock_state = keymap_x11->num_lock_state;
keymap_x11->caps_lock_state = (locked_mods & GDK_LOCK_MASK) != 0;
-
- return caps_lock_state != keymap_x11->caps_lock_state;
+ keymap_x11->num_lock_state = (locked_mods & keymap_x11->num_lock_mask) != 0;
+
+ return (caps_lock_state != keymap_x11->caps_lock_state)
+ || (num_lock_state != keymap_x11->num_lock_state);
}
/* keep this in sync with the XkbSelectEventDetails() call
@@ -713,7 +721,7 @@ _gdk_keymap_state_changed (GdkDisplay *display,
g_signal_emit_by_name (keymap_x11, "direction-changed");
if (update_lock_state (keymap_x11, xkb_event->state.locked_mods))
- g_signal_emit_by_name (keymap_x11, "state-changed");
+ g_signal_emit_by_name (keymap_x11, "state-changed");
}
}
@@ -831,6 +839,27 @@ gdk_keymap_get_caps_lock_state (GdkKeymap *keymap)
return keymap_x11->caps_lock_state;
}
+/**
+ * gdk_keymap_get_num_lock_state:
+ * @keymap: a #GdkKeymap
+ *
+ * Returns whether the Num Lock modifer is locked.
+ *
+ * Returns: %TRUE if Num Lock is on
+ *
+ * Since: 3.0
+ */
+gboolean
+gdk_keymap_get_num_lock_state (GdkKeymap *keymap)
+{
+ GdkKeymapX11 *keymap_x11;
+
+ keymap = GET_EFFECTIVE_KEYMAP (keymap);
+
+ keymap_x11 = GDK_KEYMAP_X11 (keymap);
+
+ return keymap_x11->num_lock_state;
+}
/**
* gdk_keymap_get_entries_for_keyval:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]