[gtk] Revert "file chooser: Stop using gtk_window_get_position"



commit a9364bc053c0cf1ccd892d775e60cc4d7de26b93
Author: Timm Bäder <mail baedert org>
Date:   Fri Jul 19 09:47:16 2019 +0200

    Revert "file chooser: Stop using gtk_window_get_position"
    
    This reverts commit 2ed533c3e1f0fe776fb24cc370447a0c63e49f24.
    
    This also made the filechooser dialog not save the window size anymore,
    which does not depend on the gtk_window_get_position() removal.

 gtk/gtkfilechooserdialog.c  | 32 ++++++++++++++++++++++++++++++++
 gtk/gtkfilechooserprivate.h |  1 +
 gtk/gtkfilechooserwidget.c  |  5 +++--
 3 files changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c
index 85a182f8a8..40e19c8a87 100644
--- a/gtk/gtkfilechooserdialog.c
+++ b/gtk/gtkfilechooserdialog.c
@@ -577,9 +577,39 @@ gtk_file_chooser_dialog_map (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->map (widget);
 }
 
+static void
+save_dialog_geometry (GtkFileChooserDialog *dialog)
+{
+  GtkWindow *window;
+  GSettings *settings;
+  int old_x, old_y, old_width, old_height;
+  int x, y, width, height;
+
+  settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (dialog));
+
+  window = GTK_WINDOW (dialog);
+
+  gtk_window_get_position (window, &x, &y);
+  gtk_window_get_size (window, &width, &height);
+
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &old_x, &old_y);
+  if (old_x != x || old_y != y)
+    g_settings_set (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", x, y);
+
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &old_width, &old_height);
+  if (old_width != width || old_height != height)
+    g_settings_set (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", width, height);
+
+  g_settings_apply (settings);
+}
+
 static void
 gtk_file_chooser_dialog_unmap (GtkWidget *widget)
 {
+  GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget);
+
+  save_dialog_geometry (dialog);
+
   GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->unmap (widget);
 }
 
@@ -593,6 +623,8 @@ gtk_file_chooser_dialog_size_allocate (GtkWidget *widget,
                                                                           width,
                                                                           height,
                                                                           baseline);
+  if (gtk_widget_is_drawable (widget))
+    save_dialog_geometry (GTK_FILE_CHOOSER_DIALOG (widget));
 }
 
 /* We do a signal connection here rather than overriding the method in
diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h
index 6379e0ab60..a0a622c111 100644
--- a/gtk/gtkfilechooserprivate.h
+++ b/gtk/gtkfilechooserprivate.h
@@ -41,6 +41,7 @@ G_BEGIN_DECLS
 #define SETTINGS_KEY_SHOW_TYPE_COLUMN       "show-type-column"
 #define SETTINGS_KEY_SORT_COLUMN            "sort-column"
 #define SETTINGS_KEY_SORT_ORDER             "sort-order"
+#define SETTINGS_KEY_WINDOW_POSITION        "window-position"
 #define SETTINGS_KEY_WINDOW_SIZE            "window-size"
 #define SETTINGS_KEY_SIDEBAR_WIDTH          "sidebar-width"
 #define SETTINGS_KEY_STARTUP_MODE           "startup-mode"
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 0a37e2834d..59fb176040 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -6177,14 +6177,15 @@ gtk_file_chooser_widget_get_default_size (GtkFileChooserEmbed *chooser_embed,
   GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed);
   GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
   GtkRequisition req;
-  int width, height;
+  int x, y, width, height;
   GSettings *settings;
 
   settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
 
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &x, &y);
   g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &width, &height);
 
-  if (width > 0 && height > 0)
+  if (x >= 0 && y >= 0 && width > 0 && height > 0)
     {
       *default_width = width;
       *default_height = height;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]