Index: gedit-app.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-app.c,v retrieving revision 1.1.2.11 diff -u -p -r1.1.2.11 gedit-app.c --- gedit-app.c 12 Oct 2005 18:54:37 -0000 1.1.2.11 +++ gedit-app.c 26 Oct 2005 11:14:25 -0000 @@ -45,8 +45,6 @@ struct _GeditAppPrivate { - gboolean is_restoring; - GSList *windows; GeditWindow *active_window; }; @@ -83,8 +81,6 @@ static void gedit_app_init (GeditApp *app) { app->priv = GEDIT_APP_GET_PRIVATE (app); - - app->priv->is_restoring = FALSE; } GeditApp * @@ -163,21 +159,53 @@ notebook_tab_delete (GeditNotebook *note { return _gedit_cmd_file_can_close (tab, window); } + +/* Generates a unique string for a window role */ +static gchar * +gen_role (void) +{ + time_t t; + static gint serial; + + t = time (NULL); + + return g_strdup_printf ("gedit-window-%d-%d-%d-%ld-%d@%s", + getpid (), + getgid (), + getppid (), + (long) t, + serial++, + g_get_host_name ()); +} -GeditWindow * -gedit_app_create_window (GeditApp *app) +static GeditWindow * +gedit_app_create_window_real (GeditApp *app, + gboolean set_geometry, + const gchar *role) { GtkWindow *window; GtkWidget *notebook; - + gedit_debug (DEBUG_APP); window = GTK_WINDOW (g_object_new (GEDIT_TYPE_WINDOW, NULL)); - + gedit_debug_message (DEBUG_APP, "Window created"); - - /* Set window state and size, but only if the session is not being restored */ - if (!app->priv->is_restoring) + + if (role != NULL) + { + gtk_window_set_role (GTK_WINDOW (window), role); + } + else + { + gchar *newrole; + + newrole = gen_role (); + gtk_window_set_role (GTK_WINDOW (window), newrole); + g_free (newrole); + } + + if (set_geometry) { GdkWindowState state; @@ -230,6 +258,27 @@ gedit_app_create_window (GeditApp *app) window); return GEDIT_WINDOW (window); +} + +GeditWindow * +gedit_app_create_window (GeditApp *app) +{ + return gedit_app_create_window_real (app, TRUE, NULL); +} + +/* + * Same as _create_window, but doesn't set the geometry. + * The session manager takes care of it. Used in gnome-session. + */ +GeditWindow * +_gedit_app_restore_window (GeditApp *app, + const gchar *role) +{ + GeditWindow *window; + + window = gedit_app_create_window_real (app, FALSE, role); + + return window; } const GSList * Index: gedit-app.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-app.h,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 gedit-app.h --- gedit-app.h 18 Jun 2005 14:27:51 -0000 1.1.2.5 +++ gedit-app.h 26 Oct 2005 11:14:25 -0000 @@ -95,6 +95,8 @@ GList *gedit_app_get_views (GeditApp /* * Non exported functions */ +GeditWindow *_gedit_app_restore_window (GeditApp *app, + const gchar *role); GeditWindow *_gedit_app_get_window_in_workspace (GeditApp *app, gint workspace); Index: gedit-session.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-session.c,v retrieving revision 1.9.8.4 diff -u -p -r1.9.8.4 gedit-session.c --- gedit-session.c 7 Oct 2005 16:38:56 -0000 1.9.8.4 +++ gedit-session.c 26 Oct 2005 11:14:26 -0000 @@ -434,14 +434,15 @@ parse_window (xmlNodePtr node) role = xmlGetProp (node, (const xmlChar *) "role"); gedit_debug_message (DEBUG_SESSION, "Window role: %s", role); - window = gedit_app_create_window (gedit_app_get_default ()); + window = _gedit_app_restore_window (gedit_app_get_default (), role); if (role != NULL) - { - gtk_window_set_role (GTK_WINDOW (window), - (const char *)role); - xmlFree (role); + + if (window == NULL) + { + g_warning ("Couldn't restore window"); + return; } child = node->children; Index: gedit-window.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-window.c,v retrieving revision 1.4.2.104 diff -u -p -r1.4.2.104 gedit-window.c --- gedit-window.c 18 Oct 2005 19:48:46 -0000 1.4.2.104 +++ gedit-window.c 26 Oct 2005 11:14:30 -0000 @@ -2361,24 +2361,6 @@ create_bottom_panel (GeditWindow *window gtk_widget_show_all (window->priv->bottom_panel); } -/* Generates a unique string for a window role */ -static gchar * -gen_role (void) -{ - time_t t; - static gint serial; - - t = time (NULL); - - return g_strdup_printf ("gedit-window-%d-%d-%d-%ld-%d@%s", - getpid (), - getgid (), - getppid (), - (long) t, - serial++, - g_get_host_name ()); -} - static void gedit_window_init (GeditWindow *window) { @@ -2440,15 +2422,6 @@ gedit_window_init (GeditWindow *window) /* Set visibility of panels */ // TODO - - if (gtk_window_get_role (GTK_WINDOW (window)) == NULL) - { - gchar *role; - - role = gen_role (); - gtk_window_set_role (GTK_WINDOW (window), role); - g_free (role); - } gedit_debug_message (DEBUG_WINDOW, "Connect signals"); /