lightdm-gtk-greeter-team team mailing list archive
-
lightdm-gtk-greeter-team team
-
Mailing list archive
-
Message #00142
[Merge] lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix into lp:lightdm-gtk-greeter
Andrew P. has proposed merging lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix into lp:lightdm-gtk-greeter.
Requested reviews:
LightDM Gtk+ Greeter Development Team (lightdm-gtk-greeter-team)
For more details, see:
https://code.launchpad.net/~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix/+merge/197283
Handling keyboard terminating event.
"a11y_keyboard_pid" variable removed.
--
https://code.launchpad.net/~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix/+merge/197283
Your team LightDM Gtk+ Greeter Development Team is requested to review the proposed merge of lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix into lp:lightdm-gtk-greeter.
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c 2013-11-29 16:18:17 +0000
+++ src/lightdm-gtk-greeter.c 2013-11-30 15:40:34 +0000
@@ -66,8 +66,7 @@
static gchar *clock_format;
static gchar **a11y_keyboard_command;
-static int a11y_kbd_pid = 0;
-static GPid *a11y_keyboard_pid = &a11y_kbd_pid;
+static GPid a11y_kbd_pid = 0;
static GError *a11y_keyboard_error;
static GtkWindow *onboard_window;
@@ -1248,6 +1247,12 @@
}
}
+static void
+keyboard_terminated_cb (GPid pid, gint status, gpointer user_data)
+{
+ gtk_check_menu_item_set_active (keyboard_menuitem, FALSE);
+}
+
void a11y_keyboard_cb (GtkWidget *widget);
G_MODULE_EXPORT
void
@@ -1260,9 +1265,9 @@
{
GtkSocket* socket = NULL;
gint out_fd = 0;
-
+
if (g_spawn_async_with_pipes (NULL, a11y_keyboard_command, NULL, G_SPAWN_SEARCH_PATH,
- NULL, NULL, a11y_keyboard_pid,NULL, &out_fd, NULL,
+ NULL, NULL, &a11y_kbd_pid, NULL, &out_fd, NULL,
&a11y_keyboard_error))
{
gchar* text = NULL;
@@ -1274,25 +1279,31 @@
text = g_strstrip (text);
gint id = g_ascii_strtoll (text, &end_ptr, 0);
- if (id != 0 && (end_ptr || *end_ptr == '\0'))
+ if (id != 0 && end_ptr > text)
{
socket = GTK_SOCKET (gtk_socket_new ());
gtk_container_add (GTK_CONTAINER (onboard_window), GTK_WIDGET (socket));
- gtk_socket_add_id (socket, atol (text));
+ gtk_socket_add_id (socket, id);
gtk_widget_show_all (GTK_WIDGET (onboard_window));
spawned = TRUE;
}
else
g_debug ("onboard keyboard command error : 'unrecognized output'");
-
+
g_free(text);
}
}
}
else
- spawned = g_spawn_async(NULL, a11y_keyboard_command, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, a11y_keyboard_pid, &a11y_keyboard_error);
+ {
+ spawned = g_spawn_async (NULL, a11y_keyboard_command, NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL, &a11y_kbd_pid, &a11y_keyboard_error);
+ if (spawned)
+ g_child_watch_add (a11y_kbd_pid, keyboard_terminated_cb, NULL);
+ }
- if (!spawned)
+ if(!spawned)
{
if (a11y_keyboard_error)
g_debug ("a11y keyboard command error : '%s'", a11y_keyboard_error->message);
@@ -1306,7 +1317,7 @@
if (a11y_kbd_pid != 0)
{
kill (a11y_kbd_pid, SIGTERM);
- g_spawn_close_pid(*a11y_keyboard_pid);
+ g_spawn_close_pid (a11y_kbd_pid);
a11y_kbd_pid = 0;
if (onboard_window)
gtk_widget_hide (GTK_WIDGET(onboard_window));
Follow ups