Blob Blame History Raw
--- 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,