summaryrefslogtreecommitdiff
path: root/capplets
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-03-12 15:46:11 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-03-12 15:46:11 +0000
commitaf81c4017fc4ee1c323f099864a2d694190a80f2 (patch)
treeb0b80dcf4bcba8b14d2c799c5680b326dba32ec1 /capplets
parent4d6e8150b5909bddb8538967a51bca6d38f189e5 (diff)
downloadgnome-control-center-af81c4017fc4ee1c323f099864a2d694190a80f2.tar.gz
Wait for our child to exit before quitting. The prevents us from pulling
Fri Mar 12 10:53:10 1999 Owen Taylor <otaylor@redhat.com> * capplets/theme-switcher/main.c (main): Wait for our child to exit before quitting. The prevents us from pulling the socket window out from under our child. * capplets/theme-switcher/demo.c (demo_main): Clean up some warnings about types in formats. * capplets/theme-switcher/demo.c (demo_main): Exit cleanly if read from parent fails - don't drop a core.
Diffstat (limited to 'capplets')
-rw-r--r--capplets/theme-switcher/da.h16
-rw-r--r--capplets/theme-switcher/da.h-6764816
-rw-r--r--capplets/theme-switcher/demo.c18
-rw-r--r--capplets/theme-switcher/demo.c-4582718
-rw-r--r--capplets/theme-switcher/gui.c44
-rw-r--r--capplets/theme-switcher/gui.c-606044
-rw-r--r--capplets/theme-switcher/main.c9
7 files changed, 102 insertions, 63 deletions
diff --git a/capplets/theme-switcher/da.h b/capplets/theme-switcher/da.h
index 87b41a1fa..6c34a8c9c 100644
--- a/capplets/theme-switcher/da.h
+++ b/capplets/theme-switcher/da.h
@@ -59,24 +59,10 @@ list_user_themes(gint *number);
GtkWidget *
make_main(void);
void
-click_entry(GtkWidget *widget, gpointer data);
-void
-delete_entry(GtkWidget *widget, gpointer data);
-void
update_theme_entries(GtkWidget *disp_list);
void
signal_apply_theme(GtkWidget *widget);
void
-click_preview(GtkWidget *widget, gpointer data);
-void
-click_try(GtkWidget *widget, gpointer data);
-void
-click_help(GtkWidget *widget, gpointer data);
-void
-click_ok(GtkWidget *widget, gpointer data);
-void
-click_revert(GtkWidget *widget, gpointer data);
-void
edit_file_to_use(gchar *file, gchar *theme);
void
set_tmp_rc(void);
@@ -88,7 +74,7 @@ void
click_update(GtkWidget *widget, gpointer data);
gchar *
install_theme(gchar *file);
-void
+gint
do_demo(int argc, char **argv);
void
send_socket(void);
diff --git a/capplets/theme-switcher/da.h-67648 b/capplets/theme-switcher/da.h-67648
index 87b41a1fa..6c34a8c9c 100644
--- a/capplets/theme-switcher/da.h-67648
+++ b/capplets/theme-switcher/da.h-67648
@@ -59,24 +59,10 @@ list_user_themes(gint *number);
GtkWidget *
make_main(void);
void
-click_entry(GtkWidget *widget, gpointer data);
-void
-delete_entry(GtkWidget *widget, gpointer data);
-void
update_theme_entries(GtkWidget *disp_list);
void
signal_apply_theme(GtkWidget *widget);
void
-click_preview(GtkWidget *widget, gpointer data);
-void
-click_try(GtkWidget *widget, gpointer data);
-void
-click_help(GtkWidget *widget, gpointer data);
-void
-click_ok(GtkWidget *widget, gpointer data);
-void
-click_revert(GtkWidget *widget, gpointer data);
-void
edit_file_to_use(gchar *file, gchar *theme);
void
set_tmp_rc(void);
@@ -88,7 +74,7 @@ void
click_update(GtkWidget *widget, gpointer data);
gchar *
install_theme(gchar *file);
-void
+gint
do_demo(int argc, char **argv);
void
send_socket(void);
diff --git a/capplets/theme-switcher/demo.c b/capplets/theme-switcher/demo.c
index 325a5b306..7f096c825 100644
--- a/capplets/theme-switcher/demo.c
+++ b/capplets/theme-switcher/demo.c
@@ -8,8 +8,8 @@ send_socket()
{
gchar buffer[256];
- g_snprintf(buffer, sizeof(buffer), "%11x ",
- GDK_WINDOW_XWINDOW (preview_socket->window));
+ g_snprintf(buffer, sizeof(buffer), "%11lx ",
+ (gulong)GDK_WINDOW_XWINDOW (preview_socket->window));
write(prog_fd, buffer, strlen(buffer));
}
@@ -41,7 +41,7 @@ static void
demo_main(int argc, char **argv, gint in_fd)
{
gchar buf[256];
- XID window;
+ Window window;
GtkWidget *widget, *table, *hbox;
GtkWidget *scrolled_window;
GSList *group;
@@ -58,11 +58,11 @@ demo_main(int argc, char **argv, gint in_fd)
gint i;
if (read(in_fd, buf, 12) <= 0)
- g_error ("Error reading socket descriptor from parent: %s",
- g_strerror (errno));
+ /* Assume this means that our parent exited or was killed */
+ exit(0);
buf[12] = 0;
- sscanf(buf, "%x", &window);
+ window = strtol (buf, NULL, 16);
fcntl(0, F_SETFL, O_NONBLOCK);
@@ -161,7 +161,7 @@ demo_main(int argc, char **argv, gint in_fd)
gtk_main ();
}
-void
+gint
do_demo(int argc, char **argv)
{
gint toProg[2];
@@ -173,15 +173,17 @@ do_demo(int argc, char **argv)
{
close(toProg[1]);
demo_main(argc, argv, toProg[0]);
+ exit(0);
}
else if (pid > 0)
{
close(toProg[0]);
prog_fd = toProg[1];
+ return pid;
}
else
{
/* baaaaaaaah eeeeek */
+ return -1;
}
-
}
diff --git a/capplets/theme-switcher/demo.c-45827 b/capplets/theme-switcher/demo.c-45827
index 325a5b306..7f096c825 100644
--- a/capplets/theme-switcher/demo.c-45827
+++ b/capplets/theme-switcher/demo.c-45827
@@ -8,8 +8,8 @@ send_socket()
{
gchar buffer[256];
- g_snprintf(buffer, sizeof(buffer), "%11x ",
- GDK_WINDOW_XWINDOW (preview_socket->window));
+ g_snprintf(buffer, sizeof(buffer), "%11lx ",
+ (gulong)GDK_WINDOW_XWINDOW (preview_socket->window));
write(prog_fd, buffer, strlen(buffer));
}
@@ -41,7 +41,7 @@ static void
demo_main(int argc, char **argv, gint in_fd)
{
gchar buf[256];
- XID window;
+ Window window;
GtkWidget *widget, *table, *hbox;
GtkWidget *scrolled_window;
GSList *group;
@@ -58,11 +58,11 @@ demo_main(int argc, char **argv, gint in_fd)
gint i;
if (read(in_fd, buf, 12) <= 0)
- g_error ("Error reading socket descriptor from parent: %s",
- g_strerror (errno));
+ /* Assume this means that our parent exited or was killed */
+ exit(0);
buf[12] = 0;
- sscanf(buf, "%x", &window);
+ window = strtol (buf, NULL, 16);
fcntl(0, F_SETFL, O_NONBLOCK);
@@ -161,7 +161,7 @@ demo_main(int argc, char **argv, gint in_fd)
gtk_main ();
}
-void
+gint
do_demo(int argc, char **argv)
{
gint toProg[2];
@@ -173,15 +173,17 @@ do_demo(int argc, char **argv)
{
close(toProg[1]);
demo_main(argc, argv, toProg[0]);
+ exit(0);
}
else if (pid > 0)
{
close(toProg[0]);
prog_fd = toProg[1];
+ return pid;
}
else
{
/* baaaaaaaah eeeeek */
+ return -1;
}
-
}
diff --git a/capplets/theme-switcher/gui.c b/capplets/theme-switcher/gui.c
index 3c97fc82e..bd6815db0 100644
--- a/capplets/theme-switcher/gui.c
+++ b/capplets/theme-switcher/gui.c
@@ -19,6 +19,21 @@ static GtkWidget *initial_theme = NULL;
static GtkWidget *last_theme = NULL;
static void
+click_preview(GtkWidget *widget, gpointer data);
+static void
+click_try(GtkWidget *widget, gpointer data);
+static void
+click_help(GtkWidget *widget, gpointer data);
+static void
+click_ok(GtkWidget *widget, gpointer data);
+static void
+click_revert(GtkWidget *widget, gpointer data);
+static void
+click_entry(GtkWidget *widget, gpointer data);
+static void
+delete_entry(GtkWidget *widget, gpointer data);
+
+static void
auto_callback (GtkWidget *widget, gpointer data)
{
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
@@ -121,6 +136,17 @@ install_theme_callback (GtkWidget *widget, gpointer data)
gtk_widget_show (install_theme_file_sel);
}
+
+gint
+delete_capplet (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ /* We don't want the toplevel window destroyed until
+ * our child exits.
+ */
+ close(prog_fd);
+ return FALSE;
+}
+
GtkWidget *
make_main(void)
{
@@ -211,6 +237,8 @@ make_main(void)
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
+ gtk_signal_connect (GTK_OBJECT (capplet_widget), "delete_event",
+ GTK_SIGNAL_FUNC (delete_capplet), NULL);
gtk_container_add (GTK_CONTAINER (capplet_widget), box);
readme_current = NULL;
@@ -220,13 +248,13 @@ make_main(void)
return capplet_widget;
}
-void
+static void
click_update(GtkWidget *widget, gpointer data)
{
update_theme_entries(theme_list);
}
-void
+static void
click_preview(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -241,7 +269,7 @@ click_preview(GtkWidget *widget, gpointer data)
send_reread();
}
-void
+static void
click_help(GtkWidget *widget, gpointer data)
{
gchar *tmp;
@@ -253,7 +281,7 @@ click_help(GtkWidget *widget, gpointer data)
}
}
-void
+static void
click_try(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -280,7 +308,7 @@ click_try(GtkWidget *widget, gpointer data)
/* system(cmd); */
gdk_error_warnings = 1;
}
-void
+static void
click_ok(GtkWidget *widget, gpointer data)
{
click_try (widget, data);
@@ -288,7 +316,7 @@ click_ok(GtkWidget *widget, gpointer data)
gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name"));
gnome_config_sync ();
}
-void
+static void
click_revert(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -317,7 +345,7 @@ click_revert(GtkWidget *widget, gpointer data)
gdk_error_warnings = 1;
gtk_list_select_child (GTK_LIST (theme_list), initial_theme);
}
-void
+static void
click_entry(GtkWidget *widget, gpointer data)
{
gchar *rc, *name, *readme, *new_readme, buf[1024];
@@ -365,7 +393,7 @@ click_entry(GtkWidget *widget, gpointer data)
}
}
-void
+static void
delete_entry(GtkWidget *widget, gpointer data)
{
gchar *rc, *name, *readme, *icon, *dir;
diff --git a/capplets/theme-switcher/gui.c-6060 b/capplets/theme-switcher/gui.c-6060
index 3c97fc82e..bd6815db0 100644
--- a/capplets/theme-switcher/gui.c-6060
+++ b/capplets/theme-switcher/gui.c-6060
@@ -19,6 +19,21 @@ static GtkWidget *initial_theme = NULL;
static GtkWidget *last_theme = NULL;
static void
+click_preview(GtkWidget *widget, gpointer data);
+static void
+click_try(GtkWidget *widget, gpointer data);
+static void
+click_help(GtkWidget *widget, gpointer data);
+static void
+click_ok(GtkWidget *widget, gpointer data);
+static void
+click_revert(GtkWidget *widget, gpointer data);
+static void
+click_entry(GtkWidget *widget, gpointer data);
+static void
+delete_entry(GtkWidget *widget, gpointer data);
+
+static void
auto_callback (GtkWidget *widget, gpointer data)
{
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
@@ -121,6 +136,17 @@ install_theme_callback (GtkWidget *widget, gpointer data)
gtk_widget_show (install_theme_file_sel);
}
+
+gint
+delete_capplet (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ /* We don't want the toplevel window destroyed until
+ * our child exits.
+ */
+ close(prog_fd);
+ return FALSE;
+}
+
GtkWidget *
make_main(void)
{
@@ -211,6 +237,8 @@ make_main(void)
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
+ gtk_signal_connect (GTK_OBJECT (capplet_widget), "delete_event",
+ GTK_SIGNAL_FUNC (delete_capplet), NULL);
gtk_container_add (GTK_CONTAINER (capplet_widget), box);
readme_current = NULL;
@@ -220,13 +248,13 @@ make_main(void)
return capplet_widget;
}
-void
+static void
click_update(GtkWidget *widget, gpointer data)
{
update_theme_entries(theme_list);
}
-void
+static void
click_preview(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -241,7 +269,7 @@ click_preview(GtkWidget *widget, gpointer data)
send_reread();
}
-void
+static void
click_help(GtkWidget *widget, gpointer data)
{
gchar *tmp;
@@ -253,7 +281,7 @@ click_help(GtkWidget *widget, gpointer data)
}
}
-void
+static void
click_try(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -280,7 +308,7 @@ click_try(GtkWidget *widget, gpointer data)
/* system(cmd); */
gdk_error_warnings = 1;
}
-void
+static void
click_ok(GtkWidget *widget, gpointer data)
{
click_try (widget, data);
@@ -288,7 +316,7 @@ click_ok(GtkWidget *widget, gpointer data)
gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name"));
gnome_config_sync ();
}
-void
+static void
click_revert(GtkWidget *widget, gpointer data)
{
gchar *rc;
@@ -317,7 +345,7 @@ click_revert(GtkWidget *widget, gpointer data)
gdk_error_warnings = 1;
gtk_list_select_child (GTK_LIST (theme_list), initial_theme);
}
-void
+static void
click_entry(GtkWidget *widget, gpointer data)
{
gchar *rc, *name, *readme, *new_readme, buf[1024];
@@ -365,7 +393,7 @@ click_entry(GtkWidget *widget, gpointer data)
}
}
-void
+static void
delete_entry(GtkWidget *widget, gpointer data)
{
gchar *rc, *name, *readme, *icon, *dir;
diff --git a/capplets/theme-switcher/main.c b/capplets/theme-switcher/main.c
index 10a467709..83d8ecae0 100644
--- a/capplets/theme-switcher/main.c
+++ b/capplets/theme-switcher/main.c
@@ -8,12 +8,13 @@ int
main(int argc, char **argv)
{
GtkWidget *w;
+ gint child_pid;
bindtextdomain (PACKAGE, GNOMELOCALEDIR);
textdomain (PACKAGE);
set_tmp_rc();
- do_demo(argc, argv);
+ child_pid = do_demo(argc, argv);
switch (gnome_capplet_init ("theme-switcher-capplet",
THEME_SWITCHER_VERSION, argc, argv, NULL, 0, NULL)) {
case -1:
@@ -26,5 +27,11 @@ main(int argc, char **argv)
send_socket();
gtk_main();
+ /* Pause here until our child exits and the socket can be safely
+ * destroyed
+ */
+ if (child_pid > 0)
+ waitpid(child_pid, NULL, 0);
+
return 0;
}