+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.
+
2004-12-14 Matthias Clasen <mclasen@redhat.com>
* README.win32: Fix a typo
+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.
+
2004-12-14 Matthias Clasen <mclasen@redhat.com>
* README.win32: Fix a typo
+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.
+
2004-12-14 Matthias Clasen <mclasen@redhat.com>
* README.win32: Fix a typo
+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.
+
2004-12-14 Matthias Clasen <mclasen@redhat.com>
* README.win32: Fix a typo
GParamSpec *pspec);
static void gtk_file_chooser_default_dispose (GObject *object);
static void gtk_file_chooser_default_show_all (GtkWidget *widget);
+static void gtk_file_chooser_default_map (GtkWidget *widget);
static void gtk_file_chooser_default_hierarchy_changed (GtkWidget *widget,
GtkWidget *previous_toplevel);
static void gtk_file_chooser_default_style_set (GtkWidget *widget,
gobject_class->dispose = gtk_file_chooser_default_dispose;
widget_class->show_all = gtk_file_chooser_default_show_all;
+ widget_class->map = gtk_file_chooser_default_map;
widget_class->hierarchy_changed = gtk_file_chooser_default_hierarchy_changed;
widget_class->style_set = gtk_file_chooser_default_style_set;
widget_class->screen_changed = gtk_file_chooser_default_screen_changed;
return !result;
}
+/* GtkWidget::map method */
+static void
+gtk_file_chooser_default_map (GtkWidget *widget)
+{
+ GtkFileChooserDefault *impl;
+
+ impl = GTK_FILE_CHOOSER_DEFAULT (widget);
+
+ GTK_WIDGET_CLASS (parent_class)->map (widget);
+
+ change_folder_and_display_error (impl, impl->current_folder);
+ bookmarks_changed_cb (impl->file_system, impl);
+}
+
static gboolean
list_model_filter_func (GtkFileSystemModel *model,
GtkFilePath *path,
{
if (impl->load_state == LOAD_FINISHED)
browse_files_select_first_row (impl);
+ else
+ pending_op_queue (impl, PENDING_OP_SELECT_FIRST, NULL);
widget = impl->browse_files_tree_view;
}
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);
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);
_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;
}
#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)