+2005-09-09 Matthias Clasen <mclasen@redhat.com>
+
+ Make it possible to determine if a key event is for a
+ modifier key:
+
+ * gdk/x11/gdkprivate-x11.h:
+ * gdk/x11/gdkkeys-x11.c (_gdk_keymap_key_is_modifier):
+ New function to determine if a keycode is mapped to a modifier.
+ (get_xkb): Get the modmap.
+
+ * gdk/x11/gdkevents-x11.c (translate_key_event): Set the
+ is_modifier bit by calling _gdk_keymap_key_is_modifier().
+
+ * gdk/gdkevents.h (struct _GdkEventKey): Add an is_modifier
+ bit.
+
+2005-09-09 Matthias Clasen <mclasen@redhat.com>
+
+ * gdk/gdkpixbuf-drawable.c (convert_real_slow): Remove an
+ unused variable, noticed by Kjartan Maraas.
+
2005-09-09 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_button_event):
+2005-09-09 Matthias Clasen <mclasen@redhat.com>
+
+ Make it possible to determine if a key event is for a
+ modifier key:
+
+ * gdk/x11/gdkprivate-x11.h:
+ * gdk/x11/gdkkeys-x11.c (_gdk_keymap_key_is_modifier):
+ New function to determine if a keycode is mapped to a modifier.
+ (get_xkb): Get the modmap.
+
+ * gdk/x11/gdkevents-x11.c (translate_key_event): Set the
+ is_modifier bit by calling _gdk_keymap_key_is_modifier().
+
+ * gdk/gdkevents.h (struct _GdkEventKey): Add an is_modifier
+ bit.
+
+2005-09-09 Matthias Clasen <mclasen@redhat.com>
+
+ * gdk/gdkpixbuf-drawable.c (convert_real_slow): Remove an
+ unused variable, noticed by Kjartan Maraas.
+
2005-09-09 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_button_event):
+2005-09-09 Matthias Clasen <mclasen@redhat.com>
+
+ * gdk/tmpl/event_structs.sgml: Document GdkEventKey.is_modifier.
+
2005-09-06 Matthias Clasen <mclasen@redhat.com>
* gdk/tmpl/windows.sgml: Document new modifier bits.
it from the an empty translation.
@hardware_keycode: the raw code of the key that was pressed or released.
@group: the keyboard group.
+@is_modifier: a flag that indicates if @hardware_keycode is mapped to a
+ modifier. Since 2.10
<!-- ##### STRUCT GdkEventButton ##### -->
<para>
gchar *string;
guint16 hardware_keycode;
guint8 group;
+ guint is_modifier : 1;
};
struct _GdkEventCrossing
NULL, NULL, NULL);
_gdk_keymap_add_virtual_modifiers (keymap, &event->key.state);
+ event->key.is_modifier = _gdk_keymap_key_is_modifier (keymap, event->key.hardware_keycode);
/* Fill in event->string crudely, since various programs
* depend on it.
if (keymap_x11->xkb_desc == NULL)
{
- keymap_x11->xkb_desc = XkbGetMap (xdisplay, XkbKeySymsMask | XkbKeyTypesMask | XkbVirtualModsMask, XkbUseCoreKbd);
+ keymap_x11->xkb_desc = XkbGetMap (xdisplay, XkbKeySymsMask | XkbKeyTypesMask | XkbModifierMapMask | XkbVirtualModsMask, XkbUseCoreKbd);
if (keymap_x11->xkb_desc == NULL)
g_error ("Failed to get keymap");
}
else if (keymap_x11->current_serial != display_x11->keymap_serial)
{
- XkbGetUpdatedMap (xdisplay, XkbKeySymsMask | XkbKeyTypesMask | XkbVirtualModsMask,
+ XkbGetUpdatedMap (xdisplay, XkbKeySymsMask | XkbKeyTypesMask | XkbModifierMapMask | XkbVirtualModsMask,
keymap_x11->xkb_desc);
XkbGetNames (xdisplay, XkbGroupNamesMask | XkbVirtualModNamesMask, keymap_x11->xkb_desc);
}
}
+gboolean
+_gdk_keymap_key_is_modifier (GdkKeymap *keymap,
+ guint keycode)
+{
+ GdkKeymapX11 *keymap_x11;
+ gint i;
+
+ keymap = GET_EFFECTIVE_KEYMAP (keymap);
+ keymap_x11 = GDK_KEYMAP_X11 (keymap);
+
+ if (keycode < keymap_x11->min_keycode ||
+ keycode > keymap_x11->max_keycode)
+ return FALSE;
+
+#ifdef HAVE_XKB
+ if (KEYMAP_USE_XKB (keymap))
+ {
+ XkbDescRec *xkb = get_xkb (keymap_x11);
+
+ if (xkb->map->modmap[keycode] != 0)
+ return TRUE;
+ }
+ else
+#endif
+ {
+ for (i = 0; i < 8 * keymap_x11->mod_keymap->max_keypermod; i++)
+ {
+ if (keycode == keymap_x11->mod_keymap->modifiermap[i])
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
#define __GDK_KEYS_X11_C__
#include "gdkaliasdef.c"
GdkModifierType state);
void _gdk_keymap_add_virtual_modifiers (GdkKeymap *keymap,
GdkModifierType *modifiers);
+gboolean _gdk_keymap_key_is_modifier (GdkKeymap *keymap,
+ guint keycode);
GC _gdk_x11_gc_flush (GdkGC *gc);