50
50
#include <eel/eel-glib-extensions.h>
51
51
#include <eel/eel-gnome-extensions.h>
52
52
#include <eel/eel-gtk-extensions.h>
53
#include <eel/eel-gtk-macros.h>
54
53
#include <eel/eel-stock-dialogs.h>
55
54
#include <eel/eel-string.h>
56
55
#include <eel/eel-vfs-extensions.h>
315
314
G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_SCROLLED_WINDOW);
316
315
#define parent_class nautilus_view_parent_class
318
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, add_file)
319
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, bump_zoom_level)
320
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, can_zoom_in)
321
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, can_zoom_out)
322
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, clear)
323
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, file_changed)
324
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, get_selection)
325
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, get_selection_for_file_transfer)
326
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, get_item_count)
327
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, is_empty)
328
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, reset_to_defaults)
329
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, restore_default_zoom_level)
330
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, select_all)
331
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, set_selection)
332
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, zoom_to_level)
333
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, get_zoom_level)
334
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_view, invert_selection)
336
317
/* virtual methods (public and non-public) */
402
378
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
404
return EEL_CALL_METHOD_WITH_RETURN_VALUE
405
(NAUTILUS_VIEW_CLASS, view,
406
get_backing_uri, (view));
380
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_backing_uri (view);
438
408
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
440
return EEL_CALL_METHOD_WITH_RETURN_VALUE
441
(NAUTILUS_VIEW_CLASS, view,
442
get_selection_for_file_transfer, (view));
410
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_selection_for_file_transfer (view);
455
423
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
457
return EEL_CALL_METHOD_WITH_RETURN_VALUE
458
(NAUTILUS_VIEW_CLASS, view,
459
get_selected_icon_locations, (view));
425
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_selected_icon_locations (view);
496
458
NautilusWindowShowHiddenFilesMode mode;
498
460
g_return_if_fail (NAUTILUS_IS_VIEW (view));
501
(NAUTILUS_VIEW_CLASS, view,
502
reset_to_defaults, (view));
462
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->reset_to_defaults (view);
503
464
mode = nautilus_window_get_hidden_files_mode (view->details->window);
504
465
if (mode != NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT) {
505
466
nautilus_window_set_hidden_files_mode (view->details->window,
513
474
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), FALSE);
515
return EEL_CALL_METHOD_WITH_RETURN_VALUE
516
(NAUTILUS_VIEW_CLASS, view,
517
using_manual_layout, (view));
476
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->using_manual_layout (view);
540
497
nautilus_view_can_rename_file (NautilusView *view, NautilusFile *file)
542
return EEL_CALL_METHOD_WITH_RETURN_VALUE
543
(NAUTILUS_VIEW_CLASS, view,
544
can_rename_file, (view, file));
499
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->can_rename_file (view, file);
713
(NAUTILUS_VIEW_CLASS, view,
714
restore_default_zoom_level, (view));
653
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->restore_default_zoom_level (view);
718
657
nautilus_view_get_view_id (NautilusView *view)
720
return EEL_CALL_METHOD_WITH_RETURN_VALUE
721
(NAUTILUS_VIEW_CLASS, view,
722
get_view_id, (view));
659
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_view_id (view);
726
663
nautilus_view_get_first_visible_file (NautilusView *view)
728
return EEL_CALL_METHOD_WITH_RETURN_VALUE
729
(NAUTILUS_VIEW_CLASS, view,
730
get_first_visible_file, (view));
665
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_first_visible_file (view);
734
669
nautilus_view_scroll_to_file (NautilusView *view,
738
(NAUTILUS_VIEW_CLASS, view,
739
scroll_to_file, (view, uri));
672
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->scroll_to_file (view, uri);
789
721
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
791
return EEL_CALL_METHOD_WITH_RETURN_VALUE
792
(NAUTILUS_VIEW_CLASS, view,
793
get_selection, (view));
723
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_selection (view);
798
727
* nautilus_view_update_menus:
1572
1498
gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2);
1574
1500
label = gtk_label_new_with_mnemonic (_("_Pattern:"));
1501
gtk_widget_set_halign (label, GTK_ALIGN_START);
1575
1503
example = gtk_label_new (NULL);
1576
example_pattern = g_strdup_printf ("<b>%s</b><i>%s</i>",
1504
gtk_widget_set_halign (example, GTK_ALIGN_START);
1505
example_pattern = g_strdup_printf ("<b>%s</b><i>%s</i> ",
1577
1506
_("Examples: "),
1578
1507
"*.png, file\?\?.txt, pict*.\?\?\?");
1579
1508
gtk_label_set_markup (GTK_LABEL (example), example_pattern);
1580
1509
g_free (example_pattern);
1581
gtk_misc_set_alignment (GTK_MISC (example), 0.0, 0.5);
1582
1511
entry = gtk_entry_new ();
1583
1512
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
1585
table = gtk_table_new (2, 2, FALSE);
1587
gtk_table_attach (GTK_TABLE (table), label,
1593
gtk_table_attach (GTK_TABLE (table), entry,
1596
GTK_EXPAND | GTK_FILL, GTK_FILL,
1599
gtk_table_attach (GTK_TABLE (table), example,
1513
gtk_widget_set_hexpand (entry, TRUE);
1515
grid = gtk_grid_new ();
1517
"orientation", GTK_ORIENTATION_VERTICAL,
1520
"column-spacing", 12,
1523
gtk_container_add (GTK_CONTAINER (grid), label);
1524
gtk_grid_attach_next_to (GTK_GRID (grid), entry, label,
1525
GTK_POS_RIGHT, 1, 1);
1526
gtk_grid_attach_next_to (GTK_GRID (grid), example, entry,
1527
GTK_POS_BOTTOM, 1, 1);
1605
1529
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
1606
gtk_widget_show_all (table);
1607
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), table);
1530
gtk_widget_show_all (grid);
1531
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), grid);
1608
1532
g_object_set_data (G_OBJECT (dialog), "entry", entry);
1609
1533
g_signal_connect (dialog, "response",
1610
1534
G_CALLBACK (pattern_select_response_cb),
1682
1606
NautilusView *directory_view;
1683
1607
NautilusSearchDirectory *search;
1684
GtkWidget *dialog, *table, *label, *entry, *chooser, *save_button;
1608
GtkWidget *dialog, *grid, *label, *entry, *chooser, *save_button;
1685
1609
const char *entry_text;
1686
1610
char *filename, *filename_utf8, *dirname, *path, *uri;
1687
1611
GFile *location;
1705
1629
gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2);
1706
1630
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
1708
table = gtk_table_new (2, 2, FALSE);
1709
gtk_container_set_border_width (GTK_CONTAINER (table), 5);
1710
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
1711
gtk_table_set_col_spacings (GTK_TABLE (table), 12);
1712
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), table, TRUE, TRUE, 0);
1713
gtk_widget_show (table);
1632
grid = gtk_grid_new ();
1634
"orientation", GTK_ORIENTATION_VERTICAL,
1637
"column-spacing", 12,
1639
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), grid, TRUE, TRUE, 0);
1640
gtk_widget_show (grid);
1715
1642
label = gtk_label_new_with_mnemonic (_("Search _name:"));
1716
gtk_misc_set_alignment (GTK_MISC(label), 0.0, 0.5);
1717
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
1643
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
1644
gtk_container_add (GTK_CONTAINER (grid), label);
1718
1645
gtk_widget_show (label);
1719
1647
entry = gtk_entry_new ();
1720
gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0);
1648
gtk_widget_set_hexpand (entry, TRUE);
1649
gtk_grid_attach_next_to (GTK_GRID (grid), entry, label,
1650
GTK_POS_RIGHT, 1, 1);
1721
1651
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
1722
1652
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
1728
1658
gtk_widget_show (entry);
1729
1659
label = gtk_label_new_with_mnemonic (_("_Folder:"));
1730
1660
gtk_misc_set_alignment (GTK_MISC(label), 0.0, 0.5);
1731
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
1661
gtk_container_add (GTK_CONTAINER (grid), label);
1732
1662
gtk_widget_show (label);
1734
1664
chooser = gtk_file_chooser_button_new (_("Select Folder to Save Search In"),
1735
1665
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
1736
gtk_table_attach (GTK_TABLE (table), chooser, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
1666
gtk_widget_set_hexpand (chooser, TRUE);
1667
gtk_grid_attach_next_to (GTK_GRID (grid), chooser, label,
1668
GTK_POS_RIGHT, 1, 1);
1737
1669
gtk_label_set_mnemonic_widget (GTK_LABEL (label), chooser);
1738
1670
gtk_widget_show (chooser);
1801
1733
if (view->details->window != NULL &&
1802
1734
view->details->active) {
1803
EEL_CALL_METHOD (NAUTILUS_VIEW_CLASS, view, start_renaming_file, (view, new_file, FALSE));
1735
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->start_renaming_file (view, new_file, FALSE);
1804
1736
nautilus_view_reveal_selection (view);
1851
1783
/* no need to select because start_renaming_file selects
1852
1784
* nautilus_view_select_file (view, new_file);
1854
EEL_CALL_METHOD (NAUTILUS_VIEW_CLASS, view, start_renaming_file, (view, new_file, FALSE));
1786
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->start_renaming_file (view, new_file, FALSE);
1855
1787
nautilus_view_reveal_selection (view);
1964
1896
static GdkPoint *
1965
context_menu_to_file_operation_position (NautilusView *directory_view)
1897
context_menu_to_file_operation_position (NautilusView *view)
1967
g_return_val_if_fail (NAUTILUS_IS_VIEW (directory_view), NULL);
1899
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
1969
if (nautilus_view_using_manual_layout (directory_view)
1970
&& directory_view->details->context_menu_position.x >= 0
1971
&& directory_view->details->context_menu_position.y >= 0) {
1972
EEL_CALL_METHOD (NAUTILUS_VIEW_CLASS, directory_view,
1973
widget_to_file_operation_position,
1974
(directory_view, &directory_view->details->context_menu_position));
1975
return &directory_view->details->context_menu_position;
1901
if (nautilus_view_using_manual_layout (view)
1902
&& view->details->context_menu_position.x >= 0
1903
&& view->details->context_menu_position.y >= 0) {
1904
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->widget_to_file_operation_position
1905
(view, &view->details->context_menu_position);
1906
return &view->details->context_menu_position;
2125
2056
if (view->details->directory_as_file != NULL) {
2126
2057
files = g_list_append (NULL, nautilus_file_ref (view->details->directory_as_file));
2128
nautilus_properties_window_present (files, GTK_WIDGET (view));
2059
nautilus_properties_window_present (files, GTK_WIDGET (view), NULL);
2130
2061
nautilus_file_list_free (files);
2133
nautilus_properties_window_present (selection, GTK_WIDGET (view));
2064
nautilus_properties_window_present (selection, GTK_WIDGET (view), NULL);
2135
2066
nautilus_file_list_free (selection);
2220
2149
if (preference_value != view->details->sort_directories_first) {
2221
2150
view->details->sort_directories_first = preference_value;
2223
(NAUTILUS_VIEW_CLASS, view,
2224
sort_directories_first_changed, (view));
2151
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->sort_directories_first_changed (view);
2474
2401
nautilus_view_init (NautilusView *view)
2403
AtkObject *atk_object;
2476
2404
NautilusDirectory *scripts_directory;
2477
2405
NautilusDirectory *templates_directory;
2478
2406
char *templates_uri;
2480
view->details = g_new0 (NautilusViewDetails, 1);
2408
view->details = G_TYPE_INSTANCE_GET_PRIVATE (view, NAUTILUS_TYPE_VIEW,
2409
NautilusViewDetails);
2482
2411
/* Default to true; desktop-icon-view sets to false */
2483
2412
view->details->show_foreign_files = TRUE;
2552
2481
g_signal_connect_swapped (nautilus_window_state,
2553
2482
"changed::" NAUTILUS_WINDOW_STATE_START_WITH_STATUS_BAR,
2554
2483
G_CALLBACK (nautilus_view_display_selection_info), view);
2486
atk_object = gtk_widget_get_accessible (GTK_WIDGET (view));
2487
atk_object_set_name (atk_object, _("Content View"));
2488
atk_object_set_description (atk_object, _("View of the current folder"));
3260
3192
} else if (fad1->directory > fad2->directory) {
3263
return EEL_INVOKE_METHOD (NAUTILUS_VIEW_CLASS, view, compare_files,
3264
(view, fad1->file, fad2->file));
3195
return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->compare_files (view, fad1->file, fad2->file);
4671
4602
static GdkPixbuf *
4672
get_menu_icon (const char *icon_name)
4674
NautilusIconInfo *info;
4678
size = nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU);
4680
if (g_path_is_absolute (icon_name)) {
4681
info = nautilus_icon_info_lookup_from_path (icon_name, size);
4683
info = nautilus_icon_info_lookup_from_name (icon_name, size);
4685
pixbuf = nautilus_icon_info_get_pixbuf_nodefault_at_size (info, size);
4686
g_object_unref (info);
4692
4603
get_menu_icon_for_file (NautilusFile *file)
4694
4605
NautilusIconInfo *info;
4725
4636
action = gtk_action_new (name,
4730
4641
if (icon != NULL) {
4731
pixbuf = get_menu_icon (icon);
4642
pixbuf = nautilus_ui_get_menu_icon (icon);
4732
4643
if (pixbuf != NULL) {
4733
g_object_set_data_full (G_OBJECT (action), "menu-icon",
4644
gtk_action_set_gicon (action, G_ICON (pixbuf));
4645
g_object_unref (pixbuf);
4986
4896
* nautilus_directory_is_local returns FALSE for nfs.
4988
4898
directory_uri = nautilus_directory_get_uri (view->details->model);
4989
if (eel_str_has_prefix (directory_uri, "file:") ||
4899
if (g_str_has_prefix (directory_uri, "file:") ||
4990
4900
eel_uri_is_desktop (directory_uri) ||
4991
4901
eel_uri_is_trash (directory_uri)) {
4992
4902
*file_paths = get_file_paths_as_newline_delimited_string (selected_files);
6102
6012
* they are always pre-selected as a whole */
6103
6013
select_all = nautilus_file_is_directory (file);
6105
EEL_CALL_METHOD (NAUTILUS_VIEW_CLASS, view, start_renaming_file, (view, file, select_all));
6015
NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->start_renaming_file (view, file, select_all);
7201
7111
if (strcmp (gtk_action_get_name (action), NAUTILUS_ACTION_NEW_EMPTY_DOCUMENT) == 0 &&
7202
7112
GTK_IS_IMAGE_MENU_ITEM (proxy)) {
7203
pixbuf = get_menu_icon ("text-x-generic");
7113
pixbuf = nautilus_ui_get_menu_icon ("text-x-generic");
7204
7114
if (pixbuf != NULL) {
7205
7115
image = gtk_image_new_from_pixbuf (pixbuf);
7206
7116
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), image);
7286
7195
gtk_ui_manager_insert_action_group (ui_manager, action_group, -1);
7287
7196
g_object_unref (action_group); /* owned by ui manager */
7289
ui = nautilus_ui_string_get ("nautilus-directory-view-ui.xml");
7290
view->details->dir_merge_id = gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL);
7198
view->details->dir_merge_id = gtk_ui_manager_add_ui_from_resource (ui_manager, "/org/gnome/nautilus/nautilus-directory-view-ui.xml", NULL);
7292
7200
view->details->scripts_invalid = TRUE;
7293
7201
view->details->templates_invalid = TRUE;
8374
8282
show_open_alternate = file_list_all_are_folders (selection) &&
8375
8283
selection_count > 0 &&
8376
8284
g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER) &&
8377
!(nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_DESKTOP);
8285
!NAUTILUS_IS_DESKTOP_ICON_VIEW (view);
8379
8287
action = gtk_action_group_get_action (view->details->dir_action_group,
8380
8288
NAUTILUS_ACTION_OPEN_ALTERNATE);
8672
8576
eel_pop_up_context_menu (create_popup_menu
8673
8577
(view, NAUTILUS_VIEW_POPUP_PATH_LOCATION),
8674
EEL_DEFAULT_POPUP_MENU_DISPLACEMENT,
8675
EEL_DEFAULT_POPUP_MENU_DISPLACEMENT,
8676
8578
view->details->location_popup_event);
9646
9550
klass->trash = real_trash;
9647
9551
klass->delete = real_delete;
9649
/* Function pointers that subclasses must override */
9650
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, add_file);
9651
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, bump_zoom_level);
9652
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, can_zoom_in);
9653
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, can_zoom_out);
9654
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, clear);
9655
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, file_changed);
9656
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, get_selection);
9657
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, get_selection_for_file_transfer);
9658
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, get_item_count);
9659
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, is_empty);
9660
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, reset_to_defaults);
9661
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, restore_default_zoom_level);
9662
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, select_all);
9663
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, set_selection);
9664
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, invert_selection);
9665
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, zoom_to_level);
9666
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, nautilus_view, get_zoom_level);
9668
9553
copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
9670
9555
properties[PROP_WINDOW_SLOT] =