summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Neumair <cneumair@gnome.org>2008-06-29 11:31:35 +0000
committerChristian Neumair <cneumair@src.gnome.org>2008-06-29 11:31:35 +0000
commit1e6eed6ee6ddb4a55e4701c30f3ebf09f42d990d (patch)
treef81fb159c7a45ded6e4a33ff2d1268bf04c13bd8
parent0baf473170f27dbb39e9431965b2e17ca8234a54 (diff)
downloadnautilus-1e6eed6ee6ddb4a55e4701c30f3ebf09f42d990d.tar.gz
Load slots from and save slots in session file.
2008-06-29 Christian Neumair <cneumair@gnome.org> * src/nautilus-application.c (save_session_to_file), (nautilus_application_load_session): Load slots from and save slots in session file. svn path=/branches/multiview/; revision=14303
-rw-r--r--ChangeLog6
-rw-r--r--src/nautilus-application.c69
2 files changed, 65 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b7c4fb27..141a90d9d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-06-29 Christian Neumair <cneumair@gnome.org>
+ * src/nautilus-application.c (save_session_to_file),
+ (nautilus_application_load_session):
+ Load slots from and save slots in session file.
+
+2008-06-29 Christian Neumair <cneumair@gnome.org>
+
* src/nautilus-window-private.h:
* src/nautilus-window.c (nautilus_window_get_slots):
Add nautilus_window_get_slots() API.
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 006eaef5b..6083a9e86 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -1588,9 +1588,10 @@ save_session_to_file (void)
}
for (l = nautilus_application_window_list; l != NULL; l = l->next) {
- xmlNodePtr win_node;
+ xmlNodePtr win_node, slot_node;
NautilusWindow *window;
- NautilusWindowSlot *slot;
+ NautilusWindowSlot *slot, *active_slot;
+ GList *slots, *m;
char *tmp;
window = l->data;
@@ -1620,11 +1621,30 @@ save_session_to_file (void)
}
}
- /* TODO store all URIs for windows with mutiple slots */
- slot = nautilus_window_get_active_slot (window);
- tmp = nautilus_window_slot_get_location_uri (slot);
+ slots = nautilus_window_get_slots (window);
+ active_slot = nautilus_window_get_active_slot (window);
+
+ /* store one slot as window location. Otherwise
+ * older Nautilus versions will bail when reading the file. */
+ tmp = nautilus_window_slot_get_location_uri (active_slot);
xmlNewProp (win_node, "location", tmp);
g_free (tmp);
+
+ for (m = slots; m != NULL; m = m->next) {
+ slot = NAUTILUS_WINDOW_SLOT (m->data);
+
+ slot_node = xmlNewChild (win_node, NULL, "slot", NULL);
+
+ tmp = nautilus_window_slot_get_location_uri (slot);
+ xmlNewProp (slot_node, "location", tmp);
+ g_free (tmp);
+
+ if (slot == active_slot) {
+ xmlNewProp (slot_node, "active", "TRUE");
+ }
+ }
+
+ g_list_free (slots);
}
dir = nautilus_get_user_directory ();
@@ -1728,8 +1748,10 @@ nautilus_application_load_session (NautilusApplication *application,
}
} else if (!strcmp (node->name, "window")) {
NautilusWindow *window;
- xmlChar *type, *location_uri;
+ xmlChar *type, *location_uri, *slot_uri;
+ xmlNodePtr slot_node;
GFile *location;
+ int i;
type = xmlGetProp (node, "type");
if (type == NULL) {
@@ -1780,10 +1802,37 @@ nautilus_application_load_session (NautilusApplication *application,
gtk_window_set_keep_above (GTK_WINDOW (window), FALSE);
}
- location = g_file_new_for_uri (location_uri);
- /* TODO open all URIs for windows with mutiple slots */
- nautilus_window_slot_open_location (window->details->active_slot, location, FALSE);
- g_object_unref (location);
+ for (i = 0, slot_node = node->children; slot_node != NULL; slot_node = slot_node->next) {
+ if (!strcmp (slot_node->name, "slot")) {
+ slot_uri = xmlGetProp (slot_node, "location");
+ if (slot_uri != NULL) {
+ NautilusWindowSlot *slot;
+
+ if (i == 0) {
+ slot = window->details->active_slot;
+ } else {
+ slot = nautilus_window_open_slot (window, NAUTILUS_WINDOW_OPEN_SLOT_APPEND);
+ }
+
+ location = g_file_new_for_uri (slot_uri);
+ nautilus_window_slot_open_location (slot, location, FALSE);
+
+ if (xmlHasProp (slot_node, "active")) {
+ nautilus_window_set_active_slot (window, slot);
+ }
+
+ i++;
+ }
+ xmlFree (slot_uri);
+ }
+ }
+
+ if (i == 0) {
+ /* This may be an old session file */
+ location = g_file_new_for_uri (location_uri);
+ nautilus_window_slot_open_location (window->details->active_slot, location, FALSE);
+ g_object_unref (location);
+ }
} else if (!strcmp (type, "spatial")) {
location = g_file_new_for_uri (location_uri);
window = nautilus_application_present_spatial_window (application, NULL, NULL, location, gdk_screen_get_default ());