diff options
author | Federico Mena Quintero <federico@ximian.com> | 2004-12-15 01:37:41 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2004-12-15 01:37:41 +0000 |
commit | 9f558a1540603428e1735a32bdc00c7a67dedc45 (patch) | |
tree | 8fbcaab30fa53e75dd7f4918b93c092772893795 /gtk/gtkfilechooserdialog.c | |
parent | faa58ba49c9f4f2c5dca18ac0abbbbdbb1cd685d (diff) | |
download | gtk+-9f558a1540603428e1735a32bdc00c7a67dedc45.tar.gz |
Merged from gtk-2-4:
2004-12-14 Federico Mena Quintero <federico@ximian.com>
Merged from gtk-2-4:
Fix #145470:
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_initial_focus): Queue a pending
operation to select the first row if we are not finished loading
yet.
(gtk_file_chooser_default_class_init): Override GtkWidget::map().
(gtk_file_chooser_default_map): New ::map() handler; refresh the
file and bookmark lists.
* gtk/gtkfilechooserdialog.c (gtk_file_chooser_dialog_class_init):
Override GtkWidget::map() and GtkWidget::unmap().
(gtk_file_chooser_dialog_constructor): Don't call initial_focus()
here.
(gtk_file_chooser_dialog_map): Map the file chooser widget if
needed. Call initial_focus() here.
(gtk_file_chooser_dialog_unmap): Unmap the file chooser widget.
When we are re-mapped, the widget will get mapped as well and it
will have a chance to refresh.
Diffstat (limited to 'gtk/gtkfilechooserdialog.c')
-rw-r--r-- | gtk/gtkfilechooserdialog.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c index 83c8ebe290..381f87203f 100644 --- a/gtk/gtkfilechooserdialog.c +++ b/gtk/gtkfilechooserdialog.c @@ -60,6 +60,8 @@ static void gtk_file_chooser_dialog_get_property (GObject *obj GValue *value, GParamSpec *pspec); +static void gtk_file_chooser_dialog_map (GtkWidget *widget); +static void gtk_file_chooser_dialog_unmap (GtkWidget *widget); static void gtk_file_chooser_dialog_style_set (GtkWidget *widget, GtkStyle *previous_style); @@ -118,6 +120,8 @@ gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class) gobject_class->get_property = gtk_file_chooser_dialog_get_property; gobject_class->finalize = gtk_file_chooser_dialog_finalize; + widget_class->map = gtk_file_chooser_dialog_map; + widget_class->unmap = gtk_file_chooser_dialog_unmap; widget_class->style_set = gtk_file_chooser_dialog_style_set; _gtk_file_chooser_install_properties (gobject_class); @@ -397,8 +401,6 @@ gtk_file_chooser_dialog_constructor (GType type, _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (object), GTK_FILE_CHOOSER (priv->widget)); - _gtk_file_chooser_embed_initial_focus (GTK_FILE_CHOOSER_EMBED (priv->widget)); - gtk_widget_pop_composite_child (); return object; @@ -487,6 +489,39 @@ set_default_size (GtkFileChooserDialog *dialog) } #endif +/* GtkWidget::map handler */ +static void +gtk_file_chooser_dialog_map (GtkWidget *widget) +{ + GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget); + GtkFileChooserDialogPrivate *priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog); + + if (!GTK_WIDGET_MAPPED (priv->widget)) + gtk_widget_map (priv->widget); + + GTK_WIDGET_CLASS (parent_class)->map (widget); + + _gtk_file_chooser_embed_initial_focus (GTK_FILE_CHOOSER_EMBED (priv->widget)); +} + +/* GtkWidget::unmap handler */ +static void +gtk_file_chooser_dialog_unmap (GtkWidget *widget) +{ + GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget); + GtkFileChooserDialogPrivate *priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog); + + GTK_WIDGET_CLASS (parent_class)->unmap (widget); + + /* See bug #145470. We unmap the GtkFileChooserWidget so that if the dialog + * is remapped, the widget will be remapped as well. Implementations should + * refresh their contents when this happens, as some applications keep a + * single file chooser alive and map/unmap it as needed, rather than creating + * a new file chooser every time they need one. + */ + gtk_widget_unmap (priv->widget); +} + static void gtk_file_chooser_dialog_style_set (GtkWidget *widget, GtkStyle *previous_style) |