Merge lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk

Proposed by Andrew P.
Status: Merged
Merged at revision: 152
Proposed branch: lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix
Merge into: lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk
Diff against target: 84 lines (+21/-10)
1 file modified
src/lightdm-gtk-greeter.c (+21/-10)
To merge this branch: bzr merge lp:~kalgasnik/lightdm-gtk-greeter/keyboard_spawn_fix
Reviewer Review Type Date Requested Status
LightDM Gtk+ Greeter Development Team Pending
Review via email: mp+197283@code.launchpad.net

Description of the change

Handling keyboard terminating event.
"a11y_keyboard_pid" variable removed.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/lightdm-gtk-greeter.c'
2--- src/lightdm-gtk-greeter.c 2013-11-29 16:18:17 +0000
3+++ src/lightdm-gtk-greeter.c 2013-11-30 15:40:34 +0000
4@@ -66,8 +66,7 @@
5
6 static gchar *clock_format;
7 static gchar **a11y_keyboard_command;
8-static int a11y_kbd_pid = 0;
9-static GPid *a11y_keyboard_pid = &a11y_kbd_pid;
10+static GPid a11y_kbd_pid = 0;
11 static GError *a11y_keyboard_error;
12 static GtkWindow *onboard_window;
13
14@@ -1248,6 +1247,12 @@
15 }
16 }
17
18+static void
19+keyboard_terminated_cb (GPid pid, gint status, gpointer user_data)
20+{
21+ gtk_check_menu_item_set_active (keyboard_menuitem, FALSE);
22+}
23+
24 void a11y_keyboard_cb (GtkWidget *widget);
25 G_MODULE_EXPORT
26 void
27@@ -1260,9 +1265,9 @@
28 {
29 GtkSocket* socket = NULL;
30 gint out_fd = 0;
31-
32+
33 if (g_spawn_async_with_pipes (NULL, a11y_keyboard_command, NULL, G_SPAWN_SEARCH_PATH,
34- NULL, NULL, a11y_keyboard_pid,NULL, &out_fd, NULL,
35+ NULL, NULL, &a11y_kbd_pid, NULL, &out_fd, NULL,
36 &a11y_keyboard_error))
37 {
38 gchar* text = NULL;
39@@ -1274,25 +1279,31 @@
40 text = g_strstrip (text);
41 gint id = g_ascii_strtoll (text, &end_ptr, 0);
42
43- if (id != 0 && (end_ptr || *end_ptr == '\0'))
44+ if (id != 0 && end_ptr > text)
45 {
46 socket = GTK_SOCKET (gtk_socket_new ());
47 gtk_container_add (GTK_CONTAINER (onboard_window), GTK_WIDGET (socket));
48- gtk_socket_add_id (socket, atol (text));
49+ gtk_socket_add_id (socket, id);
50 gtk_widget_show_all (GTK_WIDGET (onboard_window));
51 spawned = TRUE;
52 }
53 else
54 g_debug ("onboard keyboard command error : 'unrecognized output'");
55-
56+
57 g_free(text);
58 }
59 }
60 }
61 else
62- spawned = g_spawn_async(NULL, a11y_keyboard_command, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, a11y_keyboard_pid, &a11y_keyboard_error);
63+ {
64+ spawned = g_spawn_async (NULL, a11y_keyboard_command, NULL,
65+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
66+ NULL, NULL, &a11y_kbd_pid, &a11y_keyboard_error);
67+ if (spawned)
68+ g_child_watch_add (a11y_kbd_pid, keyboard_terminated_cb, NULL);
69+ }
70
71- if (!spawned)
72+ if(!spawned)
73 {
74 if (a11y_keyboard_error)
75 g_debug ("a11y keyboard command error : '%s'", a11y_keyboard_error->message);
76@@ -1306,7 +1317,7 @@
77 if (a11y_kbd_pid != 0)
78 {
79 kill (a11y_kbd_pid, SIGTERM);
80- g_spawn_close_pid(*a11y_keyboard_pid);
81+ g_spawn_close_pid (a11y_kbd_pid);
82 a11y_kbd_pid = 0;
83 if (onboard_window)
84 gtk_widget_hide (GTK_WIDGET(onboard_window));

Subscribers

People subscribed via source and target branches