From: Colin Clark Date: Sun, 12 Apr 2020 16:38:46 +0000 (+0100) Subject: Remember layout of Search and Dupe windows X-Git-Tag: v1.6~60 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=686d9f374689014497aba0c749075db44501b66a Remember layout of Search and Dupe windows --- diff --git a/src/dupe.c b/src/dupe.c index edca01f7..f74206ed 100644 --- a/src/dupe.c +++ b/src/dupe.c @@ -3231,10 +3231,27 @@ void dupe_window_clear(DupeWindow *dw) dupe_window_update_progress(dw, NULL, 0.0, FALSE); } +static void dupe_window_get_geometry(DupeWindow *dw) +{ + GdkWindow *window; + LayoutWindow *lw = NULL; + + layout_valid(&lw); + + if (!dw || !lw) return; + + window = gtk_widget_get_window(dw->window); + gdk_window_get_position(window, &lw->options.dupe_window.x, &lw->options.dupe_window.y); + lw->options.dupe_window.w = gdk_window_get_width(window); + lw->options.dupe_window.h = gdk_window_get_height(window); +} + void dupe_window_close(DupeWindow *dw) { dupe_check_stop(dw); + dupe_window_get_geometry(dw); + dupe_window_list = g_list_remove(dupe_window_list, dw); gtk_widget_destroy(dw->window); @@ -3269,6 +3286,9 @@ DupeWindow *dupe_window_new() GtkListStore *store; GtkTreeSelection *selection; GdkGeometry geometry; + LayoutWindow *lw = NULL; + + layout_valid(&lw); dw = g_new0(DupeWindow, 1); @@ -3295,7 +3315,15 @@ DupeWindow *dupe_window_new() gtk_window_set_geometry_hints(GTK_WINDOW(dw->window), NULL, &geometry, GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE); - gtk_window_set_default_size(GTK_WINDOW(dw->window), DUPE_DEF_WIDTH, DUPE_DEF_HEIGHT); + if (lw && options->save_window_positions) + { + gtk_window_set_default_size(GTK_WINDOW(dw->window), lw->options.dupe_window.w, lw->options.dupe_window.h); + gtk_window_move(GTK_WINDOW(dw->window), lw->options.dupe_window.x, lw->options.dupe_window.y); + } + else + { + gtk_window_set_default_size(GTK_WINDOW(dw->window), DUPE_DEF_WIDTH, DUPE_DEF_HEIGHT); + } gtk_window_set_resizable(GTK_WINDOW(dw->window), TRUE); gtk_container_set_border_width(GTK_CONTAINER(dw->window), 0); diff --git a/src/layout.c b/src/layout.c index 87b82cce..3be21309 100644 --- a/src/layout.c +++ b/src/layout.c @@ -2684,6 +2684,16 @@ void layout_write_attributes(LayoutOptions *layout, GString *outstr, gint indent WRITE_NL(); WRITE_INT(*layout, log_window.y); WRITE_NL(); WRITE_INT(*layout, log_window.w); WRITE_NL(); WRITE_INT(*layout, log_window.h); + + WRITE_NL(); WRITE_INT(*layout, search_window.x); + WRITE_NL(); WRITE_INT(*layout, search_window.y); + WRITE_NL(); WRITE_INT(*layout, search_window.w); + WRITE_NL(); WRITE_INT(*layout, search_window.h); + + WRITE_NL(); WRITE_INT(*layout, dupe_window.x); + 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_SEPARATOR(); WRITE_NL(); WRITE_BOOL(*layout, animate); @@ -2778,6 +2788,16 @@ void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names if (READ_INT(*layout, log_window.w)) continue; if (READ_INT(*layout, log_window.h)) continue; + if (READ_INT(*layout, search_window.x)) continue; + if (READ_INT(*layout, search_window.y)) continue; + if (READ_INT(*layout, search_window.w)) continue; + if (READ_INT(*layout, search_window.h)) continue; + + if (READ_INT(*layout, dupe_window.x)) continue; + if (READ_INT(*layout, dupe_window.y)) continue; + if (READ_INT(*layout, dupe_window.w)) continue; + if (READ_INT(*layout, dupe_window.h)) continue; + if (READ_BOOL(*layout, animate)) continue; log_printf("unknown attribute %s = %s\n", option, value); diff --git a/src/options.c b/src/options.c index ccdefe1d..758de747 100644 --- a/src/options.c +++ b/src/options.c @@ -296,6 +296,14 @@ LayoutOptions *init_layout_options(LayoutOptions *options) options->main_window.w = 720; options->main_window.x = 0; options->main_window.y = 0; + options->dupe_window.w = 800; + options->dupe_window.h = 400; + options->dupe_window.x = 100; + options->dupe_window.y = 100; + options->search_window.w = 700; + options->search_window.h = 650; + options->search_window.x = 100; + options->search_window.y = 100; options->folder_window.vdivider_pos = 100; options->order = g_strdup("123"); options->show_directory_date = FALSE; diff --git a/src/search.c b/src/search.c index c929440e..0c593a35 100644 --- a/src/search.c +++ b/src/search.c @@ -3043,8 +3043,26 @@ static GtkWidget *menu_choice(GtkWidget *box, GtkWidget **check, GtkWidget **men return hbox; } +static void search_window_get_geometry(SearchData *sd) +{ + GdkWindow *window; + LayoutWindow *lw = NULL; + + layout_valid(&lw); + + if (!sd || !lw) return; + + window = gtk_widget_get_window(sd->window); + gdk_window_get_position(window, &lw->options.search_window.x, &lw->options.search_window.y); + lw->options.search_window.w = gdk_window_get_width(window); + lw->options.search_window.h = gdk_window_get_height(window); +} + static void search_window_close(SearchData *sd) { + + search_window_get_geometry(sd); + gtk_widget_destroy(sd->window); } @@ -3106,6 +3124,9 @@ void search_new(FileData *dir_fd, FileData *example_file) GdkGeometry geometry; gint i; gchar *marks_string; + LayoutWindow *lw = NULL; + + layout_valid(&lw); sd = g_new0(SearchData, 1); @@ -3153,7 +3174,15 @@ void search_new(FileData *dir_fd, FileData *example_file) gtk_window_set_geometry_hints(GTK_WINDOW(sd->window), NULL, &geometry, GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE); - gtk_window_set_default_size(GTK_WINDOW(sd->window), DEF_SEARCH_WIDTH, DEF_SEARCH_HEIGHT); + if (lw && options->save_window_positions) + { + gtk_window_set_default_size(GTK_WINDOW(sd->window), lw->options.search_window.w, lw->options.search_window.h); + gtk_window_move(GTK_WINDOW(sd->window), lw->options.search_window.x, lw->options.search_window.y); + } + else + { + gtk_window_set_default_size(GTK_WINDOW(sd->window), DEF_SEARCH_WIDTH, DEF_SEARCH_HEIGHT); + } g_signal_connect(G_OBJECT(sd->window), "delete_event", G_CALLBACK(search_window_delete_cb), sd); diff --git a/src/typedefs.h b/src/typedefs.h index fcc6817f..596421f1 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -704,6 +704,20 @@ struct _LayoutOptions gint y; } log_window; + struct { + gint w; + gint h; + gint x; + gint y; + } search_window; + + struct { + gint w; + gint h; + gint x; + gint y; + } dupe_window; + gboolean tools_float; gboolean tools_hidden; gboolean toolbar_hidden;