Added GdkDisplay to GdkKeymap

Removed all for_display associated to GdkKeymap
This commit is contained in:
Erwann Chenede
2001-06-07 18:01:45 +00:00
parent f7d0a21a2b
commit 24b845f8f6
7 changed files with 109 additions and 212 deletions

View File

@@ -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);

View File

@@ -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);
@@ -85,13 +88,21 @@ gdk_keymap_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (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;
}

View File

@@ -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,

View File

@@ -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

View File

@@ -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 ||
@@ -555,64 +524,6 @@ gdk_keymap_get_entries_for_keycode_for_display (GdkKeymap * keymap,
return *n_entries > 0;
}
/**
* gdk_keymap_get_entries_for_keycode:
* @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
**/
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);
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);
#ifdef HAVE_XKB
if (dpy_impl->_gdk_use_xkb) {
XkbDescRec *xkb = get_xkb_for_display (display);
return XkbKeySymEntry (xkb, key->keycode, key->level, key->group);
}
else
#endif /*HAVE_XKB*/
{
update_keymaps_for_display (display);
return XKeycodeToKeysym (dpy_impl->xdisplay, key->keycode,
key->group * dpy_impl->keysyms_per_keycode +
key->level);
}
}
/**
* gdk_keymap_lookup_key:
* @keymap: a #GdkKeymap or %NULL to use the default keymap
@@ -630,8 +541,27 @@ 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);
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 (keymap->display);
return XkbKeySymEntry (xkb, key->keycode, key->level, key->group);
}
else
#endif /*HAVE_XKB*/
{
update_keymaps_for_display (keymap->display);
return XKeycodeToKeysym (dpy_impl->xdisplay, key->keycode,
key->group * dpy_impl->keysyms_per_keycode +
key->level);
}
}
#ifdef HAVE_XKB
@@ -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 */

View File

@@ -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;

View File

@@ -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);