[gtk+/gtk-2-24] quartz: update the keymap only if the input method changed
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24] quartz: update the keymap only if the input method changed
- Date: Thu, 20 Jun 2013 15:03:29 +0000 (UTC)
commit c2919a6e9144cb0e916af61a21e11de6ca13c6fe
Author: Michael Natterer <mitch gimp org>
Date: Thu Jun 20 16:55:49 2013 +0200
quartz: update the keymap only if the input method changed
and not on each keystroke, which for some IMs apparently caused a full
update on each keystroke, not just a check for changes. Patch from
Takuro Ashie, bug #698183.
gdk/quartz/gdkkeys-quartz.c | 29 +++++++++++++++++++++--------
1 files changed, 21 insertions(+), 8 deletions(-)
---
diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
index a722510..e218cc3 100644
--- a/gdk/quartz/gdkkeys-quartz.c
+++ b/gdk/quartz/gdkkeys-quartz.c
@@ -246,7 +246,7 @@ const static struct {
};
static void
-maybe_update_keymap (void)
+update_keymap (void)
{
const void *chr_data = NULL;
@@ -485,13 +485,32 @@ maybe_update_keymap (void)
}
}
+static void
+input_sources_changed_notification (CFNotificationCenterRef center,
+ void *observer,
+ CFStringRef name,
+ const void *object,
+ CFDictionaryRef userInfo)
+{
+ update_keymap ();
+}
+
GdkKeymap *
gdk_keymap_get_for_display (GdkDisplay *display)
{
g_return_val_if_fail (display == gdk_display_get_default (), NULL);
if (default_keymap == NULL)
- default_keymap = g_object_new (gdk_keymap_get_type (), NULL);
+ {
+ default_keymap = g_object_new (gdk_keymap_get_type (), NULL);
+ update_keymap ();
+ CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
+ NULL,
+ input_sources_changed_notification,
+ CFSTR ("AppleSelectedInputSourcesChangedNotification"),
+ NULL,
+ CFNotificationSuspensionBehaviorDeliverImmediately);
+ }
return default_keymap;
}
@@ -530,8 +549,6 @@ gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap,
g_return_val_if_fail (n_keys != NULL, FALSE);
g_return_val_if_fail (keyval != 0, FALSE);
- maybe_update_keymap ();
-
*n_keys = 0;
keys_array = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
@@ -570,8 +587,6 @@ gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap,
g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
g_return_val_if_fail (n_entries != NULL, FALSE);
- maybe_update_keymap ();
-
*n_entries = 0;
if (hardware_keycode > NUM_KEYCODES)
@@ -689,8 +704,6 @@ gdk_keymap_translate_keyboard_state (GdkKeymap *keymap,
g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
g_return_val_if_fail (group >= 0 && group <= 1, FALSE);
- maybe_update_keymap ();
-
if (keyval)
*keyval = 0;
if (effective_group)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]