[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