Save Exif window size and position
authorColin Clark <colin.clark@cclark.uk>
Mon, 13 Sep 2021 11:01:58 +0000 (12:01 +0100)
committerColin Clark <colin.clark@cclark.uk>
Mon, 13 Sep 2021 11:01:58 +0000 (12:01 +0100)
src/advanced_exif.c
src/advanced_exif.h
src/layout.c
src/layout_util.c
src/options.c
src/typedefs.h

index 541936b..9e103de 100644 (file)
@@ -260,16 +260,36 @@ static void advanced_exif_add_column(GtkWidget *listview, const gchar *title, gi
        gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
 }
 
+static void advanced_exif_window_get_geometry(ExifWin *ew)
+{
+       GdkWindow *window;
+       LayoutWindow *lw = NULL;
+
+       layout_valid(&lw);
+
+       if (!ew || !lw) return;
+
+       window = gtk_widget_get_window(ew->window);
+       gdk_window_get_position(window, &lw->options.advanced_exif_window.x, &lw->options.advanced_exif_window.y);
+       lw->options.advanced_exif_window.w = gdk_window_get_width(window);
+       lw->options.advanced_exif_window.h = gdk_window_get_height(window);
+}
+
 void advanced_exif_close(ExifWin *ew)
 {
        if (!ew) return;
 
+       advanced_exif_window_get_geometry(ew);
+
        gtk_widget_destroy(ew->window);
 }
 
-static void advanced_exif_destroy(GtkWidget *widget, gpointer data)
+static void advanced_exif_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
 {
        ExifWin *ew = data;
+
+       advanced_exif_window_get_geometry(ew);
+
        file_data_unref(ew->fd);
        g_free(ew);
 }
@@ -372,7 +392,7 @@ static gboolean advanced_exif_keypress(GtkWidget *widget, GdkEventKey *event, gp
        return stop_signal;
 } // static gboolean advanced_exif_...
 
-GtkWidget *advanced_exif_new(void)
+GtkWidget *advanced_exif_new(LayoutWindow *lw)
 {
        ExifWin *ew;
        GtkListStore *store;
@@ -392,9 +412,14 @@ GtkWidget *advanced_exif_new(void)
 
        gtk_window_set_resizable(GTK_WINDOW(ew->window), TRUE);
 
+       gtk_window_resize(GTK_WINDOW(ew->window), lw->options.advanced_exif_window.w, lw->options.advanced_exif_window.h);
+       if (lw->options.advanced_exif_window.x != 0 && lw->options.advanced_exif_window.y != 0)
+               {
+               gtk_window_move(GTK_WINDOW(ew->window), lw->options.advanced_exif_window.x, lw->options.advanced_exif_window.y);
+               }
+
        g_object_set_data(G_OBJECT(ew->window), "advanced_exif_data", ew);
-       g_signal_connect_after(G_OBJECT(ew->window), "destroy",
-                              G_CALLBACK(advanced_exif_destroy), ew);
+       g_signal_connect(G_OBJECT(ew->window), "delete_event", G_CALLBACK(advanced_exif_delete_cb), ew);
 
        ew->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP);
        gtk_container_add(GTK_CONTAINER(ew->window), ew->vbox);
index fad6d6b..9aaeff9 100644 (file)
@@ -23,7 +23,7 @@
 #define ADVANCED_EXIF_H
 
 
-GtkWidget *advanced_exif_new(void);
+GtkWidget *advanced_exif_new(LayoutWindow *lw);
 
 void advanced_exif_set_fd(GtkWidget *bar, FileData *fd);
 
index 5a827e4..5b08d51 100644 (file)
@@ -2839,6 +2839,11 @@ void layout_write_attributes(LayoutOptions *layout, GString *outstr, gint indent
        WRITE_NL(); WRITE_INT(*layout, dupe_window.y);
        WRITE_NL(); WRITE_INT(*layout, dupe_window.w);
        WRITE_NL(); WRITE_INT(*layout, dupe_window.h);
+
+       WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.x);
+       WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.y);
+       WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.w);
+       WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.h);
        WRITE_SEPARATOR();
 
        WRITE_NL(); WRITE_BOOL(*layout, animate);
@@ -2949,6 +2954,11 @@ void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names
                if (READ_INT(*layout, dupe_window.w)) continue;
                if (READ_INT(*layout, dupe_window.h)) continue;
 
+               if (READ_INT(*layout, advanced_exif_window.x)) continue;
+               if (READ_INT(*layout, advanced_exif_window.y)) continue;
+               if (READ_INT(*layout, advanced_exif_window.w)) continue;
+               if (READ_INT(*layout, advanced_exif_window.h)) continue;
+
                if (READ_BOOL(*layout, animate)) continue;
                if (READ_INT(*layout, workspace)) continue;
 
index 82237e5..d1e1011 100644 (file)
@@ -4108,7 +4108,7 @@ void layout_exif_window_new(LayoutWindow *lw)
 {
        if (lw->exif_window) return;
 
-       lw->exif_window = advanced_exif_new();
+       lw->exif_window = advanced_exif_new(lw);
        if (!lw->exif_window) return;
        g_signal_connect(G_OBJECT(lw->exif_window), "destroy",
                         G_CALLBACK(layout_exif_window_destroy), lw);
index c4fca52..355aac5 100644 (file)
@@ -315,6 +315,10 @@ LayoutOptions *init_layout_options(LayoutOptions *options)
        options->search_window.h = 650;
        options->search_window.x = 100;
        options->search_window.y = 100;
+       options->advanced_exif_window.w = 900;
+       options->advanced_exif_window.h = 600;
+       options->advanced_exif_window.x = 0;
+       options->advanced_exif_window.y = 0;
        options->folder_window.vdivider_pos = 100;
        options->order = g_strdup("123");
        options->show_directory_date = FALSE;
index 7d6095f..1046004 100644 (file)
@@ -733,6 +733,13 @@ struct _LayoutOptions
                gint y;
        } dupe_window;
 
+       struct {
+               gint w;
+               gint h;
+               gint x;
+               gint y;
+       } advanced_exif_window;
+
        gboolean tools_float;
        gboolean tools_hidden;
        gboolean toolbar_hidden;