Fix #832: Geeqie remembers desktop
authorColin Clark <colin.clark@cclark.uk>
Sun, 13 Dec 2020 10:54:33 +0000 (10:54 +0000)
committerColin Clark <colin.clark@cclark.uk>
Sun, 13 Dec 2020 10:54:33 +0000 (10:54 +0000)
https://github.com/BestImageViewer/geeqie/issues/832

An additional option to remember window workspaces in
Edit/Preferences/Windows.
The default is "off".

doc/docbook/GuideOptionsWindow.xml
src/layout.c
src/options.c
src/options.h
src/preferences.c
src/rcfile.c

index ce0f97b..04c4708 100644 (file)
         </listitem>\r
       </varlistentry>\r
     </variablelist>\r
+    <variablelist>\r
+      <varlistentry>\r
+        <term>\r
+          <guilabel>Remember window workspace</guilabel>\r
+        </term>\r
+        <listitem>\r
+          <para>\r
+            Remember which workspace a window was displayed in.\r
+          </para>\r
+        </listitem>\r
+      </varlistentry>\r
+    </variablelist>\r
     <variablelist>\r
       <varlistentry>\r
         <term>\r
index 685e200..7a0e1b8 100644 (file)
@@ -2412,12 +2412,15 @@ void layout_sync_options_with_current_state(LayoutWindow *lw)
 #if GTK_CHECK_VERSION(3,10,0)
        GdkDisplay *display;
 
-       display = gdk_display_get_default();
-
-       if (GDK_IS_X11_DISPLAY(display))
+       if (options->save_window_workspace)
                {
-               window = gtk_widget_get_window(GTK_WIDGET(lw->window));
-               lw->options.workspace = gdk_x11_window_get_desktop(window);
+               display = gdk_display_get_default();
+
+               if (GDK_IS_X11_DISPLAY(display))
+                       {
+                       window = gtk_widget_get_window(GTK_WIDGET(lw->window));
+                       lw->options.workspace = gdk_x11_window_get_desktop(window);
+                       }
                }
 #endif
 #endif
@@ -2535,14 +2538,17 @@ static gboolean move_window_to_workspace_cb(gpointer data)
        GdkWindow *window;
        GdkDisplay *display;
 
-       display = gdk_display_get_default();
-
-       if (GDK_IS_X11_DISPLAY(display))
+       if (options->save_window_workspace)
                {
-               if (lw->options.workspace != -1)
+               display = gdk_display_get_default();
+
+               if (GDK_IS_X11_DISPLAY(display))
                        {
-                       window = gtk_widget_get_window(GTK_WIDGET(lw->window));
-                       gdk_x11_window_move_to_desktop(window, lw->options.workspace);
+                       if (lw->options.workspace != -1)
+                               {
+                               window = gtk_widget_get_window(GTK_WIDGET(lw->window));
+                               gdk_x11_window_move_to_desktop(window, lw->options.workspace);
+                               }
                        }
                }
 #endif
index a4765d9..e4830e0 100644 (file)
@@ -64,6 +64,7 @@ ConfOptions *init_options(ConfOptions *options)
 
        options->save_window_positions = TRUE;
        options->use_saved_window_positions_for_new_windows = FALSE;
+       options->save_window_workspace = FALSE;
        options->tools_restore_state = TRUE;
        options->save_dialog_window_positions = FALSE;
        options->show_window_ids = FALSE;
index 8527304..a5d5cf8 100644 (file)
@@ -62,6 +62,7 @@ struct _ConfOptions
 
        gboolean save_window_positions;
        gboolean use_saved_window_positions_for_new_windows;
+       gboolean save_window_workspace;
        gboolean tools_restore_state;
        gboolean save_dialog_window_positions;
        gboolean show_window_ids;
index 1486ee4..3084f40 100644 (file)
@@ -269,6 +269,7 @@ static void config_window_apply(void)
        options->tools_restore_state = c_options->tools_restore_state;
        options->save_window_positions = c_options->save_window_positions;
        options->use_saved_window_positions_for_new_windows = c_options->use_saved_window_positions_for_new_windows;
+       options->save_window_workspace = c_options->save_window_workspace;
        options->save_dialog_window_positions = c_options->save_dialog_window_positions;
        options->show_window_ids = c_options->show_window_ids;
        options->image.scroll_reset_method = c_options->image.scroll_reset_method;
@@ -2298,6 +2299,10 @@ static void config_tab_windows(GtkWidget *notebook)
                                       options->use_saved_window_positions_for_new_windows, &c_options->use_saved_window_positions_for_new_windows);
        pref_checkbox_link_sensitivity(ct_button, button);
 
+       button = pref_checkbox_new_int(group, _("Remember window workspace"),
+                             options->save_window_workspace, &c_options->save_window_workspace);
+       pref_checkbox_link_sensitivity(ct_button, button);
+
        pref_checkbox_new_int(group, _("Remember tool state (float/hidden)"),
                              options->tools_restore_state, &c_options->tools_restore_state);
 
index 9fd5aca..21984b5 100644 (file)
@@ -340,6 +340,7 @@ static void write_global_attributes(GString *outstr, gint indent)
 
        WRITE_NL(); WRITE_BOOL(*options, save_window_positions);
        WRITE_NL(); WRITE_BOOL(*options, use_saved_window_positions_for_new_windows);
+       WRITE_NL(); WRITE_BOOL(*options, save_window_workspace);
        WRITE_NL(); WRITE_BOOL(*options, tools_restore_state);
        WRITE_NL(); WRITE_BOOL(*options, save_dialog_window_positions);
        WRITE_NL(); WRITE_BOOL(*options, show_window_ids);
@@ -770,6 +771,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
 
                if (READ_BOOL(*options, save_window_positions)) continue;
                if (READ_BOOL(*options, use_saved_window_positions_for_new_windows)) continue;
+               if (READ_BOOL(*options, save_window_workspace)) continue;
                if (READ_BOOL(*options, tools_restore_state)) continue;
                if (READ_BOOL(*options, save_dialog_window_positions)) continue;
                if (READ_BOOL(*options, show_window_ids)) continue;