mirror of
https://github.com/brl/mutter.git
synced 2025-02-20 06:54:10 +00:00
clutter: Move scattered x11 keymap code into ClutterKeymapX11
https://gitlab.gnome.org/GNOME/mutter/merge_requests/672
This commit is contained in:
parent
f304fa4869
commit
829d9c863c
@ -105,9 +105,6 @@ struct _ClutterBackendX11
|
|||||||
Window xsettings_xwin;
|
Window xsettings_xwin;
|
||||||
|
|
||||||
ClutterKeymapX11 *keymap;
|
ClutterKeymapX11 *keymap;
|
||||||
gboolean use_xkb;
|
|
||||||
gboolean have_xkb_autorepeat;
|
|
||||||
guint keymap_serial;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterBackendX11Class
|
struct _ClutterBackendX11Class
|
||||||
|
@ -79,9 +79,14 @@ struct _ClutterKeymapX11
|
|||||||
GHashTable *reserved_keycodes;
|
GHashTable *reserved_keycodes;
|
||||||
GQueue *available_keycodes;
|
GQueue *available_keycodes;
|
||||||
|
|
||||||
|
guint keymap_serial;
|
||||||
|
|
||||||
guint caps_lock_state : 1;
|
guint caps_lock_state : 1;
|
||||||
guint num_lock_state : 1;
|
guint num_lock_state : 1;
|
||||||
guint has_direction : 1;
|
guint has_direction : 1;
|
||||||
|
|
||||||
|
guint use_xkb : 1;
|
||||||
|
guint have_xkb_autorepeat : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterKeymapX11Class
|
struct _ClutterKeymapX11Class
|
||||||
@ -179,7 +184,7 @@ get_xkb (ClutterKeymapX11 *keymap_x11)
|
|||||||
|
|
||||||
update_modmap (backend_x11->xdpy, keymap_x11);
|
update_modmap (backend_x11->xdpy, keymap_x11);
|
||||||
}
|
}
|
||||||
else if (keymap_x11->xkb_map_serial != backend_x11->keymap_serial)
|
else if (keymap_x11->xkb_map_serial != keymap_x11->keymap_serial)
|
||||||
{
|
{
|
||||||
int flags = XkbKeySymsMask
|
int flags = XkbKeySymsMask
|
||||||
| XkbKeyTypesMask
|
| XkbKeyTypesMask
|
||||||
@ -195,7 +200,7 @@ get_xkb (ClutterKeymapX11 *keymap_x11)
|
|||||||
|
|
||||||
update_modmap (backend_x11->xdpy, keymap_x11);
|
update_modmap (backend_x11->xdpy, keymap_x11);
|
||||||
|
|
||||||
keymap_x11->xkb_map_serial = backend_x11->keymap_serial;
|
keymap_x11->xkb_map_serial = keymap_x11->keymap_serial;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keymap_x11->num_lock_mask == 0)
|
if (keymap_x11->num_lock_mask == 0)
|
||||||
@ -376,7 +381,7 @@ clutter_keymap_x11_constructed (GObject *gobject)
|
|||||||
{
|
{
|
||||||
Bool detectable_autorepeat_supported;
|
Bool detectable_autorepeat_supported;
|
||||||
|
|
||||||
backend_x11->use_xkb = TRUE;
|
keymap_x11->use_xkb = TRUE;
|
||||||
|
|
||||||
XkbSelectEvents (backend_x11->xdpy,
|
XkbSelectEvents (backend_x11->xdpy,
|
||||||
XkbUseCoreKbd,
|
XkbUseCoreKbd,
|
||||||
@ -393,11 +398,7 @@ clutter_keymap_x11_constructed (GObject *gobject)
|
|||||||
True,
|
True,
|
||||||
&detectable_autorepeat_supported);
|
&detectable_autorepeat_supported);
|
||||||
|
|
||||||
backend_x11->have_xkb_autorepeat = detectable_autorepeat_supported;
|
keymap_x11->have_xkb_autorepeat = detectable_autorepeat_supported;
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND, "Detectable autorepeat: %s",
|
|
||||||
backend_x11->have_xkb_autorepeat ? "supported"
|
|
||||||
: "not supported");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -453,7 +454,7 @@ clutter_keymap_x11_replace_keycode (ClutterKeymapX11 *keymap_x11,
|
|||||||
KeyCode keycode,
|
KeyCode keycode,
|
||||||
KeySym keysym)
|
KeySym keysym)
|
||||||
{
|
{
|
||||||
if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb)
|
if (keymap_x11->use_xkb)
|
||||||
{
|
{
|
||||||
Display *dpy = clutter_x11_get_default_display ();
|
Display *dpy = clutter_x11_get_default_display ();
|
||||||
XkbDescPtr xkb = get_xkb (keymap_x11);
|
XkbDescPtr xkb = get_xkb (keymap_x11);
|
||||||
@ -575,12 +576,10 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator,
|
|||||||
ClutterEvent *event)
|
ClutterEvent *event)
|
||||||
{
|
{
|
||||||
ClutterKeymapX11 *keymap_x11 = CLUTTER_KEYMAP_X11 (translator);
|
ClutterKeymapX11 *keymap_x11 = CLUTTER_KEYMAP_X11 (translator);
|
||||||
ClutterBackendX11 *backend_x11;
|
|
||||||
ClutterTranslateReturn retval;
|
ClutterTranslateReturn retval;
|
||||||
XEvent *xevent;
|
XEvent *xevent;
|
||||||
|
|
||||||
backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend);
|
if (!keymap_x11->use_xkb)
|
||||||
if (!backend_x11->use_xkb)
|
|
||||||
return CLUTTER_TRANSLATE_CONTINUE;
|
return CLUTTER_TRANSLATE_CONTINUE;
|
||||||
|
|
||||||
xevent = native;
|
xevent = native;
|
||||||
@ -605,7 +604,7 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator,
|
|||||||
case XkbMapNotify:
|
case XkbMapNotify:
|
||||||
CLUTTER_NOTE (EVENT, "Updating keyboard mapping");
|
CLUTTER_NOTE (EVENT, "Updating keyboard mapping");
|
||||||
XkbRefreshKeyboardMapping (&xkb_event->map);
|
XkbRefreshKeyboardMapping (&xkb_event->map);
|
||||||
backend_x11->keymap_serial += 1;
|
keymap_x11->keymap_serial += 1;
|
||||||
retval = CLUTTER_TRANSLATE_REMOVE;
|
retval = CLUTTER_TRANSLATE_REMOVE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -613,6 +612,12 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (xevent->type == MappingNotify)
|
||||||
|
{
|
||||||
|
XRefreshKeyboardMapping (&xevent->xmapping);
|
||||||
|
keymap_x11->keymap_serial += 1;
|
||||||
|
retval = CLUTTER_TRANSLATE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -659,16 +664,13 @@ _clutter_keymap_x11_translate_key_state (ClutterKeymapX11 *keymap,
|
|||||||
ClutterModifierType *modifier_state_p,
|
ClutterModifierType *modifier_state_p,
|
||||||
ClutterModifierType *mods_p)
|
ClutterModifierType *mods_p)
|
||||||
{
|
{
|
||||||
ClutterBackendX11 *backend_x11;
|
|
||||||
ClutterModifierType unconsumed_modifiers = 0;
|
ClutterModifierType unconsumed_modifiers = 0;
|
||||||
ClutterModifierType modifier_state = *modifier_state_p;
|
ClutterModifierType modifier_state = *modifier_state_p;
|
||||||
gint retval;
|
gint retval;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), 0);
|
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), 0);
|
||||||
|
|
||||||
backend_x11 = CLUTTER_BACKEND_X11 (keymap->backend);
|
if (keymap->use_xkb)
|
||||||
|
|
||||||
if (backend_x11->use_xkb)
|
|
||||||
{
|
{
|
||||||
XkbDescRec *xkb = get_xkb (keymap);
|
XkbDescRec *xkb = get_xkb (keymap);
|
||||||
KeySym tmp_keysym;
|
KeySym tmp_keysym;
|
||||||
@ -704,7 +706,7 @@ _clutter_keymap_x11_get_is_modifier (ClutterKeymapX11 *keymap,
|
|||||||
if (keycode < keymap->min_keycode || keycode > keymap->max_keycode)
|
if (keycode < keymap->min_keycode || keycode > keymap->max_keycode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (CLUTTER_BACKEND_X11 (keymap->backend)->use_xkb)
|
if (keymap->use_xkb)
|
||||||
{
|
{
|
||||||
XkbDescRec *xkb = get_xkb (keymap);
|
XkbDescRec *xkb = get_xkb (keymap);
|
||||||
|
|
||||||
@ -720,7 +722,7 @@ _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap)
|
|||||||
{
|
{
|
||||||
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), PANGO_DIRECTION_NEUTRAL);
|
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), PANGO_DIRECTION_NEUTRAL);
|
||||||
|
|
||||||
if (CLUTTER_BACKEND_X11 (keymap->backend)->use_xkb)
|
if (keymap->use_xkb)
|
||||||
{
|
{
|
||||||
if (!keymap->has_direction)
|
if (!keymap->has_direction)
|
||||||
{
|
{
|
||||||
@ -743,7 +745,7 @@ clutter_keymap_x11_get_entries_for_keyval (ClutterKeymapX11 *keymap_x11,
|
|||||||
ClutterKeymapKey **keys,
|
ClutterKeymapKey **keys,
|
||||||
gint *n_keys)
|
gint *n_keys)
|
||||||
{
|
{
|
||||||
if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb)
|
if (keymap_x11->use_xkb)
|
||||||
{
|
{
|
||||||
XkbDescRec *xkb = get_xkb (keymap_x11);
|
XkbDescRec *xkb = get_xkb (keymap_x11);
|
||||||
GArray *retval;
|
GArray *retval;
|
||||||
@ -823,7 +825,7 @@ clutter_keymap_x11_get_entries_for_keyval (ClutterKeymapX11 *keymap_x11,
|
|||||||
static guint
|
static guint
|
||||||
clutter_keymap_x11_get_available_keycode (ClutterKeymapX11 *keymap_x11)
|
clutter_keymap_x11_get_available_keycode (ClutterKeymapX11 *keymap_x11)
|
||||||
{
|
{
|
||||||
if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb)
|
if (keymap_x11->use_xkb)
|
||||||
{
|
{
|
||||||
clutter_keymap_x11_refresh_reserved_keycodes (keymap_x11);
|
clutter_keymap_x11_refresh_reserved_keycodes (keymap_x11);
|
||||||
|
|
||||||
@ -891,7 +893,6 @@ clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11,
|
|||||||
uint32_t level,
|
uint32_t level,
|
||||||
gboolean enable)
|
gboolean enable)
|
||||||
{
|
{
|
||||||
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend);
|
|
||||||
uint32_t modifiers[] = {
|
uint32_t modifiers[] = {
|
||||||
0,
|
0,
|
||||||
ShiftMask,
|
ShiftMask,
|
||||||
@ -900,7 +901,7 @@ clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11,
|
|||||||
};
|
};
|
||||||
uint32_t value = 0;
|
uint32_t value = 0;
|
||||||
|
|
||||||
if (!backend_x11->use_xkb)
|
if (!keymap_x11->use_xkb)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
level = CLAMP (level, 0, G_N_ELEMENTS (modifiers) - 1);
|
level = CLAMP (level, 0, G_N_ELEMENTS (modifiers) - 1);
|
||||||
|
@ -1024,13 +1024,6 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MappingNotify:
|
|
||||||
CLUTTER_NOTE (EVENT, "Refresh keyboard mapping");
|
|
||||||
XRefreshKeyboardMapping (&xevent->xmapping);
|
|
||||||
backend_x11->keymap_serial += 1;
|
|
||||||
res = CLUTTER_TRANSLATE_REMOVE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
res = CLUTTER_TRANSLATE_CONTINUE;
|
res = CLUTTER_TRANSLATE_CONTINUE;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user