diff options
-rw-r--r-- | gdk/gdkfont.h | 8 | ||||
-rw-r--r-- | gdk/gdkkeys.c | 15 | ||||
-rw-r--r-- | gdk/gdkkeys.h | 28 | ||||
-rw-r--r-- | gdk/x11/gdkfont-x11.c | 12 | ||||
-rw-r--r-- | gdk/x11/gdkkeys-x11.c | 234 | ||||
-rw-r--r-- | gtk/gtkimcontextsimple.c | 9 | ||||
-rw-r--r-- | gtk/gtkplug.c | 7 |
7 files changed, 105 insertions, 208 deletions
diff --git a/gdk/gdkfont.h b/gdk/gdkfont.h index 374f4c820..7ad48ab9f 100644 --- a/gdk/gdkfont.h +++ b/gdk/gdkfont.h @@ -31,11 +31,11 @@ struct _GdkFont GType gdk_font_get_type (void); -GdkFont *gdk_font_load_for_display (const gchar * font_name, - GdkDisplay * display); +GdkFont *gdk_font_load_for_display (GdkDisplay * display, + const gchar * font_name); GdkFont* gdk_font_load (const gchar *font_name); -GdkFont *gdk_fontset_load_for_display (const gchar * fontset_name, - GdkDisplay * display); +GdkFont *gdk_fontset_load_for_display (GdkDisplay * display, + const gchar * fontset_name); GdkFont* gdk_fontset_load (const gchar *fontset_name); GdkFont *gdk_font_from_description_for_display (GdkDisplay * display, PangoFontDescription *font_desc); diff --git a/gdk/gdkkeys.c b/gdk/gdkkeys.c index 9b5911fd3..ad2b3f77b 100644 --- a/gdk/gdkkeys.c +++ b/gdk/gdkkeys.c @@ -24,8 +24,11 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#include "gdkkeys.h" #include <config.h> +#include "gdkdisplay.h" +#include "gdkdisplaymgr.h" +#include "gdkinternals.h" +#include "gdkkeys.h" static void gdk_keymap_init (GdkKeymap *keymap); static void gdk_keymap_class_init (GdkKeymapClass *klass); @@ -86,12 +89,20 @@ gdk_keymap_finalize (GObject *object) } GdkKeymap* +gdk_keymap_new (GdkDisplay *display) +{ + GdkKeymap *keymap = g_object_new (gdk_keymap_get_type (), NULL); + keymap->display = display; + return keymap; +} + +GdkKeymap* gdk_keymap_get_default (void) { static GdkKeymap *keymap = NULL; if (keymap == NULL) - keymap = g_object_new (gdk_keymap_get_type (), NULL); + keymap = gdk_keymap_new(DEFAULT_GDK_DISPLAY); return keymap; } diff --git a/gdk/gdkkeys.h b/gdk/gdkkeys.h index d643d8047..0560ac9ee 100644 --- a/gdk/gdkkeys.h +++ b/gdk/gdkkeys.h @@ -64,7 +64,8 @@ typedef struct _GdkKeymapClass GdkKeymapClass; struct _GdkKeymap { - GObject parent_instance; + GObject parent_instance; + GdkDisplay* display; }; struct _GdkKeymapClass @@ -75,23 +76,11 @@ struct _GdkKeymapClass GType gdk_keymap_get_type (void) G_GNUC_CONST; GdkKeymap* gdk_keymap_get_default (void); +GdkKeymap* gdk_keymap_new (GdkDisplay * display); -guint gdk_keymap_lookup_key_for_display (GdkKeymap * keymap, - const GdkKeymapKey * key, - GdkDisplay * display); guint gdk_keymap_lookup_key (GdkKeymap *keymap, const GdkKeymapKey *key); -gboolean -gdk_keymap_translate_keyboard_state_for_display (GdkKeymap * keymap, - guint hardware_keycode, - GdkDisplay * display, - GdkModifierType state, - gint group, - guint * keyval, - gint * effective_group, - gint * level, - GdkModifierType *unused_modifiers); gboolean gdk_keymap_translate_keyboard_state (GdkKeymap *keymap, guint hardware_keycode, GdkModifierType state, @@ -100,21 +89,10 @@ gboolean gdk_keymap_translate_keyboard_state (GdkKeymap *keymap, gint *effective_group, gint *level, GdkModifierType *unused_modifiers); -gboolean gdk_keymap_get_entries_for_keyval_for_display (GdkKeymap * keymap, - guint keyval, - GdkDisplay * display, - GdkKeymapKey ** keys, - gint * n_keys); gboolean gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap, guint keyval, GdkKeymapKey **keys, gint *n_keys); -gboolean gdk_keymap_get_entries_for_keycode_for_display (GdkKeymap * keymap, - guint hardware_keycode, - GdkDisplay * display, - GdkKeymapKey ** keys, - guint ** keyvals, - gint * n_entries); gboolean gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap, guint hardware_keycode, GdkKeymapKey **keys, diff --git a/gdk/x11/gdkfont-x11.c b/gdk/x11/gdkfont-x11.c index 609b24407..45dfa6c84 100644 --- a/gdk/x11/gdkfont-x11.c +++ b/gdk/x11/gdkfont-x11.c @@ -155,7 +155,7 @@ gdk_font_hash_lookup (GdkDisplay *display, GdkFontType type, const gchar *font_n } GdkFont * -gdk_font_load_for_display (const gchar * font_name, GdkDisplay * display) +gdk_font_load_for_display (GdkDisplay * display, const gchar * font_name) { GdkFont *font; GdkFontPrivateX *private; @@ -205,7 +205,7 @@ GdkFont* gdk_font_load (const gchar *font_name) { GDK_NOTE(MULTIHEAD,g_message("Use gdk_font_load_for_display instead\n")); - return gdk_font_load_for_display(font_name,DEFAULT_GDK_DISPLAY); + return gdk_font_load_for_display (DEFAULT_GDK_DISPLAY, font_name); } char * @@ -269,7 +269,7 @@ gdk_font_from_description_for_display (GdkDisplay * display, &subfont_ids, &subfont_charsets); if (n_subfonts > 0) { gchar *xlfd = pango_x_font_subfont_xlfd (font, subfont_ids[0]); - result = gdk_font_load_for_display (xlfd, display); + result = gdk_font_load_for_display (display, xlfd); g_free (xlfd); } @@ -306,8 +306,8 @@ gdk_font_from_description (PangoFontDescription *font_desc) } GdkFont * -gdk_fontset_load_for_display (const gchar * fontset_name, - GdkDisplay * display) +gdk_fontset_load_for_display (GdkDisplay * display, + const gchar * fontset_name) { GdkFont *font; GdkFontPrivateX *private; @@ -372,7 +372,7 @@ GdkFont* gdk_fontset_load (const gchar *fontset_name) { GDK_NOTE(MULTIHEAD,g_message("Use gdk_fontset_load_for_display instead\n")); - return gdk_fontset_load_for_display(fontset_name,DEFAULT_GDK_DISPLAY); + return gdk_fontset_load_for_display(DEFAULT_GDK_DISPLAY, fontset_name); } void diff --git a/gdk/x11/gdkkeys-x11.c b/gdk/x11/gdkkeys-x11.c index 31f4b5946..eb4c3b547 100644 --- a/gdk/x11/gdkkeys-x11.c +++ b/gdk/x11/gdkkeys-x11.c @@ -198,10 +198,9 @@ get_keymap_for_display (GdkDisplay * display) /** - * gdk_keymap_get_entries_for_keyval_for_display: + * gdk_keymap_get_entries_for_keyval: * @keymap: a #GdkKeymap, or %NULL to use the default keymap * @keyval: a keyval, such as %GDK_a, %GDK_Up, %GDK_Return, etc. - * @display: the display where to retrieve the #GdkKeymap * @keys: return location for an array of #GdkKeymapKey * @n_keys: return location for number of elements in returned array * @@ -219,22 +218,24 @@ get_keymap_for_display (GdkDisplay * display) * * Return value: %TRUE if keys were found and returned **/ - gboolean -gdk_keymap_get_entries_for_keyval_for_display (GdkKeymap * keymap, - guint keyval, - GdkDisplay * display, - GdkKeymapKey ** keys, - gint * n_keys) +gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap, + guint keyval, + GdkKeymapKey **keys, + gint *n_keys) { GArray *retval; - GdkDisplayImplX11 *dpy_impl = GDK_DISPLAY_IMPL_X11 (display); + GdkDisplayImplX11 *dpy_impl; + GdkDisplay *display; g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE); g_return_val_if_fail (keys != NULL, FALSE); g_return_val_if_fail (n_keys != NULL, FALSE); g_return_val_if_fail (keyval != 0, FALSE); + display = keymap->display; + dpy_impl = GDK_DISPLAY_IMPL_X11 (display); + retval = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey)); #ifdef HAVE_XKB @@ -349,43 +350,9 @@ gdk_keymap_get_entries_for_keyval_for_display (GdkKeymap * keymap, } /** - * gdk_keymap_get_entries_for_keyval: - * @keymap: a #GdkKeymap, or %NULL to use the default keymap - * @keyval: a keyval, such as %GDK_a, %GDK_Up, %GDK_Return, etc. - * @keys: return location for an array of #GdkKeymapKey - * @n_keys: return location for number of elements in returned array - * - * Obtains a list of keycode/group/level combinations that will - * generate @keyval. Groups and levels are two kinds of keyboard mode; - * in general, the level determines whether the top or bottom symbol - * on a key is used, and the group determines whether the left or - * right symbol is used. On US keyboards, the shift key changes the - * keyboard level, and there are no groups. A group switch key might - * convert a keyboard between Hebrew to English modes, for example. - * #GdkEventKey contains a %group field that indicates the active - * keyboard group. The level is computed from the modifier mask. - * The returned array should be freed - * with g_free(). - * - * Return value: %TRUE if keys were found and returned - **/ -gboolean -gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap, - guint keyval, - GdkKeymapKey **keys, - gint *n_keys) -{ - GDK_NOTE(MULTIHEAD,g_message("Use gdk_keymap_get_entries_for_keyval_for_display instead\n")); - return gdk_keymap_get_entries_for_keyval_for_display(keymap, - keyval,DEFAULT_GDK_DISPLAY, - keys,n_keys); -} - -/** - * gdk_keymap_get_entries_for_keycode_for_display: + * gdk_keymap_get_entries_for_keycode: * @keymap: a #GdkKeymap or %NULL to use the default keymap * @hardware_keycode: a keycode - * @display : the display where to retrieve the #GdkKeymap * @keys: return location for array of #GdkKeymapKey, or NULL * @keyvals: return location for array of keyvals, or NULL * @n_entries: length of @keys and @keyvals @@ -399,22 +366,24 @@ gdk_keymap_get_entries_for_keyval (GdkKeymap *keymap, * * Returns: %TRUE if there were any entries **/ - gboolean -gdk_keymap_get_entries_for_keycode_for_display (GdkKeymap * keymap, - guint hardware_keycode, - GdkDisplay * display, - GdkKeymapKey ** keys, - guint ** keyvals, - gint * n_entries) +gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap, + guint hardware_keycode, + GdkKeymapKey **keys, + guint **keyvals, + gint *n_entries) { GArray *key_array; GArray *keyval_array; - GdkDisplayImplX11 *dpy_impl = GDK_DISPLAY_IMPL_X11 (display); + GdkDisplay *display; + GdkDisplayImplX11 *dpy_impl; g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE); g_return_val_if_fail (n_entries != NULL, FALSE); + display = keymap->display; + dpy_impl = GDK_DISPLAY_IMPL_X11 (display); + update_keyrange_for_display (display); if (hardware_keycode < dpy_impl->min_keycode || @@ -556,56 +525,38 @@ gdk_keymap_get_entries_for_keycode_for_display (GdkKeymap * keymap, } /** - * gdk_keymap_get_entries_for_keycode: + * gdk_keymap_lookup_key: * @keymap: a #GdkKeymap or %NULL to use the default keymap - * @hardware_keycode: a keycode - * @keys: return location for array of #GdkKeymapKey, or NULL - * @keyvals: return location for array of keyvals, or NULL - * @n_entries: length of @keys and @keyvals - * - * Returns the keyvals bound to @hardware_keycode. - * The Nth #GdkKeymapKey in @keys is bound to the Nth - * keyval in @keyvals. Free the returned arrays with g_free(). - * When a keycode is pressed by the user, the keyval from - * this list of entries is selected by considering the effective - * keyboard group and level. See gdk_keymap_translate_keyboard_state(). - * - * Returns: %TRUE if there were any entries + * @key: a #GdkKeymapKey with keycode, group, and level initialized + * + * Looks up the keyval mapped to a keycode/group/level triplet. + * If no keyval is bound to @key, returns 0. For normal user input, + * you want to use gdk_keymap_translate_keyboard_state() instead of + * this function, since the effective group/level may not be + * the same as the current keyboard state. + * + * Return value: a keyval, or 0 if none was mapped to the given @key **/ -gboolean -gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap, - guint hardware_keycode, - GdkKeymapKey **keys, - guint **keyvals, - gint *n_entries) -{ - return gdk_keymap_get_entries_for_keycode_for_display(keymap, - hardware_keycode, - DEFAULT_GDK_DISPLAY, - keys,keyvals, - n_entries); -} guint -gdk_keymap_lookup_key_for_display (GdkKeymap * keymap, - const GdkKeymapKey * key, - GdkDisplay * display) -{ - - GdkDisplayImplX11 *dpy_impl = GDK_DISPLAY_IMPL_X11 (display); +gdk_keymap_lookup_key (GdkKeymap *keymap, + const GdkKeymapKey *key) +{ + GdkDisplayImplX11 *dpy_impl; g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), 0); g_return_val_if_fail (key != NULL, 0); g_return_val_if_fail (key->group < 4, 0); + dpy_impl = GDK_DISPLAY_IMPL_X11 (keymap->display); #ifdef HAVE_XKB if (dpy_impl->_gdk_use_xkb) { - XkbDescRec *xkb = get_xkb_for_display (display); + XkbDescRec *xkb = get_xkb_for_display (keymap->display); return XkbKeySymEntry (xkb, key->keycode, key->level, key->group); } else #endif /*HAVE_XKB*/ { - update_keymaps_for_display (display); + update_keymaps_for_display (keymap->display); return XKeycodeToKeysym (dpy_impl->xdisplay, key->keycode, key->group * dpy_impl->keysyms_per_keycode + @@ -613,27 +564,6 @@ gdk_keymap_lookup_key_for_display (GdkKeymap * keymap, } } -/** - * gdk_keymap_lookup_key: - * @keymap: a #GdkKeymap or %NULL to use the default keymap - * @key: a #GdkKeymapKey with keycode, group, and level initialized - * - * Looks up the keyval mapped to a keycode/group/level triplet. - * If no keyval is bound to @key, returns 0. For normal user input, - * you want to use gdk_keymap_translate_keyboard_state() instead of - * this function, since the effective group/level may not be - * the same as the current keyboard state. - * - * Return value: a keyval, or 0 if none was mapped to the given @key - **/ -guint -gdk_keymap_lookup_key (GdkKeymap *keymap, - const GdkKeymapKey *key) -{ - GDK_NOTE(MULTIHEAD,g_message("Use gdk_keymap_lookup_key_for_display instead\n")); - return gdk_keymap_lookup_key_for_display(keymap,key,DEFAULT_GDK_DISPLAY); -} - #ifdef HAVE_XKB /* This is copied straight from XFree86 Xlib, because I needed to * add the group and level return. It's unchanged for ease of @@ -744,19 +674,42 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr xkb, } #endif /* HAVE_XKB */ +/** + * gdk_keymap_translate_keyboard_state: + * @keymap: a #GdkKeymap, or %NULL to use the default + * @hardware_keycode: a keycode + * @state: a modifier state + * @group: active keyboard group + * @keyval: return location for keyval + * @effective_group: return location for effective group + * @level: return location for level + * @unused_modifiers: return location for modifiers that didn't affect the group or level + * + * + * Translates the contents of a #GdkEventKey into a keyval, effective + * group, and level. Modifiers that didn't affect the translation and + * are thus available for application use are returned in + * @unused_modifiers. See gdk_keyval_get_keys() for an explanation of + * groups and levels. The @effective_group is the group that was + * actually used for the translation; some keys such as Enter are not + * affected by the active keyboard group. The @level is derived from + * @state. For convenience, #GdkEventKey already contains the translated + * keyval, so this function isn't as useful as you might think. + * + * Return value: %TRUE if there was a keyval bound to the keycode/state/group + **/ gboolean -gdk_keymap_translate_keyboard_state_for_display (GdkKeymap * keymap, - guint hardware_keycode, - GdkDisplay * display, - GdkModifierType state, - gint group, - guint * keyval, - gint * effective_group, - gint * level, - GdkModifierType * - unused_modifiers) +gdk_keymap_translate_keyboard_state (GdkKeymap *keymap, + guint hardware_keycode, + GdkModifierType state, + gint group, + guint *keyval, + gint *effective_group, + gint *level, + GdkModifierType *unused_modifiers) { - GdkDisplayImplX11 *dpy_impl = GDK_DISPLAY_IMPL_X11 (display); + GdkDisplay *display = keymap->display; + GdkDisplayImplX11 *dpy_impl = GDK_DISPLAY_IMPL_X11 (keymap->display); KeySym tmp_keyval = NoSymbol; g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE); @@ -832,49 +785,6 @@ gdk_keymap_translate_keyboard_state_for_display (GdkKeymap * keymap, return tmp_keyval != NoSymbol; } -/** - * gdk_keymap_translate_keyboard_state: - * @keymap: a #GdkKeymap, or %NULL to use the default - * @hardware_keycode: a keycode - * @state: a modifier state - * @group: active keyboard group - * @keyval: return location for keyval - * @effective_group: return location for effective group - * @level: return location for level - * @unused_modifiers: return location for modifiers that didn't affect the group or level - * - * - * Translates the contents of a #GdkEventKey into a keyval, effective - * group, and level. Modifiers that didn't affect the translation and - * are thus available for application use are returned in - * @unused_modifiers. See gdk_keyval_get_keys() for an explanation of - * groups and levels. The @effective_group is the group that was - * actually used for the translation; some keys such as Enter are not - * affected by the active keyboard group. The @level is derived from - * @state. For convenience, #GdkEventKey already contains the translated - * keyval, so this function isn't as useful as you might think. - * - * Return value: %TRUE if there was a keyval bound to the keycode/state/group - **/ -gboolean -gdk_keymap_translate_keyboard_state (GdkKeymap *keymap, - guint hardware_keycode, - GdkModifierType state, - gint group, - guint *keyval, - gint *effective_group, - gint *level, - GdkModifierType *unused_modifiers) -{ - GDK_NOTE(MULTIHEAD, - g_message("Use gdk_keymap_translate_keyboard_state_for_display instead\n")); - return gdk_keymap_translate_keyboard_state_for_display(keymap,hardware_keycode, - DEFAULT_GDK_DISPLAY, - state,group,keyval, - effective_group, - level, - unused_modifiers); -} /* Key handling not part of the keymap */ diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index a1f26c003..825a3b406 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -1073,11 +1073,10 @@ canonical_hex_keyval (GdkEventKey *event) /* See if this key would have generated a hex keyval in * any other state, and return that hex keyval if so */ - gdk_keymap_get_entries_for_keycode_for_display (NULL, - event->hardware_keycode, - gdk_window_get_display(event->window), - NULL, - &keyvals, &n_vals); + gdk_keymap_get_entries_for_keycode(gdk_keymap_new(gdk_window_get_display(event->window)), + event->hardware_keycode, + NULL, + &keyvals, &n_vals); keyval = 0; i = 0; diff --git a/gtk/gtkplug.c b/gtk/gtkplug.c index a21eef21f..5436a4464 100644 --- a/gtk/gtkplug.c +++ b/gtk/gtkplug.c @@ -415,10 +415,9 @@ gtk_plug_accel_entries_changed (GtkWindow *window) GdkKeymapKey *keys; gint n_keys; - if (gdk_keymap_get_entries_for_keyval_for_display (NULL, - gdk_window_get_display(window->window), - entries[i].accelerator_key, - &keys, &n_keys)) + if (gdk_keymap_get_entries_for_keyval (gdk_keymap_new(gdk_window_get_display(window->window)), + entries[i].accelerator_key, + &keys, &n_keys)) { GrabbedKey *key = g_new (GrabbedKey, 1); |