Save state and width of exif, info and sort panels to rc file.
authorLaurent Monin <geeqie@norz.org>
Tue, 22 Apr 2008 22:44:10 +0000 (22:44 +0000)
committerLaurent Monin <geeqie@norz.org>
Tue, 22 Apr 2008 22:44:10 +0000 (22:44 +0000)
Width is restored only if save windows dimensions is set.

src/bar_exif.c
src/bar_info.c
src/globals.c
src/layout.c
src/layout_util.c
src/main.h
src/rcfile.c
src/typedefs.h

index 905c267..8fe37ff 100644 (file)
@@ -509,7 +509,7 @@ void bar_exif_close(GtkWidget *bar)
        gtk_widget_destroy(eb->vbox);
 }
 
-static void bar_exif_size(ExifBar *eb, gint val)
+static void bar_exif_width(ExifBar *eb, gint val)
 {
        gint size;
 
@@ -517,20 +517,21 @@ static void bar_exif_size(ExifBar *eb, gint val)
        size = CLAMP(size + val, EXIF_BAR_SIZE_INCREMENT * 2, EXIF_BAR_SIZE_INCREMENT * 16);
 
        gtk_widget_set_size_request(eb->vbox, size, -1);
+       options->panels.exif.width = eb->vbox->allocation.width;
 }
 
 static void bar_exif_larger(GtkWidget *widget, gpointer data)
 {
        ExifBar *eb = data;
 
-       bar_exif_size(eb, EXIF_BAR_SIZE_INCREMENT);
+       bar_exif_width(eb, EXIF_BAR_SIZE_INCREMENT);
 }
 
 static void bar_exif_smaller(GtkWidget *widget, gpointer data)
 {
        ExifBar *eb = data;
 
-       bar_exif_size(eb, -EXIF_BAR_SIZE_INCREMENT);
+       bar_exif_width(eb, -EXIF_BAR_SIZE_INCREMENT);
 }
 
 static void bar_exif_destroy(GtkWidget *widget, gpointer data)
index 368f37d..483e268 100644 (file)
@@ -1371,5 +1371,6 @@ void bar_info_size_request(GtkWidget *bar, gint width)
        if (bd->label_file_name)
                {
                gtk_widget_set_size_request(bd->vbox, width, -1);
+               options->panels.info.width = bd->vbox->allocation.width;
                }
 }
index d9e1a80..8c98adb 100644 (file)
@@ -106,6 +106,13 @@ ConfOptions *init_options(ConfOptions *options)
        options->mousewheel_scrolls = FALSE;
        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.enabled = FALSE;
+
        options->progressive_key_scrolling = FALSE;
        options->show_icon_names = TRUE;
 
