--- gnome-panel-2.18.0/applets/clock/clock.c.update-clock-immediately 2007-04-03 20:10:39.000000000 +0400
+++ gnome-panel-2.18.0/applets/clock/clock.c 2007-04-03 20:43:08.000000000 +0400
@@ -2001,14 +2001,30 @@
g_free (utf8);
}
+static void
+on_config_tool_exited (GPid pid,
+ gint status,
+ gpointer data)
+{
+ ClockData *clock;
+
+ clock = (ClockData *) data;
+
+ refresh_clock (clock);
+
+ g_spawn_close_pid (pid);
+}
+
static gboolean
try_config_tool (GdkScreen *screen,
- const char *tool)
+ const char *tool,
+ ClockData *clock)
{
GtkWidget *dialog;
GError *err;
char **argv;
char *path;
+ GPid pid;
if (!tool || tool[0] == '\0')
return FALSE;
@@ -2028,15 +2044,18 @@
NULL,
argv,
NULL,
- G_SPAWN_SEARCH_PATH,
- NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
NULL,
NULL,
+ &pid,
&err)) {
+
+ g_child_watch_add (pid, on_config_tool_exited, clock);
g_strfreev (argv);
return TRUE;
}
+
g_strfreev (argv);
dialog = gtk_message_dialog_new (NULL,
@@ -2070,11 +2089,11 @@
screen = gtk_widget_get_screen (cd->applet);
- if (try_config_tool (screen, cd->config_tool))
+ if (try_config_tool (screen, cd->config_tool, cd))
return;
for (i = 0; i < G_N_ELEMENTS (clock_config_tools); i++)
- if (try_config_tool (screen, clock_config_tools [i]))
+ if (try_config_tool (screen, clock_config_tools [i], cd))
return;
dialog = gtk_message_dialog_new (NULL,