diff --git a/gnome/ChangeLog b/gnome/ChangeLog index e60cc77b7..5f6d68ab4 100644 --- a/gnome/ChangeLog +++ b/gnome/ChangeLog @@ -1,3 +1,9 @@ +1998-05-04 Miguel de Icaza + + * gmain.c (idle_destroy_window), main.c: Session management now + supports not showing a toplevel window (in case all of the windows + were closed). + 1998-04-30 Miguel de Icaza * gtrans.c (make_transparent_window): Put hack back. diff --git a/gnome/glayout.c b/gnome/glayout.c index 0ef85c69c..8c4db3f71 100644 --- a/gnome/glayout.c +++ b/gnome/glayout.c @@ -439,7 +439,7 @@ create_container (Dlg_head *h, char *name, char *geometry) return panel; } -void +WPanel * new_panel_with_geometry_at (char *dir, char *geometry) { WPanel *panel; @@ -449,12 +449,14 @@ new_panel_with_geometry_at (char *dir, char *geometry) add_widget (desktop_dlg, panel); set_new_current_panel (panel); x_flush_events (); + + return panel; } -void +WPanel * new_panel_at (char *dir) { - new_panel_with_geometry_at (dir, NULL); + return new_panel_with_geometry_at (dir, NULL); } void diff --git a/gnome/gmain.c b/gnome/gmain.c index 99a268b3e..b54f9d698 100644 --- a/gnome/gmain.c +++ b/gnome/gmain.c @@ -413,24 +413,34 @@ idle_create_panel (void *data) return 0; } +static int +idle_destroy_window (void *data) +{ + WPanel *panel = data; + + gnome_close_panel (GTK_WIDGET (panel->widget.wdata), panel); + return 0; +} + /* * wrapper for new_panel_with_geometry_at. * first invocation is called directly, further calls use * the idle handler */ -static void +static WPanel * create_one_panel (char *dir, char *geometry) { static int first = 1; if (first){ - new_panel_with_geometry_at (dir, geometry); first = 0; + return new_panel_with_geometry_at (dir, geometry); } else { dir_and_geometry *dg = g_new (dir_and_geometry, 1); dg->dir = dir; dg->geometry = geometry; gtk_idle_add (idle_create_panel, dg); + return NULL; } } @@ -446,7 +456,8 @@ create_panels (void) { GList *p, *g; char *geo; - + WPanel *panel; + start_desktop (); cmdline = command_new (0, 0, 0); the_hint = label_new (0, 0, 0, NULL); @@ -465,9 +476,16 @@ create_panels (void) geo = NULL; create_one_panel (p->data, geo); } - } else - create_one_panel (".", geometry_list ? geometry_list->data : NULL); + panel = NULL; + } else { + char *geometry = geometry_list ? geometry_list->data : NULL; + panel = create_one_panel (".", geometry); + if (nowindows){ + gtk_idle_add (idle_destroy_window, panel); + panel->widget.options |= W_PANEL_HIDDEN; + } + } g_list_free (directory_list); g_list_free (geometry_list); @@ -516,6 +534,12 @@ session_save_state (GnomeClient *client, gint phase, GnomeRestartStyle save_styl argv [i++] = buffer; free_list = g_list_append (free_list, buffer); } + + /* If no windows were open */ + if (i == 1){ + argv [i++] = "--nowindows"; + } + argv [i] = NULL; gnome_client_set_clone_command (client, i, argv); gnome_client_set_restart_command (client, i, argv); diff --git a/gnome/gmain.h b/gnome/gmain.h index cdc5e52f1..bcb62752b 100644 --- a/gnome/gmain.h +++ b/gnome/gmain.h @@ -8,6 +8,7 @@ int xtoolkit_init (int *argc, char *argv []); int xtoolkit_end (void); extern Dlg_head *desktop_dlg; +extern int nowindows; /* Required by the standard code */ widget_data xtoolkit_create_dialog (Dlg_head *h, int with_grid); @@ -30,7 +31,8 @@ int translate_gdk_keysym_to_curses (GdkEventKey *event); void gnome_init_panels (); void set_current_panel (int index); void bind_gtk_keys (GtkWidget *w, Dlg_head *h); -void new_panel_at (char *dir); +WPanel *new_panel_at (char *dir); +WPanel *new_panel_with_geometry_at (char *dir, char *geometry); void layout_panel_gone (WPanel *panel); struct gmc_color_pairs_s { diff --git a/gnome/gscreen.c b/gnome/gscreen.c index 51cc9c5a4..194823a9b 100644 --- a/gnome/gscreen.c +++ b/gnome/gscreen.c @@ -1363,7 +1363,8 @@ x_create_panel (Dlg_head *h, widget_data parent, WPanel *panel) /* Now, insert our table in our parent */ gtk_container_add (GTK_CONTAINER (vbox), panel->table); - gtk_widget_show_all (gtk_widget_get_toplevel (panel->table)); + if (!(panel->widget.options & W_PANEL_HIDDEN)) + gtk_widget_show_all (gtk_widget_get_toplevel (panel->table)); if (!pixmaps_ready){ if (!GTK_WIDGET_REALIZED (panel->list))