index a924f0d..5895eda 100644 (file)
@@ -1899,11 +1899,14 @@ LayoutWindow *layout_new_with_geometry(const gchar *path, gint popped, gint hidd
 
        lw->utility_box = NULL;
        lw->bar_sort = NULL;
-       lw->bar_sort_enabled = FALSE;
+       lw->bar_sort_enabled = options->panels.sort.enabled;
+
        lw->bar_exif = NULL;
-       lw->bar_exif_enabled = FALSE;
-       lw->bar_exif_size = -1;
+       lw->bar_exif_enabled = options->panels.exif.enabled;
        lw->bar_exif_advanced = FALSE;
+       
+       lw->bar_info = NULL;
+       lw->bar_info_enabled = options->panels.info.enabled;
 
        /* default layout */
 
@@ -1919,12 +1922,16 @@ LayoutWindow *layout_new_with_geometry(const gchar *path, gint popped, gint hidd
                lw->div_h = options->layout.main_window.hdivider_pos;
                lw->div_v = options->layout.main_window.vdivider_pos;
                lw->div_float = options->layout.float_window.vdivider_pos;
+               lw->bar_exif_width = options->panels.exif.width;
+               lw->bar_info_width = options->panels.info.width;
                }
        else
                {
                lw->div_h = MAIN_WINDOW_DIV_HPOS;
                lw->div_v = MAIN_WINDOW_DIV_VPOS;
                lw->div_float = MAIN_WINDOW_DIV_VPOS;
+               lw->bar_exif_width = PANEL_DEFAULT_WIDTH;
+               lw->bar_info_width = PANEL_DEFAULT_WIDTH;
                }
 
        /* window */
index cf5e014..f5b3890 100644 (file)
@@ -1623,8 +1623,6 @@ void folder_icons_free(PixmapFolders *pf)
  *-----------------------------------------------------------------------------
  */
 
-#define SIDEBAR_WIDTH 288
-
 static void layout_bar_info_destroyed(GtkWidget *widget, gpointer data)
 {
        LayoutWindow *lw = data;
@@ -1646,6 +1644,15 @@ static GList *layout_bar_info_list_cb(gpointer data)
        return layout_selection_list(lw);
 }
 
+static void layout_bar_info_sized(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       if (!lw->bar_info) return;
+       
+       options->panels.info.width = lw->bar_info_width = allocation->width;
+}
+
 static void layout_bar_info_new(LayoutWindow *lw)
 {
        if (!lw->utility_box) return;
@@ -1653,10 +1660,13 @@ static void layout_bar_info_new(LayoutWindow *lw)
        lw->bar_info = bar_info_new(layout_image_get_fd(lw), FALSE, lw->utility_box);
        bar_info_set_selection_func(lw->bar_info, layout_bar_info_list_cb, lw);
        bar_info_selection(lw->bar_info, layout_selection_count(lw, NULL) - 1);
-       bar_info_size_request(lw->bar_info, SIDEBAR_WIDTH * 3 / 4);
        g_signal_connect(G_OBJECT(lw->bar_info), "destroy",
                         G_CALLBACK(layout_bar_info_destroyed), lw);
-       lw->bar_info_enabled = TRUE;
+       g_signal_connect(G_OBJECT(lw->bar_info), "size_allocate",
+                        G_CALLBACK(layout_bar_info_sized), lw);
+
+       options->panels.info.enabled = lw->bar_info_enabled = TRUE;
+       gtk_widget_set_size_request(lw->bar_info, lw->bar_info_width, -1);
 
        gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar_info, FALSE, FALSE, 0);
        gtk_widget_show(lw->bar_info);
@@ -1669,7 +1679,7 @@ static void layout_bar_info_close(LayoutWindow *lw)
                bar_info_close(lw->bar_info);
                lw->bar_info = NULL;
                }
-       lw->bar_info_enabled = FALSE;
+       options->panels.info.enabled = lw->bar_info_enabled = FALSE;
 }
 
 void layout_bar_info_toggle(LayoutWindow *lw)
@@ -1727,10 +1737,9 @@ static void layout_bar_exif_sized(GtkWidget *widget, GtkAllocation *allocation,
 {
        LayoutWindow *lw = data;
 
-       if (lw->bar_exif)
-               {
-               lw->bar_exif_size = allocation->width;
-               }
+       if (!lw->bar_exif) return;
+       
+       options->panels.exif.width = lw->bar_exif_width = allocation->width;
 }
 
 static void layout_bar_exif_new(LayoutWindow *lw)
@@ -1743,10 +1752,10 @@ static void layout_bar_exif_new(LayoutWindow *lw)
                         G_CALLBACK(layout_bar_exif_destroyed), lw);
        g_signal_connect(G_OBJECT(lw->bar_exif), "size_allocate",
                         G_CALLBACK(layout_bar_exif_sized), lw);
-       lw->bar_exif_enabled = TRUE;
 
-       if (lw->bar_exif_size < 1) lw->bar_exif_size = SIDEBAR_WIDTH;
-       gtk_widget_set_size_request(lw->bar_exif, lw->bar_exif_size, -1);
+       options->panels.exif.enabled = lw->bar_exif_enabled = TRUE;
+       gtk_widget_set_size_request(lw->bar_exif, lw->bar_exif_width, -1);
+
        gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar_exif, FALSE, FALSE, 0);
        if (lw->bar_info) gtk_box_reorder_child(GTK_BOX(lw->utility_box), lw->bar_exif, 1);
        gtk_widget_show(lw->bar_exif);
