From: Colin Clark Date: Mon, 13 Sep 2021 11:01:58 +0000 (+0100) Subject: Save Exif window size and position X-Git-Tag: v1.7~58 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=bcc4d1dc0d6d78ccebe74fed82b2428e5eb6d207 Save Exif window size and position --- diff --git a/src/advanced_exif.c b/src/advanced_exif.c index 541936bb..9e103de9 100644 --- a/src/advanced_exif.c +++ b/src/advanced_exif.c @@ -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); diff --git a/src/advanced_exif.h b/src/advanced_exif.h index fad6d6b1..9aaeff96 100644 --- a/src/advanced_exif.h +++ b/src/advanced_exif.h @@ -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); diff --git a/src/layout.c b/src/layout.c index 5a827e4b..5b08d51b 100644 --- a/src/layout.c +++ b/src/layout.c @@ -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; diff --git a/src/layout_util.c b/src/layout_util.c index 82237e5c..d1e1011c 100644 --- a/src/layout_util.c +++ b/src/layout_util.c @@ -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); diff --git a/src/options.c b/src/options.c index c4fca52a..355aac56 100644 --- a/src/options.c +++ b/src/options.c @@ -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; diff --git a/src/typedefs.h b/src/typedefs.h index 7d6095f1..10460046 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -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;