EekGtkKeyboard: Use a direct reference to EekboardContext

This commit is contained in:
Dorota Czaplejewicz
2020-01-12 19:37:24 +00:00
parent e5d416fd4f
commit aafecfac02
5 changed files with 14 additions and 13 deletions

View File

@ -54,6 +54,7 @@ enum {
typedef struct _EekGtkKeyboardPrivate typedef struct _EekGtkKeyboardPrivate
{ {
EekRenderer *renderer; EekRenderer *renderer;
EekboardContextService *eekboard_context; // unowned reference
LevelKeyboard *keyboard; // unowned reference; it's kept in server-context (FIXME) LevelKeyboard *keyboard; // unowned reference; it's kept in server-context (FIXME)
GdkEventSequence *sequence; // unowned reference GdkEventSequence *sequence; // unowned reference
@ -122,7 +123,7 @@ static void depress(EekGtkKeyboard *self,
{ {
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (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); 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) gdouble x, gdouble y, guint32 time)
{ {
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); 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, x, y, eek_renderer_get_transformation(priv->renderer), time,
priv->keyboard->manager, self); priv->eekboard_context, self);
} }
static void release(EekGtkKeyboard *self, guint32 time) static void release(EekGtkKeyboard *self, guint32 time)
{ {
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); 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, eek_renderer_get_transformation(priv->renderer), time,
priv->keyboard->manager, self); priv->eekboard_context, self);
} }
static gboolean static gboolean
@ -229,7 +230,7 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self)
if (priv->keyboard) { if (priv->keyboard) {
squeek_layout_release_all_only( 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)); gdk_event_get_time(NULL));
} }
@ -264,7 +265,7 @@ eek_gtk_keyboard_dispose (GObject *object)
if (priv->keyboard) { if (priv->keyboard) {
squeek_layout_release_all_only( 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)); gdk_event_get_time(NULL));
priv->keyboard = NULL; priv->keyboard = NULL;
} }
@ -311,11 +312,12 @@ eek_gtk_keyboard_init (EekGtkKeyboard *self)
* Returns: a #GtkWidget * Returns: a #GtkWidget
*/ */
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)); EekGtkKeyboard *ret = EEK_GTK_KEYBOARD(g_object_new (EEK_TYPE_GTK_KEYBOARD, NULL));
EekGtkKeyboardPrivate *priv = (EekGtkKeyboardPrivate*)eek_gtk_keyboard_get_instance_private (ret); EekGtkKeyboardPrivate *priv = (EekGtkKeyboardPrivate*)eek_gtk_keyboard_get_instance_private (ret);
priv->keyboard = keyboard; priv->keyboard = keyboard;
priv->eekboard_context = eekservice;
return GTK_WIDGET(ret); return GTK_WIDGET(ret);
} }

View File

@ -28,6 +28,8 @@
#include <glib.h> #include <glib.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "eek/eek-types.h"
typedef struct _LevelKeyboard LevelKeyboard; // including causes weird bugs typedef struct _LevelKeyboard LevelKeyboard; // including causes weird bugs
G_BEGIN_DECLS G_BEGIN_DECLS
@ -45,7 +47,7 @@ struct _EekGtkKeyboardClass
}; };
GType eek_gtk_keyboard_get_type (void) G_GNUC_CONST; 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 G_END_DECLS
#endif /* EEK_GTK_KEYBOARD_H */ #endif /* EEK_GTK_KEYBOARD_H */

View File

@ -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 *level_keyboard_new(EekboardContextService *manager, struct squeek_layout *layout) {
LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1); LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1);
level_keyboard_init(keyboard, layout); level_keyboard_init(keyboard, layout);
keyboard->manager = manager;
return keyboard; return keyboard;
} }

View File

@ -41,8 +41,6 @@ struct _LevelKeyboard {
size_t keymap_len; // length of the data inside keymap_fd size_t keymap_len; // length of the data inside keymap_fd
guint id; // as a key to layout choices guint id; // as a key to layout choices
EekboardContextService *manager; // unowned reference
}; };
typedef struct _LevelKeyboard LevelKeyboard; typedef struct _LevelKeyboard LevelKeyboard;

View File

@ -224,7 +224,7 @@ make_widget (ServerContextService *context)
LevelKeyboard *keyboard = eekboard_context_service_get_keyboard (context->state); 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_widget_set_has_tooltip (context->widget, TRUE);
gtk_container_add (GTK_CONTAINER(context->window), context->widget); gtk_container_add (GTK_CONTAINER(context->window), context->widget);