backend-x11: Don't leak the keymap
meta_backend_get_keymap is supposed to return a static keymap, not a new one every time. Cache it internally. We don't update it when the keymap changes on the server, but we'll do this soon.
This commit is contained in:
parent
1e225ecdaf
commit
bda2d6d1ac
@ -63,6 +63,8 @@ struct _MetaBackendX11Private
|
|||||||
|
|
||||||
uint8_t xkb_event_base;
|
uint8_t xkb_event_base;
|
||||||
uint8_t xkb_error_base;
|
uint8_t xkb_error_base;
|
||||||
|
|
||||||
|
struct xkb_keymap *keymap;
|
||||||
};
|
};
|
||||||
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
||||||
|
|
||||||
@ -569,17 +571,18 @@ meta_backend_x11_get_keymap (MetaBackend *backend)
|
|||||||
{
|
{
|
||||||
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
struct xkb_keymap *keymap;
|
|
||||||
struct xkb_context *context;
|
|
||||||
|
|
||||||
context = xkb_context_new (XKB_CONTEXT_NO_FLAGS);
|
if (priv->keymap == NULL)
|
||||||
keymap = xkb_x11_keymap_new_from_device (context,
|
{
|
||||||
priv->xcb,
|
struct xkb_context *context = xkb_context_new (XKB_CONTEXT_NO_FLAGS);
|
||||||
xkb_x11_get_core_keyboard_device_id (priv->xcb),
|
priv->keymap = xkb_x11_keymap_new_from_device (context,
|
||||||
XKB_KEYMAP_COMPILE_NO_FLAGS);
|
priv->xcb,
|
||||||
xkb_context_unref (context);
|
xkb_x11_get_core_keyboard_device_id (priv->xcb),
|
||||||
|
XKB_KEYMAP_COMPILE_NO_FLAGS);
|
||||||
|
xkb_context_unref (context);
|
||||||
|
}
|
||||||
|
|
||||||
return keymap;
|
return priv->keymap;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user