Maintain EekKeyboard in EekboardKeyboardPrivate.
This commit is contained in:
@ -31,11 +31,19 @@ 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,
|
||||||
const gchar *signal_name,
|
const gchar *signal_name,
|
||||||
GVariant *parameters)
|
GVariant *parameters)
|
||||||
{
|
{
|
||||||
EekboardKeyboard *keyboard = EEKBOARD_KEYBOARD (self);
|
EekboardKeyboard *keyboard = EEKBOARD_KEYBOARD (self);
|
||||||
guint *keycode;
|
guint *keycode;
|
||||||
@ -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