summaryrefslogtreecommitdiff
path: root/gdk/wayland/gdkkeys-wayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/wayland/gdkkeys-wayland.c')
-rw-r--r--gdk/wayland/gdkkeys-wayland.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/gdk/wayland/gdkkeys-wayland.c b/gdk/wayland/gdkkeys-wayland.c
index 4d10e67946..c2d07eb2a5 100644
--- a/gdk/wayland/gdkkeys-wayland.c
+++ b/gdk/wayland/gdkkeys-wayland.c
@@ -66,6 +66,11 @@ G_DEFINE_TYPE (GdkWaylandKeymap, _gdk_wayland_keymap, GDK_TYPE_KEYMAP)
static void
gdk_wayland_keymap_finalize (GObject *object)
{
+ GdkWaylandKeymap *keymap = GDK_WAYLAND_KEYMAP (object);
+
+ xkb_keymap_unref (keymap->xkb_keymap);
+ xkb_state_unref (keymap->xkb_state);
+
G_OBJECT_CLASS (_gdk_wayland_keymap_parent_class)->finalize (object);
}
@@ -228,31 +233,34 @@ _gdk_wayland_keymap_new ()
return GDK_KEYMAP (keymap);
}
-GdkKeymap *
-_gdk_wayland_keymap_new_from_fd (uint32_t format,
- uint32_t fd, uint32_t size)
+void
+_gdk_wayland_keymap_update_from_fd (GdkKeymap *keymap,
+ uint32_t format,
+ uint32_t fd,
+ uint32_t size)
{
- GdkWaylandKeymap *keymap;
+ GdkWaylandKeymap *keymap_wayland = GDK_WAYLAND_KEYMAP (keymap);
struct xkb_context *context;
char *map_str;
- keymap = g_object_new (_gdk_wayland_keymap_get_type(), NULL);
-
context = xkb_context_new (0);
map_str = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
- if (map_str == MAP_FAILED) {
- close(fd);
- return NULL;
+ if (map_str == MAP_FAILED)
+ {
+ close(fd);
+ return;
}
- keymap->xkb_keymap = xkb_keymap_new_from_string (context, map_str, format, 0);
+ xkb_keymap_unref (keymap_wayland->xkb_keymap);
+ keymap_wayland->xkb_keymap = xkb_keymap_new_from_string (context, map_str, format, 0);
munmap (map_str, size);
close (fd);
- keymap->xkb_state = xkb_state_new (keymap->xkb_keymap);
- xkb_context_unref (context);
- return GDK_KEYMAP (keymap);
+ xkb_state_unref (keymap_wayland->xkb_state);
+ keymap_wayland->xkb_state = xkb_state_new (keymap_wayland->xkb_keymap);
+
+ xkb_context_unref (context);
}
struct xkb_keymap *_gdk_wayland_keymap_get_xkb_keymap (GdkKeymap *keymap)