[arch-commits] CVS update of arch/build/lib/gtk2 (4 files)

Jan de Groot jgc at archlinux.org
Sat May 12 13:31:35 UTC 2007


    Date: Saturday, May 12, 2007 @ 09:31:35
  Author: jgc
    Path: /home/cvs-arch/arch/build/lib/gtk2

   Added: gtk2-2.10.12-filechooser-sizing.patch (1.1)
Modified: PKGBUILD (1.93 -> 1.94)
 Removed: gtk-2.10.9-expand_tilde.patch (1.1)
          gtk-2.10.9-gdkwindow-x11-check-toplevel.patch (1.1)

Add patch to fix filechooser sizing in not-KDE/GNOME environments


-----------------------------------------------+
 PKGBUILD                                      |   10 
 gtk-2.10.9-expand_tilde.patch                 |   39 -
 gtk-2.10.9-gdkwindow-x11-check-toplevel.patch |   31 -
 gtk2-2.10.12-filechooser-sizing.patch         |  536 ++++++++++++++++++++++++
 4 files changed, 542 insertions(+), 74 deletions(-)


Index: arch/build/lib/gtk2/PKGBUILD
diff -u arch/build/lib/gtk2/PKGBUILD:1.93 arch/build/lib/gtk2/PKGBUILD:1.94
--- arch/build/lib/gtk2/PKGBUILD:1.93	Wed May  2 18:29:41 2007
+++ arch/build/lib/gtk2/PKGBUILD	Sat May 12 09:31:35 2007
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD,v 1.93 2007/05/02 22:29:41 jgc Exp $
+# $Id: PKGBUILD,v 1.94 2007/05/12 13:31:35 jgc Exp $
 # Maintainer: Jan de Groot <jgc at archlinux.org>
 
 pkgname=gtk2
 pkgver=2.10.12
-pkgrel=1
+pkgrel=2
 pkgdesc="The GTK+ Toolkit (v2)"
 arch=(i686 x86_64)
 url="http://www.gtk.org/"
@@ -15,11 +15,13 @@
 options=('nolibtool')
 backup=(etc/gtk-2.0/gtkrc)
 license=('LGPL')