@@ -1759,7 +1768,7 @@ static void layout_bar_exif_close(LayoutWindow *lw)
                bar_exif_close(lw->bar_exif);
                lw->bar_exif = NULL;
                }
-       lw->bar_exif_enabled = FALSE;
+       options->panels.exif.enabled = lw->bar_exif_enabled = FALSE;
 }
 
 void layout_bar_exif_toggle(LayoutWindow *lw)
@@ -1803,7 +1812,7 @@ static void layout_bar_sort_new(LayoutWindow *lw)
        lw->bar_sort = bar_sort_new(lw);
        g_signal_connect(G_OBJECT(lw->bar_sort), "destroy",
                         G_CALLBACK(layout_bar_sort_destroyed), lw);
-       lw->bar_sort_enabled = TRUE;
+       options->panels.sort.enabled = lw->bar_sort_enabled = TRUE;
 
        gtk_box_pack_end(GTK_BOX(lw->utility_box), lw->bar_sort, FALSE, FALSE, 0);
        gtk_widget_show(lw->bar_sort);
@@ -1816,7 +1825,7 @@ static void layout_bar_sort_close(LayoutWindow *lw)
                bar_sort_close(lw->bar_sort);
                lw->bar_sort = NULL;
                }
-       lw->bar_sort_enabled = FALSE;
+       options->panels.sort.enabled = lw->bar_sort_enabled = FALSE;
 }
 
 void layout_bar_sort_toggle(LayoutWindow *lw)
index 687e570..1479d75 100644 (file)
 #define IMAGE_LOADER_IDLE_READ_LOOP_COUNT_MIN          1
 #define IMAGE_LOADER_IDLE_READ_LOOP_COUNT_MAX          16
 
+#define PANEL_MIN_WIDTH        64
+#define PANEL_DEFAULT_WIDTH 288
+#define PANEL_MAX_WIDTH 1200
 
 #define DEFAULT_OVERLAY_INFO   "%collection%(%number%/%total%) [%zoom%] <b>%name%</b>\n" \
                                "%res%|%date%|%size%\n" \
index b2be2d0..0e42a07 100644 (file)
@@ -369,6 +369,13 @@ void save_options(void)
 
        WRITE_BOOL(layout.toolbar_hidden);
 
+       WRITE_SUBTITLE("Panels Options");
+
+       WRITE_BOOL(panels.exif.enabled);
+       WRITE_INT(panels.exif.width);
+       WRITE_BOOL(panels.info.enabled);
+       WRITE_INT(panels.info.width);
+       WRITE_BOOL(panels.sort.enabled);
 
        WRITE_SUBTITLE("Image Options");
 
@@ -655,6 +662,12 @@ void load_options(void)
                READ_BOOL(layout.tools_restore_state);
                READ_BOOL(layout.toolbar_hidden);
 
+               /* panels */
+               READ_BOOL(panels.exif.enabled);
+               READ_INT_CLAMP(panels.exif.width, PANEL_MIN_WIDTH, PANEL_MAX_WIDTH);
+               READ_BOOL(panels.info.enabled);
+               READ_INT_CLAMP(panels.info.width, PANEL_MIN_WIDTH, PANEL_MAX_WIDTH);
+               READ_BOOL(panels.sort.enabled);
 
                /* image options */
                if (strcasecmp(option, "image.zoom_mode") == 0)
index 2e7ff11..e4ee989 100644 (file)
@@ -541,8 +541,9 @@ struct _LayoutWindow
        gint bar_exif_enabled;
        gint bar_info_enabled;
 
-       gint bar_exif_size;
+       gint bar_exif_width;
        gint bar_exif_advanced;
+       gint bar_info_width;
 };
 
 struct _ViewDir
@@ -900,6 +901,24 @@ struct _ConfOptions
 
        } layout;
 
+       /* panels */
+       struct {
+               struct {
+                       gint enabled;
+                       gint width;
+               } info;
+
+               struct {
+                       gint enabled;
+                       gint width;
+               } exif;
+
+               struct {
+                       gint enabled;
+               } sort;
+       } panels;
+
+
        /* color profiles */
        struct {
                gint enabled;