]> Pileus Git - ~andy/gtk/commitdiff
Merged from gtk-2-4:
authorFederico Mena Quintero <federico@ximian.com>
Wed, 15 Dec 2004 01:37:41 +0000 (01:37 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 15 Dec 2004 01:37:41 +0000 (01:37 +0000)
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.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkfilechooserdefault.c
gtk/gtkfilechooserdialog.c

index 704e371959e7d3acb990a406f4fa30c9061a2d8f..53215e43b0e689e0e037751139e709658807e16e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+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
index 704e371959e7d3acb990a406f4fa30c9061a2d8f..53215e43b0e689e0e037751139e709658807e16e 100644 (file)
@@ -1,3 +1,27 @@
+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
index 704e371959e7d3acb990a406f4fa30c9061a2d8f..53215e43b0e689e0e037751139e709658807e16e 100644 (file)
@@ -1,3 +1,27 @@
+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
index 704e371959e7d3acb990a406f4fa30c9061a2d8f..53215e43b0e689e0e037751139e709658807e16e 100644 (file)
@@ -1,3 +1,27 @@
+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
index ba7131402ef005a46c46508f3c300af5cde23f40..9bb6b38899bad8f65fdcf50c00f5969d84e656c2 100644 (file)
@@ -303,6 +303,7 @@ static void     gtk_file_chooser_default_get_property (GObject               *ob
                                                       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,
@@ -537,6 +538,7 @@ gtk_file_chooser_default_class_init (GtkFileChooserDefaultClass *class)
   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;
@@ -4037,6 +4039,20 @@ get_is_file_filtered (GtkFileChooserDefault *impl,
   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,
@@ -5288,6 +5304,8 @@ gtk_file_chooser_default_initial_focus (GtkFileChooserEmbed *chooser_embed)
     {
       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;
     }
index 83c8ebe2903d235cd8f8bcb9485a1db5554e5f88..381f87203f3046ef78eed02cd10d1179301e4f8a 100644 (file)
@@ -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)