-source=(http://ftp.gnome.org/pub/gnome/sources/gtk+/2.10/gtk+-${pkgver}.tar.bz2)
-md5sums=('cf969c62134c662ff07e64613ed6c11f')
+source=(http://ftp.gnome.org/pub/gnome/sources/gtk+/2.10/gtk+-${pkgver}.tar.bz2
+	gtk2-2.10.12-filechooser-sizing.patch)
+md5sums=('cf969c62134c662ff07e64613ed6c11f' 'a9f4ee6266c13ab1b712e06e0f8c12ac')
 
 build() {
   cd ${startdir}/src/gtk+-${pkgver}
+  patch -Np1 -i ${startdir}/src/gtk2-2.10.12-filechooser-sizing.patch || return 1
   ./configure --prefix=/usr --sysconfdir=/etc \
               --localstatedir=/var --with-xinput=xfree \
 	      --with-included-loaders=png
Index: arch/build/lib/gtk2/gtk-2.10.9-expand_tilde.patch
diff -u arch/build/lib/gtk2/gtk-2.10.9-expand_tilde.patch:1.1 arch/build/lib/gtk2/gtk-2.10.9-expand_tilde.patch:removed
--- arch/build/lib/gtk2/gtk-2.10.9-expand_tilde.patch:1.1	Fri Feb  2 06:02:24 2007
+++ arch/build/lib/gtk2/gtk-2.10.9-expand_tilde.patch	Sat May 12 09:31:36 2007
@@ -1,39 +0,0 @@
---- branches/gtk-2-10/gtk/gtkfilesystemunix.c	2007/01/11 00:55:43	17131
-+++ branches/gtk-2-10/gtk/gtkfilesystemunix.c	2007/01/24 08:35:29	17208
-@@ -1457,8 +1457,10 @@
-   notilde = filename + 1;
- 
-   slash = strchr (notilde, G_DIR_SEPARATOR);
-+  if (!slash)
-+    return NULL;
- 
--  if (slash == notilde || !*notilde)
-+  if (slash == notilde)
-     {
-       home = g_get_home_dir ();
- 
-@@ -1470,11 +1472,7 @@
-       char *username;
-       struct passwd *passwd;
- 
--      if (slash)
--        username = g_strndup (notilde, slash - notilde);
--      else
--        username = g_strdup (notilde);
--
-+      username = g_strndup (notilde, slash - notilde);
-       passwd = getpwnam (username);
-       g_free (username);
- 
-@@ -1484,10 +1482,7 @@
-       home = passwd->pw_dir;
-     }
- 
--  if (slash)
--    return g_build_filename (home, G_DIR_SEPARATOR_S, slash + 1, NULL);
--  else
--    return g_strdup (home);
-+  return g_build_filename (home, G_DIR_SEPARATOR_S, slash + 1, NULL);
- }
- 
- static gboolean
Index: arch/build/lib/gtk2/gtk-2.10.9-gdkwindow-x11-check-toplevel.patch
diff -u arch/build/lib/gtk2/gtk-2.10.9-gdkwindow-x11-check-toplevel.patch:1.1 arch/build/lib/gtk2/gtk-2.10.9-gdkwindow-x11-check-toplevel.patch:removed
--- arch/build/lib/gtk2/gtk-2.10.9-gdkwindow-x11-check-toplevel.patch:1.1	Fri Feb  2 06:02:25 2007
+++ arch/build/lib/gtk2/gtk-2.10.9-gdkwindow-x11-check-toplevel.patch	Sat May 12 09:31:36 2007
@@ -1,31 +0,0 @@
---- branches/gtk-2-10/gdk/x11/gdkwindow-x11.c	2007/01/04 01:30:07	17045
-+++ branches/gtk-2-10/gdk/x11/gdkwindow-x11.c	2007/01/30 18:39:01	17237
-@@ -2016,6 +2016,10 @@
- gdk_x11_window_move_to_current_desktop (GdkWindow *window)
- {
-   GdkToplevelX11 *toplevel;
-+
-+  g_return_if_fail (GDK_IS_WINDOW (window));
-+  g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD);
-+
-   toplevel = _gdk_x11_window_get_toplevel (window);
- 
-   if (toplevel->on_all_desktops)
-@@ -3781,6 +3785,7 @@
- 
-   if (GDK_WINDOW_DESTROYED (window))
-     return;
-+
-   toplevel = gdk_window_get_toplevel (window);
-   
-   old_windows = NULL;
-@@ -4232,7 +4237,8 @@
-   if (timestamp_long != GDK_CURRENT_TIME)
-     display_x11->user_time = timestamp_long;
- 
--  toplevel->user_time = timestamp_long;
-+  if (toplevel)
-+    toplevel->user_time = timestamp_long;
- }
- 
- #define GDK_SELECTION_MAX_SIZE(display)                                 \
Index: arch/build/lib/gtk2/gtk2-2.10.12-filechooser-sizing.patch
diff -u /dev/null arch/build/lib/gtk2/gtk2-2.10.12-filechooser-sizing.patch:1.1
--- /dev/null	Sat May 12 09:31:36 2007
+++ arch/build/lib/gtk2/gtk2-2.10.12-filechooser-sizing.patch	Sat May 12 09:31:35 2007
@@ -0,0 +1,536 @@
+--- gtk+-2.10.12/gtk/gtkfilechooserembed.c.orig	2007-05-02 18:26:58.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilechooserembed.c	2007-05-08 17:21:44.000000000 +0200
+@@ -28,9 +28,7 @@ static void gtk_file_chooser_embed_class
+ static void delegate_get_default_size         (GtkFileChooserEmbed *chooser_embed,
+ 					       gint                *default_width,
+ 					       gint                *default_height);
+-static void delegate_get_resizable_hints      (GtkFileChooserEmbed *chooser_embed,
+-					       gboolean            *resize_horizontally,
+-					       gboolean            *resize_vertically);
++static gboolean delegate_get_resizable        (GtkFileChooserEmbed *chooser_embed);
+ static gboolean delegate_should_respond       (GtkFileChooserEmbed *chooser_embed);
+ static void delegate_initial_focus            (GtkFileChooserEmbed *chooser_embed);
+ static void delegate_default_size_changed     (GtkFileChooserEmbed *chooser_embed,
+@@ -57,7 +55,7 @@ void
+ _gtk_file_chooser_embed_delegate_iface_init (GtkFileChooserEmbedIface *iface)
+ {
+   iface->get_default_size = delegate_get_default_size;
+-  iface->get_resizable_hints = delegate_get_resizable_hints;
++  iface->get_resizable = delegate_get_resizable;
+   iface->should_respond = delegate_should_respond;
+   iface->initial_focus = delegate_initial_focus;
+ }
+@@ -96,13 +94,11 @@ delegate_get_default_size (GtkFileChoose
+ {
+   _gtk_file_chooser_embed_get_default_size (get_delegate (chooser_embed), default_width, default_height);
+ }
+-     
+-static void
+-delegate_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
+-			      gboolean            *resize_horizontally,
+-			      gboolean            *resize_vertically)
++
++static gboolean
++delegate_get_resizable (GtkFileChooserEmbed *chooser_embed)
+ {
+-  _gtk_file_chooser_embed_get_resizable_hints (get_delegate (chooser_embed), resize_horizontally, resize_vertically);
++  return _gtk_file_chooser_embed_get_resizable (get_delegate (chooser_embed));
+ }
+ 
+ static gboolean
+@@ -208,14 +204,10 @@ _gtk_file_chooser_embed_initial_focus (G
+   GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->initial_focus (chooser_embed);
+ }
+ 
+-void
+-_gtk_file_chooser_embed_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
+-					     gboolean            *resize_horizontally,
+-					     gboolean            *resize_vertically)
++gboolean
++_gtk_file_chooser_embed_get_resizable (GtkFileChooserEmbed *chooser_embed)
+ {
+-  g_return_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed));
+-  g_return_if_fail (resize_horizontally != NULL);
+-  g_return_if_fail (resize_vertically != NULL);
++  g_return_val_if_fail (GTK_IS_FILE_CHOOSER_EMBED (chooser_embed), FALSE);
+ 
+-  GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->get_resizable_hints (chooser_embed, resize_horizontally, resize_vertically);
++  return GTK_FILE_CHOOSER_EMBED_GET_IFACE (chooser_embed)->get_resizable (chooser_embed);
+ }
+--- gtk+-2.10.12/gtk/gtkfilechooserprivate.h.orig	2007-05-02 18:26:59.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilechooserprivate.h	2007-05-08 17:21:44.000000000 +0200
+@@ -109,10 +109,6 @@ struct _GtkFileChooserDialogPrivate
+   char *file_system;
+ 
+   /* for use with GtkFileChooserEmbed */
+-  gint default_width;
+-  gint default_height;
+-  gboolean resize_horizontally;
+-  gboolean resize_vertically;
+   gboolean response_requested;
+ };
+ 
+@@ -254,6 +250,9 @@ struct _GtkFileChooserDefault
+   GSource *shortcuts_drag_outside_idle;
+ #endif
+ 
++  gint default_width;
++  gint default_height;
++
+   /* Flags */
+ 
+   guint local_only : 1;
+--- gtk+-2.10.12/gtk/gtkfilechooserembed.h.orig	2007-05-02 18:26:58.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilechooserembed.h	2007-05-08 17:21:44.000000000 +0200
+@@ -43,9 +43,7 @@ struct _GtkFileChooserEmbedIface
+   void (*get_default_size)        (GtkFileChooserEmbed *chooser_embed,
+ 				   gint                *default_width,
+ 				   gint                *default_height);
+-  void (*get_resizable_hints)     (GtkFileChooserEmbed *chooser_embed,
+-				   gboolean            *resize_horizontally,
+-				   gboolean            *resize_vertically);
++  gboolean (*get_resizable)       (GtkFileChooserEmbed *chooser_embed);
+ 
+   gboolean (*should_respond)      (GtkFileChooserEmbed *chooser_embed);
+ 
+@@ -61,10 +59,7 @@ GType _gtk_file_chooser_embed_get_type (
+ void  _gtk_file_chooser_embed_get_default_size    (GtkFileChooserEmbed *chooser_embed,
+ 						   gint                *default_width,
+ 						   gint                *default_height);
+-void  _gtk_file_chooser_embed_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
+-						   gboolean            *resize_horizontally,
+-						   gboolean            *resize_vertically);
+-
++gboolean _gtk_file_chooser_embed_get_resizable  (GtkFileChooserEmbed *chooser_embed);
+ gboolean _gtk_file_chooser_embed_should_respond (GtkFileChooserEmbed *chooser_embed);
+ 
+ void _gtk_file_chooser_embed_initial_focus (GtkFileChooserEmbed *chooser_embed);
+--- gtk+-2.10.12/gtk/gtkfilechooserdefault.c.orig	2007-05-02 18:26:59.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilechooserdefault.c	2007-05-08 17:23:59.000000000 +0200
+@@ -272,6 +272,8 @@ static void     gtk_file_chooser_default
+ 							 GtkStyle              *previous_style);
+ static void     gtk_file_chooser_default_screen_changed (GtkWidget             *widget,
+ 							 GdkScreen             *previous_screen);
++static void     gtk_file_chooser_default_size_allocate  (GtkWidget             *widget,
++							 GtkAllocation         *allocation);
+ 
+ static gboolean       gtk_file_chooser_default_set_current_folder 	   (GtkFileChooser    *chooser,
+ 									    const GtkFilePath *path,
+@@ -310,9 +312,7 @@ static GSList *       gtk_file_chooser_d
+ static void           gtk_file_chooser_default_get_default_size       (GtkFileChooserEmbed *chooser_embed,
+ 								       gint                *default_width,
+ 								       gint                *default_height);
+-static void           gtk_file_chooser_default_get_resizable_hints    (GtkFileChooserEmbed *chooser_embed,
+-								       gboolean            *resize_horizontally,
+-								       gboolean            *resize_vertically);
++static gboolean       gtk_file_chooser_default_get_resizable          (GtkFileChooserEmbed *chooser_embed);
+ static gboolean       gtk_file_chooser_default_should_respond         (GtkFileChooserEmbed *chooser_embed);
+ static void           gtk_file_chooser_default_initial_focus          (GtkFileChooserEmbed *chooser_embed);
+ 
+@@ -423,6 +423,7 @@ static void browse_files_center_selected
+ static void location_button_toggled_cb (GtkToggleButton *toggle,
+ 					GtkFileChooserDefault *impl);
+ static void location_switch_to_path_bar (GtkFileChooserDefault *impl);
++static void     settings_load                (GtkFileChooserDefault *impl);
+ 
+ 
+ 
+@@ -485,6 +486,7 @@ _gtk_file_chooser_default_class_init (Gt
+   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;
++  widget_class->size_allocate = gtk_file_chooser_default_size_allocate;
+ 
+   signals[LOCATION_POPUP] =
+     _gtk_binding_signal_new (I_("location-popup"),
+@@ -665,7 +667,7 @@ static void
+ gtk_file_chooser_embed_default_iface_init (GtkFileChooserEmbedIface *iface)
+ {
+   iface->get_default_size = gtk_file_chooser_default_get_default_size;
+-  iface->get_resizable_hints = gtk_file_chooser_default_get_resizable_hints;
++  iface->get_resizable = gtk_file_chooser_default_get_resizable;
+   iface->should_respond = gtk_file_chooser_default_should_respond;
+   iface->initial_focus = gtk_file_chooser_default_initial_focus;
+ }
+@@ -4998,6 +5000,7 @@ gtk_file_chooser_default_set_property (G
+ 	      }
+ 	    impl->action = action;
+ 	    update_appearance (impl);
++	    settings_load (impl);
+ 	  }
+       }
+       break;
+@@ -5419,6 +5422,37 @@ gtk_file_chooser_default_screen_changed 
+   profile_end ("end", NULL);
+ }
+ 
++static void
++gtk_file_chooser_default_size_allocate (GtkWidget     *widget,
++					GtkAllocation *allocation)
++{
++  GtkFileChooserDefault *impl;
++
++  impl = GTK_FILE_CHOOSER_DEFAULT (widget);
++
++  GTK_WIDGET_CLASS (_gtk_file_chooser_default_parent_class)->size_allocate (widget, allocation);
++
++  if (!gtk_file_chooser_default_get_resizable (GTK_FILE_CHOOSER_EMBED (impl)))
++    {
++      /* The dialog is not resizable, we shouldn't
++       * trust in the size it has in this stage
++       */
++      return;
++    }
++
++  impl->default_width = allocation->width;
++  impl->default_height = allocation->height;
++
++  if (impl->preview_widget_active &&
++      impl->preview_widget &&
++      GTK_WIDGET_DRAWABLE (impl->preview_widget))
++    impl->default_width -= impl->preview_widget->allocation.width + PREVIEW_HBOX_SPACING;
++
++  if (impl->extra_widget &&
++      GTK_WIDGET_DRAWABLE (impl->extra_widget))
++    impl->default_height -= GTK_BOX (widget)->spacing + impl->extra_widget->allocation.height;
++}
++
+ static gboolean
+ get_is_file_filtered (GtkFileChooserDefault *impl,
+ 		      const GtkFilePath     *path,
+@@ -7186,49 +7220,35 @@ find_good_size_from_style (GtkWidget *wi
+ 			   gint      *height)
+ {
+   GtkFileChooserDefault *impl;
+-  gint default_width, default_height;
+   int font_size;
+-  GtkRequisition req;
+   GdkScreen *screen;
+   double resolution;
+ 
+   g_assert (widget->style != NULL);
+   impl = GTK_FILE_CHOOSER_DEFAULT (widget);
+ 
+-  screen = gtk_widget_get_screen (widget);
+-  if (screen)
++  if (impl->default_width == 0 &&
++      impl->default_height == 0)
+     {
+-      resolution = gdk_screen_get_resolution (screen);
+-      if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */
+-	resolution = 96.0;
+-    }
+-  else
+-    resolution = 96.0; /* wheeee */
+-
+-  font_size = pango_font_description_get_size (widget->style->font_desc);
+-  font_size = PANGO_PIXELS (font_size) * resolution / 72.0;
+-
+-  default_width = font_size * NUM_CHARS;
+-  default_height = font_size * NUM_LINES;
++      screen = gtk_widget_get_screen (widget);
++      if (screen)
++	{
++	  resolution = gdk_screen_get_resolution (screen);
++	  if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */
++	    resolution = 96.0;
++	}
++      else
++	resolution = 96.0; /* wheeee */
+ 
+-  if (impl->preview_widget_active && impl->preview_widget)
+-    {
+-      gtk_widget_size_request (impl->preview_box, &req);
+-      default_width += PREVIEW_HBOX_SPACING + req.width;
+-    }
++      font_size = pango_font_description_get_size (widget->style->font_desc);
++      font_size = PANGO_PIXELS (font_size) * resolution / 72.0;
+ 
+-  if (impl->extra_widget)
+-    {
+-      gtk_widget_size_request (impl->extra_align, &req);
+-      default_height += GTK_BOX (widget)->spacing + req.height;
++      impl->default_width = font_size * NUM_CHARS;
++      impl->default_height = font_size * NUM_LINES;
+     }
+ 
+-  gtk_widget_size_request (widget, &req);
+-  default_width = MAX (default_width, req.width);
+-  default_height = MAX (default_height, req.height);
+-
+-  *width = default_width;
+-  *height = default_height;
++  *width = impl->default_width;
++  *height = impl->default_height;
+ }
+ 
+ static void
+@@ -7237,35 +7257,37 @@ gtk_file_chooser_default_get_default_siz
+ 					   gint                *default_height)
+ {
+   GtkFileChooserDefault *impl;
++  GtkRequisition req;
+ 
+   impl = GTK_FILE_CHOOSER_DEFAULT (chooser_embed);
+   find_good_size_from_style (GTK_WIDGET (chooser_embed), default_width, default_height);
++
++  if (impl->preview_widget_active &&
++      impl->preview_widget &&
++      GTK_WIDGET_VISIBLE (impl->preview_widget))
++    {
++      gtk_widget_size_request (impl->preview_box, &req);
++      *default_width += PREVIEW_HBOX_SPACING + req.width;
++    }
++
++  if (impl->extra_widget &&
++      GTK_WIDGET_VISIBLE (impl->extra_widget))
++    {
++      gtk_widget_size_request (impl->extra_align, &req);
++      *default_height += GTK_BOX (chooser_embed)->spacing + req.height;
++    }
+ }
+ 
+-static void
+-gtk_file_chooser_default_get_resizable_hints (GtkFileChooserEmbed *chooser_embed,
+-					      gboolean            *resize_horizontally,
+-					      gboolean            *resize_vertically)
++static gboolean
++gtk_file_chooser_default_get_resizable (GtkFileChooserEmbed *chooser_embed)
+ {
+   GtkFileChooserDefault *impl;
+ 
+-  g_return_if_fail (resize_horizontally != NULL);
+-  g_return_if_fail (resize_vertically != NULL);
+-
+   impl = GTK_FILE_CHOOSER_DEFAULT (chooser_embed);
+ 
+-  *resize_horizontally = TRUE;
+-  *resize_vertically = TRUE;
+-
+-  if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
+-      impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
+-    {
+-      if (! gtk_expander_get_expanded (GTK_EXPANDER (impl->save_expander)))
+-	{
+-	  *resize_horizontally = FALSE;
+-	  *resize_vertically = FALSE;
+-	}
+-    }
++  return (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
++	  impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
++	  gtk_expander_get_expanded (GTK_EXPANDER (impl->save_expander)));
+ }
+ 
+ struct switch_folder_closure {
+--- gtk+-2.10.12/gtk/gtkfilechooserdialog.c.orig	2007-05-02 18:26:58.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilechooserdialog.c	2007-05-08 17:21:44.000000000 +0200
+@@ -87,10 +87,6 @@ gtk_file_chooser_dialog_init (GtkFileCho
+ 								   GTK_TYPE_FILE_CHOOSER_DIALOG,
+ 								   GtkFileChooserDialogPrivate);
+   dialog->priv = priv;
+-  dialog->priv->default_width = -1;
+-  dialog->priv->default_height = -1;
+-  dialog->priv->resize_horizontally = TRUE;
+-  dialog->priv->resize_vertically = TRUE;
+   dialog->priv->response_requested = FALSE;
+ 
+   gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+@@ -151,25 +147,6 @@ file_chooser_widget_file_activated (GtkF
+ }
+ 
+ static void
+-file_chooser_widget_update_hints (GtkFileChooserDialog *dialog,
+-				  gint                  width)
+-{
+-  GtkFileChooserDialogPrivate *priv;
+-  GdkGeometry geometry;
+-
+-  priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
+-
+-  geometry.min_width = (!priv->resize_horizontally ? width : -1);
+-  geometry.min_height = -1;
+-  geometry.max_width = (priv->resize_horizontally?G_MAXSHORT:-1);
+-  geometry.max_height = (priv->resize_vertically?G_MAXSHORT:-1);
+-
+-  gtk_window_set_geometry_hints (GTK_WINDOW (dialog), NULL,
+-				 &geometry,
+- 				 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+-}
+-
+-static void
+ clamp_to_screen (GtkWidget *widget,
+ 		 gint      *width,
+ 		 gint      *height)
+@@ -193,131 +170,49 @@ clamp_to_screen (GtkWidget *widget,
+ }
+ 
+ static void
+-file_chooser_widget_default_realized_size_changed (GtkWidget            *widget,
+-						   GtkFileChooserDialog *dialog)
++file_chooser_widget_default_size_changed (GtkWidget            *widget,
++					  GtkFileChooserDialog *dialog)
+ {
+   GtkFileChooserDialogPrivate *priv;
+-  gint width;
+-  gint height;
++  gint width, height;
+   gint default_width, default_height;
+-  GtkRequisition req;
+-  gboolean resize_horizontally;
+-  gboolean resize_vertically;
+-  gboolean update_hints;
+-  gint dx = 0, dy = 0;
+-  gint cur_width, cur_height;
++  GtkRequisition req, widget_req;
++  gboolean resizable;
+ 
+   priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
+ 
++  /* Unset any previously set size */
++  gtk_widget_set_size_request (GTK_WIDGET (dialog), -1, -1);
++
+   /* Force a size request of everything before we start.  This will make sure
+    * that widget->requisition is meaningful. */
+   gtk_widget_size_request (GTK_WIDGET (dialog), &req);
+-  gtk_window_get_size (GTK_WINDOW (dialog), &cur_width, &cur_height);
+-  width = GTK_WIDGET (dialog)->requisition.width - priv->widget->requisition.width;
+-  height = GTK_WIDGET (dialog)->requisition.height - priv->widget->requisition.height;
++  gtk_widget_size_request (widget, &widget_req);
++
++  width = req.width - widget_req.width;
++  height = req.height - widget_req.height;
++
++  resizable = _gtk_file_chooser_embed_get_resizable (GTK_FILE_CHOOSER_EMBED (priv->widget));
+   _gtk_file_chooser_embed_get_default_size (GTK_FILE_CHOOSER_EMBED (priv->widget),
+ 					    &default_width, &default_height);
+ 
+-  /* Ideal target size modulo any resizing */
+-  width = default_width + width;
+-  height = default_height + height;
+-
+-  /* Now, we test for resizability */
+-  update_hints = FALSE;
+-  _gtk_file_chooser_embed_get_resizable_hints (GTK_FILE_CHOOSER_EMBED (priv->widget),
+-					       &resize_horizontally,
+-					       &resize_vertically);
+-  resize_vertically = (!! resize_vertically);     /* normalize */
+-  resize_horizontally = (!! resize_horizontally);
++  /* Ideal target size plus any extra size */
++  width = default_width + width + (2 * GTK_CONTAINER (dialog)->border_width);
++  height = default_height + height + (2 * GTK_CONTAINER (dialog)->border_width);
+ 
+-  if (resize_horizontally && priv->resize_horizontally)
+-    {
+-      dx = default_width - priv->default_width;
+-      priv->default_width = default_width;
+-    }
+-  else if (resize_horizontally && ! priv->resize_horizontally)
+-    {
+-      /* We restore to the ideal size + any change in default_size (which is not
+-       * expected).  It would be nicer to store the older size to restore to in
+-       * the future. */
+-      dx = default_width - priv->default_width;
+-      dx += width - cur_width;
+-      priv->default_width = default_width;
+-      update_hints = TRUE;
+-    }
+-  else
+-    {
+-      update_hints = TRUE;
+-    }
++  if (GTK_WIDGET_REALIZED (dialog))
++    clamp_to_screen (GTK_WIDGET (dialog), &width, &height);
+ 
+-  if (resize_vertically && priv->resize_vertically)
+-    {
+-      dy = default_height - priv->default_height;
+-      priv->default_height = default_height;
+-    }
+-  else if (resize_vertically && ! priv->resize_vertically)
++  if (resizable)
+     {
+-      dy = default_height - priv->default_height;
+-      dy += height - cur_height;
+-      priv->default_height = default_height;
+-      update_hints = TRUE;
++      gtk_window_set_resizable (GTK_WINDOW (dialog), resizable);
++      gtk_window_resize (GTK_WINDOW (dialog), width, height);
+     }
+   else
+     {
+-      update_hints = TRUE;
+-    }
+-
+-  priv->resize_horizontally = resize_horizontally;
+-  priv->resize_vertically = resize_vertically;
+-
+-  if (dx != 0 || dy != 0)
+-    {
+-      gint new_width = cur_width + dx;
+-      gint new_height = cur_height + dy;
+-
+-      clamp_to_screen (GTK_WIDGET (dialog), &new_width, &new_height);
+-      
+-      gtk_window_resize (GTK_WINDOW (dialog), new_width, new_height);
++      gtk_widget_set_size_request (GTK_WIDGET (dialog), width, -1);
++      gtk_window_set_resizable (GTK_WINDOW (dialog), resizable);
+     }
+-
+-  /* Only store the size if we can resize in that direction. */
+-  if (update_hints)
+-    file_chooser_widget_update_hints (dialog, width);
+-}
+-
+-static void
+-file_chooser_widget_default_unrealized_size_changed (GtkWidget            *widget,
+-						     GtkFileChooserDialog *dialog)
+-{
+-  GtkFileChooserDialogPrivate *priv;
+-  GtkRequisition req;
+-  gint width, height;
+-
+-  priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
+-  gtk_widget_size_request (GTK_WIDGET (dialog), &req);
+-
+-  _gtk_file_chooser_embed_get_resizable_hints (GTK_FILE_CHOOSER_EMBED (priv->widget),
+-					       &(priv->resize_horizontally),
+-					       &(priv->resize_vertically));
+-  _gtk_file_chooser_embed_get_default_size (GTK_FILE_CHOOSER_EMBED (priv->widget),
+-					    &(priv->default_width), &(priv->default_height));
+-  
+-  /* Determine how much space the rest of the dialog uses compared to priv->widget */
+-  width = priv->default_width + GTK_WIDGET (dialog)->requisition.width - priv->widget->requisition.width;
+-  height = priv->default_height + GTK_WIDGET (dialog)->requisition.height - priv->widget->requisition.height;
+-
+-  gtk_window_set_default_size (GTK_WINDOW (dialog), width, height);
+-  file_chooser_widget_update_hints (dialog, width);
+-}
+-
+-static void
+-file_chooser_widget_default_size_changed (GtkWidget            *widget,
+-					  GtkFileChooserDialog *dialog)
+-{
+-  if (GTK_WIDGET_REALIZED (dialog))
+-    file_chooser_widget_default_realized_size_changed (widget, dialog);
+-  else
+-    file_chooser_widget_default_unrealized_size_changed (widget, dialog);
+ }
+ 
+ static void
+@@ -375,6 +270,7 @@ gtk_file_chooser_dialog_constructor (GTy
+   else
+     priv->widget = g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET, NULL);
+ 
++  gtk_widget_show (priv->widget);
+   g_signal_connect (priv->widget, "file-activated",
+ 		    G_CALLBACK (file_chooser_widget_file_activated), object);
+   g_signal_connect (priv->widget, "default-size-changed",
+@@ -384,8 +280,6 @@ gtk_file_chooser_dialog_constructor (GTy
+ 
+   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (object)->vbox), priv->widget, TRUE, TRUE, 0);
+ 
+-  gtk_widget_show (priv->widget);
+-
+   _gtk_file_chooser_set_delegate (GTK_FILE_CHOOSER (object),
+ 				  GTK_FILE_CHOOSER (priv->widget));
+ 




More information about the arch-commits mailing list