Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 121027 Details for
Bug 180669
x11-libs/gtk+-2.10.12 file chooser resizing
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patchset as described. Use me after all
filechooserdialogbugfix.diff (text/plain), 19.59 KB, created by
Andrew Hurst
on 2007-06-03 12:19:32 UTC
(
hide
)
Description:
Patchset as described. Use me after all
Filename:
MIME Type:
Creator:
Andrew Hurst
Created:
2007-06-03 12:19:32 UTC
Size:
19.59 KB
patch
obsolete
>--- branches/gtk-2-10/gtk/gtkfilechooserdefault.c 2007/05/18 15:56:05 17866 >+++ branches/gtk-2-10/gtk/gtkfilechooserdefault.c 2007/05/18 16:51:17 17867 >@@ -272,6 +272,8 @@ > 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 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,7 +423,7 @@ > 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 +485,7 @@ > 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 +666,7 @@ > 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 +4999,7 @@ > } > impl->action = action; > update_appearance (impl); >+ settings_load (impl); > } > } > break; >@@ -5419,6 +5421,37 @@ > 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 +7219,35 @@ > 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; >+ 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 */ > >- default_width = font_size * NUM_CHARS; >- default_height = font_size * NUM_LINES; >+ font_size = pango_font_description_get_size (widget->style->font_desc); >+ font_size = PANGO_PIXELS (font_size) * resolution / 72.0; > >- if (impl->preview_widget_active && impl->preview_widget) >- { >- gtk_widget_size_request (impl->preview_box, &req); >- default_width += PREVIEW_HBOX_SPACING + req.width; >+ impl->default_width = font_size * NUM_CHARS; >+ impl->default_height = font_size * NUM_LINES; > } > >- if (impl->extra_widget) >- { >- gtk_widget_size_request (impl->extra_align, &req); >- default_height += GTK_BOX (widget)->spacing + req.height; >- } >- >- 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 +7256,37 @@ > 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 { >--- branches/gtk-2-10/gtk/gtkfilechooserdialog.c 2007/05/18 15:56:05 17866 >+++ branches/gtk-2-10/gtk/gtkfilechooserdialog.c 2007/05/18 16:51:17 17867 >@@ -87,10 +87,6 @@ > 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 @@ > } > > 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,57 @@ > } > > 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); > >- /* 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_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); >+ /* Unset any previously set size */ >+ gtk_widget_set_size_request (GTK_WIDGET (dialog), -1, -1); > >- 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 >+ if (GTK_WIDGET_DRAWABLE (widget)) > { >- update_hints = TRUE; >- } >+ /* 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_widget_size_request (widget, &widget_req); > >- if (resize_vertically && priv->resize_vertically) >- { >- dy = default_height - priv->default_height; >- priv->default_height = default_height; >- } >- else if (resize_vertically && ! priv->resize_vertically) >- { >- dy = default_height - priv->default_height; >- dy += height - cur_height; >- priv->default_height = default_height; >- update_hints = TRUE; >+ width = req.width - widget_req.width; >+ height = req.height - widget_req.height; > } > else > { >- update_hints = TRUE; >+ width = GTK_WIDGET (dialog)->allocation.width - widget->allocation.width; >+ height = GTK_WIDGET (dialog)->allocation.height - widget->allocation.height; > } > >- 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); >- } >- >- /* 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)); >+ 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), >- &(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; >+ &default_width, &default_height); > >- gtk_window_set_default_size (GTK_WINDOW (dialog), width, height); >- file_chooser_widget_update_hints (dialog, width); >-} >+ /* 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); > >-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); >+ clamp_to_screen (GTK_WIDGET (dialog), &width, &height); >+ >+ if (resizable) >+ { >+ gtk_window_set_resizable (GTK_WINDOW (dialog), resizable); >+ gtk_window_resize (GTK_WINDOW (dialog), width, height); >+ } > else >- file_chooser_widget_default_unrealized_size_changed (widget, dialog); >+ { >+ gtk_widget_set_size_request (GTK_WIDGET (dialog), width, -1); >+ gtk_window_set_resizable (GTK_WINDOW (dialog), resizable); >+ } > } > > static void >@@ -487,6 +390,7 @@ > if (!GTK_WIDGET_MAPPED (priv->widget)) > gtk_widget_map (priv->widget); > >+ file_chooser_widget_default_size_changed (priv->widget, dialog); > _gtk_file_chooser_embed_initial_focus (GTK_FILE_CHOOSER_EMBED (priv->widget)); > > GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->map (widget); >--- branches/gtk-2-10/gtk/gtkfilechooserembed.c 2007/05/18 15:56:05 17866 >+++ branches/gtk-2-10/gtk/gtkfilechooserembed.c 2007/05/18 16:51:17 17867 >@@ -28,9 +28,7 @@ > 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 @@ > _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 @@ > { > _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_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); > } >--- branches/gtk-2-10/gtk/gtkfilechooserembed.h 2007/05/18 15:56:05 17866 >+++ branches/gtk-2-10/gtk/gtkfilechooserembed.h 2007/05/18 16:51:17 17867 >@@ -43,9 +43,7 @@ > 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 @@ > 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); >--- branches/gtk-2-10/gtk/gtkfilechooserprivate.h 2007/05/18 15:56:05 17866 >+++ branches/gtk-2-10/gtk/gtkfilechooserprivate.h 2007/05/18 16:51:17 17867 >@@ -109,10 +109,6 @@ > 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 @@ > GSource *shortcuts_drag_outside_idle; > #endif > >+ gint default_width; >+ gint default_height; >+ > /* Flags */ > > guint local_only : 1;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 180669
: 121027 |
121038