[gtk/BUG_double_popover_focus_filechooser_GTK3] filechooser: set default widget early for 'Rename' popover



commit 6d98edf89ff8269c3d8f95333264e3505d9c87a2
Author: Nelson Benítez León <nbenitezl gmail com>
Date:   Tue Mar 31 14:32:03 2020 -0400

    filechooser: set default widget early for 'Rename' popover
    
    because otherwise this second[1] popover will not be
    able to save the filechooser default widget (the 'save'
    button) because the first popover has not yet restablish
    it (as will be done on popover's unmap handler).
    
    [1] second because 'Rename' popover is launched from inside
        the 'file properties' popover.
    
    Fixes #2555

 gtk/gtkfilechooserwidget.c | 12 +++++++++++-
 gtk/gtkpopover.c           |  9 +++++++++
 gtk/gtkpopoverprivate.h    |  1 +
 3 files changed, 21 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 562b2f7f5a..b4ff62da78 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -73,6 +73,7 @@
 #include "gtkmain.h"
 #include "gtkscrollable.h"
 #include "gtkpopover.h"
+#include "gtkpopoverprivate.h"
 #include "gtkrevealer.h"
 #include "gtkspinner.h"
 #include "gtkseparator.h"
@@ -1680,7 +1681,16 @@ rename_file_cb (GSimpleAction *action,
   GtkFileChooserWidget *impl = data;
   GtkFileChooserWidgetPrivate *priv = impl->priv;
   GtkTreeSelection *selection;
-
+  GtkWidget *prev_default;
+  GtkWindow *window;
+
+  prev_default = gtk_popover_get_prev_default (GTK_POPOVER (priv->browse_files_popover));
+  if (prev_default) {
+    /* set 'default' early so rename popover can get it */
+    window = GTK_WINDOW (gtk_widget_get_ancestor (priv->browse_files_popover, GTK_TYPE_WINDOW));
+    if (window)
+      gtk_window_set_default (window, prev_default);
+  }
   /* insensitive until we change the name */
   gtk_widget_set_sensitive (priv->rename_file_rename_button, FALSE);
 
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index a2d47b6281..2f2a304085 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -674,6 +674,15 @@ gtk_popover_set_state (GtkPopover *popover,
     }
 }
 
+GtkWidget *
+gtk_popover_get_prev_default (GtkPopover *popover)
+{
+  g_return_val_if_fail (GTK_IS_POPOVER (popover), NULL);
+
+  return popover->priv->prev_default;
+}
+
+
 static void
 gtk_popover_map (GtkWidget *widget)
 {
diff --git a/gtk/gtkpopoverprivate.h b/gtk/gtkpopoverprivate.h
index ab61eb993e..2064fa6753 100644
--- a/gtk/gtkpopoverprivate.h
+++ b/gtk/gtkpopoverprivate.h
@@ -23,6 +23,7 @@
 G_BEGIN_DECLS
 
 void gtk_popover_update_position (GtkPopover *popover);
+GtkWidget *gtk_popover_get_prev_default (GtkPopover *popover);
 
 G_END_DECLS
 


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