diff src/options.c @ 1309:55ea4962887a

config file format changed to XML save and restore all layout windows save and restore sidebar configuration
author nadvornik
date Sun, 22 Feb 2009 15:35:37 +0000
parents 4a3ae0e6f1eb
children 1ffa5222dc61
line wrap: on
line diff
--- a/src/options.c	Sun Feb 22 13:29:49 2009 +0000
+++ b/src/options.c	Sun Feb 22 15:35:37 2009 +0000
@@ -120,15 +120,15 @@
 	options->open_recent_list_maxsize = 10;
 	options->place_dialogs_under_mouse = FALSE;
 
-	options->panels.exif.enabled = FALSE;
-	options->panels.exif.width = PANEL_DEFAULT_WIDTH;
-	options->panels.info.enabled = FALSE;
-	options->panels.info.width = PANEL_DEFAULT_WIDTH;
-	options->panels.sort.action_state = 0;
-	options->panels.sort.enabled = FALSE;
-	options->panels.sort.mode_state = 0;
-	options->panels.sort.selection_state = 0;
-	options->panels.sort.action_filter = NULL;
+	options->layout.panels.exif.enabled = FALSE;
+	options->layout.panels.exif.width = PANEL_DEFAULT_WIDTH;
+	options->layout.panels.info.enabled = FALSE;
+	options->layout.panels.info.width = PANEL_DEFAULT_WIDTH;
+	options->layout.panels.sort.action_state = 0;
+	options->layout.panels.sort.enabled = FALSE;
+	options->layout.panels.sort.mode_state = 0;
+	options->layout.panels.sort.selection_state = 0;
+	options->layout.panels.sort.action_filter = NULL;
 	
 	options->progressive_key_scrolling = TRUE;
 	
@@ -202,47 +202,49 @@
 		ExifUIList[i].current = ExifUIList[i].default_value;
 }
 
+void copy_layout_options(LayoutOptions *dest, const LayoutOptions *src)
+{
+	free_layout_options_content(dest);
+	
+	*dest = *src;
+	dest->order = g_strdup(src->order);
+	dest->home_path = g_strdup(src->home_path);
+	dest->panels.sort.action_filter = g_strdup(src->panels.sort.action_filter);
+}
+
+void free_layout_options_content(LayoutOptions *dest)
+{
+	if (dest->order) g_free(dest->order);
+	if (dest->home_path) g_free(dest->home_path);
+	if (dest->panels.sort.action_filter) g_free(dest->panels.sort.action_filter);
+}
+
 static void sync_options_with_current_state(ConfOptions *options)
 {
 	LayoutWindow *lw = NULL;
 
 	if (layout_valid(&lw))
 		{
-		options->layout.main_window.maximized =  window_maximized(lw->window);
-		if (!options->layout.main_window.maximized)
+		layout_sync_options_with_current_state(lw);
+		copy_layout_options(&options->layout, &lw->options);
+		options->image_overlay.common.state = image_osd_get(lw->image);
+		layout_sort_get(lw, &options->file_sort.method, &options->file_sort.ascending);
+
+	
+
+		options->color_profile.enabled = layout_image_color_profile_get_use(lw);
+		layout_image_color_profile_get(lw,
+					       &options->color_profile.input_type,
+					       &options->color_profile.screen_type,
+					       &options->color_profile.use_image);
+
+		if (options->startup.restore_path && options->startup.use_last_path)
 			{
-			layout_geometry_get(NULL, &options->layout.main_window.x, &options->layout.main_window.y,
-					    &options->layout.main_window.w, &options->layout.main_window.h);
+			g_free(options->startup.path);
+			options->startup.path = g_strdup(layout_get_path(lw));
 			}
-
-		options->image_overlay.common.state = image_osd_get(lw->image);
 		}
 
-	layout_geometry_get_dividers(NULL, &options->layout.main_window.hdivider_pos, &options->layout.main_window.vdivider_pos);
-
-	layout_views_get(NULL, &options->layout.dir_view_type, &options->layout.file_view_type);
-
-	options->layout.show_thumbnails = layout_thumb_get(NULL);
-	options->layout.show_marks = layout_marks_get(NULL);
-
-	layout_sort_get(NULL, &options->file_sort.method, &options->file_sort.ascending);
-
-	layout_geometry_get_tools(NULL, &options->layout.float_window.x, &options->layout.float_window.y,
-				  &options->layout.float_window.w, &options->layout.float_window.h, &options->layout.float_window.vdivider_pos);
-	layout_tools_float_get(NULL, &options->layout.tools_float, &options->layout.tools_hidden);
-	options->layout.toolbar_hidden = layout_toolbar_hidden(NULL);
-
-	options->color_profile.enabled = layout_image_color_profile_get_use(NULL);
-	layout_image_color_profile_get(NULL,
-				       &options->color_profile.input_type,
-				       &options->color_profile.screen_type,
-				       &options->color_profile.use_image);
-
-	if (options->startup.restore_path && options->startup.use_last_path)
-		{
-		g_free(options->startup.path);
-		options->startup.path = g_strdup(layout_get_path(NULL));
-		}
 }
 
 void save_options(ConfOptions *options)