diff options
| -rw-r--r-- | meta/packages/gtk+/gtk+-2.6.8/filechooser-default.patch | 990 | ||||
| -rw-r--r-- | meta/packages/gtk+/gtk+_2.6.8.bb | 2 |
2 files changed, 410 insertions, 582 deletions
diff --git a/meta/packages/gtk+/gtk+-2.6.8/filechooser-default.patch b/meta/packages/gtk+/gtk+-2.6.8/filechooser-default.patch index d4534212a0..fa2dfb4843 100644 --- a/meta/packages/gtk+/gtk+-2.6.8/filechooser-default.patch +++ b/meta/packages/gtk+/gtk+-2.6.8/filechooser-default.patch | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | --- gtk+-2.6.8/gtk/gtkfilechooserdefault.c.orig 2007-02-09 12:28:31.000000000 +0000 | 1 | --- gtk+-2.6.8/gtk/gtkfilechooserdefault.c.orig 2007-02-09 18:37:47.000000000 +0000 |
| 2 | +++ gtk+-2.6.8/gtk/gtkfilechooserdefault.c 2007-02-09 12:28:31.000000000 +0000 | 2 | +++ gtk+-2.6.8/gtk/gtkfilechooserdefault.c 2007-02-09 18:37:47.000000000 +0000 |
| 3 | @@ -31,7 +31,6 @@ | 3 | @@ -31,7 +31,6 @@ |
| 4 | #include "gtkcombobox.h" | 4 | #include "gtkcombobox.h" |
| 5 | #include "gtkentry.h" | 5 | #include "gtkentry.h" |
| @@ -40,7 +40,7 @@ | |||
| 40 | 40 | ||
| 41 | #define MAX_LOADING_TIME 500 | 41 | #define MAX_LOADING_TIME 500 |
| 42 | 42 | ||
| 43 | @@ -109,63 +112,33 @@ | 43 | @@ -109,63 +112,38 @@ |
| 44 | 44 | ||
| 45 | /* Save mode widgets */ | 45 | /* Save mode widgets */ |
| 46 | GtkWidget *save_widgets; | 46 | GtkWidget *save_widgets; |
| @@ -68,7 +68,7 @@ | |||
| 68 | GtkFileSystemModel *browse_files_model; | 68 | GtkFileSystemModel *browse_files_model; |
| 69 | 69 | ||
| 70 | - GtkWidget *filter_combo_hbox; | 70 | - GtkWidget *filter_combo_hbox; |
| 71 | - GtkWidget *filter_combo; | 71 | GtkWidget *filter_combo; |
| 72 | - GtkWidget *preview_box; | 72 | - GtkWidget *preview_box; |
| 73 | - GtkWidget *preview_label; | 73 | - GtkWidget *preview_label; |
| 74 | - GtkWidget *preview_widget; | 74 | - GtkWidget *preview_widget; |
| @@ -78,6 +78,7 @@ | |||
| 78 | - GtkListStore *shortcuts_model; | 78 | - GtkListStore *shortcuts_model; |
| 79 | - GtkTreeModel *shortcuts_filter_model; | 79 | - GtkTreeModel *shortcuts_filter_model; |
| 80 | - | 80 | - |
| 81 | + | ||
| 81 | GtkTreeModelSort *sort_model; | 82 | GtkTreeModelSort *sort_model; |
| 82 | 83 | ||
| 83 | LoadState load_state; | 84 | LoadState load_state; |
| @@ -85,11 +86,11 @@ | |||
| 85 | 86 | ||
| 86 | GSList *pending_select_paths; | 87 | GSList *pending_select_paths; |
| 87 | - | 88 | - |
| 88 | - GtkFileFilter *current_filter; | ||
| 89 | - GSList *filters; | ||
| 90 | - | ||
| 91 | + GSList * path_history; | 89 | + GSList * path_history; |
| 92 | + | 90 | + |
| 91 | GtkFileFilter *current_filter; | ||
| 92 | GSList *filters; | ||
| 93 | |||
| 93 | GtkTooltips *tooltips; | 94 | GtkTooltips *tooltips; |
| 94 | 95 | ||
| 95 | - gboolean has_home; | 96 | - gboolean has_home; |
| @@ -109,7 +110,7 @@ | |||
| 109 | 110 | ||
| 110 | GtkTreeViewColumn *list_name_column; | 111 | GtkTreeViewColumn *list_name_column; |
| 111 | GtkCellRenderer *list_name_renderer; | 112 | GtkCellRenderer *list_name_renderer; |
| 112 | @@ -179,25 +152,15 @@ | 113 | @@ -179,25 +157,15 @@ |
| 113 | gulong toplevel_set_focus_id; | 114 | gulong toplevel_set_focus_id; |
| 114 | GtkWidget *toplevel_last_focus_widget; | 115 | GtkWidget *toplevel_last_focus_widget; |
| 115 | 116 | ||
| @@ -137,7 +138,7 @@ | |||
| 137 | }; | 138 | }; |
| 138 | 139 | ||
| 139 | /* Signal IDs */ | 140 | /* Signal IDs */ |
| 140 | @@ -211,17 +174,6 @@ | 141 | @@ -211,17 +179,6 @@ |
| 141 | 142 | ||
| 142 | static guint signals[LAST_SIGNAL] = { 0 }; | 143 | static guint signals[LAST_SIGNAL] = { 0 }; |
| 143 | 144 | ||
| @@ -155,7 +156,7 @@ | |||
| 155 | /* Column numbers for the file list */ | 156 | /* Column numbers for the file list */ |
| 156 | enum { | 157 | enum { |
| 157 | FILE_LIST_COL_NAME, | 158 | FILE_LIST_COL_NAME, |
| 158 | @@ -236,23 +188,6 @@ | 159 | @@ -236,23 +193,6 @@ |
| 159 | TEXT_URI_LIST | 160 | TEXT_URI_LIST |
| 160 | }; | 161 | }; |
| 161 | 162 | ||
| @@ -179,7 +180,7 @@ | |||
| 179 | /* Target types for DnD from the file list */ | 180 | /* Target types for DnD from the file list */ |
| 180 | static const GtkTargetEntry file_list_source_targets[] = { | 181 | static const GtkTargetEntry file_list_source_targets[] = { |
| 181 | { "text/uri-list", 0, TEXT_URI_LIST } | 182 | { "text/uri-list", 0, TEXT_URI_LIST } |
| 182 | @@ -261,22 +196,10 @@ | 183 | @@ -261,22 +201,10 @@ |
| 183 | static const int num_file_list_source_targets = (sizeof (file_list_source_targets) | 184 | static const int num_file_list_source_targets = (sizeof (file_list_source_targets) |
| 184 | / sizeof (file_list_source_targets[0])); | 185 | / sizeof (file_list_source_targets[0])); |
| 185 | 186 | ||
| @@ -203,7 +204,7 @@ | |||
| 203 | #define NUM_LINES 40 | 204 | #define NUM_LINES 40 |
| 204 | #define NUM_CHARS 60 | 205 | #define NUM_CHARS 60 |
| 205 | 206 | ||
| 206 | @@ -335,7 +258,6 @@ | 207 | @@ -335,7 +263,6 @@ |
| 207 | const GtkFilePath *path, | 208 | const GtkFilePath *path, |
| 208 | GError **error); | 209 | GError **error); |
| 209 | static GSList * gtk_file_chooser_default_list_shortcut_folders (GtkFileChooser *chooser); | 210 | static GSList * gtk_file_chooser_default_list_shortcut_folders (GtkFileChooser *chooser); |
| @@ -211,7 +212,7 @@ | |||
| 211 | static void gtk_file_chooser_default_get_default_size (GtkFileChooserEmbed *chooser_embed, | 212 | static void gtk_file_chooser_default_get_default_size (GtkFileChooserEmbed *chooser_embed, |
| 212 | gint *default_width, | 213 | gint *default_width, |
| 213 | gint *default_height); | 214 | gint *default_height); |
| 214 | @@ -352,37 +274,6 @@ | 215 | @@ -352,37 +279,11 @@ |
| 215 | static void home_folder_handler (GtkFileChooserDefault *impl); | 216 | static void home_folder_handler (GtkFileChooserDefault *impl); |
| 216 | static void update_appearance (GtkFileChooserDefault *impl); | 217 | static void update_appearance (GtkFileChooserDefault *impl); |
| 217 | 218 | ||
| @@ -219,8 +220,8 @@ | |||
| 219 | - GtkFileFilter *filter); | 220 | - GtkFileFilter *filter); |
| 220 | -static void check_preview_change (GtkFileChooserDefault *impl); | 221 | -static void check_preview_change (GtkFileChooserDefault *impl); |
| 221 | - | 222 | - |
| 222 | -static void filter_combo_changed (GtkComboBox *combo_box, | 223 | static void filter_combo_changed (GtkComboBox *combo_box, |
| 223 | - GtkFileChooserDefault *impl); | 224 | GtkFileChooserDefault *impl); |
| 224 | -static void shortcuts_row_activated_cb (GtkTreeView *tree_view, | 225 | -static void shortcuts_row_activated_cb (GtkTreeView *tree_view, |
| 225 | - GtkTreePath *path, | 226 | - GtkTreePath *path, |
| 226 | - GtkTreeViewColumn *column, | 227 | - GtkTreeViewColumn *column, |
| @@ -245,11 +246,13 @@ | |||
| 245 | - const GtkFilePath *path); | 246 | - const GtkFilePath *path); |
| 246 | - | 247 | - |
| 247 | -static void bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl); | 248 | -static void bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl); |
| 248 | - | 249 | |
| 250 | +static void set_current_filter (GtkFileChooserDefault *impl, | ||
| 251 | + GtkFileFilter *filter); | ||
| 249 | static gboolean list_select_func (GtkTreeSelection *selection, | 252 | static gboolean list_select_func (GtkTreeSelection *selection, |
| 250 | GtkTreeModel *model, | 253 | GtkTreeModel *model, |
| 251 | GtkTreePath *path, | 254 | GtkTreePath *path, |
| 252 | @@ -401,16 +292,6 @@ | 255 | @@ -401,16 +302,6 @@ |
| 253 | GtkTreeIter *iter, | 256 | GtkTreeIter *iter, |
| 254 | gpointer user_data); | 257 | gpointer user_data); |
| 255 | 258 | ||
| @@ -266,7 +269,7 @@ | |||
| 266 | static void list_icon_data_func (GtkTreeViewColumn *tree_column, | 269 | static void list_icon_data_func (GtkTreeViewColumn *tree_column, |
| 267 | GtkCellRenderer *cell, | 270 | GtkCellRenderer *cell, |
| 268 | GtkTreeModel *tree_model, | 271 | GtkTreeModel *tree_model, |
| 269 | @@ -441,36 +322,6 @@ | 272 | @@ -441,36 +332,6 @@ |
| 270 | 273 | ||
| 271 | static GObjectClass *parent_class; | 274 | static GObjectClass *parent_class; |
| 272 | 275 | ||
| @@ -303,7 +306,7 @@ | |||
| 303 | 306 | ||
| 304 | GType | 307 | GType |
| 305 | _gtk_file_chooser_default_get_type (void) | 308 | _gtk_file_chooser_default_get_type (void) |
| 306 | @@ -520,6 +371,11 @@ | 309 | @@ -520,6 +381,11 @@ |
| 307 | return file_chooser_default_type; | 310 | return file_chooser_default_type; |
| 308 | } | 311 | } |
| 309 | 312 | ||
| @@ -315,7 +318,7 @@ | |||
| 315 | static void | 318 | static void |
| 316 | gtk_file_chooser_default_class_init (GtkFileChooserDefaultClass *class) | 319 | gtk_file_chooser_default_class_init (GtkFileChooserDefaultClass *class) |
| 317 | { | 320 | { |
| 318 | @@ -617,6 +473,14 @@ | 321 | @@ -617,6 +483,14 @@ |
| 319 | "home-folder", | 322 | "home-folder", |
| 320 | 0); | 323 | 0); |
| 321 | 324 | ||
| @@ -330,7 +333,7 @@ | |||
| 330 | _gtk_file_chooser_install_properties (gobject_class); | 333 | _gtk_file_chooser_install_properties (gobject_class); |
| 331 | 334 | ||
| 332 | gtk_settings_install_property (g_param_spec_string ("gtk-file-chooser-backend", | 335 | gtk_settings_install_property (g_param_spec_string ("gtk-file-chooser-backend", |
| 333 | @@ -634,17 +498,19 @@ | 336 | @@ -634,7 +508,6 @@ |
| 334 | iface->select_all = gtk_file_chooser_default_select_all; | 337 | iface->select_all = gtk_file_chooser_default_select_all; |
| 335 | iface->unselect_all = gtk_file_chooser_default_unselect_all; | 338 | iface->unselect_all = gtk_file_chooser_default_unselect_all; |
| 336 | iface->get_paths = gtk_file_chooser_default_get_paths; | 339 | iface->get_paths = gtk_file_chooser_default_get_paths; |
| @@ -338,13 +341,13 @@ | |||
| 338 | iface->get_file_system = gtk_file_chooser_default_get_file_system; | 341 | iface->get_file_system = gtk_file_chooser_default_get_file_system; |
| 339 | iface->set_current_folder = gtk_file_chooser_default_set_current_folder; | 342 | iface->set_current_folder = gtk_file_chooser_default_set_current_folder; |
| 340 | iface->get_current_folder = gtk_file_chooser_default_get_current_folder; | 343 | iface->get_current_folder = gtk_file_chooser_default_get_current_folder; |
| 341 | iface->set_current_name = gtk_file_chooser_default_set_current_name; | 344 | @@ -642,9 +515,12 @@ |
| 342 | + | ||
| 343 | + /* these are only stubs */ | ||
| 344 | + iface->get_preview_path = gtk_file_chooser_default_get_preview_path; | ||
| 345 | iface->add_filter = gtk_file_chooser_default_add_filter; | 345 | iface->add_filter = gtk_file_chooser_default_add_filter; |
| 346 | iface->remove_filter = gtk_file_chooser_default_remove_filter; | 346 | iface->remove_filter = gtk_file_chooser_default_remove_filter; |
| 347 | iface->list_filters = gtk_file_chooser_default_list_filters; | 347 | iface->list_filters = gtk_file_chooser_default_list_filters; |
| 348 | + | ||
| 349 | + /* these are only stubs */ | ||
| 350 | + iface->get_preview_path = gtk_file_chooser_default_get_preview_path; | ||
| 348 | iface->add_shortcut_folder = gtk_file_chooser_default_add_shortcut_folder; | 351 | iface->add_shortcut_folder = gtk_file_chooser_default_add_shortcut_folder; |
| 349 | iface->remove_shortcut_folder = gtk_file_chooser_default_remove_shortcut_folder; | 352 | iface->remove_shortcut_folder = gtk_file_chooser_default_remove_shortcut_folder; |
| 350 | - iface->list_shortcut_folders = gtk_file_chooser_default_list_shortcut_folders; | 353 | - iface->list_shortcut_folders = gtk_file_chooser_default_list_shortcut_folders; |
| @@ -352,7 +355,7 @@ | |||
| 352 | } | 355 | } |
| 353 | 356 | ||
| 354 | static void | 357 | static void |
| 355 | @@ -659,71 +525,22 @@ | 358 | @@ -659,71 +535,22 @@ |
| 356 | gtk_file_chooser_default_init (GtkFileChooserDefault *impl) | 359 | gtk_file_chooser_default_init (GtkFileChooserDefault *impl) |
| 357 | { | 360 | { |
| 358 | impl->local_only = TRUE; | 361 | impl->local_only = TRUE; |
| @@ -374,7 +377,7 @@ | |||
| 374 | g_object_ref (impl->tooltips); | 377 | g_object_ref (impl->tooltips); |
| 375 | gtk_object_sink (GTK_OBJECT (impl->tooltips)); | 378 | gtk_object_sink (GTK_OBJECT (impl->tooltips)); |
| 376 | -} | 379 | -} |
| 377 | - | 380 | |
| 378 | -/* Frees the data columns for the specified iter in the shortcuts model*/ | 381 | -/* Frees the data columns for the specified iter in the shortcuts model*/ |
| 379 | -static void | 382 | -static void |
| 380 | -shortcuts_free_row_data (GtkFileChooserDefault *impl, | 383 | -shortcuts_free_row_data (GtkFileChooserDefault *impl, |
| @@ -421,7 +424,7 @@ | |||
| 421 | - shortcuts_free_row_data (impl, &iter); | 424 | - shortcuts_free_row_data (impl, &iter); |
| 422 | - } | 425 | - } |
| 423 | - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter)); | 426 | - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter)); |
| 424 | 427 | - | |
| 425 | - g_object_unref (impl->shortcuts_model); | 428 | - g_object_unref (impl->shortcuts_model); |
| 426 | - impl->shortcuts_model = NULL; | 429 | - impl->shortcuts_model = NULL; |
| 427 | + if (!impl->root_folder) | 430 | + if (!impl->root_folder) |
| @@ -429,7 +432,7 @@ | |||
| 429 | } | 432 | } |
| 430 | 433 | ||
| 431 | static void | 434 | static void |
| 432 | @@ -743,6 +560,7 @@ | 435 | @@ -743,6 +570,7 @@ |
| 433 | impl->pending_select_paths = NULL; | 436 | impl->pending_select_paths = NULL; |
| 434 | } | 437 | } |
| 435 | 438 | ||
| @@ -437,7 +440,7 @@ | |||
| 437 | static void | 440 | static void |
| 438 | pending_select_paths_add (GtkFileChooserDefault *impl, | 441 | pending_select_paths_add (GtkFileChooserDefault *impl, |
| 439 | const GtkFilePath *path) | 442 | const GtkFilePath *path) |
| 440 | @@ -782,45 +600,40 @@ | 443 | @@ -782,20 +610,30 @@ |
| 441 | } | 444 | } |
| 442 | 445 | ||
| 443 | static void | 446 | static void |
| @@ -465,6 +468,7 @@ | |||
| 465 | +static void | 468 | +static void |
| 466 | +gtk_file_chooser_default_finalize (GObject *object) | 469 | +gtk_file_chooser_default_finalize (GObject *object) |
| 467 | +{ | 470 | +{ |
| 471 | + GSList *l; | ||
| 468 | + GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object); | 472 | + GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object); |
| 469 | 473 | ||
| 470 | g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id); | 474 | g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id); |
| @@ -473,21 +477,8 @@ | |||
| 473 | - impl->bookmarks_changed_id = 0; | 477 | - impl->bookmarks_changed_id = 0; |
| 474 | g_object_unref (impl->file_system); | 478 | g_object_unref (impl->file_system); |
| 475 | 479 | ||
| 476 | - for (l = impl->filters; l; l = l->next) | 480 | for (l = impl->filters; l; l = l->next) |
| 477 | - { | 481 | @@ -816,11 +654,9 @@ |
| 478 | - GtkFileFilter *filter; | ||
| 479 | - | ||
| 480 | - filter = GTK_FILE_FILTER (l->data); | ||
| 481 | - g_object_unref (filter); | ||
| 482 | - } | ||
| 483 | - g_slist_free (impl->filters); | ||
| 484 | - | ||
| 485 | - if (impl->current_filter) | ||
| 486 | - g_object_unref (impl->current_filter); | ||
| 487 | - | ||
| 488 | if (impl->current_volume_path) | ||
| 489 | gtk_file_path_free (impl->current_volume_path); | ||
| 490 | |||
| 491 | if (impl->current_folder) | 482 | if (impl->current_folder) |
| 492 | gtk_file_path_free (impl->current_folder); | 483 | gtk_file_path_free (impl->current_folder); |
| 493 | 484 | ||
| @@ -501,7 +492,7 @@ | |||
| 501 | load_remove_timer (impl); | 492 | load_remove_timer (impl); |
| 502 | 493 | ||
| 503 | /* Free all the Models we have */ | 494 | /* Free all the Models we have */ |
| 504 | @@ -830,12 +643,12 @@ | 495 | @@ -830,12 +666,12 @@ |
| 505 | if (impl->sort_model) | 496 | if (impl->sort_model) |
| 506 | g_object_unref (impl->sort_model); | 497 | g_object_unref (impl->sort_model); |
| 507 | 498 | ||
| @@ -516,7 +507,7 @@ | |||
| 516 | G_OBJECT_CLASS (parent_class)->finalize (object); | 507 | G_OBJECT_CLASS (parent_class)->finalize (object); |
| 517 | } | 508 | } |
| 518 | 509 | ||
| 519 | @@ -916,28 +729,6 @@ | 510 | @@ -916,28 +752,6 @@ |
| 520 | path, error); | 511 | path, error); |
| 521 | } | 512 | } |
| 522 | 513 | ||
| @@ -545,7 +536,7 @@ | |||
| 545 | /* Shows an error dialog about not being able to create a folder */ | 536 | /* Shows an error dialog about not being able to create a folder */ |
| 546 | static void | 537 | static void |
| 547 | error_creating_folder_dialog (GtkFileChooserDefault *impl, | 538 | error_creating_folder_dialog (GtkFileChooserDefault *impl, |
| 548 | @@ -949,21 +740,6 @@ | 539 | @@ -949,21 +763,6 @@ |
| 549 | path, error); | 540 | path, error); |
| 550 | } | 541 | } |
| 551 | 542 | ||
| @@ -567,7 +558,7 @@ | |||
| 567 | /* Shows an error dialog about not being able to create a filename */ | 558 | /* Shows an error dialog about not being able to create a filename */ |
| 568 | static void | 559 | static void |
| 569 | error_building_filename_dialog (GtkFileChooserDefault *impl, | 560 | error_building_filename_dialog (GtkFileChooserDefault *impl, |
| 570 | @@ -993,6 +769,7 @@ | 561 | @@ -993,6 +792,7 @@ |
| 571 | GError *error; | 562 | GError *error; |
| 572 | gboolean result; | 563 | gboolean result; |
| 573 | GtkFilePath *path_copy; | 564 | GtkFilePath *path_copy; |
| @@ -575,7 +566,7 @@ | |||
| 575 | 566 | ||
| 576 | /* We copy the path because of this case: | 567 | /* We copy the path because of this case: |
| 577 | * | 568 | * |
| 578 | @@ -1005,6 +782,29 @@ | 569 | @@ -1005,6 +805,29 @@ |
| 579 | 570 | ||
| 580 | path_copy = gtk_file_path_copy (path); | 571 | path_copy = gtk_file_path_copy (path); |
| 581 | 572 | ||
| @@ -605,7 +596,7 @@ | |||
| 605 | error = NULL; | 596 | error = NULL; |
| 606 | result = _gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), path_copy, &error); | 597 | result = _gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), path_copy, &error); |
| 607 | 598 | ||
| 608 | @@ -1012,2009 +812,234 @@ | 599 | @@ -1012,2009 +835,245 @@ |
| 609 | error_changing_folder_dialog (impl, path_copy, error); | 600 | error_changing_folder_dialog (impl, path_copy, error); |
| 610 | 601 | ||
| 611 | gtk_file_path_free (path_copy); | 602 | gtk_file_path_free (path_copy); |
| @@ -770,11 +761,11 @@ | |||
| 770 | + | 761 | + |
| 771 | + g_source_destroy (impl->edited_idle); | 762 | + g_source_destroy (impl->edited_idle); |
| 772 | + impl->edited_idle = NULL; | 763 | + impl->edited_idle = NULL; |
| 773 | + | ||
| 774 | + _gtk_file_system_model_remove_editable (impl->browse_files_model); | ||
| 775 | + g_object_set (impl->list_name_renderer, "editable", FALSE, NULL); | ||
| 776 | 764 | ||
| 777 | - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); | 765 | - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); |
| 766 | + _gtk_file_system_model_remove_editable (impl->browse_files_model); | ||
| 767 | + g_object_set (impl->list_name_renderer, "editable", FALSE, NULL); | ||
| 768 | + | ||
| 778 | + gtk_widget_set_sensitive (impl->browse_new_folder_button, TRUE); | 769 | + gtk_widget_set_sensitive (impl->browse_new_folder_button, TRUE); |
| 779 | 770 | ||
| 780 | - g_assert (folder != NULL); | 771 | - g_assert (folder != NULL); |
| @@ -784,21 +775,9 @@ | |||
| 784 | { | 775 | { |
| 785 | - gtk_tree_selection_unselect_all (selection); | 776 | - gtk_tree_selection_unselect_all (selection); |
| 786 | - return; | 777 | - return; |
| 787 | - } | ||
| 788 | - | ||
| 789 | - path = gtk_tree_path_new_from_indices (pos, -1); | ||
| 790 | - gtk_tree_selection_select_path (selection, path); | ||
| 791 | - gtk_tree_path_free (path); | ||
| 792 | -} | ||
| 793 | + GError *error; | 778 | + GError *error; |
| 794 | + GtkFilePath *file_path; | 779 | + GtkFilePath *file_path; |
| 795 | 780 | + | |
| 796 | -/* If a shortcut corresponds to the current folder, selects it */ | ||
| 797 | -static void | ||
| 798 | -shortcuts_find_current_folder (GtkFileChooserDefault *impl) | ||
| 799 | -{ | ||
| 800 | - shortcuts_find_folder (impl, impl->current_folder); | ||
| 801 | -} | ||
| 802 | + error = NULL; | 781 | + error = NULL; |
| 803 | + file_path = gtk_file_system_make_path (impl->file_system, impl->current_folder, impl->edited_new_text, | 782 | + file_path = gtk_file_system_make_path (impl->file_system, impl->current_folder, impl->edited_new_text, |
| 804 | + &error); | 783 | + &error); |
| @@ -813,6 +792,35 @@ | |||
| 813 | + change_folder_and_display_error (impl, file_path); | 792 | + change_folder_and_display_error (impl, file_path); |
| 814 | + else | 793 | + else |
| 815 | + error_creating_folder_dialog (impl, file_path, error); | 794 | + error_creating_folder_dialog (impl, file_path, error); |
| 795 | + | ||
| 796 | + gtk_file_path_free (file_path); | ||
| 797 | + } | ||
| 798 | + else | ||
| 799 | + error_creating_folder_dialog (impl, file_path, error); | ||
| 800 | + | ||
| 801 | + g_free (impl->edited_new_text); | ||
| 802 | + impl->edited_new_text = NULL; | ||
| 803 | } | ||
| 804 | |||
| 805 | - path = gtk_tree_path_new_from_indices (pos, -1); | ||
| 806 | - gtk_tree_selection_select_path (selection, path); | ||
| 807 | - gtk_tree_path_free (path); | ||
| 808 | + GDK_THREADS_LEAVE (); | ||
| 809 | + | ||
| 810 | + return FALSE; | ||
| 811 | } | ||
| 812 | |||
| 813 | -/* If a shortcut corresponds to the current folder, selects it */ | ||
| 814 | static void | ||
| 815 | -shortcuts_find_current_folder (GtkFileChooserDefault *impl) | ||
| 816 | +queue_edited_idle (GtkFileChooserDefault *impl, | ||
| 817 | + const gchar *new_text) | ||
| 818 | { | ||
| 819 | - shortcuts_find_folder (impl, impl->current_folder); | ||
| 820 | -} | ||
| 821 | + /* We create the folder in an idle handler so that we don't modify the tree | ||
| 822 | + * just now. | ||
| 823 | + */ | ||
| 816 | 824 | ||
| 817 | -/* Convenience function to get the display name and icon info for a path */ | 825 | -/* Convenience function to get the display name and icon info for a path */ |
| 818 | -static GtkFileInfo * | 826 | -static GtkFileInfo * |
| @@ -845,10 +853,8 @@ | |||
| 845 | - out: | 853 | - out: |
| 846 | - if (parent_path) | 854 | - if (parent_path) |
| 847 | - gtk_file_path_free (parent_path); | 855 | - gtk_file_path_free (parent_path); |
| 848 | + gtk_file_path_free (file_path); | 856 | + g_assert (!impl->edited_idle); |
| 849 | + } | 857 | + g_assert (!impl->edited_new_text); |
| 850 | + else | ||
| 851 | + error_creating_folder_dialog (impl, file_path, error); | ||
| 852 | 858 | ||
| 853 | - if (tmp) | 859 | - if (tmp) |
| 854 | - { | 860 | - { |
| @@ -859,16 +865,11 @@ | |||
| 859 | - gtk_file_path_get_string (path), | 865 | - gtk_file_path_get_string (path), |
| 860 | - tmp->message); | 866 | - tmp->message); |
| 861 | - g_error_free (tmp); | 867 | - g_error_free (tmp); |
| 862 | + g_free (impl->edited_new_text); | 868 | - } |
| 863 | + impl->edited_new_text = NULL; | 869 | - |
| 864 | } | ||
| 865 | |||
| 866 | - return info; | 870 | - return info; |
| 867 | + GDK_THREADS_LEAVE (); | 871 | -} |
| 868 | + | 872 | - |
| 869 | + return FALSE; | ||
| 870 | } | ||
| 871 | |||
| 872 | -/* Returns whether a path is a folder */ | 873 | -/* Returns whether a path is a folder */ |
| 873 | -static gboolean | 874 | -static gboolean |
| 874 | -check_is_folder (GtkFileSystem *file_system, | 875 | -check_is_folder (GtkFileSystem *file_system, |
| @@ -2034,7 +2035,7 @@ | |||
| 2034 | -/* Creates a suitable drag cursor to indicate that the selected bookmark will be | 2035 | -/* Creates a suitable drag cursor to indicate that the selected bookmark will be |
| 2035 | - * deleted or not. | 2036 | - * deleted or not. |
| 2036 | - */ | 2037 | - */ |
| 2037 | static void | 2038 | -static void |
| 2038 | -shortcuts_drag_set_delete_cursor (GtkFileChooserDefault *impl, | 2039 | -shortcuts_drag_set_delete_cursor (GtkFileChooserDefault *impl, |
| 2039 | - gboolean delete) | 2040 | - gboolean delete) |
| 2040 | -{ | 2041 | -{ |
| @@ -2176,9 +2177,7 @@ | |||
| 2176 | - */ | 2177 | - */ |
| 2177 | -static gboolean | 2178 | -static gboolean |
| 2178 | -shortcuts_drag_outside_idle_cb (GtkFileChooserDefault *impl) | 2179 | -shortcuts_drag_outside_idle_cb (GtkFileChooserDefault *impl) |
| 2179 | +queue_edited_idle (GtkFileChooserDefault *impl, | 2180 | -{ |
| 2180 | + const gchar *new_text) | ||
| 2181 | { | ||
| 2182 | - GDK_THREADS_ENTER (); | 2181 | - GDK_THREADS_ENTER (); |
| 2183 | - | 2182 | - |
| 2184 | - shortcuts_drag_set_delete_cursor (impl, TRUE); | 2183 | - shortcuts_drag_set_delete_cursor (impl, TRUE); |
| @@ -2191,10 +2190,7 @@ | |||
| 2191 | - return FALSE; | 2190 | - return FALSE; |
| 2192 | -} | 2191 | -} |
| 2193 | -#endif | 2192 | -#endif |
| 2194 | + /* We create the folder in an idle handler so that we don't modify the tree | 2193 | - |
| 2195 | + * just now. | ||
| 2196 | + */ | ||
| 2197 | |||
| 2198 | -/* GtkWidget::drag-leave handler for the shortcuts list. We unhighlight the | 2194 | -/* GtkWidget::drag-leave handler for the shortcuts list. We unhighlight the |
| 2199 | - * drop position. | 2195 | - * drop position. |
| 2200 | - */ | 2196 | - */ |
| @@ -2214,36 +2210,22 @@ | |||
| 2214 | - g_source_attach (impl->shortcuts_drag_outside_idle, NULL); | 2210 | - g_source_attach (impl->shortcuts_drag_outside_idle, NULL); |
| 2215 | - } | 2211 | - } |
| 2216 | -#endif | 2212 | -#endif |
| 2217 | + g_assert (!impl->edited_idle); | 2213 | - |
| 2218 | + g_assert (!impl->edited_new_text); | ||
| 2219 | |||
| 2220 | - gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), | 2214 | - gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), |
| 2221 | - NULL, | 2215 | - NULL, |
| 2222 | - GTK_TREE_VIEW_DROP_BEFORE); | 2216 | - GTK_TREE_VIEW_DROP_BEFORE); |
| 2223 | + impl->edited_idle = g_idle_source_new (); | 2217 | - |
| 2224 | + g_source_set_closure (impl->edited_idle, | ||
| 2225 | + g_cclosure_new_object (G_CALLBACK (edited_idle_cb), | ||
| 2226 | + G_OBJECT (impl))); | ||
| 2227 | + g_source_attach (impl->edited_idle, NULL); | ||
| 2228 | |||
| 2229 | - g_signal_stop_emission_by_name (widget, "drag-leave"); | 2218 | - g_signal_stop_emission_by_name (widget, "drag-leave"); |
| 2230 | + if (new_text) | 2219 | -} |
| 2231 | + impl->edited_new_text = g_strdup (new_text); | 2220 | - |
| 2232 | } | ||
| 2233 | |||
| 2234 | -/* Computes the appropriate row and position for dropping */ | 2221 | -/* Computes the appropriate row and position for dropping */ |
| 2235 | +/* Callback used from the text cell renderer when the new folder is named */ | 2222 | -static void |
| 2236 | static void | ||
| 2237 | -shortcuts_compute_drop_position (GtkFileChooserDefault *impl, | 2223 | -shortcuts_compute_drop_position (GtkFileChooserDefault *impl, |
| 2238 | - int x, | 2224 | - int x, |
| 2239 | - int y, | 2225 | - int y, |
| 2240 | - GtkTreePath **path, | 2226 | - GtkTreePath **path, |
| 2241 | - GtkTreeViewDropPosition *pos) | 2227 | - GtkTreeViewDropPosition *pos) |
| 2242 | +renderer_edited_cb (GtkCellRendererText *cell_renderer_text, | 2228 | -{ |
| 2243 | + const gchar *path, | ||
| 2244 | + const gchar *new_text, | ||
| 2245 | + GtkFileChooserDefault *impl) | ||
| 2246 | { | ||
| 2247 | - GtkTreeView *tree_view; | 2229 | - GtkTreeView *tree_view; |
| 2248 | - GtkTreeViewColumn *column; | 2230 | - GtkTreeViewColumn *column; |
| 2249 | - int cell_y; | 2231 | - int cell_y; |
| @@ -2292,18 +2274,12 @@ | |||
| 2292 | - } | 2274 | - } |
| 2293 | - | 2275 | - |
| 2294 | - *path = gtk_tree_path_new_from_indices (row, -1); | 2276 | - *path = gtk_tree_path_new_from_indices (row, -1); |
| 2295 | + /* work around bug #154921 */ | 2277 | -} |
| 2296 | + g_object_set (cell_renderer_text, | 2278 | - |
| 2297 | + "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); | ||
| 2298 | + queue_edited_idle (impl, new_text); | ||
| 2299 | } | ||
| 2300 | |||
| 2301 | -/* GtkWidget::drag-motion handler for the shortcuts list. We basically | 2279 | -/* GtkWidget::drag-motion handler for the shortcuts list. We basically |
| 2302 | - * implement the destination side of DnD by hand, due to limitations in | 2280 | - * implement the destination side of DnD by hand, due to limitations in |
| 2303 | - * GtkTreeView's DnD API. | 2281 | - * GtkTreeView's DnD API. |
| 2304 | +/* Callback used from the text cell renderer when the new folder edition gets | 2282 | - */ |
| 2305 | + * canceled. | ||
| 2306 | */ | ||
| 2307 | -static gboolean | 2283 | -static gboolean |
| 2308 | -shortcuts_drag_motion_cb (GtkWidget *widget, | 2284 | -shortcuts_drag_motion_cb (GtkWidget *widget, |
| 2309 | - GdkDragContext *context, | 2285 | - GdkDragContext *context, |
| @@ -2417,12 +2393,10 @@ | |||
| 2417 | -} | 2393 | -} |
| 2418 | - | 2394 | - |
| 2419 | -/* Reorders the selected bookmark to the specified position */ | 2395 | -/* Reorders the selected bookmark to the specified position */ |
| 2420 | static void | 2396 | -static void |
| 2421 | -shortcuts_reorder (GtkFileChooserDefault *impl, | 2397 | -shortcuts_reorder (GtkFileChooserDefault *impl, |
| 2422 | - int new_position) | 2398 | - int new_position) |
| 2423 | +renderer_editing_canceled_cb (GtkCellRendererText *cell_renderer_text, | 2399 | -{ |
| 2424 | + GtkFileChooserDefault *impl) | ||
| 2425 | { | ||
| 2426 | - GtkTreeIter iter; | 2400 | - GtkTreeIter iter; |
| 2427 | - gpointer col_data; | 2401 | - gpointer col_data; |
| 2428 | - gboolean is_volume; | 2402 | - gboolean is_volume; |
| @@ -2473,12 +2447,8 @@ | |||
| 2473 | - out: | 2447 | - out: |
| 2474 | - | 2448 | - |
| 2475 | - gtk_file_path_free (file_path_copy); | 2449 | - gtk_file_path_free (file_path_copy); |
| 2476 | + /* work around bug #154921 */ | 2450 | -} |
| 2477 | + g_object_set (cell_renderer_text, | 2451 | - |
| 2478 | + "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); | ||
| 2479 | + queue_edited_idle (impl, NULL); | ||
| 2480 | } | ||
| 2481 | |||
| 2482 | -/* Callback used when we get the drag data for the bookmarks list. We add the | 2452 | -/* Callback used when we get the drag data for the bookmarks list. We add the |
| 2483 | - * received URIs as bookmarks if they are folders. | 2453 | - * received URIs as bookmarks if they are folders. |
| 2484 | - */ | 2454 | - */ |
| @@ -2492,8 +2462,7 @@ | |||
| 2492 | - guint time_, | 2462 | - guint time_, |
| 2493 | - gpointer data) | 2463 | - gpointer data) |
| 2494 | -{ | 2464 | -{ |
| 2495 | +struct selection_check_closure { | 2465 | - GtkFileChooserDefault *impl; |
| 2496 | GtkFileChooserDefault *impl; | ||
| 2497 | - GtkTreePath *tree_path; | 2466 | - GtkTreePath *tree_path; |
| 2498 | - GtkTreeViewDropPosition tree_pos; | 2467 | - GtkTreeViewDropPosition tree_pos; |
| 2499 | - int position; | 2468 | - int position; |
| @@ -2519,12 +2488,20 @@ | |||
| 2519 | - shortcuts_drop_uris (impl, selection_data->data, position); | 2488 | - shortcuts_drop_uris (impl, selection_data->data, position); |
| 2520 | - else if (selection_data->target == gdk_atom_intern ("GTK_TREE_MODEL_ROW", FALSE)) | 2489 | - else if (selection_data->target == gdk_atom_intern ("GTK_TREE_MODEL_ROW", FALSE)) |
| 2521 | - shortcuts_reorder (impl, position); | 2490 | - shortcuts_reorder (impl, position); |
| 2522 | - | 2491 | + impl->edited_idle = g_idle_source_new (); |
| 2492 | + g_source_set_closure (impl->edited_idle, | ||
| 2493 | + g_cclosure_new_object (G_CALLBACK (edited_idle_cb), | ||
| 2494 | + G_OBJECT (impl))); | ||
| 2495 | + g_source_attach (impl->edited_idle, NULL); | ||
| 2496 | |||
| 2523 | - g_signal_stop_emission_by_name (widget, "drag-data-received"); | 2497 | - g_signal_stop_emission_by_name (widget, "drag-data-received"); |
| 2524 | -} | 2498 | + if (new_text) |
| 2525 | - | 2499 | + impl->edited_new_text = g_strdup (new_text); |
| 2500 | } | ||
| 2501 | |||
| 2526 | -/* Callback used when the selection in the shortcuts tree changes */ | 2502 | -/* Callback used when the selection in the shortcuts tree changes */ |
| 2527 | -static void | 2503 | +/* Callback used from the text cell renderer when the new folder is named */ |
| 2504 | static void | ||
| 2528 | -shortcuts_selection_changed_cb (GtkTreeSelection *selection, | 2505 | -shortcuts_selection_changed_cb (GtkTreeSelection *selection, |
| 2529 | - GtkFileChooserDefault *impl) | 2506 | - GtkFileChooserDefault *impl) |
| 2530 | -{ | 2507 | -{ |
| @@ -2535,7 +2512,11 @@ | |||
| 2535 | -shortcuts_row_separator_func (GtkTreeModel *model, | 2512 | -shortcuts_row_separator_func (GtkTreeModel *model, |
| 2536 | - GtkTreeIter *iter, | 2513 | - GtkTreeIter *iter, |
| 2537 | - gpointer data) | 2514 | - gpointer data) |
| 2538 | -{ | 2515 | +renderer_edited_cb (GtkCellRendererText *cell_renderer_text, |
| 2516 | + const gchar *path, | ||
| 2517 | + const gchar *new_text, | ||
| 2518 | + GtkFileChooserDefault *impl) | ||
| 2519 | { | ||
| 2539 | - gint column = GPOINTER_TO_INT (data); | 2520 | - gint column = GPOINTER_TO_INT (data); |
| 2540 | - gchar *text; | 2521 | - gchar *text; |
| 2541 | - | 2522 | - |
| @@ -2547,16 +2528,25 @@ | |||
| 2547 | - g_free (text); | 2528 | - g_free (text); |
| 2548 | - | 2529 | - |
| 2549 | - return FALSE; | 2530 | - return FALSE; |
| 2550 | -} | 2531 | + /* work around bug #154921 */ |
| 2551 | - | 2532 | + g_object_set (cell_renderer_text, |
| 2533 | + "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); | ||
| 2534 | + queue_edited_idle (impl, new_text); | ||
| 2535 | } | ||
| 2536 | |||
| 2552 | -/* Since GtkTreeView has a keybinding attached to '/', we need to catch | 2537 | -/* Since GtkTreeView has a keybinding attached to '/', we need to catch |
| 2553 | - * keypresses before the TreeView gets them. | 2538 | - * keypresses before the TreeView gets them. |
| 2554 | - */ | 2539 | +/* Callback used from the text cell renderer when the new folder edition gets |
| 2540 | + * canceled. | ||
| 2541 | */ | ||
| 2555 | -static gboolean | 2542 | -static gboolean |
| 2556 | -tree_view_keybinding_cb (GtkWidget *tree_view, | 2543 | -tree_view_keybinding_cb (GtkWidget *tree_view, |
| 2557 | - GdkEventKey *event, | 2544 | - GdkEventKey *event, |
| 2558 | - GtkFileChooserDefault *impl) | 2545 | - GtkFileChooserDefault *impl) |
| 2559 | -{ | 2546 | +static void |
| 2547 | +renderer_editing_canceled_cb (GtkCellRendererText *cell_renderer_text, | ||
| 2548 | + GtkFileChooserDefault *impl) | ||
| 2549 | { | ||
| 2560 | - if (event->keyval == GDK_slash && | 2550 | - if (event->keyval == GDK_slash && |
| 2561 | - ! (event->state & (~GDK_SHIFT_MASK & gtk_accelerator_get_default_mod_mask ()))) | 2551 | - ! (event->state & (~GDK_SHIFT_MASK & gtk_accelerator_get_default_mod_mask ()))) |
| 2562 | - { | 2552 | - { |
| @@ -2565,13 +2555,19 @@ | |||
| 2565 | - } | 2555 | - } |
| 2566 | - | 2556 | - |
| 2567 | - return FALSE; | 2557 | - return FALSE; |
| 2568 | -} | 2558 | + /* work around bug #154921 */ |
| 2569 | - | 2559 | + g_object_set (cell_renderer_text, |
| 2560 | + "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); | ||
| 2561 | + queue_edited_idle (impl, NULL); | ||
| 2562 | } | ||
| 2563 | |||
| 2570 | - | 2564 | - |
| 2571 | -/* Creates the widgets for the shortcuts and bookmarks tree */ | 2565 | -/* Creates the widgets for the shortcuts and bookmarks tree */ |
| 2572 | -static GtkWidget * | 2566 | +/* Creates the widgets for the filter combo box */ |
| 2567 | static GtkWidget * | ||
| 2573 | -shortcuts_list_create (GtkFileChooserDefault *impl) | 2568 | -shortcuts_list_create (GtkFileChooserDefault *impl) |
| 2574 | -{ | 2569 | +filter_create (GtkFileChooserDefault *impl) |
| 2570 | { | ||
| 2575 | - GtkWidget *swin; | 2571 | - GtkWidget *swin; |
| 2576 | - GtkTreeSelection *selection; | 2572 | - GtkTreeSelection *selection; |
| 2577 | - GtkTreeViewColumn *column; | 2573 | - GtkTreeViewColumn *column; |
| @@ -2593,9 +2589,14 @@ | |||
| 2593 | - G_CALLBACK (tree_view_keybinding_cb), impl); | 2589 | - G_CALLBACK (tree_view_keybinding_cb), impl); |
| 2594 | - atk_object_set_name (gtk_widget_get_accessible (impl->browse_shortcuts_tree_view), _("Shortcuts")); | 2590 | - atk_object_set_name (gtk_widget_get_accessible (impl->browse_shortcuts_tree_view), _("Shortcuts")); |
| 2595 | - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), FALSE); | 2591 | - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), FALSE); |
| 2596 | - | 2592 | + impl->filter_combo = gtk_combo_box_new_text (); |
| 2593 | + g_signal_connect (impl->filter_combo, "changed", | ||
| 2594 | + G_CALLBACK (filter_combo_changed), impl); | ||
| 2595 | |||
| 2597 | - gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), impl->shortcuts_filter_model); | 2596 | - gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), impl->shortcuts_filter_model); |
| 2598 | - | 2597 | + return impl->filter_combo; |
| 2598 | +} | ||
| 2599 | |||
| 2599 | - gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), | 2600 | - gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), |
| 2600 | - GDK_BUTTON1_MASK, | 2601 | - GDK_BUTTON1_MASK, |
| 2601 | - shortcuts_source_targets, | 2602 | - shortcuts_source_targets, |
| @@ -2607,22 +2608,44 @@ | |||
| 2607 | - shortcuts_dest_targets, | 2608 | - shortcuts_dest_targets, |
| 2608 | - num_shortcuts_dest_targets, | 2609 | - num_shortcuts_dest_targets, |
| 2609 | - GDK_ACTION_COPY | GDK_ACTION_MOVE); | 2610 | - GDK_ACTION_COPY | GDK_ACTION_MOVE); |
| 2610 | - | 2611 | +struct selection_check_closure { |
| 2612 | + GtkFileChooserDefault *impl; | ||
| 2613 | + int num_selected; | ||
| 2614 | + gboolean all_files; | ||
| 2615 | + gboolean all_folders; | ||
| 2616 | +}; | ||
| 2617 | |||
| 2611 | - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); | 2618 | - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); |
| 2612 | - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); | 2619 | - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); |
| 2613 | - gtk_tree_selection_set_select_function (selection, | 2620 | - gtk_tree_selection_set_select_function (selection, |
| 2614 | - shortcuts_select_func, | 2621 | - shortcuts_select_func, |
| 2615 | - impl, NULL); | 2622 | - impl, NULL); |
| 2616 | - | 2623 | +/* Used from gtk_tree_selection_selected_foreach() */ |
| 2624 | +static void | ||
| 2625 | +selection_check_foreach_cb (GtkTreeModel *model, | ||
| 2626 | + GtkTreePath *path, | ||
| 2627 | + GtkTreeIter *iter, | ||
| 2628 | + gpointer data) | ||
| 2629 | +{ | ||
| 2630 | + struct selection_check_closure *closure; | ||
| 2631 | + GtkTreeIter child_iter; | ||
| 2632 | + const GtkFileInfo *info; | ||
| 2633 | + gboolean is_folder; | ||
| 2634 | |||
| 2617 | - g_signal_connect (selection, "changed", | 2635 | - g_signal_connect (selection, "changed", |
| 2618 | - G_CALLBACK (shortcuts_selection_changed_cb), impl); | 2636 | - G_CALLBACK (shortcuts_selection_changed_cb), impl); |
| 2619 | - | 2637 | + closure = data; |
| 2638 | + closure->num_selected++; | ||
| 2639 | |||
| 2620 | - g_signal_connect (impl->browse_shortcuts_tree_view, "row-activated", | 2640 | - g_signal_connect (impl->browse_shortcuts_tree_view, "row-activated", |
| 2621 | - G_CALLBACK (shortcuts_row_activated_cb), impl); | 2641 | - G_CALLBACK (shortcuts_row_activated_cb), impl); |
| 2622 | - | 2642 | + gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter); |
| 2643 | |||
| 2623 | - g_signal_connect (impl->browse_shortcuts_tree_view, "key-press-event", | 2644 | - g_signal_connect (impl->browse_shortcuts_tree_view, "key-press-event", |
| 2624 | - G_CALLBACK (shortcuts_key_press_event_cb), impl); | 2645 | - G_CALLBACK (shortcuts_key_press_event_cb), impl); |
| 2625 | - | 2646 | + info = _gtk_file_system_model_get_info (closure->impl->browse_files_model, &child_iter); |
| 2647 | + is_folder = info ? gtk_file_info_get_is_folder (info) : FALSE; | ||
| 2648 | |||
| 2626 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-begin", | 2649 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-begin", |
| 2627 | - G_CALLBACK (shortcuts_drag_begin_cb), impl); | 2650 | - G_CALLBACK (shortcuts_drag_begin_cb), impl); |
| 2628 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-end", | 2651 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-end", |
| @@ -2638,29 +2661,34 @@ | |||
| 2638 | - G_CALLBACK (shortcuts_drag_drop_cb), impl); | 2661 | - G_CALLBACK (shortcuts_drag_drop_cb), impl); |
| 2639 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-data-received", | 2662 | - g_signal_connect (impl->browse_shortcuts_tree_view, "drag-data-received", |
| 2640 | - G_CALLBACK (shortcuts_drag_data_received_cb), impl); | 2663 | - G_CALLBACK (shortcuts_drag_data_received_cb), impl); |
| 2641 | - | 2664 | + closure->all_folders = closure->all_folders && is_folder; |
| 2665 | + closure->all_files = closure->all_files && !is_folder; | ||
| 2666 | +} | ||
| 2667 | |||
| 2642 | - gtk_container_add (GTK_CONTAINER (swin), impl->browse_shortcuts_tree_view); | 2668 | - gtk_container_add (GTK_CONTAINER (swin), impl->browse_shortcuts_tree_view); |
| 2643 | - gtk_widget_show (impl->browse_shortcuts_tree_view); | 2669 | - gtk_widget_show (impl->browse_shortcuts_tree_view); |
| 2644 | - | 2670 | +/* Checks whether the selected items in the file list are all files or all folders */ |
| 2671 | +static void | ||
| 2672 | +selection_check (GtkFileChooserDefault *impl, | ||
| 2673 | + gint *num_selected, | ||
| 2674 | + gboolean *all_files, | ||
| 2675 | + gboolean *all_folders) | ||
| 2676 | +{ | ||
| 2677 | + struct selection_check_closure closure; | ||
| 2678 | + GtkTreeSelection *selection; | ||
| 2679 | |||
| 2645 | - /* Column */ | 2680 | - /* Column */ |
| 2646 | + int num_selected; | 2681 | + closure.impl = impl; |
| 2647 | + gboolean all_files; | 2682 | + closure.num_selected = 0; |
| 2648 | + gboolean all_folders; | 2683 | + closure.all_files = TRUE; |
| 2649 | +}; | 2684 | + closure.all_folders = TRUE; |
| 2650 | 2685 | ||
| 2651 | - column = gtk_tree_view_column_new (); | 2686 | - column = gtk_tree_view_column_new (); |
| 2652 | - gtk_tree_view_column_set_title (column, _("Folder")); | 2687 | - gtk_tree_view_column_set_title (column, _("Folder")); |
| 2653 | +/* Used from gtk_tree_selection_selected_foreach() */ | 2688 | + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); |
| 2654 | +static void | 2689 | + gtk_tree_selection_selected_foreach (selection, |
| 2655 | +selection_check_foreach_cb (GtkTreeModel *model, | 2690 | + selection_check_foreach_cb, |
| 2656 | + GtkTreePath *path, | 2691 | + &closure); |
| 2657 | + GtkTreeIter *iter, | ||
| 2658 | + gpointer data) | ||
| 2659 | +{ | ||
| 2660 | + struct selection_check_closure *closure; | ||
| 2661 | + GtkTreeIter child_iter; | ||
| 2662 | + const GtkFileInfo *info; | ||
| 2663 | + gboolean is_folder; | ||
| 2664 | 2692 | ||
| 2665 | - renderer = gtk_cell_renderer_pixbuf_new (); | 2693 | - renderer = gtk_cell_renderer_pixbuf_new (); |
| 2666 | - gtk_tree_view_column_pack_start (column, renderer, FALSE); | 2694 | - gtk_tree_view_column_pack_start (column, renderer, FALSE); |
| @@ -2668,8 +2696,7 @@ | |||
| 2668 | - "pixbuf", SHORTCUTS_COL_PIXBUF, | 2696 | - "pixbuf", SHORTCUTS_COL_PIXBUF, |
| 2669 | - "visible", SHORTCUTS_COL_PIXBUF_VISIBLE, | 2697 | - "visible", SHORTCUTS_COL_PIXBUF_VISIBLE, |
| 2670 | - NULL); | 2698 | - NULL); |
| 2671 | + closure = data; | 2699 | + g_assert (closure.num_selected == 0 || !(closure.all_files && closure.all_folders)); |
| 2672 | + closure->num_selected++; | ||
| 2673 | 2700 | ||
| 2674 | - renderer = gtk_cell_renderer_text_new (); | 2701 | - renderer = gtk_cell_renderer_text_new (); |
| 2675 | - gtk_tree_view_column_pack_start (column, renderer, TRUE); | 2702 | - gtk_tree_view_column_pack_start (column, renderer, TRUE); |
| @@ -2681,72 +2708,49 @@ | |||
| 2681 | - shortcuts_row_separator_func, | 2708 | - shortcuts_row_separator_func, |
| 2682 | - GINT_TO_POINTER (SHORTCUTS_COL_NAME), | 2709 | - GINT_TO_POINTER (SHORTCUTS_COL_NAME), |
| 2683 | - NULL); | 2710 | - NULL); |
| 2684 | + gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter); | 2711 | + if (num_selected) |
| 2712 | + *num_selected = closure.num_selected; | ||
| 2685 | 2713 | ||
| 2686 | - gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), column); | 2714 | - gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view), column); |
| 2687 | + info = _gtk_file_system_model_get_info (closure->impl->browse_files_model, &child_iter); | 2715 | + if (all_files) |
| 2688 | + is_folder = info ? gtk_file_info_get_is_folder (info) : FALSE; | 2716 | + *all_files = closure.all_files; |
| 2689 | 2717 | ||
| 2690 | - return swin; | 2718 | - return swin; |
| 2691 | + closure->all_folders = closure->all_folders && is_folder; | 2719 | + if (all_folders) |
| 2692 | + closure->all_files = closure->all_files && !is_folder; | 2720 | + *all_folders = closure.all_folders; |
| 2693 | } | 2721 | } |
| 2694 | 2722 | ||
| 2695 | -/* Creates the widgets for the shortcuts/bookmarks pane */ | 2723 | -/* Creates the widgets for the shortcuts/bookmarks pane */ |
| 2696 | -static GtkWidget * | 2724 | -static GtkWidget * |
| 2697 | -shortcuts_pane_create (GtkFileChooserDefault *impl, | 2725 | -shortcuts_pane_create (GtkFileChooserDefault *impl, |
| 2698 | - GtkSizeGroup *size_group) | 2726 | - GtkSizeGroup *size_group) |
| 2699 | +/* Checks whether the selected items in the file list are all files or all folders */ | 2727 | -{ |
| 2700 | +static void | ||
| 2701 | +selection_check (GtkFileChooserDefault *impl, | ||
| 2702 | + gint *num_selected, | ||
| 2703 | + gboolean *all_files, | ||
| 2704 | + gboolean *all_folders) | ||
| 2705 | { | ||
| 2706 | - GtkWidget *vbox; | 2728 | - GtkWidget *vbox; |
| 2707 | - GtkWidget *hbox; | 2729 | - GtkWidget *hbox; |
| 2708 | - GtkWidget *widget; | 2730 | - GtkWidget *widget; |
| 2709 | + struct selection_check_closure closure; | 2731 | - |
| 2710 | + GtkTreeSelection *selection; | ||
| 2711 | |||
| 2712 | - vbox = gtk_vbox_new (FALSE, 6); | 2732 | - vbox = gtk_vbox_new (FALSE, 6); |
| 2713 | - gtk_widget_show (vbox); | 2733 | - gtk_widget_show (vbox); |
| 2714 | + closure.impl = impl; | 2734 | - |
| 2715 | + closure.num_selected = 0; | ||
| 2716 | + closure.all_files = TRUE; | ||
| 2717 | + closure.all_folders = TRUE; | ||
| 2718 | + | ||
| 2719 | + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); | ||
| 2720 | + gtk_tree_selection_selected_foreach (selection, | ||
| 2721 | + selection_check_foreach_cb, | ||
| 2722 | + &closure); | ||
| 2723 | |||
| 2724 | - /* Shortcuts tree */ | 2735 | - /* Shortcuts tree */ |
| 2725 | + g_assert (closure.num_selected == 0 || !(closure.all_files && closure.all_folders)); | 2736 | - |
| 2726 | |||
| 2727 | - widget = shortcuts_list_create (impl); | 2737 | - widget = shortcuts_list_create (impl); |
| 2728 | - gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0); | 2738 | - gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0); |
| 2729 | + if (num_selected) | 2739 | - |
| 2730 | + *num_selected = closure.num_selected; | ||
| 2731 | |||
| 2732 | - /* Box for buttons */ | 2740 | - /* Box for buttons */ |
| 2733 | + if (all_files) | 2741 | - |
| 2734 | + *all_files = closure.all_files; | ||
| 2735 | |||
| 2736 | - hbox = gtk_hbox_new (TRUE, 6); | 2742 | - hbox = gtk_hbox_new (TRUE, 6); |
| 2737 | - gtk_size_group_add_widget (size_group, hbox); | 2743 | - gtk_size_group_add_widget (size_group, hbox); |
| 2738 | - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); | 2744 | - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); |
| 2739 | - gtk_widget_show (hbox); | 2745 | - gtk_widget_show (hbox); |
| 2740 | + if (all_folders) | ||
| 2741 | + *all_folders = closure.all_folders; | ||
| 2742 | +} | ||
| 2743 | |||
| 2744 | - /* Add bookmark button */ | ||
| 2745 | +struct get_selected_path_closure { | 2746 | +struct get_selected_path_closure { |
| 2746 | + GtkFileChooserDefault *impl; | 2747 | + GtkFileChooserDefault *impl; |
| 2747 | + const GtkFilePath *path; | 2748 | + const GtkFilePath *path; |
| 2748 | +}; | 2749 | +}; |
| 2749 | 2750 | ||
| 2751 | - /* Add bookmark button */ | ||
| 2752 | +/* Returns a selected path from the file list */ | ||
| 2753 | |||
| 2750 | - impl->browse_shortcuts_add_button = button_new (impl, | 2754 | - impl->browse_shortcuts_add_button = button_new (impl, |
| 2751 | - _("_Add"), | 2755 | - _("_Add"), |
| 2752 | - GTK_STOCK_ADD, | 2756 | - GTK_STOCK_ADD, |
| @@ -2768,8 +2772,6 @@ | |||
| 2768 | - gtk_box_pack_start (GTK_BOX (hbox), impl->browse_shortcuts_remove_button, TRUE, TRUE, 0); | 2772 | - gtk_box_pack_start (GTK_BOX (hbox), impl->browse_shortcuts_remove_button, TRUE, TRUE, 0); |
| 2769 | - gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_remove_button, | 2773 | - gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_remove_button, |
| 2770 | - _("Remove the selected bookmark"), NULL); | 2774 | - _("Remove the selected bookmark"), NULL); |
| 2771 | +/* Returns a selected path from the file list */ | ||
| 2772 | + | ||
| 2773 | +typedef struct { | 2775 | +typedef struct { |
| 2774 | + GtkFileChooserDefault *impl; | 2776 | + GtkFileChooserDefault *impl; |
| 2775 | + gchar *tip; | 2777 | + gchar *tip; |
| @@ -2780,7 +2782,7 @@ | |||
| 2780 | 2782 | ||
| 2781 | /* Handles key press events on the file list, so that we can trap Enter to | 2783 | /* Handles key press events on the file list, so that we can trap Enter to |
| 2782 | * activate the default button on our own. Also, checks to see if '/' has been | 2784 | * activate the default button on our own. Also, checks to see if '/' has been |
| 2783 | @@ -3026,14 +1051,11 @@ | 2785 | @@ -3026,14 +1085,11 @@ |
| 2784 | gpointer data) | 2786 | gpointer data) |
| 2785 | { | 2787 | { |
| 2786 | GtkFileChooserDefault *impl; | 2788 | GtkFileChooserDefault *impl; |
| @@ -2796,7 +2798,7 @@ | |||
| 2796 | { | 2798 | { |
| 2797 | location_popup_handler (impl, "/"); | 2799 | location_popup_handler (impl, "/"); |
| 2798 | return TRUE; | 2800 | return TRUE; |
| 2799 | @@ -3043,7 +1065,6 @@ | 2801 | @@ -3043,7 +1099,6 @@ |
| 2800 | || event->keyval == GDK_ISO_Enter | 2802 | || event->keyval == GDK_ISO_Enter |
| 2801 | || event->keyval == GDK_KP_Enter | 2803 | || event->keyval == GDK_KP_Enter |
| 2802 | || event->keyval == GDK_space) | 2804 | || event->keyval == GDK_space) |
| @@ -2804,7 +2806,7 @@ | |||
| 2804 | && !(impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || | 2806 | && !(impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || |
| 2805 | impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) | 2807 | impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) |
| 2806 | { | 2808 | { |
| 2807 | @@ -3063,37 +1084,7 @@ | 2809 | @@ -3063,37 +1118,7 @@ |
| 2808 | return FALSE; | 2810 | return FALSE; |
| 2809 | } | 2811 | } |
| 2810 | 2812 | ||
| @@ -2843,7 +2845,7 @@ | |||
| 2843 | /* Callback used when the "Show Hidden Files" menu item is toggled */ | 2845 | /* Callback used when the "Show Hidden Files" menu item is toggled */ |
| 2844 | static void | 2846 | static void |
| 2845 | show_hidden_toggled_cb (GtkCheckMenuItem *item, | 2847 | show_hidden_toggled_cb (GtkCheckMenuItem *item, |
| 2846 | @@ -3103,145 +1094,7 @@ | 2848 | @@ -3103,145 +1128,7 @@ |
| 2847 | "show-hidden", gtk_check_menu_item_get_active (item), | 2849 | "show-hidden", gtk_check_menu_item_get_active (item), |
| 2848 | NULL); | 2850 | NULL); |
| 2849 | } | 2851 | } |
| @@ -2990,7 +2992,7 @@ | |||
| 2990 | 2992 | ||
| 2991 | /* Creates the widgets for the file list */ | 2993 | /* Creates the widgets for the file list */ |
| 2992 | static GtkWidget * | 2994 | static GtkWidget * |
| 2993 | @@ -3272,11 +1125,7 @@ | 2995 | @@ -3272,11 +1159,7 @@ |
| 2994 | G_CALLBACK (list_row_activated), impl); | 2996 | G_CALLBACK (list_row_activated), impl); |
| 2995 | g_signal_connect (impl->browse_files_tree_view, "key-press-event", | 2997 | g_signal_connect (impl->browse_files_tree_view, "key-press-event", |
| 2996 | G_CALLBACK (trap_activate_cb), impl); | 2998 | G_CALLBACK (trap_activate_cb), impl); |
| @@ -3003,7 +3005,7 @@ | |||
| 3003 | selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); | 3005 | selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); |
| 3004 | gtk_tree_selection_set_select_function (selection, | 3006 | gtk_tree_selection_set_select_function (selection, |
| 3005 | list_select_func, | 3007 | list_select_func, |
| 3006 | @@ -3346,70 +1195,158 @@ | 3008 | @@ -3346,70 +1229,163 @@ |
| 3007 | return swin; | 3009 | return swin; |
| 3008 | } | 3010 | } |
| 3009 | 3011 | ||
| @@ -3131,16 +3133,16 @@ | |||
| 3131 | + gtk_widget_show_all (button); | 3133 | + gtk_widget_show_all (button); |
| 3132 | + | 3134 | + |
| 3133 | + g_object_set_data (G_OBJECT (button), "file-path", base_path); | 3135 | + g_object_set_data (G_OBJECT (button), "file-path", base_path); |
| 3134 | + | 3136 | |
| 3137 | - gtk_container_forall (GTK_CONTAINER (combo), | ||
| 3138 | - set_filter_tooltip, | ||
| 3139 | - impl->tooltips); | ||
| 3135 | + g_signal_connect (button, "clicked", | 3140 | + g_signal_connect (button, "clicked", |
| 3136 | + G_CALLBACK (volume_button_clicked_cb), impl); | 3141 | + G_CALLBACK (volume_button_clicked_cb), impl); |
| 3137 | + | 3142 | + |
| 3138 | + gtk_box_pack_start (GTK_BOX(bar), button, FALSE, FALSE, 0); | 3143 | + gtk_box_pack_start (GTK_BOX(bar), button, FALSE, FALSE, 0); |
| 3139 | + } | 3144 | + } |
| 3140 | 3145 | + | |
| 3141 | - gtk_container_forall (GTK_CONTAINER (combo), | ||
| 3142 | - set_filter_tooltip, | ||
| 3143 | - impl->tooltips); | ||
| 3144 | + impl->num_volumes = n; | 3146 | + impl->num_volumes = n; |
| 3145 | + g_slist_free (list); | 3147 | + g_slist_free (list); |
| 3146 | + | 3148 | + |
| @@ -3188,6 +3190,11 @@ | |||
| 3188 | g_signal_connect (impl->browse_new_folder_button, "clicked", | 3190 | g_signal_connect (impl->browse_new_folder_button, "clicked", |
| 3189 | G_CALLBACK (new_folder_button_clicked), impl); | 3191 | G_CALLBACK (new_folder_button_clicked), impl); |
| 3190 | gtk_box_pack_end (GTK_BOX (hbox), impl->browse_new_folder_button, FALSE, FALSE, 0); | 3192 | gtk_box_pack_end (GTK_BOX (hbox), impl->browse_new_folder_button, FALSE, FALSE, 0); |
| 3193 | + | ||
| 3194 | + widget = filter_create (impl); | ||
| 3195 | + gtk_widget_hide (widget); | ||
| 3196 | + gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 0); | ||
| 3197 | + | ||
| 3191 | gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); | 3198 | gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); |
| 3192 | 3199 | ||
| 3193 | - /* Box for lists and preview */ | 3200 | - /* Box for lists and preview */ |
| @@ -3198,7 +3205,7 @@ | |||
| 3198 | gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); | 3205 | gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); |
| 3199 | gtk_widget_show (hbox); | 3206 | gtk_widget_show (hbox); |
| 3200 | 3207 | ||
| 3201 | @@ -3418,157 +1355,37 @@ | 3208 | @@ -3418,157 +1394,37 @@ |
| 3202 | widget = create_file_list (impl); | 3209 | widget = create_file_list (impl); |
| 3203 | gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); | 3210 | gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); |
| 3204 | 3211 | ||
| @@ -3296,7 +3303,7 @@ | |||
| 3296 | + GtkWidget *hbox; | 3303 | + GtkWidget *hbox; |
| 3297 | GtkWidget *widget; | 3304 | GtkWidget *widget; |
| 3298 | - GtkWidget *alignment; | 3305 | - GtkWidget *alignment; |
| 3299 | - | 3306 | |
| 3300 | - vbox = gtk_vbox_new (FALSE, 12); | 3307 | - vbox = gtk_vbox_new (FALSE, 12); |
| 3301 | - | 3308 | - |
| 3302 | - table = gtk_table_new (2, 2, FALSE); | 3309 | - table = gtk_table_new (2, 2, FALSE); |
| @@ -3306,7 +3313,7 @@ | |||
| 3306 | - gtk_table_set_col_spacings (GTK_TABLE (table), 12); | 3313 | - gtk_table_set_col_spacings (GTK_TABLE (table), 12); |
| 3307 | - | 3314 | - |
| 3308 | - /* Name entry */ | 3315 | - /* Name entry */ |
| 3309 | 3316 | - | |
| 3310 | - widget = gtk_label_new_with_mnemonic (_("_Name:")); | 3317 | - widget = gtk_label_new_with_mnemonic (_("_Name:")); |
| 3311 | + vbox = gtk_vbox_new (FALSE, 0); | 3318 | + vbox = gtk_vbox_new (FALSE, 0); |
| 3312 | + hbox = gtk_hbox_new (FALSE, DEFAULT_SPACING); | 3319 | + hbox = gtk_hbox_new (FALSE, DEFAULT_SPACING); |
| @@ -3368,7 +3375,7 @@ | |||
| 3368 | return vbox; | 3375 | return vbox; |
| 3369 | } | 3376 | } |
| 3370 | 3377 | ||
| 3371 | @@ -3576,29 +1393,11 @@ | 3378 | @@ -3576,29 +1432,11 @@ |
| 3372 | static GtkWidget * | 3379 | static GtkWidget * |
| 3373 | browse_widgets_create (GtkFileChooserDefault *impl) | 3380 | browse_widgets_create (GtkFileChooserDefault *impl) |
| 3374 | { | 3381 | { |
| @@ -3376,7 +3383,7 @@ | |||
| 3376 | - GtkWidget *hpaned; | 3383 | - GtkWidget *hpaned; |
| 3377 | GtkWidget *widget; | 3384 | GtkWidget *widget; |
| 3378 | - GtkSizeGroup *size_group; | 3385 | - GtkSizeGroup *size_group; |
| 3379 | - | 3386 | |
| 3380 | - /* size group is used by the [+][-] buttons and the filter combo */ | 3387 | - /* size group is used by the [+][-] buttons and the filter combo */ |
| 3381 | - size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); | 3388 | - size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); |
| 3382 | - vbox = gtk_vbox_new (FALSE, 12); | 3389 | - vbox = gtk_vbox_new (FALSE, 12); |
| @@ -3391,16 +3398,16 @@ | |||
| 3391 | - gtk_paned_pack1 (GTK_PANED (hpaned), widget, FALSE, FALSE); | 3398 | - gtk_paned_pack1 (GTK_PANED (hpaned), widget, FALSE, FALSE); |
| 3392 | - widget = file_pane_create (impl, size_group); | 3399 | - widget = file_pane_create (impl, size_group); |
| 3393 | - gtk_paned_pack2 (GTK_PANED (hpaned), widget, TRUE, FALSE); | 3400 | - gtk_paned_pack2 (GTK_PANED (hpaned), widget, TRUE, FALSE); |
| 3394 | |||
| 3395 | - g_object_unref (size_group); | ||
| 3396 | + widget = file_pane_create (impl); | 3401 | + widget = file_pane_create (impl); |
| 3397 | 3402 | ||
| 3403 | - g_object_unref (size_group); | ||
| 3404 | - | ||
| 3398 | - return vbox; | 3405 | - return vbox; |
| 3399 | + return widget; | 3406 | + return widget; |
| 3400 | } | 3407 | } |
| 3401 | 3408 | ||
| 3402 | static GObject* | 3409 | static GObject* |
| 3403 | @@ -3618,54 +1417,18 @@ | 3410 | @@ -3618,56 +1456,20 @@ |
| 3404 | 3411 | ||
| 3405 | gtk_widget_push_composite_child (); | 3412 | gtk_widget_push_composite_child (); |
| 3406 | 3413 | ||
| @@ -3420,12 +3427,16 @@ | |||
| 3420 | - impl->extra_align = gtk_alignment_new (0.0, 0.5, 1.0, 1.0); | 3427 | - impl->extra_align = gtk_alignment_new (0.0, 0.5, 1.0, 1.0); |
| 3421 | - gtk_box_pack_start (GTK_BOX (impl), impl->extra_align, FALSE, FALSE, 0); | 3428 | - gtk_box_pack_start (GTK_BOX (impl), impl->extra_align, FALSE, FALSE, 0); |
| 3422 | - | 3429 | - |
| 3423 | - gtk_widget_pop_composite_child (); | 3430 | + /* Widgets for Save mode */ |
| 3424 | - update_appearance (impl); | 3431 | + impl->save_widgets = save_widgets_create (impl); |
| 3425 | - | 3432 | + gtk_box_pack_start (GTK_BOX (impl), impl->save_widgets, FALSE, FALSE, 0); |
| 3426 | - return object; | 3433 | + |
| 3427 | -} | 3434 | gtk_widget_pop_composite_child (); |
| 3428 | - | 3435 | update_appearance (impl); |
| 3436 | |||
| 3437 | return object; | ||
| 3438 | } | ||
| 3439 | |||
| 3429 | -/* Sets the extra_widget by packing it in the appropriate place */ | 3440 | -/* Sets the extra_widget by packing it in the appropriate place */ |
| 3430 | -static void | 3441 | -static void |
| 3431 | -set_extra_widget (GtkFileChooserDefault *impl, | 3442 | -set_extra_widget (GtkFileChooserDefault *impl, |
| @@ -3443,13 +3454,7 @@ | |||
| 3443 | - gtk_container_remove (GTK_CONTAINER (impl->extra_align), impl->extra_widget); | 3454 | - gtk_container_remove (GTK_CONTAINER (impl->extra_align), impl->extra_widget); |
| 3444 | - g_object_unref (impl->extra_widget); | 3455 | - g_object_unref (impl->extra_widget); |
| 3445 | - } | 3456 | - } |
| 3446 | + /* Widgets for Save mode */ | 3457 | - |
| 3447 | + impl->save_widgets = save_widgets_create (impl); | ||
| 3448 | + gtk_box_pack_start (GTK_BOX (impl), impl->save_widgets, FALSE, FALSE, 0); | ||
| 3449 | + | ||
| 3450 | + gtk_widget_pop_composite_child (); | ||
| 3451 | + update_appearance (impl); | ||
| 3452 | |||
| 3453 | - impl->extra_widget = extra_widget; | 3458 | - impl->extra_widget = extra_widget; |
| 3454 | - if (impl->extra_widget) | 3459 | - if (impl->extra_widget) |
| 3455 | - { | 3460 | - { |
| @@ -3458,11 +3463,12 @@ | |||
| 3458 | - } | 3463 | - } |
| 3459 | - else | 3464 | - else |
| 3460 | - gtk_widget_hide (impl->extra_align); | 3465 | - gtk_widget_hide (impl->extra_align); |
| 3461 | + return object; | 3466 | -} |
| 3462 | } | 3467 | - |
| 3463 | |||
| 3464 | static void | 3468 | static void |
| 3465 | @@ -3676,12 +1439,6 @@ | 3469 | set_local_only (GtkFileChooserDefault *impl, |
| 3470 | gboolean local_only) | ||
| 3471 | @@ -3676,12 +1478,6 @@ | ||
| 3466 | { | 3472 | { |
| 3467 | impl->local_only = local_only; | 3473 | impl->local_only = local_only; |
| 3468 | 3474 | ||
| @@ -3475,7 +3481,7 @@ | |||
| 3475 | if (local_only && | 3481 | if (local_only && |
| 3476 | !gtk_file_system_path_is_local (impl->file_system, impl->current_folder)) | 3482 | !gtk_file_system_path_is_local (impl->file_system, impl->current_folder)) |
| 3477 | { | 3483 | { |
| 3478 | @@ -3708,18 +1465,7 @@ | 3484 | @@ -3708,18 +1504,7 @@ |
| 3479 | volumes_changed_cb (GtkFileSystem *file_system, | 3485 | volumes_changed_cb (GtkFileSystem *file_system, |
| 3480 | GtkFileChooserDefault *impl) | 3486 | GtkFileChooserDefault *impl) |
| 3481 | { | 3487 | { |
| @@ -3495,7 +3501,7 @@ | |||
| 3495 | } | 3501 | } |
| 3496 | 3502 | ||
| 3497 | /* Sets the file chooser to multiple selection mode */ | 3503 | /* Sets the file chooser to multiple selection mode */ |
| 3498 | @@ -3741,8 +1487,6 @@ | 3504 | @@ -3741,8 +1526,6 @@ |
| 3499 | 3505 | ||
| 3500 | impl->select_multiple = select_multiple; | 3506 | impl->select_multiple = select_multiple; |
| 3501 | g_object_notify (G_OBJECT (impl), "select-multiple"); | 3507 | g_object_notify (G_OBJECT (impl), "select-multiple"); |
| @@ -3504,7 +3510,7 @@ | |||
| 3504 | } | 3510 | } |
| 3505 | 3511 | ||
| 3506 | static void | 3512 | static void |
| 3507 | @@ -3753,8 +1497,6 @@ | 3513 | @@ -3753,8 +1536,6 @@ |
| 3508 | { | 3514 | { |
| 3509 | g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id); | 3515 | g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id); |
| 3510 | impl->volumes_changed_id = 0; | 3516 | impl->volumes_changed_id = 0; |
| @@ -3513,7 +3519,7 @@ | |||
| 3513 | g_object_unref (impl->file_system); | 3519 | g_object_unref (impl->file_system); |
| 3514 | } | 3520 | } |
| 3515 | 3521 | ||
| 3516 | @@ -3790,9 +1532,6 @@ | 3522 | @@ -3790,9 +1571,6 @@ |
| 3517 | impl->volumes_changed_id = g_signal_connect (impl->file_system, "volumes-changed", | 3523 | impl->volumes_changed_id = g_signal_connect (impl->file_system, "volumes-changed", |
| 3518 | G_CALLBACK (volumes_changed_cb), | 3524 | G_CALLBACK (volumes_changed_cb), |
| 3519 | impl); | 3525 | impl); |
| @@ -3523,7 +3529,7 @@ | |||
| 3523 | } | 3529 | } |
| 3524 | } | 3530 | } |
| 3525 | 3531 | ||
| 3526 | @@ -3807,30 +1546,8 @@ | 3532 | @@ -3807,30 +1585,8 @@ |
| 3527 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE || | 3533 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE || |
| 3528 | impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) | 3534 | impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) |
| 3529 | { | 3535 | { |
| @@ -3555,7 +3561,7 @@ | |||
| 3555 | gtk_widget_show (impl->browse_new_folder_button); | 3561 | gtk_widget_show (impl->browse_new_folder_button); |
| 3556 | 3562 | ||
| 3557 | if (impl->select_multiple) | 3563 | if (impl->select_multiple) |
| 3558 | @@ -3844,6 +1561,7 @@ | 3564 | @@ -3844,6 +1600,7 @@ |
| 3559 | impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) | 3565 | impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) |
| 3560 | { | 3566 | { |
| 3561 | gtk_widget_hide (impl->save_widgets); | 3567 | gtk_widget_hide (impl->save_widgets); |
| @@ -3563,7 +3569,7 @@ | |||
| 3563 | gtk_widget_show (impl->browse_widgets); | 3569 | gtk_widget_show (impl->browse_widgets); |
| 3564 | } | 3570 | } |
| 3565 | 3571 | ||
| 3566 | @@ -3876,12 +1594,9 @@ | 3572 | @@ -3876,12 +1633,9 @@ |
| 3567 | { | 3573 | { |
| 3568 | gtk_file_chooser_default_unselect_all (GTK_FILE_CHOOSER (impl)); | 3574 | gtk_file_chooser_default_unselect_all (GTK_FILE_CHOOSER (impl)); |
| 3569 | 3575 | ||
| @@ -3578,13 +3584,7 @@ | |||
| 3578 | set_select_multiple (impl, FALSE, TRUE); | 3584 | set_select_multiple (impl, FALSE, TRUE); |
| 3579 | } | 3585 | } |
| 3580 | impl->action = action; | 3586 | impl->action = action; |
| 3581 | @@ -3896,35 +1611,15 @@ | 3587 | @@ -3902,29 +1656,12 @@ |
| 3582 | case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND: | ||
| 3583 | set_file_system_backend (impl, g_value_get_string (value)); | ||
| 3584 | break; | ||
| 3585 | - case GTK_FILE_CHOOSER_PROP_FILTER: | ||
| 3586 | - set_current_filter (impl, g_value_get_object (value)); | ||
| 3587 | - break; | ||
| 3588 | case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: | 3588 | case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: |
| 3589 | set_local_only (impl, g_value_get_boolean (value)); | 3589 | set_local_only (impl, g_value_get_boolean (value)); |
| 3590 | break; | 3590 | break; |
| @@ -3616,7 +3616,7 @@ | |||
| 3616 | return; | 3616 | return; |
| 3617 | } | 3617 | } |
| 3618 | 3618 | ||
| 3619 | @@ -3943,6 +1638,11 @@ | 3619 | @@ -3943,6 +1680,19 @@ |
| 3620 | } | 3620 | } |
| 3621 | } | 3621 | } |
| 3622 | break; | 3622 | break; |
| @@ -3625,44 +3625,59 @@ | |||
| 3625 | + impl->root_folder = g_strdup (g_value_get_string (value)); | 3625 | + impl->root_folder = g_strdup (g_value_get_string (value)); |
| 3626 | + } | 3626 | + } |
| 3627 | + break; | 3627 | + break; |
| 3628 | + | ||
| 3629 | + /* These are not supported */ | ||
| 3630 | + case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: | ||
| 3631 | + case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: | ||
| 3632 | + case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: | ||
| 3633 | + case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: | ||
| 3634 | + break; | ||
| 3635 | + | ||
| 3628 | default: | 3636 | default: |
| 3629 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | 3637 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
| 3630 | break; | 3638 | break; |
| 3631 | @@ -3962,30 +1662,18 @@ | 3639 | @@ -3968,24 +1718,30 @@ |
| 3632 | case GTK_FILE_CHOOSER_PROP_ACTION: | ||
| 3633 | g_value_set_enum (value, impl->action); | ||
| 3634 | break; | ||
| 3635 | - case GTK_FILE_CHOOSER_PROP_FILTER: | ||
| 3636 | - g_value_set_object (value, impl->current_filter); | ||
| 3637 | - break; | ||
| 3638 | case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: | 3640 | case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: |
| 3639 | g_value_set_boolean (value, impl->local_only); | 3641 | g_value_set_boolean (value, impl->local_only); |
| 3640 | break; | 3642 | break; |
| 3641 | - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: | 3643 | + case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: |
| 3644 | + g_value_set_boolean (value, impl->select_multiple); | ||
| 3645 | + break; | ||
| 3646 | + case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: | ||
| 3647 | + g_value_set_boolean (value, impl->show_hidden); | ||
| 3648 | + break; | ||
| 3649 | + case GTK_FILE_CHOOSER_PROP_ROOT_FOLDER: | ||
| 3650 | + g_value_set_string (value, impl->root_folder); | ||
| 3651 | + break; | ||
| 3652 | + | ||
| 3653 | + /* These are not supported */ | ||
| 3654 | case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: | ||
| 3642 | - g_value_set_object (value, impl->preview_widget); | 3655 | - g_value_set_object (value, impl->preview_widget); |
| 3643 | - break; | 3656 | + g_value_set_object (value, NULL); |
| 3644 | - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: | 3657 | break; |
| 3658 | case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: | ||
| 3645 | - g_value_set_boolean (value, impl->preview_widget_active); | 3659 | - g_value_set_boolean (value, impl->preview_widget_active); |
| 3646 | - break; | 3660 | + g_value_set_boolean (value, FALSE); |
| 3647 | - case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: | 3661 | break; |
| 3662 | case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: | ||
| 3648 | - g_value_set_boolean (value, impl->use_preview_label); | 3663 | - g_value_set_boolean (value, impl->use_preview_label); |
| 3649 | - break; | 3664 | + g_value_set_boolean (value, FALSE); |
| 3650 | - case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: | 3665 | break; |
| 3666 | case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: | ||
| 3651 | - g_value_set_object (value, impl->extra_widget); | 3667 | - g_value_set_object (value, impl->extra_widget); |
| 3652 | - break; | 3668 | - break; |
| 3653 | case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: | 3669 | - case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: |
| 3654 | g_value_set_boolean (value, impl->select_multiple); | 3670 | - g_value_set_boolean (value, impl->select_multiple); |
| 3655 | break; | 3671 | - break; |
| 3656 | case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: | 3672 | - case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: |
| 3657 | g_value_set_boolean (value, impl->show_hidden); | 3673 | - g_value_set_boolean (value, impl->show_hidden); |
| 3674 | + g_value_set_object (value, NULL); | ||
| 3658 | break; | 3675 | break; |
| 3659 | + case GTK_FILE_CHOOSER_PROP_ROOT_FOLDER: | 3676 | + |
| 3660 | + g_value_set_string (value, impl->root_folder); | ||
| 3661 | + break; | ||
| 3662 | default: | 3677 | default: |
| 3663 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | 3678 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
| 3664 | break; | 3679 | break; |
| 3665 | @@ -4013,12 +1701,6 @@ | 3680 | @@ -4013,12 +1769,6 @@ |
| 3666 | { | 3681 | { |
| 3667 | GtkFileChooserDefault *impl = (GtkFileChooserDefault *) object; | 3682 | GtkFileChooserDefault *impl = (GtkFileChooserDefault *) object; |
| 3668 | 3683 | ||
| @@ -3675,7 +3690,7 @@ | |||
| 3675 | remove_settings_signal (impl, gtk_widget_get_screen (GTK_WIDGET (impl))); | 3690 | remove_settings_signal (impl, gtk_widget_get_screen (GTK_WIDGET (impl))); |
| 3676 | 3691 | ||
| 3677 | G_OBJECT_CLASS (parent_class)->dispose (object); | 3692 | G_OBJECT_CLASS (parent_class)->dispose (object); |
| 3678 | @@ -4031,12 +1713,7 @@ | 3693 | @@ -4031,12 +1781,7 @@ |
| 3679 | static void | 3694 | static void |
| 3680 | gtk_file_chooser_default_show_all (GtkWidget *widget) | 3695 | gtk_file_chooser_default_show_all (GtkWidget *widget) |
| 3681 | { | 3696 | { |
| @@ -3688,7 +3703,7 @@ | |||
| 3688 | } | 3703 | } |
| 3689 | 3704 | ||
| 3690 | /* Handler for GtkWindow::set-focus; this is where we save the last-focused | 3705 | /* Handler for GtkWindow::set-focus; this is where we save the last-focused |
| 3691 | @@ -4095,7 +1772,6 @@ | 3706 | @@ -4095,7 +1840,6 @@ |
| 3692 | else | 3707 | else |
| 3693 | impl->icon_size = FALLBACK_ICON_SIZE; | 3708 | impl->icon_size = FALLBACK_ICON_SIZE; |
| 3694 | 3709 | ||
| @@ -3696,112 +3711,16 @@ | |||
| 3696 | gtk_widget_queue_resize (impl->browse_files_tree_view); | 3711 | gtk_widget_queue_resize (impl->browse_files_tree_view); |
| 3697 | } | 3712 | } |
| 3698 | 3713 | ||
| 3699 | @@ -4169,53 +1845,6 @@ | 3714 | @@ -4231,8 +1975,6 @@ |
| 3700 | g_signal_emit_by_name (widget, "default-size-changed"); | ||
| 3701 | } | ||
| 3702 | |||
| 3703 | -static gboolean | ||
| 3704 | -get_is_file_filtered (GtkFileChooserDefault *impl, | ||
| 3705 | - const GtkFilePath *path, | ||
| 3706 | - GtkFileInfo *file_info) | ||
| 3707 | -{ | ||
| 3708 | - GtkFileFilterInfo filter_info; | ||
| 3709 | - GtkFileFilterFlags needed; | ||
| 3710 | - gboolean result; | ||
| 3711 | - | ||
| 3712 | - if (!impl->current_filter) | ||
| 3713 | - return FALSE; | ||
| 3714 | - | ||
| 3715 | - filter_info.contains = GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_MIME_TYPE; | ||
| 3716 | - | ||
| 3717 | - needed = gtk_file_filter_get_needed (impl->current_filter); | ||
| 3718 | - | ||
| 3719 | - filter_info.display_name = gtk_file_info_get_display_name (file_info); | ||
| 3720 | - filter_info.mime_type = gtk_file_info_get_mime_type (file_info); | ||
| 3721 | - | ||
| 3722 | - if (needed & GTK_FILE_FILTER_FILENAME) | ||
| 3723 | - { | ||
| 3724 | - filter_info.filename = gtk_file_system_path_to_filename (impl->file_system, path); | ||
| 3725 | - if (filter_info.filename) | ||
| 3726 | - filter_info.contains |= GTK_FILE_FILTER_FILENAME; | ||
| 3727 | - } | ||
| 3728 | - else | ||
| 3729 | - filter_info.filename = NULL; | ||
| 3730 | - | ||
| 3731 | - if (needed & GTK_FILE_FILTER_URI) | ||
| 3732 | - { | ||
| 3733 | - filter_info.uri = gtk_file_system_path_to_uri (impl->file_system, path); | ||
| 3734 | - if (filter_info.uri) | ||
| 3735 | - filter_info.contains |= GTK_FILE_FILTER_URI; | ||
| 3736 | - } | ||
| 3737 | - else | ||
| 3738 | - filter_info.uri = NULL; | ||
| 3739 | - | ||
| 3740 | - result = gtk_file_filter_filter (impl->current_filter, &filter_info); | ||
| 3741 | - | ||
| 3742 | - if (filter_info.filename) | ||
| 3743 | - g_free ((gchar *)filter_info.filename); | ||
| 3744 | - if (filter_info.uri) | ||
| 3745 | - g_free ((gchar *)filter_info.uri); | ||
| 3746 | - | ||
| 3747 | - return !result; | ||
| 3748 | -} | ||
| 3749 | - | ||
| 3750 | /* GtkWidget::map method */ | ||
| 3751 | static void | ||
| 3752 | gtk_file_chooser_default_map (GtkWidget *widget) | ||
| 3753 | @@ -4231,50 +1860,8 @@ | ||
| 3754 | pending_select_paths_store_selection (impl); | 3715 | pending_select_paths_store_selection (impl); |
| 3755 | change_folder_and_display_error (impl, impl->current_folder); | 3716 | change_folder_and_display_error (impl, impl->current_folder); |
| 3756 | } | 3717 | } |
| 3757 | - | 3718 | - |
| 3758 | - bookmarks_changed_cb (impl->file_system, impl); | 3719 | - bookmarks_changed_cb (impl->file_system, impl); |
| 3759 | -} | ||
| 3760 | - | ||
| 3761 | -static gboolean | ||
| 3762 | -list_model_filter_func (GtkFileSystemModel *model, | ||
| 3763 | - GtkFilePath *path, | ||
| 3764 | - const GtkFileInfo *file_info, | ||
| 3765 | - gpointer user_data) | ||
| 3766 | -{ | ||
| 3767 | - GtkFileChooserDefault *impl = user_data; | ||
| 3768 | - | ||
| 3769 | - if (!impl->current_filter) | ||
| 3770 | - return TRUE; | ||
| 3771 | - | ||
| 3772 | - if (gtk_file_info_get_is_folder (file_info)) | ||
| 3773 | - return TRUE; | ||
| 3774 | - | ||
| 3775 | - return !get_is_file_filtered (impl, path, (GtkFileInfo *) file_info); | ||
| 3776 | } | 3720 | } |
| 3777 | 3721 | ||
| 3778 | -static void | 3722 | static gboolean |
| 3779 | -install_list_model_filter (GtkFileChooserDefault *impl) | 3723 | @@ -4519,18 +2261,21 @@ |
| 3780 | -{ | ||
| 3781 | - GtkFileSystemModelFilter filter; | ||
| 3782 | - gpointer data; | ||
| 3783 | - | ||
| 3784 | - g_assert (impl->browse_files_model != NULL); | ||
| 3785 | - | ||
| 3786 | - if (impl->current_filter) | ||
| 3787 | - { | ||
| 3788 | - filter = list_model_filter_func; | ||
| 3789 | - data = impl; | ||
| 3790 | - } | ||
| 3791 | - else | ||
| 3792 | - { | ||
| 3793 | - filter = NULL; | ||
| 3794 | - data = NULL; | ||
| 3795 | - } | ||
| 3796 | - | ||
| 3797 | - _gtk_file_system_model_set_filter (impl->browse_files_model, | ||
| 3798 | - filter, | ||
| 3799 | - data); | ||
| 3800 | -} | ||
| 3801 | |||
| 3802 | #define COMPARE_DIRECTORIES \ | ||
| 3803 | GtkFileChooserDefault *impl = user_data; \ | ||
| 3804 | @@ -4519,18 +2106,21 @@ | ||
| 3805 | GtkFileFolder *folder; | 3724 | GtkFileFolder *folder; |
| 3806 | gboolean success; | 3725 | gboolean success; |
| 3807 | gboolean have_hidden; | 3726 | gboolean have_hidden; |
| @@ -3825,7 +3744,7 @@ | |||
| 3825 | 3744 | ||
| 3826 | if (only_one_path) | 3745 | if (only_one_path) |
| 3827 | { | 3746 | { |
| 3828 | @@ -4541,7 +2131,6 @@ | 3747 | @@ -4541,7 +2286,6 @@ |
| 3829 | { | 3748 | { |
| 3830 | success = TRUE; | 3749 | success = TRUE; |
| 3831 | have_hidden = gtk_file_info_get_is_hidden (info); | 3750 | have_hidden = gtk_file_info_get_is_hidden (info); |
| @@ -3833,7 +3752,7 @@ | |||
| 3833 | gtk_file_info_free (info); | 3752 | gtk_file_info_free (info); |
| 3834 | } | 3753 | } |
| 3835 | } | 3754 | } |
| 3836 | @@ -4563,12 +2152,9 @@ | 3755 | @@ -4563,12 +2307,9 @@ |
| 3837 | if (!have_hidden) | 3756 | if (!have_hidden) |
| 3838 | have_hidden = gtk_file_info_get_is_hidden (info); | 3757 | have_hidden = gtk_file_info_get_is_hidden (info); |
| 3839 | 3758 | ||
| @@ -3847,7 +3766,7 @@ | |||
| 3847 | break; /* we now have all the information we need */ | 3766 | break; /* we now have all the information we need */ |
| 3848 | } | 3767 | } |
| 3849 | } | 3768 | } |
| 3850 | @@ -4584,9 +2170,6 @@ | 3769 | @@ -4584,9 +2325,6 @@ |
| 3851 | if (have_hidden) | 3770 | if (have_hidden) |
| 3852 | g_object_set (impl, "show-hidden", TRUE, NULL); | 3771 | g_object_set (impl, "show-hidden", TRUE, NULL); |
| 3853 | 3772 | ||
| @@ -3857,7 +3776,7 @@ | |||
| 3857 | if (only_one_path) | 3776 | if (only_one_path) |
| 3858 | _gtk_file_system_model_path_do (impl->browse_files_model, only_one_path, select_func, impl); | 3777 | _gtk_file_system_model_path_do (impl->browse_files_model, only_one_path, select_func, impl); |
| 3859 | else | 3778 | else |
| 3860 | @@ -4629,13 +2212,11 @@ | 3779 | @@ -4629,13 +2367,11 @@ |
| 3861 | * that case, the chooser's selection should be what the caller expects, | 3780 | * that case, the chooser's selection should be what the caller expects, |
| 3862 | * as the user can't see that something else got selected. See bug #165264. | 3781 | * as the user can't see that something else got selected. See bug #165264. |
| 3863 | * | 3782 | * |
| @@ -3875,16 +3794,7 @@ | |||
| 3875 | browse_files_select_first_row (impl); | 3794 | browse_files_select_first_row (impl); |
| 3876 | } | 3795 | } |
| 3877 | 3796 | ||
| 3878 | @@ -4713,8 +2294,6 @@ | 3797 | @@ -4725,19 +2461,15 @@ |
| 3879 | |||
| 3880 | _gtk_file_system_model_set_show_hidden (impl->browse_files_model, impl->show_hidden); | ||
| 3881 | |||
| 3882 | - install_list_model_filter (impl); | ||
| 3883 | - | ||
| 3884 | return TRUE; | ||
| 3885 | } | ||
| 3886 | |||
| 3887 | @@ -4725,19 +2304,15 @@ | ||
| 3888 | const GtkFileInfo *info; | 3798 | const GtkFileInfo *info; |
| 3889 | GtkTreeIter iter; | 3799 | GtkTreeIter iter; |
| 3890 | GtkTreeIter child_iter; | 3800 | GtkTreeIter child_iter; |
| @@ -3906,7 +3816,7 @@ | |||
| 3906 | 3816 | ||
| 3907 | gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, | 3817 | gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, |
| 3908 | &child_iter, | 3818 | &child_iter, |
| 3909 | @@ -4745,12 +2320,7 @@ | 3819 | @@ -4745,12 +2477,7 @@ |
| 3910 | 3820 | ||
| 3911 | info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); | 3821 | info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); |
| 3912 | 3822 | ||
| @@ -3920,7 +3830,7 @@ | |||
| 3920 | _gtk_file_chooser_entry_set_file_part (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), | 3830 | _gtk_file_chooser_entry_set_file_part (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), |
| 3921 | gtk_file_info_get_display_name (info)); | 3831 | gtk_file_info_get_display_name (info)); |
| 3922 | } | 3832 | } |
| 3923 | @@ -4780,9 +2350,6 @@ | 3833 | @@ -4780,9 +2507,6 @@ |
| 3924 | if (!check_is_folder (impl->file_system, path, error)) | 3834 | if (!check_is_folder (impl->file_system, path, error)) |
| 3925 | return FALSE; | 3835 | return FALSE; |
| 3926 | 3836 | ||
| @@ -3930,7 +3840,7 @@ | |||
| 3930 | if (impl->current_folder != path) | 3840 | if (impl->current_folder != path) |
| 3931 | { | 3841 | { |
| 3932 | if (impl->current_folder) | 3842 | if (impl->current_folder) |
| 3933 | @@ -4791,17 +2358,6 @@ | 3843 | @@ -4791,17 +2515,6 @@ |
| 3934 | impl->current_folder = gtk_file_path_copy (path); | 3844 | impl->current_folder = gtk_file_path_copy (path); |
| 3935 | } | 3845 | } |
| 3936 | 3846 | ||
| @@ -3948,7 +3858,7 @@ | |||
| 3948 | /* Set the folder on the save entry */ | 3858 | /* Set the folder on the save entry */ |
| 3949 | 3859 | ||
| 3950 | _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), | 3860 | _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), |
| 3951 | @@ -4815,13 +2371,7 @@ | 3861 | @@ -4815,13 +2528,7 @@ |
| 3952 | 3862 | ||
| 3953 | /* Refresh controls */ | 3863 | /* Refresh controls */ |
| 3954 | 3864 | ||
| @@ -3962,7 +3872,7 @@ | |||
| 3962 | g_signal_emit_by_name (impl, "selection-changed", 0); | 3872 | g_signal_emit_by_name (impl, "selection-changed", 0); |
| 3963 | 3873 | ||
| 3964 | return result; | 3874 | return result; |
| 3965 | @@ -4844,7 +2394,6 @@ | 3875 | @@ -4844,7 +2551,6 @@ |
| 3966 | g_return_if_fail (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE | 3876 | g_return_if_fail (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE |
| 3967 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); | 3877 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); |
| 3968 | 3878 | ||
| @@ -3970,7 +3880,7 @@ | |||
| 3970 | _gtk_file_chooser_entry_set_file_part (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), name); | 3880 | _gtk_file_chooser_entry_set_file_part (GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry), name); |
| 3971 | } | 3881 | } |
| 3972 | 3882 | ||
| 3973 | @@ -4983,24 +2532,13 @@ | 3883 | @@ -4983,24 +2689,13 @@ |
| 3974 | GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); | 3884 | GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); |
| 3975 | 3885 | ||
| 3976 | gtk_tree_selection_unselect_all (selection); | 3886 | gtk_tree_selection_unselect_all (selection); |
| @@ -3999,7 +3909,7 @@ | |||
| 3999 | { | 3909 | { |
| 4000 | GtkFileChooserEntry *chooser_entry; | 3910 | GtkFileChooserEntry *chooser_entry; |
| 4001 | const GtkFilePath *current_folder; | 3911 | const GtkFilePath *current_folder; |
| 4002 | @@ -5013,31 +2551,17 @@ | 3912 | @@ -5013,31 +2708,17 @@ |
| 4003 | 3913 | ||
| 4004 | chooser_entry = GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry); | 3914 | chooser_entry = GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry); |
| 4005 | 3915 | ||
| @@ -4035,7 +3945,7 @@ | |||
| 4035 | 3945 | ||
| 4036 | error = NULL; | 3946 | error = NULL; |
| 4037 | path = gtk_file_system_make_path (impl->file_system, current_folder, file_part, &error); | 3947 | path = gtk_file_system_make_path (impl->file_system, current_folder, file_part, &error); |
| 4038 | @@ -5045,14 +2569,12 @@ | 3948 | @@ -5045,14 +2726,12 @@ |
| 4039 | if (!path) | 3949 | if (!path) |
| 4040 | { | 3950 | { |
| 4041 | error_building_filename_dialog (impl, current_folder, file_part, error); | 3951 | error_building_filename_dialog (impl, current_folder, file_part, error); |
| @@ -4054,15 +3964,15 @@ | |||
| 4054 | } | 3964 | } |
| 4055 | 3965 | ||
| 4056 | struct get_paths_closure { | 3966 | struct get_paths_closure { |
| 4057 | @@ -5098,21 +2620,11 @@ | 3967 | @@ -5098,21 +2777,11 @@ |
| 4058 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE | 3968 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE |
| 4059 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) | 3969 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) |
| 4060 | { | 3970 | { |
| 4061 | - gboolean is_well_formed, is_empty, is_file_part_empty; | 3971 | - gboolean is_well_formed, is_empty, is_file_part_empty; |
| 4062 | - | ||
| 4063 | - check_save_entry (impl, &info.path_from_entry, &is_well_formed, &is_empty, &is_file_part_empty); | ||
| 4064 | + gboolean is_valid, is_empty; | 3972 | + gboolean is_valid, is_empty; |
| 4065 | 3973 | ||
| 3974 | - check_save_entry (impl, &info.path_from_entry, &is_well_formed, &is_empty, &is_file_part_empty); | ||
| 3975 | - | ||
| 4066 | - if (!is_well_formed) | 3976 | - if (!is_well_formed) |
| 4067 | + info.path_from_entry = check_save_entry (impl, &is_valid, &is_empty); | 3977 | + info.path_from_entry = check_save_entry (impl, &is_valid, &is_empty); |
| 4068 | + if (!is_valid && !is_empty) | 3978 | + if (!is_valid && !is_empty) |
| @@ -4079,7 +3989,7 @@ | |||
| 4079 | } | 3989 | } |
| 4080 | 3990 | ||
| 4081 | if (!info.path_from_entry || impl->select_multiple) | 3991 | if (!info.path_from_entry || impl->select_multiple) |
| 4082 | @@ -5137,243 +2649,12 @@ | 3992 | @@ -5137,17 +2806,6 @@ |
| 4083 | return g_slist_reverse (info.result); | 3993 | return g_slist_reverse (info.result); |
| 4084 | } | 3994 | } |
| 4085 | 3995 | ||
| @@ -4094,73 +4004,34 @@ | |||
| 4094 | - return NULL; | 4004 | - return NULL; |
| 4095 | -} | 4005 | -} |
| 4096 | - | 4006 | - |
| 4097 | -static GtkFileSystem * | 4007 | static GtkFileSystem * |
| 4098 | -gtk_file_chooser_default_get_file_system (GtkFileChooser *chooser) | 4008 | gtk_file_chooser_default_get_file_system (GtkFileChooser *chooser) |
| 4099 | -{ | 4009 | { |
| 4100 | - GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | 4010 | @@ -5162,9 +2820,9 @@ |
| 4101 | - | 4011 | gboolean show) |
| 4102 | - return impl->file_system; | 4012 | { |
| 4103 | -} | 4013 | if (show) |
| 4104 | - | ||
| 4105 | -/* Shows or hides the filter widgets */ | ||
| 4106 | -static void | ||
| 4107 | -show_filters (GtkFileChooserDefault *impl, | ||
| 4108 | - gboolean show) | ||
| 4109 | -{ | ||
| 4110 | - if (show) | ||
| 4111 | - gtk_widget_show (impl->filter_combo_hbox); | 4014 | - gtk_widget_show (impl->filter_combo_hbox); |
| 4112 | - else | 4015 | + gtk_widget_show (impl->filter_combo); |
| 4016 | else | ||
| 4113 | - gtk_widget_hide (impl->filter_combo_hbox); | 4017 | - gtk_widget_hide (impl->filter_combo_hbox); |
| 4114 | -} | 4018 | + gtk_widget_hide (impl->filter_combo); |
| 4115 | - | 4019 | } |
| 4116 | -static void | 4020 | |
| 4117 | -gtk_file_chooser_default_add_filter (GtkFileChooser *chooser, | 4021 | static void |
| 4118 | - GtkFileFilter *filter) | 4022 | @@ -5174,6 +2832,8 @@ |
| 4119 | -{ | 4023 | GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); |
| 4120 | - GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | 4024 | const gchar *name; |
| 4121 | - const gchar *name; | 4025 | |
| 4122 | - | 4026 | + g_debug ("adding filter"); |
| 4123 | - if (g_slist_find (impl->filters, filter)) | 4027 | + |
| 4124 | - { | 4028 | if (g_slist_find (impl->filters, filter)) |
| 4125 | - g_warning ("gtk_file_chooser_add_filter() called on filter already in list\n"); | 4029 | { |
| 4126 | - return; | 4030 | g_warning ("gtk_file_chooser_add_filter() called on filter already in list\n"); |
| 4127 | - } | 4031 | @@ -5215,165 +2875,31 @@ |
| 4128 | - | 4032 | |
| 4129 | - g_object_ref (filter); | 4033 | impl->filters = g_slist_remove (impl->filters, filter); |
| 4130 | - gtk_object_sink (GTK_OBJECT (filter)); | 4034 | |
| 4131 | - impl->filters = g_slist_append (impl->filters, filter); | ||
| 4132 | - | ||
| 4133 | - name = gtk_file_filter_get_name (filter); | ||
| 4134 | - if (!name) | ||
| 4135 | - name = "Untitled filter"; /* Place-holder, doesn't need to be marked for translation */ | ||
| 4136 | - | ||
| 4137 | - gtk_combo_box_append_text (GTK_COMBO_BOX (impl->filter_combo), name); | ||
| 4138 | - | ||
| 4139 | - if (!g_slist_find (impl->filters, impl->current_filter)) | ||
| 4140 | - set_current_filter (impl, filter); | ||
| 4141 | - | ||
| 4142 | - show_filters (impl, TRUE); | ||
| 4143 | -} | ||
| 4144 | - | ||
| 4145 | -static void | ||
| 4146 | -gtk_file_chooser_default_remove_filter (GtkFileChooser *chooser, | ||
| 4147 | - GtkFileFilter *filter) | ||
| 4148 | -{ | ||
| 4149 | - GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | ||
| 4150 | - GtkTreeModel *model; | ||
| 4151 | - GtkTreeIter iter; | ||
| 4152 | - gint filter_index; | ||
| 4153 | - | ||
| 4154 | - filter_index = g_slist_index (impl->filters, filter); | ||
| 4155 | - | ||
| 4156 | - if (filter_index < 0) | ||
| 4157 | - { | ||
| 4158 | - g_warning ("gtk_file_chooser_remove_filter() called on filter not in list\n"); | ||
| 4159 | - return; | ||
| 4160 | - } | ||
| 4161 | - | ||
| 4162 | - impl->filters = g_slist_remove (impl->filters, filter); | ||
| 4163 | - | ||
| 4164 | - if (filter == impl->current_filter) | 4035 | - if (filter == impl->current_filter) |
| 4165 | - { | 4036 | - { |
| 4166 | - if (impl->filters) | 4037 | - if (impl->filters) |
| @@ -4263,10 +4134,20 @@ | |||
| 4263 | - | 4134 | - |
| 4264 | - if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter)) | 4135 | - if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter)) |
| 4265 | - g_assert_not_reached (); | 4136 | - g_assert_not_reached (); |
| 4266 | - } | 4137 | + if (filter == impl->current_filter) |
| 4267 | - | 4138 | + { |
| 4139 | + if (impl->filters) | ||
| 4140 | + set_current_filter (impl, impl->filters->data); | ||
| 4141 | + else | ||
| 4142 | + set_current_filter (impl, NULL); | ||
| 4143 | } | ||
| 4144 | |||
| 4268 | - out: | 4145 | - out: |
| 4269 | - | 4146 | + /* Remove row from the combo box */ |
| 4147 | + model = gtk_combo_box_get_model (GTK_COMBO_BOX (impl->filter_combo)); | ||
| 4148 | + gtk_tree_model_iter_nth_child (model, &iter, NULL, filter_index); | ||
| 4149 | + gtk_list_store_remove (GTK_LIST_STORE (model), &iter); | ||
| 4150 | |||
| 4270 | - uri = gtk_file_system_path_to_uri (impl->file_system, path); | 4151 | - uri = gtk_file_system_path_to_uri (impl->file_system, path); |
| 4271 | - g_set_error (error, | 4152 | - g_set_error (error, |
| 4272 | - GTK_FILE_CHOOSER_ERROR, | 4153 | - GTK_FILE_CHOOSER_ERROR, |
| @@ -4274,19 +4155,23 @@ | |||
| 4274 | - _("Shortcut %s does not exist"), | 4155 | - _("Shortcut %s does not exist"), |
| 4275 | - uri); | 4156 | - uri); |
| 4276 | - g_free (uri); | 4157 | - g_free (uri); |
| 4277 | - | 4158 | + g_object_unref (filter); |
| 4159 | |||
| 4278 | - return FALSE; | 4160 | - return FALSE; |
| 4279 | -} | 4161 | + if (!impl->filters) |
| 4280 | - | 4162 | + show_filters (impl, FALSE); |
| 4281 | -static GSList * | 4163 | } |
| 4164 | |||
| 4165 | static GSList * | ||
| 4282 | -gtk_file_chooser_default_list_shortcut_folders (GtkFileChooser *chooser) | 4166 | -gtk_file_chooser_default_list_shortcut_folders (GtkFileChooser *chooser) |
| 4283 | -{ | 4167 | +gtk_file_chooser_default_list_filters (GtkFileChooser *chooser) |
| 4284 | - GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | 4168 | { |
| 4169 | GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | ||
| 4285 | - int pos; | 4170 | - int pos; |
| 4286 | - GtkTreeIter iter; | 4171 | - GtkTreeIter iter; |
| 4287 | - int i; | 4172 | - int i; |
| 4288 | - GSList *list; | 4173 | - GSList *list; |
| 4289 | - | 4174 | |
| 4290 | - if (impl->num_shortcuts == 0) | 4175 | - if (impl->num_shortcuts == 0) |
| 4291 | - return NULL; | 4176 | - return NULL; |
| 4292 | - | 4177 | - |
| @@ -4318,17 +4203,13 @@ | |||
| 4318 | - g_assert_not_reached (); | 4203 | - g_assert_not_reached (); |
| 4319 | - } | 4204 | - } |
| 4320 | - } | 4205 | - } |
| 4321 | +static GtkFileSystem * | 4206 | - |
| 4322 | +gtk_file_chooser_default_get_file_system (GtkFileChooser *chooser) | ||
| 4323 | +{ | ||
| 4324 | + GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); | ||
| 4325 | |||
| 4326 | - return g_slist_reverse (list); | 4207 | - return g_slist_reverse (list); |
| 4327 | + return impl->file_system; | 4208 | + return g_slist_copy (impl->filters); |
| 4328 | } | 4209 | } |
| 4329 | 4210 | ||
| 4330 | /* Guesses a size based upon font sizes */ | 4211 | /* Guesses a size based upon font sizes */ |
| 4331 | @@ -5386,7 +2667,6 @@ | 4212 | @@ -5386,7 +2912,6 @@ |
| 4332 | gint default_width, default_height; | 4213 | gint default_width, default_height; |
| 4333 | int font_size; | 4214 | int font_size; |
| 4334 | GtkRequisition req; | 4215 | GtkRequisition req; |
| @@ -4336,7 +4217,7 @@ | |||
| 4336 | 4217 | ||
| 4337 | g_assert (widget->style != NULL); | 4218 | g_assert (widget->style != NULL); |
| 4338 | impl = GTK_FILE_CHOOSER_DEFAULT (widget); | 4219 | impl = GTK_FILE_CHOOSER_DEFAULT (widget); |
| 4339 | @@ -5400,12 +2680,7 @@ | 4220 | @@ -5400,12 +2925,7 @@ |
| 4340 | /* Use at least the requisition size not including the preview widget */ | 4221 | /* Use at least the requisition size not including the preview widget */ |
| 4341 | gtk_widget_size_request (widget, &req); | 4222 | gtk_widget_size_request (widget, &req); |
| 4342 | 4223 | ||
| @@ -4350,7 +4231,7 @@ | |||
| 4350 | default_height = MAX (default_height, req.height); | 4231 | default_height = MAX (default_height, req.height); |
| 4351 | 4232 | ||
| 4352 | *width = default_width; | 4233 | *width = default_width; |
| 4353 | @@ -5423,8 +2698,6 @@ | 4234 | @@ -5423,8 +2943,6 @@ |
| 4354 | 4235 | ||
| 4355 | find_good_size_from_style (GTK_WIDGET (chooser_embed), default_width, default_height); | 4236 | find_good_size_from_style (GTK_WIDGET (chooser_embed), default_width, default_height); |
| 4356 | 4237 | ||
| @@ -4359,7 +4240,7 @@ | |||
| 4359 | } | 4240 | } |
| 4360 | 4241 | ||
| 4361 | static void | 4242 | static void |
| 4362 | @@ -5441,16 +2714,6 @@ | 4243 | @@ -5441,16 +2959,6 @@ |
| 4363 | 4244 | ||
| 4364 | *resize_horizontally = TRUE; | 4245 | *resize_horizontally = TRUE; |
| 4365 | *resize_vertically = TRUE; | 4246 | *resize_vertically = TRUE; |
| @@ -4376,7 +4257,7 @@ | |||
| 4376 | } | 4257 | } |
| 4377 | 4258 | ||
| 4378 | struct switch_folder_closure { | 4259 | struct switch_folder_closure { |
| 4379 | @@ -5517,84 +2780,49 @@ | 4260 | @@ -5517,84 +3025,49 @@ |
| 4380 | 4261 | ||
| 4381 | if (current_focus == impl->browse_files_tree_view) | 4262 | if (current_focus == impl->browse_files_tree_view) |
| 4382 | { | 4263 | { |
| @@ -4485,7 +4366,7 @@ | |||
| 4485 | 4366 | ||
| 4486 | save_entry: | 4367 | save_entry: |
| 4487 | 4368 | ||
| 4488 | @@ -5602,103 +2830,39 @@ | 4369 | @@ -5602,103 +3075,39 @@ |
| 4489 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); | 4370 | || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); |
| 4490 | 4371 | ||
| 4491 | entry = GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry); | 4372 | entry = GTK_FILE_CHOOSER_ENTRY (impl->save_file_name_entry); |
| @@ -4605,55 +4486,11 @@ | |||
| 4605 | else if (impl->toplevel_last_focus_widget == impl->browse_files_tree_view) | 4486 | else if (impl->toplevel_last_focus_widget == impl->browse_files_tree_view) |
| 4606 | { | 4487 | { |
| 4607 | /* The focus is on a dialog's action area button, *and* the widget that | 4488 | /* The focus is on a dialog's action area button, *and* the widget that |
| 4608 | @@ -5742,242 +2906,6 @@ | 4489 | @@ -5786,199 +3195,6 @@ |
| 4609 | gtk_widget_grab_focus (widget); | 4490 | set_current_filter (impl, new_filter); |
| 4610 | } | 4491 | } |
| 4611 | 4492 | ||
| 4612 | -static void | 4493 | -static void |
| 4613 | -set_current_filter (GtkFileChooserDefault *impl, | ||
| 4614 | - GtkFileFilter *filter) | ||
| 4615 | -{ | ||
| 4616 | - if (impl->current_filter != filter) | ||
| 4617 | - { | ||
| 4618 | - int filter_index; | ||
| 4619 | - | ||
| 4620 | - /* NULL filters are allowed to reset to non-filtered status | ||
| 4621 | - */ | ||
| 4622 | - filter_index = g_slist_index (impl->filters, filter); | ||
| 4623 | - if (impl->filters && filter && filter_index < 0) | ||
| 4624 | - return; | ||
| 4625 | - | ||
| 4626 | - if (impl->current_filter) | ||
| 4627 | - g_object_unref (impl->current_filter); | ||
| 4628 | - impl->current_filter = filter; | ||
| 4629 | - if (impl->current_filter) | ||
| 4630 | - { | ||
| 4631 | - g_object_ref (impl->current_filter); | ||
| 4632 | - gtk_object_sink (GTK_OBJECT (filter)); | ||
| 4633 | - } | ||
| 4634 | - | ||
| 4635 | - if (impl->filters) | ||
| 4636 | - gtk_combo_box_set_active (GTK_COMBO_BOX (impl->filter_combo), | ||
| 4637 | - filter_index); | ||
| 4638 | - | ||
| 4639 | - if (impl->browse_files_model) | ||
| 4640 | - install_list_model_filter (impl); | ||
| 4641 | - | ||
| 4642 | - g_object_notify (G_OBJECT (impl), "filter"); | ||
| 4643 | - } | ||
| 4644 | -} | ||
| 4645 | - | ||
| 4646 | -static void | ||
| 4647 | -filter_combo_changed (GtkComboBox *combo_box, | ||
| 4648 | - GtkFileChooserDefault *impl) | ||
| 4649 | -{ | ||
| 4650 | - gint new_index = gtk_combo_box_get_active (combo_box); | ||
| 4651 | - GtkFileFilter *new_filter = g_slist_nth_data (impl->filters, new_index); | ||
| 4652 | - | ||
| 4653 | - set_current_filter (impl, new_filter); | ||
| 4654 | -} | ||
| 4655 | - | ||
| 4656 | -static void | ||
| 4657 | -check_preview_change (GtkFileChooserDefault *impl) | 4494 | -check_preview_change (GtkFileChooserDefault *impl) |
| 4658 | -{ | 4495 | -{ |
| 4659 | - GtkTreePath *cursor_path; | 4496 | - GtkTreePath *cursor_path; |
| @@ -4845,10 +4682,11 @@ | |||
| 4845 | - | 4682 | - |
| 4846 | - return (*gtk_tree_path_get_indices (path) != shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR)); | 4683 | - return (*gtk_tree_path_get_indices (path) != shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR)); |
| 4847 | -} | 4684 | -} |
| 4848 | 4685 | - | |
| 4849 | static gboolean | 4686 | static gboolean |
| 4850 | list_select_func (GtkTreeSelection *selection, | 4687 | list_select_func (GtkTreeSelection *selection, |
| 4851 | @@ -6022,7 +2950,7 @@ | 4688 | GtkTreeModel *model, |
| 4689 | @@ -6022,7 +3238,7 @@ | ||
| 4852 | g_assert (!impl->select_multiple); | 4690 | g_assert (!impl->select_multiple); |
| 4853 | selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); | 4691 | selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); |
| 4854 | if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) | 4692 | if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) |
| @@ -4857,7 +4695,7 @@ | |||
| 4857 | 4695 | ||
| 4858 | gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, | 4696 | gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, |
| 4859 | &child_iter, | 4697 | &child_iter, |
| 4860 | @@ -6033,11 +2961,7 @@ | 4698 | @@ -6033,11 +3249,7 @@ |
| 4861 | return; /* We are on the editable row for New Folder */ | 4699 | return; /* We are on the editable row for New Folder */ |
| 4862 | } | 4700 | } |
| 4863 | 4701 | ||
| @@ -4869,7 +4707,7 @@ | |||
| 4869 | 4707 | ||
| 4870 | g_signal_emit_by_name (impl, "selection-changed", 0); | 4708 | g_signal_emit_by_name (impl, "selection-changed", 0); |
| 4871 | } | 4709 | } |
| 4872 | @@ -6074,23 +2998,6 @@ | 4710 | @@ -6074,23 +3286,6 @@ |
| 4873 | g_signal_emit_by_name (impl, "file-activated"); | 4711 | g_signal_emit_by_name (impl, "file-activated"); |
| 4874 | } | 4712 | } |
| 4875 | 4713 | ||
| @@ -4893,7 +4731,7 @@ | |||
| 4893 | static const GtkFileInfo * | 4731 | static const GtkFileInfo * |
| 4894 | get_list_file_info (GtkFileChooserDefault *impl, | 4732 | get_list_file_info (GtkFileChooserDefault *impl, |
| 4895 | GtkTreeIter *iter) | 4733 | GtkTreeIter *iter) |
| 4896 | @@ -6257,33 +3164,31 @@ | 4734 | @@ -6257,33 +3452,31 @@ |
| 4897 | 4735 | ||
| 4898 | time_mtime = gtk_file_info_get_modification_time (info); | 4736 | time_mtime = gtk_file_info_get_modification_time (info); |
| 4899 | 4737 | ||
| @@ -4932,13 +4770,13 @@ | |||
| 4932 | else | 4770 | else |
| 4933 | - { | 4771 | - { |
| 4934 | - char *format; | 4772 | - char *format; |
| 4935 | - | 4773 | + format = "%x"; /* Any other date */ |
| 4774 | |||
| 4936 | - if (days_diff > 1 && days_diff < 7) | 4775 | - if (days_diff > 1 && days_diff < 7) |
| 4937 | - format = "%A"; /* Days from last week */ | 4776 | - format = "%A"; /* Days from last week */ |
| 4938 | - else | 4777 | - else |
| 4939 | - format = "%x"; /* Any other date */ | 4778 | - format = "%x"; /* Any other date */ |
| 4940 | + format = "%x"; /* Any other date */ | 4779 | - |
| 4941 | |||
| 4942 | - if (g_date_strftime (buf, sizeof (buf), format, &mtime) == 0) | 4780 | - if (g_date_strftime (buf, sizeof (buf), format, &mtime) == 0) |
| 4943 | - strcpy (buf, _("Unknown")); | 4781 | - strcpy (buf, _("Unknown")); |
| 4944 | - } | 4782 | - } |
| @@ -4947,7 +4785,7 @@ | |||
| 4947 | } | 4785 | } |
| 4948 | 4786 | ||
| 4949 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || | 4787 | if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || |
| 4950 | @@ -6376,8 +3281,11 @@ | 4788 | @@ -6376,8 +3569,11 @@ |
| 4951 | */ | 4789 | */ |
| 4952 | 4790 | ||
| 4953 | error = NULL; | 4791 | error = NULL; |
| @@ -4960,7 +4798,7 @@ | |||
| 4960 | if (!folder) | 4798 | if (!folder) |
| 4961 | { | 4799 | { |
| 4962 | error_getting_info_dialog (impl, folder_path, error); | 4800 | error_getting_info_dialog (impl, folder_path, error); |
| 4963 | @@ -6487,8 +3395,8 @@ | 4801 | @@ -6487,8 +3683,8 @@ |
| 4964 | accept_stock, GTK_RESPONSE_ACCEPT, | 4802 | accept_stock, GTK_RESPONSE_ACCEPT, |
| 4965 | NULL); | 4803 | NULL); |
| 4966 | gtk_window_set_default_size (GTK_WINDOW (dialog), 300, -1); | 4804 | gtk_window_set_default_size (GTK_WINDOW (dialog), 300, -1); |
| @@ -4971,7 +4809,7 @@ | |||
| 4971 | gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); | 4809 | gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); |
| 4972 | 4810 | ||
| 4973 | gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), | 4811 | gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), |
| 4974 | @@ -6496,17 +3404,16 @@ | 4812 | @@ -6496,17 +3692,16 @@ |
| 4975 | GTK_RESPONSE_CANCEL, | 4813 | GTK_RESPONSE_CANCEL, |
| 4976 | -1); | 4814 | -1); |
| 4977 | 4815 | ||
| @@ -4991,7 +4829,7 @@ | |||
| 4991 | 4829 | ||
| 4992 | /* Run */ | 4830 | /* Run */ |
| 4993 | 4831 | ||
| 4994 | @@ -6555,115 +3462,86 @@ | 4832 | @@ -6555,115 +3750,68 @@ |
| 4995 | static void | 4833 | static void |
| 4996 | up_folder_handler (GtkFileChooserDefault *impl) | 4834 | up_folder_handler (GtkFileChooserDefault *impl) |
| 4997 | { | 4835 | { |
| @@ -5040,38 +4878,33 @@ | |||
| 5040 | - g_assert_not_reached (); | 4878 | - g_assert_not_reached (); |
| 5041 | - | 4879 | - |
| 5042 | - shortcuts_activate_iter (impl, &iter); | 4880 | - shortcuts_activate_iter (impl, &iter); |
| 5043 | } | 4881 | -} |
| 5044 | 4882 | - | |
| 5045 | - | 4883 | - |
| 5046 | - | 4884 | - |
| 5047 | -/* Drag and drop interfaces */ | 4885 | -/* Drag and drop interfaces */ |
| 5048 | +static GtkFilePath * | 4886 | - |
| 5049 | +gtk_file_chooser_default_get_preview_path (GtkFileChooser *chooser) | 4887 | -static void |
| 5050 | +{ | ||
| 5051 | + return NULL; | ||
| 5052 | +} | ||
| 5053 | |||
| 5054 | static void | ||
| 5055 | -_shortcuts_model_filter_class_init (ShortcutsModelFilterClass *class) | 4888 | -_shortcuts_model_filter_class_init (ShortcutsModelFilterClass *class) |
| 5056 | +gtk_file_chooser_default_add_filter (GtkFileChooser *chooser, | 4889 | -{ |
| 5057 | + GtkFileFilter *filter) | ||
| 5058 | { | ||
| 5059 | } | 4890 | } |
| 5060 | 4891 | ||
| 5061 | static void | 4892 | -static void |
| 5062 | -_shortcuts_model_filter_init (ShortcutsModelFilter *model) | 4893 | -_shortcuts_model_filter_init (ShortcutsModelFilter *model) |
| 5063 | +gtk_file_chooser_default_remove_filter (GtkFileChooser *chooser, | 4894 | +static GtkFilePath * |
| 5064 | + GtkFileFilter *filter) | 4895 | +gtk_file_chooser_default_get_preview_path (GtkFileChooser *chooser) |
| 5065 | { | 4896 | { |
| 5066 | - model->impl = NULL; | 4897 | - model->impl = NULL; |
| 4898 | + return NULL; | ||
| 5067 | } | 4899 | } |
| 5068 | 4900 | ||
| 5069 | -/* GtkTreeDragSource::row_draggable implementation for the shortcuts filter model */ | 4901 | -/* GtkTreeDragSource::row_draggable implementation for the shortcuts filter model */ |
| 5070 | -static gboolean | 4902 | static gboolean |
| 5071 | -shortcuts_model_filter_row_draggable (GtkTreeDragSource *drag_source, | 4903 | -shortcuts_model_filter_row_draggable (GtkTreeDragSource *drag_source, |
| 5072 | - GtkTreePath *path) | 4904 | - GtkTreePath *path) |
| 5073 | +static GSList * | 4905 | +gtk_file_chooser_default_add_shortcut_folder (GtkFileChooser *chooser, |
| 5074 | +gtk_file_chooser_default_list_filters (GtkFileChooser *chooser) | 4906 | + const GtkFilePath *path, |
| 4907 | + GError **error) | ||
| 5075 | { | 4908 | { |
| 5076 | - ShortcutsModelFilter *model; | 4909 | - ShortcutsModelFilter *model; |
| 5077 | - int pos; | 4910 | - int pos; |
| @@ -5083,7 +4916,7 @@ | |||
| 5083 | - bookmarks_pos = shortcuts_get_index (model->impl, SHORTCUTS_BOOKMARKS); | 4916 | - bookmarks_pos = shortcuts_get_index (model->impl, SHORTCUTS_BOOKMARKS); |
| 5084 | - | 4917 | - |
| 5085 | - return (pos >= bookmarks_pos && pos < bookmarks_pos + model->impl->num_bookmarks); | 4918 | - return (pos >= bookmarks_pos && pos < bookmarks_pos + model->impl->num_bookmarks); |
| 5086 | + return NULL; | 4919 | + return FALSE; |
| 5087 | } | 4920 | } |
| 5088 | 4921 | ||
| 5089 | -/* GtkTreeDragSource::drag_data_get implementation for the shortcuts filter model */ | 4922 | -/* GtkTreeDragSource::drag_data_get implementation for the shortcuts filter model */ |
| @@ -5091,10 +4924,7 @@ | |||
| 5091 | -shortcuts_model_filter_drag_data_get (GtkTreeDragSource *drag_source, | 4924 | -shortcuts_model_filter_drag_data_get (GtkTreeDragSource *drag_source, |
| 5092 | - GtkTreePath *path, | 4925 | - GtkTreePath *path, |
| 5093 | - GtkSelectionData *selection_data) | 4926 | - GtkSelectionData *selection_data) |
| 5094 | +gtk_file_chooser_default_add_shortcut_folder (GtkFileChooser *chooser, | 4927 | -{ |
| 5095 | + const GtkFilePath *path, | ||
| 5096 | + GError **error) | ||
| 5097 | { | ||
| 5098 | - ShortcutsModelFilter *model; | 4928 | - ShortcutsModelFilter *model; |
| 5099 | - | 4929 | - |
| 5100 | - model = SHORTCUTS_MODEL_FILTER (drag_source); | 4930 | - model = SHORTCUTS_MODEL_FILTER (drag_source); |
| @@ -5102,13 +4932,11 @@ | |||
| 5102 | - /* FIXME */ | 4932 | - /* FIXME */ |
| 5103 | - | 4933 | - |
| 5104 | - return FALSE; | 4934 | - return FALSE; |
| 5105 | + return FALSE; | 4935 | -} |
| 5106 | } | 4936 | - |
| 5107 | |||
| 5108 | -/* Fill the GtkTreeDragSourceIface vtable */ | 4937 | -/* Fill the GtkTreeDragSourceIface vtable */ |
| 5109 | -static void | 4938 | -static void |
| 5110 | -shortcuts_model_filter_drag_source_iface_init (GtkTreeDragSourceIface *iface) | 4939 | -shortcuts_model_filter_drag_source_iface_init (GtkTreeDragSourceIface *iface) |
| 5111 | +static gboolean | ||
| 5112 | +gtk_file_chooser_default_remove_shortcut_folder (GtkFileChooser *chooser, | 4940 | +gtk_file_chooser_default_remove_shortcut_folder (GtkFileChooser *chooser, |
| 5113 | + const GtkFilePath *path, | 4941 | + const GtkFilePath *path, |
| 5114 | + GError **error) | 4942 | + GError **error) |
diff --git a/meta/packages/gtk+/gtk+_2.6.8.bb b/meta/packages/gtk+/gtk+_2.6.8.bb index 9fa6700a55..f1ccb46b61 100644 --- a/meta/packages/gtk+/gtk+_2.6.8.bb +++ b/meta/packages/gtk+/gtk+_2.6.8.bb | |||
| @@ -5,7 +5,7 @@ HOMEPAGE = "http://www.gtk.org" | |||
| 5 | SECTION = "libs" | 5 | SECTION = "libs" |
| 6 | PRIORITY = "optional" | 6 | PRIORITY = "optional" |
| 7 | DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt" | 7 | DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt" |
| 8 | PR = "r4" | 8 | PR = "r5" |
| 9 | 9 | ||
| 10 | SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/gtk+-${PV}.tar.bz2 \ | 10 | SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/gtk+-${PV}.tar.bz2 \ |
| 11 | file://no-demos.patch;patch=1 \ | 11 | file://no-demos.patch;patch=1 \ |
