From aafecfac02d4033f2b2804693b00db46f41fb9e1 Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Sun, 12 Jan 2020 19:37:24 +0000 Subject: [PATCH] EekGtkKeyboard: Use a direct reference to EekboardContext --- eek/eek-gtk-keyboard.c | 18 ++++++++++-------- eek/eek-gtk-keyboard.h | 4 +++- eek/eek-keyboard.c | 1 - eek/eek-keyboard.h | 2 -- src/server-context-service.c | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 43aa8137..2a15fefc 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -54,6 +54,7 @@ enum { typedef struct _EekGtkKeyboardPrivate { EekRenderer *renderer; + EekboardContextService *eekboard_context; // unowned reference LevelKeyboard *keyboard; // unowned reference; it's kept in server-context (FIXME) GdkEventSequence *sequence; // unowned reference @@ -122,7 +123,7 @@ static void depress(EekGtkKeyboard *self, { EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); - squeek_layout_depress(priv->keyboard->layout, priv->keyboard->manager->virtual_keyboard, + squeek_layout_depress(priv->keyboard->layout, priv->eekboard_context->virtual_keyboard, x, y, eek_renderer_get_transformation(priv->renderer), time, self); } @@ -130,18 +131,18 @@ static void drag(EekGtkKeyboard *self, gdouble x, gdouble y, guint32 time) { EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); - squeek_layout_drag(priv->keyboard->layout, priv->keyboard->manager->virtual_keyboard, + squeek_layout_drag(priv->keyboard->layout, priv->eekboard_context->virtual_keyboard, x, y, eek_renderer_get_transformation(priv->renderer), time, - priv->keyboard->manager, self); + priv->eekboard_context, self); } static void release(EekGtkKeyboard *self, guint32 time) { EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); - squeek_layout_release(priv->keyboard->layout, priv->keyboard->manager->virtual_keyboard, + squeek_layout_release(priv->keyboard->layout, priv->eekboard_context->virtual_keyboard, eek_renderer_get_transformation(priv->renderer), time, - priv->keyboard->manager, self); + priv->eekboard_context, self); } static gboolean @@ -229,7 +230,7 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self) if (priv->keyboard) { squeek_layout_release_all_only( - priv->keyboard->layout, priv->keyboard->manager->virtual_keyboard, + priv->keyboard->layout, priv->eekboard_context->virtual_keyboard, gdk_event_get_time(NULL)); } @@ -264,7 +265,7 @@ eek_gtk_keyboard_dispose (GObject *object) if (priv->keyboard) { squeek_layout_release_all_only( - priv->keyboard->layout, priv->keyboard->manager->virtual_keyboard, + priv->keyboard->layout, priv->eekboard_context->virtual_keyboard, gdk_event_get_time(NULL)); priv->keyboard = NULL; } @@ -311,11 +312,12 @@ eek_gtk_keyboard_init (EekGtkKeyboard *self) * Returns: a #GtkWidget */ GtkWidget * -eek_gtk_keyboard_new (LevelKeyboard *keyboard) +eek_gtk_keyboard_new (LevelKeyboard *keyboard, EekboardContextService *eekservice) { EekGtkKeyboard *ret = EEK_GTK_KEYBOARD(g_object_new (EEK_TYPE_GTK_KEYBOARD, NULL)); EekGtkKeyboardPrivate *priv = (EekGtkKeyboardPrivate*)eek_gtk_keyboard_get_instance_private (ret); priv->keyboard = keyboard; + priv->eekboard_context = eekservice; return GTK_WIDGET(ret); } diff --git a/eek/eek-gtk-keyboard.h b/eek/eek-gtk-keyboard.h index 35876b51..e9cb7c1a 100644 --- a/eek/eek-gtk-keyboard.h +++ b/eek/eek-gtk-keyboard.h @@ -28,6 +28,8 @@ #include #include +#include "eek/eek-types.h" + typedef struct _LevelKeyboard LevelKeyboard; // including causes weird bugs G_BEGIN_DECLS @@ -45,7 +47,7 @@ struct _EekGtkKeyboardClass }; GType eek_gtk_keyboard_get_type (void) G_GNUC_CONST; -GtkWidget *eek_gtk_keyboard_new (LevelKeyboard *keyboard); +GtkWidget *eek_gtk_keyboard_new (LevelKeyboard *keyboard, EekboardContextService *eekservice); G_END_DECLS #endif /* EEK_GTK_KEYBOARD_H */ diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 5245eb8e..fbbdfd87 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -52,6 +52,5 @@ void level_keyboard_init(LevelKeyboard *self, struct squeek_layout *layout) { LevelKeyboard *level_keyboard_new(EekboardContextService *manager, struct squeek_layout *layout) { LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1); level_keyboard_init(keyboard, layout); - keyboard->manager = manager; return keyboard; } diff --git a/eek/eek-keyboard.h b/eek/eek-keyboard.h index ebf63351..c2d291ac 100644 --- a/eek/eek-keyboard.h +++ b/eek/eek-keyboard.h @@ -41,8 +41,6 @@ struct _LevelKeyboard { size_t keymap_len; // length of the data inside keymap_fd guint id; // as a key to layout choices - - EekboardContextService *manager; // unowned reference }; typedef struct _LevelKeyboard LevelKeyboard; diff --git a/src/server-context-service.c b/src/server-context-service.c index ce2052da..88b12fab 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -224,7 +224,7 @@ make_widget (ServerContextService *context) LevelKeyboard *keyboard = eekboard_context_service_get_keyboard (context->state); - context->widget = eek_gtk_keyboard_new (keyboard); + context->widget = eek_gtk_keyboard_new (keyboard, context->state); gtk_widget_set_has_tooltip (context->widget, TRUE); gtk_container_add (GTK_CONTAINER(context->window), context->widget);