Separate --listen-focus/--listen-keystroke option of eekboard-system-client.

This commit is contained in:
Daiki Ueno
2011-02-01 12:43:33 +09:00
parent aed12cd831
commit eb646ff769
5 changed files with 85 additions and 33 deletions

View File

@ -78,6 +78,9 @@ struct _EekboardServer {
GtkWidget *window;
GtkWidget *widget;
EekKeyboard *keyboard;
gulong key_pressed_handler;
gulong key_released_handler;
};
struct _EekboardServerClass {
@ -235,6 +238,8 @@ eekboard_server_init (EekboardServer *server)
server->keyboard = NULL;
server->widget = NULL;
server->window = NULL;
server->key_pressed_handler = 0;
server->key_released_handler = 0;
}
static void
@ -277,6 +282,19 @@ on_key_released (EekKeyboard *keyboard,
g_assert_no_error (error);
}
static void
disconnect_keyboard_signals (EekboardServer *server)
{
if (g_signal_handler_is_connected (server->keyboard,
server->key_pressed_handler))
g_signal_handler_disconnect (server->keyboard,
server->key_pressed_handler);
if (g_signal_handler_is_connected (server->keyboard,
server->key_released_handler))
g_signal_handler_disconnect (server->keyboard,
server->key_released_handler);
}
static void
handle_method_call (GDBusConnection *connection,
const gchar *sender,
@ -311,12 +329,15 @@ handle_method_call (GDBusConnection *connection,
}
server->keyboard = eek_keyboard_new (layout, CSW, CSH);
g_signal_connect (server->keyboard, "key-pressed",
G_CALLBACK(on_key_pressed),
server);
g_signal_connect (server->keyboard, "key-released",
G_CALLBACK(on_key_released),
server);
disconnect_keyboard_signals (server);
server->key_pressed_handler =
g_signal_connect (server->keyboard, "key-pressed",
G_CALLBACK(on_key_pressed),
server);
server->key_released_handler =
g_signal_connect (server->keyboard, "key-released",
G_CALLBACK(on_key_released),
server);
eek_keyboard_set_modifier_behavior (server->keyboard,
EEK_MODIFIER_BEHAVIOR_LATCH);