From 2f7aa77c113db1fe70a68015ff65ce1baf3861c5 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 8 Mar 2011 11:26:15 +0900 Subject: [PATCH] Fix focus listener logic. --- src/desktop-client.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/desktop-client.c b/src/desktop-client.c index 104ec1e9..1e3d4cbc 100644 --- a/src/desktop-client.c +++ b/src/desktop-client.c @@ -68,6 +68,7 @@ struct _EekboardDesktopClient { gulong key_released_handler; #ifdef HAVE_CSPI + Accessible *acc; AccessibleEventListener *focus_listener; AccessibleEventListener *keystroke_listener; #endif /* HAVE_CSPI */ @@ -433,10 +434,24 @@ focus_listener_cb (const AccessibleEvent *event, case SPI_ROLE_PARAGRAPH: case SPI_ROLE_PASSWORD_TEXT: case SPI_ROLE_TERMINAL: - case SPI_ROLE_ENTRY: - if (g_strcmp0 (event->type, "focus") == 0 || event->detail1 == 1) { + if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) { + client->acc = accessible; eekboard_context_show_keyboard (client->context, NULL); + } else if (event->detail1 == 0 && accessible == client->acc) { + client->acc = NULL; + eekboard_context_hide_keyboard (client->context, NULL); } + break; + case SPI_ROLE_ENTRY: + if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) { + client->acc = accessible; + eekboard_context_show_keyboard (client->context, NULL); + } else if (event->detail1 == 0) { + client->acc = NULL; + eekboard_context_hide_keyboard (client->context, NULL); + } + break; + default: ; }