From 424de0873dda853a1071356d43772d0db975fbb9 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Mon, 23 Jun 2008 10:45:33 +0000 Subject: gtk: upgrade to 2.13.3 in bleeding git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4719 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- meta/conf/distro/poky-bleeding.conf | 2 +- .../gtk+/gtk+-2.13.2/cellrenderer-cairo.patch | 32 - .../gtk+/gtk+-2.13.2/combo-arrow-size.patch | 67 - meta/packages/gtk+/gtk+-2.13.2/entry-cairo.patch | 103 - .../gtk+/gtk+-2.13.2/filechooser-default.patch | 9521 -------------------- .../gtk+/gtk+-2.13.2/filechooser-props.patch | 57 - .../gtk+/gtk+-2.13.2/filechooser-sizefix.patch | 35 - .../gtk+/gtk+-2.13.2/filesystem-volumes.patch | 198 - .../gtk+/gtk+-2.13.2/gtklabel-resize-patch | 10 - .../gtk+/gtk+-2.13.2/hardcoded_libtool.patch | 29 - .../gtk+/gtk+-2.13.2/menu-deactivate.patch | 51 - meta/packages/gtk+/gtk+-2.13.2/no-demos.patch | 10 - meta/packages/gtk+/gtk+-2.13.2/pangoxft2.10.6.diff | 2456 ----- .../gtk+/gtk+-2.13.2/range-no-redraw.patch | 127 - meta/packages/gtk+/gtk+-2.13.2/run-iconcache.patch | 19 - meta/packages/gtk+/gtk+-2.13.2/toggle-font.diff | 100 - meta/packages/gtk+/gtk+-2.13.2/xsettings.patch | 16 - .../gtk+/gtk+-2.13.3/cellrenderer-cairo.patch | 32 + .../gtk+/gtk+-2.13.3/combo-arrow-size.patch | 67 + meta/packages/gtk+/gtk+-2.13.3/entry-cairo.patch | 103 + .../gtk+/gtk+-2.13.3/filechooser-default.patch | 9521 ++++++++++++++++++++ .../gtk+/gtk+-2.13.3/filechooser-props.patch | 57 + .../gtk+/gtk+-2.13.3/filechooser-sizefix.patch | 35 + .../gtk+/gtk+-2.13.3/filesystem-volumes.patch | 198 + .../gtk+/gtk+-2.13.3/gtklabel-resize-patch | 10 + .../gtk+/gtk+-2.13.3/hardcoded_libtool.patch | 29 + .../gtk+/gtk+-2.13.3/menu-deactivate.patch | 51 + meta/packages/gtk+/gtk+-2.13.3/no-demos.patch | 10 + meta/packages/gtk+/gtk+-2.13.3/pangoxft2.10.6.diff | 2456 +++++ .../gtk+/gtk+-2.13.3/range-no-redraw.patch | 127 + meta/packages/gtk+/gtk+-2.13.3/run-iconcache.patch | 19 + meta/packages/gtk+/gtk+-2.13.3/toggle-font.diff | 100 + meta/packages/gtk+/gtk+-2.13.3/xsettings.patch | 16 + meta/packages/gtk+/gtk+_2.13.2.bb | 47 - meta/packages/gtk+/gtk+_2.13.3.bb | 47 + 35 files changed, 12879 insertions(+), 12879 deletions(-) delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/cellrenderer-cairo.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/combo-arrow-size.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/entry-cairo.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/filechooser-default.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/filechooser-props.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/filechooser-sizefix.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/filesystem-volumes.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/gtklabel-resize-patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/hardcoded_libtool.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/menu-deactivate.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/no-demos.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/pangoxft2.10.6.diff delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/range-no-redraw.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/run-iconcache.patch delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/toggle-font.diff delete mode 100644 meta/packages/gtk+/gtk+-2.13.2/xsettings.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/cellrenderer-cairo.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/combo-arrow-size.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/entry-cairo.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/filechooser-default.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/filechooser-props.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/filechooser-sizefix.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/filesystem-volumes.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/gtklabel-resize-patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/hardcoded_libtool.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/menu-deactivate.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/no-demos.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/pangoxft2.10.6.diff create mode 100644 meta/packages/gtk+/gtk+-2.13.3/range-no-redraw.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/run-iconcache.patch create mode 100644 meta/packages/gtk+/gtk+-2.13.3/toggle-font.diff create mode 100644 meta/packages/gtk+/gtk+-2.13.3/xsettings.patch delete mode 100644 meta/packages/gtk+/gtk+_2.13.2.bb create mode 100644 meta/packages/gtk+/gtk+_2.13.3.bb diff --git a/meta/conf/distro/poky-bleeding.conf b/meta/conf/distro/poky-bleeding.conf index ac6fa452f0..cdd16ca2c4 100644 --- a/meta/conf/distro/poky-bleeding.conf +++ b/meta/conf/distro/poky-bleeding.conf @@ -2,7 +2,7 @@ PREFERRED_VERSION_glib-2.0 ?= "2.17.2" PREFERRED_VERSION_glib-2.0-native ?= "2.17.2" PREFERRED_VERSION_atk ?= "1.22.0" PREFERRED_VERSION_pango ?= "1.21.2" -PREFERRED_VERSION_gtk+ ?= "2.13.2" +PREFERRED_VERSION_gtk+ ?= "2.13.3" require conf/distro/include/poky-floating-revisions.inc require conf/distro/poky.conf diff --git a/meta/packages/gtk+/gtk+-2.13.2/cellrenderer-cairo.patch b/meta/packages/gtk+/gtk+-2.13.2/cellrenderer-cairo.patch deleted file mode 100644 index 4439e69fb6..0000000000 --- a/meta/packages/gtk+/gtk+-2.13.2/cellrenderer-cairo.patch +++ /dev/null @@ -1,32 +0,0 @@ -Index: gtk/gtkcellrenderer.c -=================================================================== -RCS file: /cvs/gnome/gtk+/gtk/gtkcellrenderer.c,v -retrieving revision 1.55 -diff -u -r1.55 gtkcellrenderer.c ---- gtk/gtkcellrenderer.c 14 May 2006 04:25:28 -0000 1.55 -+++ gtk/gtkcellrenderer.c 30 Jun 2006 10:57:43 -0000 -@@ -551,6 +551,7 @@ - - if (cell->cell_background_set && !selected) - { -+#ifdef USE_CAIRO_INTERNALLY - cairo_t *cr = gdk_cairo_create (window); - - gdk_cairo_rectangle (cr, background_area); -@@ -558,6 +559,16 @@ - cairo_fill (cr); - - cairo_destroy (cr); -+#else -+ GdkGC *gc; -+ -+ gc = gdk_gc_new (window); -+ gdk_gc_set_rgb_fg_color (gc, &priv->cell_background); -+ gdk_draw_rectangle (window, gc, TRUE, -+ background_area->x, background_area->y, -+ background_area->width, background_area->height); -+ g_object_unref (gc); -+#endif - } - - GTK_CELL_RENDERER_GET_CLASS (cell)->render (cell, diff --git a/meta/packages/gtk+/gtk+-2.13.2/combo-arrow-size.patch b/meta/packages/gtk+/gtk+-2.13.2/combo-arrow-size.patch deleted file mode 100644 index d44c454ce3..0000000000 --- a/meta/packages/gtk+/gtk+-2.13.2/combo-arrow-size.patch +++ /dev/null @@ -1,67 +0,0 @@ -Index: gtk/gtkcombobox.c -=================================================================== -RCS file: /cvs/gnome/gtk+/gtk/gtkcombobox.c,v -retrieving revision 1.185 -diff -u -p -r1.185 gtkcombobox.c ---- gtk/gtkcombobox.c 12 Oct 2006 13:48:07 -0000 1.185 -+++ gtk/gtkcombobox.c 1 Nov 2006 19:01:09 -0000 -@@ -756,6 +756,25 @@ gtk_combo_box_class_init (GtkComboBoxCla - FALSE, - GTK_PARAM_READABLE)); - -+ /** -+ * GtkComboBox:arrow-size: -+ * -+ * Sets the minimum size of the arrow in the combo box. Note -+ * that the arrow size is coupled to the font size, so in case -+ * a larger font is used, the arrow will be larger than set -+ * by arrow size. -+ * -+ * Since: 2.12 -+ */ -+ gtk_widget_class_install_style_property (widget_class, -+ g_param_spec_int ("arrow-size", -+ P_("Arrow Size"), -+ P_("The minimum size of the arrow in the combo box"), -+ 0, -+ G_MAXINT, -+ 15, -+ GTK_PARAM_READABLE)); -+ - g_type_class_add_private (object_class, sizeof (GtkComboBoxPrivate)); - } - -@@ -1897,7 +1916,12 @@ gtk_combo_box_size_request (GtkWidget - { - gint width, height; - gint focus_width, focus_pad; -+ gint font_size; -+ gint arrow_size; - GtkRequisition bin_req; -+ PangoContext *context; -+ PangoFontMetrics *metrics; -+ PangoFontDescription *font_desc; - - GtkComboBox *combo_box = GTK_COMBO_BOX (widget); - -@@ -1910,7 +1934,20 @@ gtk_combo_box_size_request (GtkWidget - gtk_widget_style_get (GTK_WIDGET (widget), - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, -+ "arrow-size", &arrow_size, - NULL); -+ -+ font_desc = GTK_BIN (widget)->child->style->font_desc; -+ context = gtk_widget_get_pango_context (widget); -+ metrics = pango_context_get_metrics (context, font_desc, -+ pango_context_get_language (context)); -+ font_size = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + -+ pango_font_metrics_get_descent (metrics)); -+ pango_font_metrics_unref (metrics); -+ -+ arrow_size = MAX (arrow_size, font_size); -+ -+ gtk_widget_set_size_request (combo_box->priv->arrow, arrow_size, arrow_size); - - if (!combo_box->priv->tree_view) - { diff --git a/meta/packages/gtk+/gtk+-2.13.2/entry-cairo.patch b/meta/packages/gtk+/gtk+-2.13.2/entry-cairo.patch deleted file mode 100644 index 3313e7f132..0000000000 --- a/meta/packages/gtk+/gtk+-2.13.2/entry-cairo.patch +++ /dev/null @@ -1,103 +0,0 @@ -Index: gtk/gtkentry.c -=================================================================== -RCS file: /cvs/gnome/gtk+/gtk/gtkentry.c,v -retrieving revision 1.317 -diff -u -r1.317 gtkentry.c ---- gtk/gtkentry.c 29 Jun 2006 09:18:05 -0000 1.317 -+++ gtk/gtkentry.c 2 Jul 2006 14:14:24 -0000 -@@ -3337,7 +3337,9 @@ - if (GTK_WIDGET_DRAWABLE (entry)) - { - PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); -+#ifdef USE_CAIRO_INTERNALLY - cairo_t *cr; -+#endif - gint x, y; - gint start_pos, end_pos; - -@@ -3345,23 +3347,35 @@ - - get_layout_position (entry, &x, &y); - -+#ifdef USE_CAIRO_INTERNALLY - cr = gdk_cairo_create (entry->text_area); - - cairo_move_to (cr, x, y); - gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]); - pango_cairo_show_layout (cr, layout); -+#else -+ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state], -+ x, y, -+ layout); -+#endif - - if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos)) - { - gint *ranges; - gint n_ranges, i; - PangoRectangle logical_rect; -- GdkColor *selection_color, *text_color; - GtkBorder inner_border; -+#ifdef USE_CAIRO_INTERNALLY -+ GdkColor *selection_color, *text_color; -+#else -+ GdkGC *selection_gc, *text_gc; -+ GdkRegion *clip_region; -+#endif - - pango_layout_get_pixel_extents (layout, NULL, &logical_rect); - gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); - -+#ifdef USE_CAIRO_INTERNALLY - if (GTK_WIDGET_HAS_FOCUS (entry)) - { - selection_color = &widget->style->base [GTK_STATE_SELECTED]; -@@ -3390,11 +3404,46 @@ - cairo_move_to (cr, x, y); - gdk_cairo_set_source_color (cr, text_color); - pango_cairo_show_layout (cr, layout); -- -+#else -+ if (GTK_WIDGET_HAS_FOCUS (entry)) -+ { -+ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED]; -+ text_gc = widget->style->text_gc [GTK_STATE_SELECTED]; -+ } -+ else -+ { -+ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE]; -+ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE]; -+ } -+ -+ clip_region = gdk_region_new (); -+ for (i = 0; i < n_ranges; ++i) -+ { -+ GdkRectangle rect; -+ -+ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i]; -+ rect.y = y; -+ rect.width = ranges[2 * i + 1]; -+ rect.height = logical_rect.height; -+ -+ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE, -+ rect.x, rect.y, rect.width, rect.height); -+ -+ gdk_region_union_with_rect (clip_region, &rect); -+ } -+ -+ gdk_gc_set_clip_region (text_gc, clip_region); -+ gdk_draw_layout (entry->text_area, text_gc, -+ x, y, -+ layout); -+ gdk_gc_set_clip_region (text_gc, NULL); -+ gdk_region_destroy (clip_region); -+#endif - g_free (ranges); - } -- -+#ifdef USE_CAIRO_INTERNALLY - cairo_destroy (cr); -+#endif - } - } - diff --git a/meta/packages/gtk+/gtk+-2.13.2/filechooser-default.patch b/meta/packages/gtk+/gtk+-2.13.2/filechooser-default.patch deleted file mode 100644 index 146316c9c1..0000000000 --- a/meta/packages/gtk+/gtk+-2.13.2/filechooser-default.patch +++ /dev/null @@ -1,9521 +0,0 @@ -Index: gtk+-2.12.5/gtk/gtkfilechooserdefault.c -================ =================================================== ---- gtk+-2.12.5/gtk/gtkfilechooserdefault.c (revision 19337) -+++ gtk+-2.12.5/gtk/gtkfilechooserdefault.c (working copy) -@@ -27,12 +27,12 @@ - #include "gtkcelllayout.h" - #include "gtkcellrendererpixbuf.h" - #include "gtkcellrenderertext.h" -+#include "gtkcellrenderertext.h" - #include "gtkcheckmenuitem.h" - #include "gtkclipboard.h" - #include "gtkcombobox.h" - #include "gtkentry.h" - #include "gtkeventbox.h" --#include "gtkexpander.h" - #include "gtkfilechooserprivate.h" - #include "gtkfilechooserdefault.h" - #include "gtkfilechooserembed.h" -@@ -53,17 +53,13 @@ - #include "gtkmarshalers.h" - #include "gtkmenuitem.h" - #include "gtkmessagedialog.h" --#include "gtkpathbar.h" - #include "gtkprivate.h" - #include "gtkradiobutton.h" --#include "gtkrecentfilter.h" --#include "gtkrecentmanager.h" - #include "gtkscrolledwindow.h" - #include "gtkseparatormenuitem.h" - #include "gtksizegroup.h" - #include "gtkstock.h" - #include "gtktable.h" --#include "gtktooltip.h" - #include "gtktreednd.h" - #include "gtktreeprivate.h" - #include "gtktreeselection.h" -@@ -81,8 +77,6 @@ - #include - #include - #include --#include --#include - - - #ifdef HAVE_UNISTD_H -@@ -92,6 +86,8 @@ - #include - #endif - -+#define DEFAULT_SPACING 5 -+ - /* Profiling stuff */ - #undef PROFILE_FILE_CHOOSER - #ifdef PROFILE_FILE_CHOOSER -@@ -150,6 +145,7 @@ - #define GTK_FILE_CHOOSER_DEFAULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FILE_CHOOSER_DEFAULT, GtkFileChooserDefaultClass)) - - #define MAX_LOADING_TIME 500 -+#define LONG_CLICK_LENGTH 500 - - struct _GtkFileChooserDefaultClass - { -@@ -163,38 +159,12 @@ - UP_FOLDER, - DOWN_FOLDER, - HOME_FOLDER, -- DESKTOP_FOLDER, -- QUICK_BOOKMARK, -- LOCATION_TOGGLE_POPUP, - SHOW_HIDDEN, -- SEARCH_SHORTCUT, -- RECENT_SHORTCUT, -- - LAST_SIGNAL - }; - - static guint signals[LAST_SIGNAL] = { 0 }; - --/* Column numbers for the shortcuts tree. Keep these in sync with shortcuts_model_create() */ --enum { -- SHORTCUTS_COL_PIXBUF, -- SHORTCUTS_COL_NAME, -- SHORTCUTS_COL_DATA, -- SHORTCUTS_COL_TYPE, -- SHORTCUTS_COL_REMOVABLE, -- SHORTCUTS_COL_PIXBUF_VISIBLE, -- SHORTCUTS_COL_HANDLE, -- SHORTCUTS_COL_NUM_COLUMNS --}; -- --typedef enum { -- SHORTCUT_TYPE_PATH, -- SHORTCUT_TYPE_VOLUME, -- SHORTCUT_TYPE_SEPARATOR, -- SHORTCUT_TYPE_SEARCH, -- SHORTCUT_TYPE_RECENT --} ShortcutType; -- - /* Column numbers for the file list */ - enum { - FILE_LIST_COL_NAME, -@@ -203,100 +173,10 @@ - FILE_LIST_COL_NUM_COLUMNS - }; - --/* Column numbers for the search model. -- * Keep this in sync with search_setup_model() -- */ --enum { -- SEARCH_MODEL_COL_PATH, -- SEARCH_MODEL_COL_DISPLAY_NAME, -- SEARCH_MODEL_COL_COLLATION_KEY, -- SEARCH_MODEL_COL_STAT, -- SEARCH_MODEL_COL_HANDLE, -- SEARCH_MODEL_COL_PIXBUF, -- SEARCH_MODEL_COL_MIME_TYPE, -- SEARCH_MODEL_COL_IS_FOLDER, -- SEARCH_MODEL_COL_NUM_COLUMNS --}; -- --enum { -- RECENT_MODEL_COL_PATH, -- RECENT_MODEL_COL_DISPLAY_NAME, -- RECENT_MODEL_COL_INFO, -- RECENT_MODEL_COL_IS_FOLDER, -- RECENT_MODEL_COL_HANDLE, -- RECENT_MODEL_COL_NUM_COLUMNS --}; -- --/* Identifiers for target types */ --enum { -- GTK_TREE_MODEL_ROW, -- TEXT_URI_LIST --}; -- --/* Target types for dragging from the shortcuts list */ --static const GtkTargetEntry shortcuts_source_targets[] = { -- { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW } --}; -- --static const int num_shortcuts_source_targets = G_N_ELEMENTS (shortcuts_source_targets); -- --/* Target types for dropping into the shortcuts list */ --static const GtkTargetEntry shortcuts_dest_targets[] = { -- { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW }, -- { "text/uri-list", 0, TEXT_URI_LIST } --}; -- --static const int num_shortcuts_dest_targets = G_N_ELEMENTS (shortcuts_dest_targets); -- --/* Target types for DnD from the file list */ --static const GtkTargetEntry file_list_source_targets[] = { -- { "text/uri-list", 0, TEXT_URI_LIST } --}; -- --static const int num_file_list_source_targets = G_N_ELEMENTS (file_list_source_targets); -- --/* Target types for dropping into the file list */ --static const GtkTargetEntry file_list_dest_targets[] = { -- { "text/uri-list", 0, TEXT_URI_LIST } --}; -- --static const int num_file_list_dest_targets = G_N_ELEMENTS (file_list_dest_targets); -- --/* Target types for dragging from the recent files list */ --static const GtkTargetEntry recent_list_source_targets[] = { -- { "text/uri-list", 0, TEXT_URI_LIST } --}; -- --static const int num_recent_list_source_targets = G_N_ELEMENTS (recent_list_source_targets); -- --static gboolean --search_is_possible (GtkFileChooserDefault *impl) --{ -- if (impl->search_engine == NULL) -- impl->search_engine = _gtk_search_engine_new (); -- -- return impl->search_engine != NULL; --} -- --/* Interesting places in the shortcuts bar */ --typedef enum { -- SHORTCUTS_SEARCH, -- SHORTCUTS_RECENT, -- SHORTCUTS_RECENT_SEPARATOR, -- SHORTCUTS_HOME, -- SHORTCUTS_DESKTOP, -- SHORTCUTS_VOLUMES, -- SHORTCUTS_SHORTCUTS, -- SHORTCUTS_BOOKMARKS_SEPARATOR, -- SHORTCUTS_BOOKMARKS, -- SHORTCUTS_CURRENT_FOLDER_SEPARATOR, -- SHORTCUTS_CURRENT_FOLDER --} ShortcutsIndex; -- - /* Icon size for if we can't get it from the theme */ --#define FALLBACK_ICON_SIZE 16 -+#define FALLBACK_ICON_SIZE 24 - --#define PREVIEW_HBOX_SPACING 12 -+#define LIST_HBOX_SPACING DEFAULT_SPACING - #define NUM_LINES 45 - #define NUM_CHARS 60 - -@@ -369,52 +248,17 @@ - static gboolean gtk_file_chooser_default_should_respond (GtkFileChooserEmbed *chooser_embed); - static void gtk_file_chooser_default_initial_focus (GtkFileChooserEmbed *chooser_embed); - --static void location_popup_handler (GtkFileChooserDefault *impl, -- const gchar *path); --static void location_popup_on_paste_handler (GtkFileChooserDefault *impl); --static void location_toggle_popup_handler (GtkFileChooserDefault *impl); --static void up_folder_handler (GtkFileChooserDefault *impl); --static void down_folder_handler (GtkFileChooserDefault *impl); --static void home_folder_handler (GtkFileChooserDefault *impl); --static void desktop_folder_handler (GtkFileChooserDefault *impl); --static void quick_bookmark_handler (GtkFileChooserDefault *impl, -- gint bookmark_index); --static void show_hidden_handler (GtkFileChooserDefault *impl); --static void search_shortcut_handler (GtkFileChooserDefault *impl); --static void recent_shortcut_handler (GtkFileChooserDefault *impl); --static void update_appearance (GtkFileChooserDefault *impl); -+static void up_folder_handler (GtkFileChooserDefault *impl); -+static void down_folder_handler (GtkFileChooserDefault *impl); -+static void home_folder_handler (GtkFileChooserDefault *impl); -+static void show_hidden_handler (GtkFileChooserDefault *impl); -+static void update_appearance (GtkFileChooserDefault *impl); - --static void set_current_filter (GtkFileChooserDefault *impl, -- GtkFileFilter *filter); --static void check_preview_change (GtkFileChooserDefault *impl); -- - static void filter_combo_changed (GtkComboBox *combo_box, - GtkFileChooserDefault *impl); --static void shortcuts_row_activated_cb (GtkTreeView *tree_view, -- GtkTreePath *path, -- GtkTreeViewColumn *column, -- GtkFileChooserDefault *impl); - --static gboolean shortcuts_key_press_event_cb (GtkWidget *widget, -- GdkEventKey *event, -- GtkFileChooserDefault *impl); -- --static gboolean shortcuts_select_func (GtkTreeSelection *selection, -- GtkTreeModel *model, -- GtkTreePath *path, -- gboolean path_currently_selected, -- gpointer data); --static gboolean shortcuts_get_selected (GtkFileChooserDefault *impl, -- GtkTreeIter *iter); --static void shortcuts_activate_iter (GtkFileChooserDefault *impl, -- GtkTreeIter *iter); --static int shortcuts_get_index (GtkFileChooserDefault *impl, -- ShortcutsIndex where); --static int shortcut_find_position (GtkFileChooserDefault *impl, -- const GtkFilePath *path); -- --static void bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl); -- -+static void set_current_filter (GtkFileChooserDefault *impl, -+ GtkFileFilter *filter); - static gboolean list_select_func (GtkTreeSelection *selection, - GtkTreeModel *model, - GtkTreePath *path, -@@ -433,19 +277,6 @@ - GtkTreeIter *iter, - gpointer user_data); - --static void path_bar_clicked (GtkPathBar *path_bar, -- GtkFilePath *file_path, -- GtkFilePath *child_path, -- gboolean child_is_hidden, -- GtkFileChooserDefault *impl); -- --static void add_bookmark_button_clicked_cb (GtkButton *button, -- GtkFileChooserDefault *impl); --static void remove_bookmark_button_clicked_cb (GtkButton *button, -- GtkFileChooserDefault *impl); --static void save_folder_combo_changed_cb (GtkComboBox *combo, -- GtkFileChooserDefault *impl); -- - static void list_icon_data_func (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *tree_model, -@@ -477,115 +308,8 @@ - - 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); - --static void search_stop_searching (GtkFileChooserDefault *impl, -- gboolean remove_query); --static void search_clear_model (GtkFileChooserDefault *impl, -- gboolean remove_from_treeview); --static gboolean search_should_respond (GtkFileChooserDefault *impl); --static void search_switch_to_browse_mode (GtkFileChooserDefault *impl); --static GSList *search_get_selected_paths (GtkFileChooserDefault *impl); --static void search_entry_activate_cb (GtkEntry *entry, -- gpointer data); --static void settings_load (GtkFileChooserDefault *impl); --static void search_get_valid_child_iter (GtkFileChooserDefault *impl, -- GtkTreeIter *child_iter, -- GtkTreeIter *iter); -- --static void recent_manager_update (GtkFileChooserDefault *impl); --static void recent_stop_loading (GtkFileChooserDefault *impl); --static void recent_clear_model (GtkFileChooserDefault *impl, -- gboolean remove_from_treeview); --static gboolean recent_should_respond (GtkFileChooserDefault *impl); --static void recent_switch_to_browse_mode (GtkFileChooserDefault *impl); --static GSList * recent_get_selected_paths (GtkFileChooserDefault *impl); --static void recent_get_valid_child_iter (GtkFileChooserDefault *impl, -- GtkTreeIter *child_iter, -- GtkTreeIter *iter); -- -- -- -- --/* Drag and drop interface declarations */ -- --typedef struct { -- GtkTreeModelFilter parent; -- -- GtkFileChooserDefault *impl; --} ShortcutsPaneModelFilter; -- --typedef struct { -- GtkTreeModelFilterClass parent_class; --} ShortcutsPaneModelFilterClass; -- --#define SHORTCUTS_PANE_MODEL_FILTER_TYPE (_shortcuts_pane_model_filter_get_type ()) --#define SHORTCUTS_PANE_MODEL_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHORTCUTS_PANE_MODEL_FILTER_TYPE, ShortcutsPaneModelFilter)) -- --static void shortcuts_pane_model_filter_drag_source_iface_init (GtkTreeDragSourceIface *iface); -- --G_DEFINE_TYPE_WITH_CODE (ShortcutsPaneModelFilter, -- _shortcuts_pane_model_filter, -- GTK_TYPE_TREE_MODEL_FILTER, -- G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE, -- shortcuts_pane_model_filter_drag_source_iface_init)) -- --static GtkTreeModel *shortcuts_pane_model_filter_new (GtkFileChooserDefault *impl, -- GtkTreeModel *child_model, -- GtkTreePath *root); -- -- --typedef struct { -- GtkTreeModelSort parent; -- -- GtkFileChooserDefault *impl; --} RecentModelSort; -- --typedef struct { -- GtkTreeModelSortClass parent_class; --} RecentModelSortClass; -- --#define RECENT_MODEL_SORT_TYPE (_recent_model_sort_get_type ()) --#define RECENT_MODEL_SORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RECENT_MODEL_SORT_TYPE, RecentModelSort)) -- --static void recent_model_sort_drag_source_iface_init (GtkTreeDragSourceIface *iface); -- --G_DEFINE_TYPE_WITH_CODE (RecentModelSort, -- _recent_model_sort, -- GTK_TYPE_TREE_MODEL_SORT, -- G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE, -- recent_model_sort_drag_source_iface_init)); -- --static GtkTreeModel *recent_model_sort_new (GtkFileChooserDefault *impl, -- GtkTreeModel *child_model); -- -- --typedef struct { -- GtkTreeModelSort parent; -- -- GtkFileChooserDefault *impl; --} SearchModelSort; -- --typedef struct { -- GtkTreeModelSortClass parent_class; --} SearchModelSortClass; -- --#define SEARCH_MODEL_SORT_TYPE (_search_model_sort_get_type ()) --#define SEARCH_MODEL_SORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEARCH_MODEL_SORT_TYPE, SearchModelSort)) -- --static void search_model_sort_drag_source_iface_init (GtkTreeDragSourceIface *iface); -- --G_DEFINE_TYPE_WITH_CODE (SearchModelSort, -- _search_model_sort, -- GTK_TYPE_TREE_MODEL_SORT, -- G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE, -- search_model_sort_drag_source_iface_init)); -- --static GtkTreeModel *search_model_sort_new (GtkFileChooserDefault *impl, -- GtkTreeModel *child_model); -- -- -- - G_DEFINE_TYPE_WITH_CODE (GtkFileChooserDefault, _gtk_file_chooser_default, GTK_TYPE_VBOX, - G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER, - gtk_file_chooser_default_iface_init) -@@ -595,13 +319,9 @@ - static void - _gtk_file_chooser_default_class_init (GtkFileChooserDefaultClass *class) - { -- static const guint quick_bookmark_keyvals[10] = { -- GDK_1, GDK_2, GDK_3, GDK_4, GDK_5, GDK_6, GDK_7, GDK_8, GDK_9, GDK_0 -- }; - GObjectClass *gobject_class = G_OBJECT_CLASS (class); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); - GtkBindingSet *binding_set; -- int i; - - gobject_class->finalize = gtk_file_chooser_default_finalize; - gobject_class->constructor = gtk_file_chooser_default_constructor; -@@ -621,7 +341,7 @@ - _gtk_binding_signal_new (I_("location-popup"), - G_OBJECT_CLASS_TYPE (class), - G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (location_popup_handler), -+ NULL, - NULL, NULL, - _gtk_marshal_VOID__STRING, - G_TYPE_NONE, 1, G_TYPE_STRING); -@@ -629,18 +349,10 @@ - _gtk_binding_signal_new ("location-popup-on-paste", - G_OBJECT_CLASS_TYPE (class), - G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (location_popup_on_paste_handler), -+ NULL, - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); -- signals[LOCATION_TOGGLE_POPUP] = -- _gtk_binding_signal_new (I_("location-toggle-popup"), -- G_OBJECT_CLASS_TYPE (class), -- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (location_toggle_popup_handler), -- NULL, NULL, -- _gtk_marshal_VOID__VOID, -- G_TYPE_NONE, 0); - signals[UP_FOLDER] = - _gtk_binding_signal_new (I_("up-folder"), - G_OBJECT_CLASS_TYPE (class), -@@ -665,22 +377,6 @@ - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); -- signals[DESKTOP_FOLDER] = -- _gtk_binding_signal_new (I_("desktop-folder"), -- G_OBJECT_CLASS_TYPE (class), -- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (desktop_folder_handler), -- NULL, NULL, -- _gtk_marshal_VOID__VOID, -- G_TYPE_NONE, 0); -- signals[QUICK_BOOKMARK] = -- _gtk_binding_signal_new (I_("quick-bookmark"), -- G_OBJECT_CLASS_TYPE (class), -- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (quick_bookmark_handler), -- NULL, NULL, -- _gtk_marshal_VOID__INT, -- G_TYPE_NONE, 1, G_TYPE_INT); - signals[SHOW_HIDDEN] = - _gtk_binding_signal_new ("show-hidden", - G_OBJECT_CLASS_TYPE (class), -@@ -689,22 +385,6 @@ - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); -- signals[SEARCH_SHORTCUT] = -- _gtk_binding_signal_new ("search-shortcut", -- G_OBJECT_CLASS_TYPE (class), -- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (search_shortcut_handler), -- NULL, NULL, -- _gtk_marshal_VOID__VOID, -- G_TYPE_NONE, 0); -- signals[RECENT_SHORTCUT] = -- _gtk_binding_signal_new ("recent-shortcut", -- G_OBJECT_CLASS_TYPE (class), -- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, -- G_CALLBACK (recent_shortcut_handler), -- NULL, NULL, -- _gtk_marshal_VOID__VOID, -- G_TYPE_NONE, 0); - - binding_set = gtk_binding_set_by_class (class); - -@@ -764,29 +444,11 @@ - "home-folder", - 0); - gtk_binding_entry_add_signal (binding_set, -- GDK_d, GDK_MOD1_MASK, -- "desktop-folder", -- 0); -- gtk_binding_entry_add_signal (binding_set, - GDK_h, GDK_CONTROL_MASK, - "show-hidden", - 0); -- gtk_binding_entry_add_signal (binding_set, -- GDK_s, GDK_MOD1_MASK, -- "search-shortcut", -- 0); -- gtk_binding_entry_add_signal (binding_set, -- GDK_r, GDK_MOD1_MASK, -- "recent-shortcut", -- 0); - -- for (i = 0; i < 10; i++) -- gtk_binding_entry_add_signal (binding_set, -- quick_bookmark_keyvals[i], GDK_MOD1_MASK, -- "quick-bookmark", -- 1, G_TYPE_INT, i); -- - _gtk_file_chooser_install_properties (gobject_class); - } - - static void -@@ -797,7 +465,6 @@ - iface->select_all = gtk_file_chooser_default_select_all; - iface->unselect_all = gtk_file_chooser_default_unselect_all; - iface->get_paths = gtk_file_chooser_default_get_paths; -- iface->get_preview_path = gtk_file_chooser_default_get_preview_path; - iface->get_file_system = gtk_file_chooser_default_get_file_system; - iface->set_current_folder = gtk_file_chooser_default_set_current_folder; - iface->get_current_folder = gtk_file_chooser_default_get_current_folder; -@@ -805,9 +472,12 @@ - iface->add_filter = gtk_file_chooser_default_add_filter; - iface->remove_filter = gtk_file_chooser_default_remove_filter; - iface->list_filters = gtk_file_chooser_default_list_filters; -+ -+ /* these are only stubs */ -+ iface->get_preview_path = gtk_file_chooser_default_get_preview_path; - iface->add_shortcut_folder = gtk_file_chooser_default_add_shortcut_folder; - iface->remove_shortcut_folder = gtk_file_chooser_default_remove_shortcut_folder; -- iface->list_shortcut_folders = gtk_file_chooser_default_list_shortcut_folders; -+ - } - - static void -@@ -827,87 +497,29 @@ - access ("MARK: *** CREATE FILE CHOOSER", F_OK); - #endif - impl->local_only = TRUE; -- impl->preview_widget_active = TRUE; -- impl->use_preview_label = TRUE; - impl->select_multiple = FALSE; - impl->show_hidden = FALSE; -+ impl->show_create_folder = TRUE; - impl->icon_size = FALLBACK_ICON_SIZE; - impl->load_state = LOAD_EMPTY; - impl->reload_state = RELOAD_EMPTY; - impl->pending_select_paths = NULL; -- impl->location_mode = LOCATION_MODE_PATH_BAR; -- impl->operation_mode = OPERATION_MODE_BROWSE; -+ impl->location_mode = LOCATION_MODE_FILENAME_ENTRY; -+ impl->path_history = NULL; - -- gtk_box_set_spacing (GTK_BOX (impl), 12); -+ gtk_box_set_spacing (GTK_BOX (impl), DEFAULT_SPACING); - - impl->tooltips = gtk_tooltips_new (); - g_object_ref_sink (impl->tooltips); - -+ if (!impl->root_folder) -+ impl->root_folder = g_strdup ("/"); -+ - profile_end ("end", NULL); - } - --/* Frees the data columns for the specified iter in the shortcuts model*/ --static void --shortcuts_free_row_data (GtkFileChooserDefault *impl, -- GtkTreeIter *iter) --{ -- gpointer col_data; -- ShortcutType shortcut_type; -- GtkFileSystemHandle *handle; - -- gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), iter, -- SHORTCUTS_COL_DATA, &col_data, -- SHORTCUTS_COL_TYPE, &shortcut_type, -- SHORTCUTS_COL_HANDLE, &handle, -- -1); -- -- if (handle) -- gtk_file_system_cancel_operation (handle); -- -- if (!(shortcut_type == SHORTCUT_TYPE_PATH || -- shortcut_type == SHORTCUT_TYPE_VOLUME) || -- !col_data) -- return; -- -- if (shortcut_type == SHORTCUT_TYPE_VOLUME) -- { -- GtkFileSystemVolume *volume; -- -- volume = col_data; -- gtk_file_system_volume_free (impl->file_system, volume); -- } -- else -- { -- GtkFilePath *path; -- -- g_assert (shortcut_type == SHORTCUT_TYPE_PATH); -- -- path = col_data; -- gtk_file_path_free (path); -- } --} -- --/* Frees all the data columns in the shortcuts model */ - static void --shortcuts_free (GtkFileChooserDefault *impl) --{ -- GtkTreeIter iter; -- -- if (!impl->shortcuts_model) -- return; -- -- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter)) -- do -- { -- shortcuts_free_row_data (impl, &iter); -- } -- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter)); -- -- g_object_unref (impl->shortcuts_model); -- impl->shortcuts_model = NULL; --} -- --static void - pending_select_paths_free (GtkFileChooserDefault *impl) - { - GSList *l; -@@ -964,19 +576,28 @@ - } - - static void --gtk_file_chooser_default_finalize (GObject *object) -+path_history_free (GtkFileChooserDefault *impl) - { -- GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object); - GSList *l; - -- if (impl->shortcuts_pane_filter_model) -- g_object_unref (impl->shortcuts_pane_filter_model); -+ for (l = impl->path_history; l; l = l->next) -+ { -+ GtkFilePath *path; - -- if (impl->shortcuts_combo_filter_model) -- g_object_unref (impl->shortcuts_combo_filter_model); -+ path = l->data; -+ gtk_file_path_free (path); -+ } - -- shortcuts_free (impl); -+ g_slist_free (impl->path_history); -+ impl->path_history = NULL; -+} - -+static void -+gtk_file_chooser_default_finalize (GObject *object) -+{ -+ GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object); -+ GSList *l; -+ - g_object_unref (impl->file_system); - - g_free (impl->browse_files_last_selected_name); -@@ -999,8 +620,7 @@ - if (impl->current_folder) - gtk_file_path_free (impl->current_folder); - -- if (impl->preview_path) -- gtk_file_path_free (impl->preview_path); -+ path_history_free (impl); - - load_remove_timer (impl); - -@@ -1011,15 +631,18 @@ - if (impl->sort_model) - g_object_unref (impl->sort_model); - -- search_clear_model (impl, FALSE); -- recent_clear_model (impl, FALSE); -+ if (impl->list_press_path) -+ { -+ gtk_tree_path_free (impl->list_press_path); -+ impl->list_press_path = NULL; -+ } - -- g_free (impl->preview_display_name); -- - g_free (impl->edited_new_text); - - g_object_unref (impl->tooltips); - -+ g_free (impl->root_folder); -+ - G_OBJECT_CLASS (_gtk_file_chooser_default_parent_class)->finalize (object); - } - -@@ -1104,28 +727,6 @@ - path, error); - } - --/* Shows an error dialog about not being able to add a bookmark */ --static void --error_adding_bookmark_dialog (GtkFileChooserDefault *impl, -- const GtkFilePath *path, -- GError *error) --{ -- error_dialog (impl, -- _("Could not add a bookmark"), -- path, error); --} -- --/* Shows an error dialog about not being able to remove a bookmark */ --static void --error_removing_bookmark_dialog (GtkFileChooserDefault *impl, -- const GtkFilePath *path, -- GError *error) --{ -- error_dialog (impl, -- _("Could not remove bookmark"), -- path, error); --} -- - /* Shows an error dialog about not being able to create a folder */ - static void - error_creating_folder_dialog (GtkFileChooserDefault *impl, -@@ -1146,9 +747,9 @@ - GError *error) - { - error_dialog (impl, -- _("The folder could not be created, as a file with the same " -- "name already exists. Try using a different name for the " -- "folder, or rename the file first."), -+ _("The folder could not be created, as a file with the same name " -+ "already exists. Try using a different name for the folder, " -+ "or rename the file first."), - path, error); - } - -@@ -1175,514 +776,108 @@ - - /* Changes folders, displaying an error dialog if this fails */ - static gboolean --change_folder_and_display_error (GtkFileChooserDefault *impl, -- const GtkFilePath *path, -- gboolean clear_entry) -+change_folder (GtkFileChooserDefault *impl, const GtkFilePath *path, -+ gboolean errormsg) - { - GError *error; - gboolean result; - GtkFilePath *path_copy; -+ gchar * file_name; - - g_return_val_if_fail (path != NULL, FALSE); - -- profile_start ("start", (char *) path); -- -- /* We copy the path because of this case: -- * -- * list_row_activated() -- * fetches path from model; path belongs to the model (*) -- * calls change_folder_and_display_error() -- * calls _gtk_file_chooser_set_current_folder_path() -- * changing folders fails, sets model to NULL, thus freeing the path in (*) -- */ -- - path_copy = gtk_file_path_copy (path); -+ file_name = gtk_file_system_path_to_filename (impl->file_system, path_copy); - -- error = NULL; -- result = gtk_file_chooser_default_update_current_folder (GTK_FILE_CHOOSER (impl), path_copy, TRUE, clear_entry, &error); -+ if (!file_name) -+ { -+ gtk_file_path_free (path_copy); -+ return 0; -+ } - -- if (!result) -- error_changing_folder_dialog (impl, path_copy, error); -+ if (impl->root_folder && file_name[0] == '/' && file_name[1] == 0) -+ { -+ /* If changing to / and we have root_folder, change into it instead */ -+ gtk_file_path_free (path_copy); -+ path_copy = gtk_file_system_filename_to_path (impl->file_system, -+ impl->root_folder); - -- gtk_file_path_free (path_copy); -+ gtk_widget_set_sensitive (impl->up_button, FALSE); -+ } -+ else if (impl->root_folder && -+ strcmp (file_name, impl->root_folder) && -+ !strncmp (file_name, impl->root_folder, strlen (file_name))) -+ { -+ /* refuse to change below the root */ -+ gtk_file_path_free (path_copy); -+ g_free (file_name); -+ return 0; -+ } -+ else if (!strcmp (file_name, impl->root_folder)) -+ { -+ gtk_widget_set_sensitive (impl->up_button, FALSE); -+ } -+ else if (impl->current_folder && !strcmp (file_name, "/media")) -+ { -+ /* Asked to changed into /media -- if we are already in a media -+ * child folder, we refuse, but if we are in the root, we permit this -+ */ -+ gchar *name = -+ gtk_file_system_path_to_filename (impl->file_system, -+ impl->current_folder); - -- profile_end ("end", (char *) path); -+ if (name && !strncmp (name, "/media", 6)) -+ { -+ g_free (name); -+ gtk_file_path_free (path_copy); -+ g_free (file_name); -+ return 0; -+ } - -- return result; --} -- --static void --update_preview_widget_visibility (GtkFileChooserDefault *impl) --{ -- if (impl->use_preview_label) -- { -- if (!impl->preview_label) -- { -- impl->preview_label = gtk_label_new (impl->preview_display_name); -- gtk_box_pack_start (GTK_BOX (impl->preview_box), impl->preview_label, FALSE, FALSE, 0); -- gtk_box_reorder_child (GTK_BOX (impl->preview_box), impl->preview_label, 0); -- gtk_label_set_ellipsize (GTK_LABEL (impl->preview_label), PANGO_ELLIPSIZE_MIDDLE); -- gtk_widget_show (impl->preview_label); -- } -- } -+ gtk_widget_set_sensitive (impl->up_button, TRUE); -+ } -+ else if (!strncmp (file_name, "/media/", 7)) -+ { -+ /* Changing into a media child -- if it is an immediate child, disable -+ * the Up button -+ */ -+ gchar * p = file_name + 7; -+ gchar * q = strchr (p, '/'); -+ if (!q) -+ gtk_widget_set_sensitive (impl->up_button, FALSE); -+ else -+ gtk_widget_set_sensitive (impl->up_button, TRUE); -+ } - else -- { -- if (impl->preview_label) -- { -- gtk_widget_destroy (impl->preview_label); -- impl->preview_label = NULL; -- } -- } -+ { -+ gtk_widget_set_sensitive (impl->up_button, TRUE); -+ } - -- if (impl->preview_widget_active && impl->preview_widget) -- gtk_widget_show (impl->preview_box); -- else -- gtk_widget_hide (impl->preview_box); - -- g_signal_emit_by_name (impl, "default-size-changed"); --} -+ error = NULL; -+ result = _gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), path_copy, &error); - --static void --set_preview_widget (GtkFileChooserDefault *impl, -- GtkWidget *preview_widget) --{ -- if (preview_widget == impl->preview_widget) -- return; -+ if (errormsg && !result) -+ error_changing_folder_dialog (impl, path_copy, error); - -- if (impl->preview_widget) -- gtk_container_remove (GTK_CONTAINER (impl->preview_box), -- impl->preview_widget); -+ gtk_label_set_text (GTK_LABEL (impl->location_label), file_name); - -- impl->preview_widget = preview_widget; -- if (impl->preview_widget) -- { -- gtk_widget_show (impl->preview_widget); -- gtk_box_pack_start (GTK_BOX (impl->preview_box), impl->preview_widget, TRUE, TRUE, 0); -- gtk_box_reorder_child (GTK_BOX (impl->preview_box), -- impl->preview_widget, -- (impl->use_preview_label && impl->preview_label) ? 1 : 0); -- } -+ gtk_file_path_free (path_copy); -+ g_free (file_name); - -- update_preview_widget_visibility (impl); -+ return result; - } - --/* Renders a "Search" icon at an appropriate size for a tree view */ --static GdkPixbuf * --render_search_icon (GtkFileChooserDefault *impl) -+static gboolean -+change_folder_and_display_error (GtkFileChooserDefault *impl, -+ const GtkFilePath *path) - { -- return gtk_widget_render_icon (GTK_WIDGET (impl), GTK_STOCK_FIND, GTK_ICON_SIZE_MENU, NULL); -+ return change_folder (impl, path, TRUE); - } - --static GdkPixbuf * --render_recent_icon (GtkFileChooserDefault *impl) --{ -- GtkIconTheme *theme; -- GdkPixbuf *retval; - -- if (gtk_widget_has_screen (GTK_WIDGET (impl))) -- theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (impl))); -- else -- theme = gtk_icon_theme_get_default (); -- -- retval = gtk_icon_theme_load_icon (theme, "document-open-recent", -- impl->icon_size, 0, -- NULL); -- -- /* fallback */ -- if (!retval) -- retval = gtk_widget_render_icon (GTK_WIDGET (impl), GTK_STOCK_FILE, GTK_ICON_SIZE_MENU, NULL); -- -- return retval; --} -- -- --/* Re-reads all the icons for the shortcuts, used when the theme changes */ --struct ReloadIconsData --{ -- GtkFileChooserDefault *impl; -- GtkTreeRowReference *row_ref; --}; -- --static void --shortcuts_reload_icons_get_info_cb (GtkFileSystemHandle *handle, -- const GtkFileInfo *info, -- const GError *error, -- gpointer user_data) --{ -- GdkPixbuf *pixbuf; -- GtkTreeIter iter; -- GtkTreePath *path; -- gboolean cancelled = handle->cancelled; -- struct ReloadIconsData *data = user_data; -- -- if (!g_slist_find (data->impl->reload_icon_handles, handle)) -- goto out; -- -- data->impl->reload_icon_handles = g_slist_remove (data->impl->reload_icon_handles, handle); -- -- if (cancelled || error) -- goto out; -- -- pixbuf = gtk_file_info_render_icon (info, GTK_WIDGET (data->impl), -- data->impl->icon_size, NULL); -- -- path = gtk_tree_row_reference_get_path (data->row_ref); -- gtk_tree_model_get_iter (GTK_TREE_MODEL (data->impl->shortcuts_model), &iter, path); -- gtk_list_store_set (data->impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, -- -1); -- gtk_tree_path_free (path); -- -- if (pixbuf) -- g_object_unref (pixbuf); -- --out: -- gtk_tree_row_reference_free (data->row_ref); -- g_object_unref (data->impl); -- g_free (data); -- -- g_object_unref (handle); --} -- --static void --shortcuts_reload_icons (GtkFileChooserDefault *impl) --{ -- GSList *l; -- GtkTreeIter iter; -- -- profile_start ("start", NULL); -- -- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter)) -- goto out; -- -- for (l = impl->reload_icon_handles; l; l = l->next) -- { -- GtkFileSystemHandle *handle = GTK_FILE_SYSTEM_HANDLE (l->data); -- gtk_file_system_cancel_operation (handle); -- } -- g_slist_free (impl->reload_icon_handles); -- impl->reload_icon_handles = NULL; -- -- do -- { -- gpointer data; -- ShortcutType shortcut_type; -- gboolean pixbuf_visible; -- GdkPixbuf *pixbuf; -- -- gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, -- SHORTCUTS_COL_DATA, &data, -- SHORTCUTS_COL_TYPE, &shortcut_type, -- SHORTCUTS_COL_PIXBUF_VISIBLE, &pixbuf_visible, -- -1); -- -- pixbuf = NULL; -- if (pixbuf_visible) -- { -- if (shortcut_type == SHORTCUT_TYPE_VOLUME) -- { -- GtkFileSystemVolume *volume; -- -- volume = data; -- pixbuf = gtk_file_system_volume_render_icon (impl->file_system, volume, GTK_WIDGET (impl), -- impl->icon_size, NULL); -- } -- else if (shortcut_type == SHORTCUT_TYPE_PATH) -- { -- if (gtk_file_system_path_is_local (impl->file_system, (GtkFilePath *)data)) -- { -- const GtkFilePath *path; -- struct ReloadIconsData *info; -- GtkTreePath *tree_path; -- GtkFileSystemHandle *handle; -- -- path = data; -- -- info = g_new0 (struct ReloadIconsData, 1); -- info->impl = g_object_ref (impl); -- tree_path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model), &iter); -- info->row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (impl->shortcuts_model), tree_path); -- gtk_tree_path_free (tree_path); -- -- handle = gtk_file_system_get_info (impl->file_system, path, -- GTK_FILE_INFO_ICON, -- shortcuts_reload_icons_get_info_cb, -- info); -- impl->reload_icon_handles = g_slist_append (impl->reload_icon_handles, handle); -- } -- else -- { -- GtkIconTheme *icon_theme; -- -- /* Don't call get_info for remote paths to avoid latency and -- * auth dialogs. -- * If we switch to a better bookmarks file format (XBEL), we -- * should use mime info to get a better icon. -- */ -- icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (impl))); -- pixbuf = gtk_icon_theme_load_icon (icon_theme, "gnome-fs-share", -- impl->icon_size, 0, NULL); -- } -- } -- else if (shortcut_type == SHORTCUT_TYPE_SEARCH) -- { -- pixbuf = render_search_icon (impl); -- } -- else if (shortcut_type == SHORTCUT_TYPE_RECENT) -- { -- pixbuf = render_recent_icon (impl); -- } -- -- gtk_list_store_set (impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, -- -1); -- -- if (pixbuf) -- g_object_unref (pixbuf); -- -- } -- } -- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model),&iter)); -- -- out: -- -- profile_end ("end", NULL); --} -- --static void --shortcuts_find_folder (GtkFileChooserDefault *impl, -- GtkFilePath *folder) --{ -- GtkTreeSelection *selection; -- int pos; -- GtkTreePath *path; -- -- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); -- -- g_assert (folder != NULL); -- pos = shortcut_find_position (impl, folder); -- if (pos == -1) -- { -- gtk_tree_selection_unselect_all (selection); -- return; -- } -- -- path = gtk_tree_path_new_from_indices (pos, -1); -- gtk_tree_selection_select_path (selection, path); -- gtk_tree_path_free (path); --} -- --/* If a shortcut corresponds to the current folder, selects it */ --static void --shortcuts_find_current_folder (GtkFileChooserDefault *impl) --{ -- shortcuts_find_folder (impl, impl->current_folder); --} -- --/* Removes the specified number of rows from the shortcuts list */ --static void --shortcuts_remove_rows (GtkFileChooserDefault *impl, -- int start_row, -- int n_rows) --{ -- GtkTreePath *path; -- -- path = gtk_tree_path_new_from_indices (start_row, -1); -- -- for (; n_rows; n_rows--) -- { -- GtkTreeIter iter; -- -- if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path)) -- g_assert_not_reached (); -- -- shortcuts_free_row_data (impl, &iter); -- gtk_list_store_remove (impl->shortcuts_model, &iter); -- } -- -- gtk_tree_path_free (path); --} -- --static void --shortcuts_update_count (GtkFileChooserDefault *impl, -- ShortcutsIndex type, -- gint value) --{ -- switch (type) -- { -- case SHORTCUTS_HOME: -- if (value < 0) -- impl->has_home = FALSE; -- else -- impl->has_home = TRUE; -- break; -- -- case SHORTCUTS_DESKTOP: -- if (value < 0) -- impl->has_desktop = FALSE; -- else -- impl->has_desktop = TRUE; -- break; -- -- case SHORTCUTS_VOLUMES: -- impl->num_volumes += value; -- break; -- -- case SHORTCUTS_SHORTCUTS: -- impl->num_shortcuts += value; -- break; -- -- case SHORTCUTS_BOOKMARKS: -- impl->num_bookmarks += value; -- break; -- -- case SHORTCUTS_CURRENT_FOLDER: -- if (value < 0) -- impl->shortcuts_current_folder_active = FALSE; -- else -- impl->shortcuts_current_folder_active = TRUE; -- break; -- -- default: -- /* nothing */ -- break; -- } --} -- --struct ShortcutsInsertRequest --{ -- GtkFileChooserDefault *impl; -- GtkFilePath *parent_path; -- GtkFilePath *path; -- int pos; -- char *label_copy; -- GtkTreeRowReference *row_ref; -- ShortcutsIndex type; -- gboolean name_only; -- gboolean removable; --}; -- --static void --get_file_info_finished (GtkFileSystemHandle *handle, -- const GtkFileInfo *info, -- const GError *error, -- gpointer data) --{ -- gint pos = -1; -- gboolean cancelled = handle->cancelled; -- GdkPixbuf *pixbuf; -- GtkTreePath *path; -- GtkTreeIter iter; -- GtkFileSystemHandle *model_handle; -- struct ShortcutsInsertRequest *request = data; -- -- path = gtk_tree_row_reference_get_path (request->row_ref); -- if (!path) -- /* Handle doesn't exist anymore in the model */ -- goto out; -- -- pos = gtk_tree_path_get_indices (path)[0]; -- gtk_tree_model_get_iter (GTK_TREE_MODEL (request->impl->shortcuts_model), -- &iter, path); -- gtk_tree_path_free (path); -- -- /* validate handle, else goto out */ -- gtk_tree_model_get (GTK_TREE_MODEL (request->impl->shortcuts_model), &iter, -- SHORTCUTS_COL_HANDLE, &model_handle, -- -1); -- if (handle != model_handle) -- goto out; -- -- /* set the handle to NULL in the model (we unref later on) */ -- gtk_list_store_set (request->impl->shortcuts_model, &iter, -- SHORTCUTS_COL_HANDLE, NULL, -- -1); -- -- if (cancelled) -- goto out; -- -- if (!info) -- { -- gtk_list_store_remove (request->impl->shortcuts_model, &iter); -- shortcuts_update_count (request->impl, request->type, -1); -- -- if (request->type == SHORTCUTS_HOME) -- { -- const char *home = g_get_home_dir (); -- GtkFilePath *home_path; -- -- home_path = gtk_file_system_filename_to_path (request->impl->file_system, home); -- error_getting_info_dialog (request->impl, home_path, g_error_copy (error)); -- gtk_file_path_free (home_path); -- } -- else if (request->type == SHORTCUTS_CURRENT_FOLDER) -- { -- /* Remove the current folder separator */ -- gint separator_pos = shortcuts_get_index (request->impl, SHORTCUTS_CURRENT_FOLDER_SEPARATOR); -- shortcuts_remove_rows (request->impl, separator_pos, 1); -- } -- -- goto out; -- } -- -- if (!request->label_copy) -- request->label_copy = g_strdup (gtk_file_info_get_display_name (info)); -- pixbuf = gtk_file_info_render_icon (info, GTK_WIDGET (request->impl), -- request->impl->icon_size, NULL); -- -- gtk_list_store_set (request->impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, -- SHORTCUTS_COL_PIXBUF_VISIBLE, TRUE, -- SHORTCUTS_COL_NAME, request->label_copy, -- SHORTCUTS_COL_TYPE, SHORTCUT_TYPE_PATH, -- SHORTCUTS_COL_REMOVABLE, request->removable, -- -1); -- -- if (request->impl->shortcuts_pane_filter_model) -- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (request->impl->shortcuts_pane_filter_model)); -- -- if (request->impl->shortcuts_combo_filter_model) -- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (request->impl->shortcuts_combo_filter_model)); -- -- if (request->type == SHORTCUTS_CURRENT_FOLDER && -- request->impl->save_folder_combo != NULL) -- { -- /* The current folder is updated via _activate_iter(), don't -- * have save_folder_combo_changed_cb() call _activate_iter() -- * again. -- */ -- g_signal_handlers_block_by_func (request->impl->save_folder_combo, -- G_CALLBACK (save_folder_combo_changed_cb), -- request->impl); -- -- if (request->impl->has_search) -- pos -= 1; -- -- if (request->impl->has_recent) -- pos -= 2; -- -- gtk_combo_box_set_active (GTK_COMBO_BOX (request->impl->save_folder_combo), pos); -- g_signal_handlers_unblock_by_func (request->impl->save_folder_combo, -- G_CALLBACK (save_folder_combo_changed_cb), -- request->impl); -- } -- -- if (pixbuf) -- g_object_unref (pixbuf); -- --out: -- g_object_unref (request->impl); -- gtk_file_path_free (request->parent_path); -- gtk_file_path_free (request->path); -- gtk_tree_row_reference_free (request->row_ref); -- g_free (request->label_copy); -- g_free (request); -- -- g_object_unref (handle); --} -- - /* FIXME: GtkFileSystem needs a function to split a remote path -- * into hostname and path components, or maybe just have a -+ * into hostname and path components, or maybe just have a - * gtk_file_system_path_get_display_name(). - * - * This function is also used in gtkfilechooserbutton.c -@@ -1692,11 +887,11 @@ - { - const gchar *path, *start, *end, *p; - gchar *host, *label; -- -+ - start = strstr (uri, "://"); - start += 3; - path = strchr (start, '/'); -- -+ - if (path) - end = path; - else -@@ -1711,719 +906,25 @@ - { - start = p + 1; - } -- -+ - p = strchr (start, ':'); - if (p && p < end) - end = p; -- -+ - host = g_strndup (start, end - start); - -- /* Translators: the first string is a path and the second string -- * is a hostname. Nautilus and the panel contain the same string -- * to translate. -+ /* Translators: the first string is a path and the second string -+ * is a hostname. Nautilus and the panel contain the same string -+ * to translate. - */ - label = g_strdup_printf (_("%1$s on %2$s"), path, host); -- -+ - g_free (host); - - return label; - } - --/* Inserts a path in the shortcuts tree, making a copy of it; alternatively, -- * inserts a volume. A position of -1 indicates the end of the tree. -- */ --static void --shortcuts_insert_path (GtkFileChooserDefault *impl, -- int pos, -- ShortcutType shortcut_type, -- GtkFileSystemVolume *volume, -- const GtkFilePath *path, -- const char *label, -- gboolean removable, -- ShortcutsIndex type) --{ -- char *label_copy; -- GdkPixbuf *pixbuf = NULL; -- gpointer data = NULL; -- GtkTreeIter iter; -- GtkIconTheme *icon_theme; - -- profile_start ("start", (shortcut_type == SHORTCUT_TYPE_VOLUME) ? "volume" -- : ((shortcut_type == SHORTCUT_TYPE_PATH) ? (char *) path : NULL)); -- -- if (shortcut_type == SHORTCUT_TYPE_VOLUME) -- { -- data = volume; -- label_copy = gtk_file_system_volume_get_display_name (impl->file_system, volume); -- pixbuf = gtk_file_system_volume_render_icon (impl->file_system, volume, GTK_WIDGET (impl), -- impl->icon_size, NULL); -- } -- else if (shortcut_type == SHORTCUT_TYPE_PATH) -- { -- if (gtk_file_system_path_is_local (impl->file_system, path)) -- { -- struct ShortcutsInsertRequest *request; -- GtkFileSystemHandle *handle; -- GtkTreePath *p; -- -- request = g_new0 (struct ShortcutsInsertRequest, 1); -- request->impl = g_object_ref (impl); -- request->path = gtk_file_path_copy (path); -- request->name_only = TRUE; -- request->removable = removable; -- request->pos = pos; -- request->type = type; -- if (label) -- request->label_copy = g_strdup (label); -- -- if (pos == -1) -- gtk_list_store_append (impl->shortcuts_model, &iter); -- else -- gtk_list_store_insert (impl->shortcuts_model, &iter, pos); -- -- p = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model), &iter); -- request->row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (impl->shortcuts_model), p); -- gtk_tree_path_free (p); -- -- handle = gtk_file_system_get_info (request->impl->file_system, request->path, -- GTK_FILE_INFO_DISPLAY_NAME | GTK_FILE_INFO_IS_HIDDEN | GTK_FILE_INFO_ICON, -- get_file_info_finished, request); -- -- gtk_list_store_set (impl->shortcuts_model, &iter, -- SHORTCUTS_COL_DATA, gtk_file_path_copy (path), -- SHORTCUTS_COL_TYPE, SHORTCUT_TYPE_PATH, -- SHORTCUTS_COL_HANDLE, handle, -- -1); -- -- shortcuts_update_count (impl, type, 1); -- -- return; -- } -- else -- { -- /* Don't call get_info for remote paths to avoid latency and -- * auth dialogs. -- */ -- data = gtk_file_path_copy (path); -- if (label) -- label_copy = g_strdup (label); -- else -- { -- gchar *uri; -- -- uri = gtk_file_system_path_to_uri (impl->file_system, path); -- -- label_copy = _gtk_file_chooser_label_for_uri (uri); -- -- g_free (uri); -- } -- -- /* If we switch to a better bookmarks file format (XBEL), we -- * should use mime info to get a better icon. -- */ -- icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (impl))); -- pixbuf = gtk_icon_theme_load_icon (icon_theme, "gnome-fs-share", -- impl->icon_size, 0, NULL); -- } -- } -- else -- { -- g_assert_not_reached (); -- -- return; -- } -- -- if (pos == -1) -- gtk_list_store_append (impl->shortcuts_model, &iter); -- else -- gtk_list_store_insert (impl->shortcuts_model, &iter, pos); -- -- shortcuts_update_count (impl, type, 1); -- -- gtk_list_store_set (impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, -- SHORTCUTS_COL_PIXBUF_VISIBLE, TRUE, -- SHORTCUTS_COL_NAME, label_copy, -- SHORTCUTS_COL_DATA, data, -- SHORTCUTS_COL_TYPE, shortcut_type, -- SHORTCUTS_COL_REMOVABLE, removable, -- SHORTCUTS_COL_HANDLE, NULL, -- -1); -- -- if (impl->shortcuts_pane_filter_model) -- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model)); -- -- if (impl->shortcuts_combo_filter_model) -- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_combo_filter_model)); -- -- if (type == SHORTCUTS_CURRENT_FOLDER && impl->save_folder_combo != NULL) -- { -- /* The current folder is updated via _activate_iter(), don't -- * have save_folder_combo_changed_cb() call _activate_iter() -- * again. -- */ -- gint combo_pos = shortcuts_get_index (impl, SHORTCUTS_CURRENT_FOLDER); -- -- if (impl->has_search) -- combo_pos -= 1; -- -- if (impl->has_recent) -- combo_pos -= 2; -- -- g_signal_handlers_block_by_func (impl->save_folder_combo, -- G_CALLBACK (save_folder_combo_changed_cb), -- impl); -- -- gtk_combo_box_set_active (GTK_COMBO_BOX (impl->save_folder_combo), combo_pos); -- g_signal_handlers_unblock_by_func (impl->save_folder_combo, -- G_CALLBACK (save_folder_combo_changed_cb), -- impl); -- } -- -- g_free (label_copy); -- -- if (pixbuf) -- g_object_unref (pixbuf); -- -- profile_end ("end", NULL); --} -- --static void --shortcuts_append_search (GtkFileChooserDefault *impl) --{ -- GdkPixbuf *pixbuf; -- GtkTreeIter iter; -- -- pixbuf = render_search_icon (impl); -- -- gtk_list_store_append (impl->shortcuts_model, &iter); -- gtk_list_store_set (impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, -- SHORTCUTS_COL_PIXBUF_VISIBLE, TRUE, -- SHORTCUTS_COL_NAME, _("Search"), -- SHORTCUTS_COL_DATA, NULL, -- SHORTCUTS_COL_TYPE, SHORTCUT_TYPE_SEARCH, -- SHORTCUTS_COL_REMOVABLE, FALSE, -- -1); -- -- if (pixbuf) -- g_object_unref (pixbuf); -- -- impl->has_search = TRUE; --} -- --static void --shortcuts_append_recent (GtkFileChooserDefault *impl) --{ -- GdkPixbuf *pixbuf; -- GtkTreeIter iter; -- -- pixbuf = render_recent_icon (impl); -- -- gtk_list_store_append (impl->shortcuts_model, &iter); -- gtk_list_store_set (impl->shortcuts_model, &iter, -- SHORTCUTS_COL_PIXBUF, pixbuf, --