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
This commit is contained in:
Nelson Benítez León 2020-03-31 14:32:03 -04:00
parent 21e0e3f863
commit 6d98edf89f
3 changed files with 20 additions and 0 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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