Maintain EekKeyboard in EekboardKeyboardPrivate.
This commit is contained in:
		@ -31,6 +31,14 @@ static guint signals[LAST_SIGNAL] = { 0, };
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
G_DEFINE_TYPE (EekboardKeyboard, eekboard_keyboard, G_TYPE_DBUS_PROXY);
 | 
					G_DEFINE_TYPE (EekboardKeyboard, eekboard_keyboard, G_TYPE_DBUS_PROXY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define EEKBOARD_KEYBOARD_GET_PRIVATE(obj)                               \
 | 
				
			||||||
 | 
					    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_KEYBOARD, EekboardKeyboardPrivate))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct _EekboardKeyboardPrivate
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekKeyboard *description;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eekboard_keyboard_real_g_signal (GDBusProxy  *self,
 | 
					eekboard_keyboard_real_g_signal (GDBusProxy  *self,
 | 
				
			||||||
                                 const gchar *sender_name,
 | 
					                                 const gchar *sender_name,
 | 
				
			||||||
@ -56,19 +64,49 @@ eekboard_keyboard_real_g_signal (GDBusProxy  *self,
 | 
				
			|||||||
    g_return_if_reached ();
 | 
					    g_return_if_reached ();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					eekboard_keyboard_real_key_pressed (EekboardKeyboard *self,
 | 
				
			||||||
 | 
					                                    guint             keycode)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekboardKeyboardPrivate *priv = EEKBOARD_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
 | 
					    if (priv->description) {
 | 
				
			||||||
 | 
					        EekKey *key = eek_keyboard_find_key_by_keycode (priv->description,
 | 
				
			||||||
 | 
					                                                        keycode);
 | 
				
			||||||
 | 
					        g_signal_emit_by_name (key, "pressed");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					eekboard_keyboard_real_key_released (EekboardKeyboard *self,
 | 
				
			||||||
 | 
					                                     guint             keycode)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekboardKeyboardPrivate *priv = EEKBOARD_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
 | 
					    if (priv->description) {
 | 
				
			||||||
 | 
					        EekKey *key = eek_keyboard_find_key_by_keycode (priv->description,
 | 
				
			||||||
 | 
					                                                        keycode);
 | 
				
			||||||
 | 
					        g_signal_emit_by_name (key, "released");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eekboard_keyboard_class_init (EekboardKeyboardClass *klass)
 | 
					eekboard_keyboard_class_init (EekboardKeyboardClass *klass)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GDBusProxyClass *proxy_class = G_DBUS_PROXY_CLASS (klass);
 | 
					    GDBusProxyClass *proxy_class = G_DBUS_PROXY_CLASS (klass);
 | 
				
			||||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
					    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_type_class_add_private (gobject_class,
 | 
				
			||||||
 | 
					                              sizeof (EekboardKeyboardPrivate));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    klass->key_pressed = eekboard_keyboard_real_key_pressed;
 | 
				
			||||||
 | 
					    klass->key_released = eekboard_keyboard_real_key_released;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    proxy_class->g_signal = eekboard_keyboard_real_g_signal;
 | 
					    proxy_class->g_signal = eekboard_keyboard_real_g_signal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    signals[KEY_PRESSED] =
 | 
					    signals[KEY_PRESSED] =
 | 
				
			||||||
        g_signal_new ("key-pressed",
 | 
					        g_signal_new ("key-pressed",
 | 
				
			||||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
					                      G_TYPE_FROM_CLASS(gobject_class),
 | 
				
			||||||
                      G_SIGNAL_RUN_LAST,
 | 
					                      G_SIGNAL_RUN_LAST,
 | 
				
			||||||
                      0,
 | 
					                      G_STRUCT_OFFSET(EekboardKeyboardClass, key_pressed),
 | 
				
			||||||
                      NULL,
 | 
					                      NULL,
 | 
				
			||||||
                      NULL,
 | 
					                      NULL,
 | 
				
			||||||
                      g_cclosure_marshal_VOID__UINT,
 | 
					                      g_cclosure_marshal_VOID__UINT,
 | 
				
			||||||
@ -80,7 +118,7 @@ eekboard_keyboard_class_init (EekboardKeyboardClass *klass)
 | 
				
			|||||||
        g_signal_new ("key-released",
 | 
					        g_signal_new ("key-released",
 | 
				
			||||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
					                      G_TYPE_FROM_CLASS(gobject_class),
 | 
				
			||||||
                      G_SIGNAL_RUN_LAST,
 | 
					                      G_SIGNAL_RUN_LAST,
 | 
				
			||||||
                      0,
 | 
					                      G_STRUCT_OFFSET(EekboardKeyboardClass, key_released),
 | 
				
			||||||
                      NULL,
 | 
					                      NULL,
 | 
				
			||||||
                      NULL,
 | 
					                      NULL,
 | 
				
			||||||
                      g_cclosure_marshal_VOID__UINT,
 | 
					                      g_cclosure_marshal_VOID__UINT,
 | 
				
			||||||
@ -90,8 +128,12 @@ eekboard_keyboard_class_init (EekboardKeyboardClass *klass)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eekboard_keyboard_init (EekboardKeyboard *keyboard)
 | 
					eekboard_keyboard_init (EekboardKeyboard *self)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    EekboardKeyboardPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = self->priv = EEKBOARD_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
 | 
					    priv->description = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -150,8 +192,16 @@ void
 | 
				
			|||||||
eekboard_keyboard_set_description (EekboardKeyboard *keyboard,
 | 
					eekboard_keyboard_set_description (EekboardKeyboard *keyboard,
 | 
				
			||||||
                                   EekKeyboard      *description)
 | 
					                                   EekKeyboard      *description)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    EekboardKeyboardPrivate *priv;
 | 
				
			||||||
    GVariant *variant;
 | 
					    GVariant *variant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (EEKBOARD_IS_KEYBOARD(keyboard));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEKBOARD_KEYBOARD_GET_PRIVATE(keyboard);
 | 
				
			||||||
 | 
					    if (priv->description)
 | 
				
			||||||
 | 
					        g_object_unref (priv->description);
 | 
				
			||||||
 | 
					    priv->description = g_object_ref (description);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    variant = eek_serializable_serialize (EEK_SERIALIZABLE(description));
 | 
					    variant = eek_serializable_serialize (EEK_SERIALIZABLE(description));
 | 
				
			||||||
    g_dbus_proxy_call (G_DBUS_PROXY(keyboard),
 | 
					    g_dbus_proxy_call (G_DBUS_PROXY(keyboard),
 | 
				
			||||||
                       "SetDescription",
 | 
					                       "SetDescription",
 | 
				
			||||||
 | 
				
			|||||||
@ -32,13 +32,19 @@ G_BEGIN_DECLS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef struct _EekboardKeyboard EekboardKeyboard;
 | 
					typedef struct _EekboardKeyboard EekboardKeyboard;
 | 
				
			||||||
typedef struct _EekboardKeyboardClass EekboardKeyboardClass;
 | 
					typedef struct _EekboardKeyboardClass EekboardKeyboardClass;
 | 
				
			||||||
 | 
					typedef struct _EekboardKeyboardPrivate EekboardKeyboardPrivate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _EekboardKeyboard {
 | 
					struct _EekboardKeyboard {
 | 
				
			||||||
    GDBusProxy parent;
 | 
					    GDBusProxy parent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EekboardKeyboardPrivate *priv;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _EekboardKeyboardClass {
 | 
					struct _EekboardKeyboardClass {
 | 
				
			||||||
    GDBusProxyClass parent_class;
 | 
					    GDBusProxyClass parent_class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void (*key_pressed) (EekboardKeyboard *keyboard, guint keycode);
 | 
				
			||||||
 | 
					    void (*key_released) (EekboardKeyboard *keyboard, guint keycode);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType             eekboard_keyboard_get_type    (void) G_GNUC_CONST;
 | 
					GType             eekboard_keyboard_get_type    (void) G_GNUC_CONST;
 | 
				
			||||||
 | 
				
			|||||||
@ -497,7 +497,6 @@ on_key_pressed (EekboardKeyboard *keyboard,
 | 
				
			|||||||
                               False,
 | 
					                               False,
 | 
				
			||||||
                               get_fakekey_modifiers (modifiers));
 | 
					                               get_fakekey_modifiers (modifiers));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    g_signal_emit_by_name (key, "pressed");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -515,7 +514,6 @@ on_key_released (EekboardKeyboard *keyboard,
 | 
				
			|||||||
        // g_debug ("Can't find key for keycode %u", keycode);
 | 
					        // g_debug ("Can't find key for keycode %u", keycode);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    g_signal_emit_by_name (key, "released");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean
 | 
					gboolean
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user