diff -Nru nemo-2.6.7/configure.ac nemo-2.8.6/configure.ac --- nemo-2.6.7/configure.ac 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/configure.ac 2015-11-27 10:00:22.000000000 +0000 @@ -2,13 +2,13 @@ dnl =========================================================================== -m4_define(glib_minver, 2.31.9) +m4_define(glib_minver, 2.37.3) m4_define(cinnamon_desktop_minver, 2.6.1) m4_define(pango_minver, 1.28.3) -m4_define(gtk_minver, 3.3.17) +m4_define(gtk_minver, 3.9.10) m4_define(xml_minver, 2.7.8) m4_define(exif_minver, 0.6.20) -m4_define(exempi_minver, 2.1.0) +m4_define(exempi_minver, 2.2.0) m4_define(notify_minver, 0.7.0) m4_define(glib_mime_ver, 2.34.0) @@ -18,7 +18,7 @@ m4_define(nemo_extension_current, 5) m4_define(nemo_extension_revision, 0) -AC_INIT(nemo, 2.6.7, https://github.com/linuxmint/nemo) +AC_INIT(nemo, 2.8.6, https://github.com/linuxmint/nemo) dnl =========================================================================== diff -Nru nemo-2.6.7/data/action_i18n_strings.py nemo-2.8.6/data/action_i18n_strings.py --- nemo-2.6.7/data/action_i18n_strings.py 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/data/action_i18n_strings.py 2015-11-27 10:00:22.000000000 +0000 @@ -1,19 +1,19 @@ This is a dummy file for translating Nemo Action files - It was generated by the extract_action_strings script on 2015-05-21 09:02:20.919299 UTC. + It was generated by the extract_action_strings script on 2015-11-11 18:45:12.592266 UTC. add-desklets_nemo_action_in_Name = _("Add Desklets") -add-desklets_nemo_action_in_Tooltip = _("Add Desklets") +add-desklets_nemo_action_in_Tooltip = _("Add Cinamon desklets") 92_show-expo_nemo_action_in_Name = _("Manage workspaces (Expo)") 92_show-expo_nemo_action_in_Tooltip = _("Open Expo to add, remove, or organize workspaces") set-as-background_nemo_action_in_Name = _("Set as Wallpaper...") -set-as-background_nemo_action_in_Tooltip = _("Set the selected image as your desktop wallpaper") +set-as-background_nemo_action_in_Tooltip = _("Set the selected image as your Cinnamon desktop wallpaper") new-launcher_nemo_action_in_Name = _("Create a new l_auncher here...") new-launcher_nemo_action_in_Tooltip = _("Create a new launcher in this folder") change-background_nemo_action_in_Name = _("Change Desktop _Background") -change-background_nemo_action_in_Tooltip = _("Change Desktop _Background") +change-background_nemo_action_in_Tooltip = _("Change the Cinnamon desktop background") 91_delete-workspace_nemo_action_in_Name = _("Remove workspace") 91_delete-workspace_nemo_action_in_Tooltip = _("Remove the currently active workspace") 90_new-workspace_nemo_action_in_Name = _("Jump to new workspace") diff -Nru nemo-2.6.7/data/add-desklets.nemo_action.in nemo-2.8.6/data/add-desklets.nemo_action.in --- nemo-2.6.7/data/add-desklets.nemo_action.in 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/data/add-desklets.nemo_action.in 2015-11-27 10:00:22.000000000 +0000 @@ -2,7 +2,7 @@ Name=Add Desklets -Comment=Add Desklets +Comment=Add Cinamon desklets Exec=cinnamon-settings desklets diff -Nru nemo-2.6.7/data/change-background.nemo_action.in nemo-2.8.6/data/change-background.nemo_action.in --- nemo-2.6.7/data/change-background.nemo_action.in 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/data/change-background.nemo_action.in 2015-11-27 10:00:22.000000000 +0000 @@ -2,7 +2,7 @@ Name=Change Desktop _Background -Comment=Change Desktop _Background +Comment=Change the Cinnamon desktop background Exec=cinnamon-settings backgrounds diff -Nru nemo-2.6.7/data/icons/hicolor_actions_scalable_collapse-menu-symbolic.svg nemo-2.8.6/data/icons/hicolor_actions_scalable_collapse-menu-symbolic.svg --- nemo-2.6.7/data/icons/hicolor_actions_scalable_collapse-menu-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ nemo-2.8.6/data/icons/hicolor_actions_scalable_collapse-menu-symbolic.svg 2015-11-27 10:00:22.000000000 +0000 @@ -0,0 +1,65 @@ + + + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + Gnome Symbolic Icon Theme + + + + diff -Nru nemo-2.6.7/data/icons/hicolor_actions_scalable_expand-menu-symbolic.svg nemo-2.8.6/data/icons/hicolor_actions_scalable_expand-menu-symbolic.svg --- nemo-2.6.7/data/icons/hicolor_actions_scalable_expand-menu-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ nemo-2.8.6/data/icons/hicolor_actions_scalable_expand-menu-symbolic.svg 2015-11-27 10:00:22.000000000 +0000 @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + Gnome Symbolic Icon Theme + + + + + + + diff -Nru nemo-2.6.7/data/icons/Makefile.am nemo-2.8.6/data/icons/Makefile.am --- nemo-2.6.7/data/icons/Makefile.am 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/data/icons/Makefile.am 2015-11-27 10:00:22.000000000 +0000 @@ -18,6 +18,8 @@ hicolor_actions_scalable_sidebar-show-symbolic.svg \ hicolor_actions_scalable_sidebar-tree-symbolic.svg \ hicolor_actions_scalable_sidebar-places-symbolic.svg \ + hicolor_actions_scalable_expand-menu-symbolic.svg \ + hicolor_actions_scalable_collapse-menu-symbolic.svg \ hicolor_status_48x48_progress-0.png \ hicolor_status_48x48_progress-10.png \ hicolor_status_48x48_progress-20.png \ diff -Nru nemo-2.6.7/data/set-as-background.nemo_action.in nemo-2.8.6/data/set-as-background.nemo_action.in --- nemo-2.6.7/data/set-as-background.nemo_action.in 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/data/set-as-background.nemo_action.in 2015-11-27 10:00:22.000000000 +0000 @@ -2,7 +2,7 @@ Name=Set as Wallpaper... -Comment=Set the selected image as your desktop wallpaper +Comment=Set the selected image as your Cinnamon desktop wallpaper Exec=gsettings set org.cinnamon.desktop.background picture-uri "%U" diff -Nru nemo-2.6.7/debian/changelog nemo-2.8.6/debian/changelog --- nemo-2.6.7/debian/changelog 2015-07-07 13:12:34.000000000 +0000 +++ nemo-2.8.6/debian/changelog 2016-02-08 16:59:40.000000000 +0000 @@ -1,3 +1,19 @@ +nemo (2.8.6-2) unstable; urgency=medium + + [ Fabio Fantoni ] + * Updated patch missing-files-potfiles.in for fix "make check". + + [ Maximiliano Curia ] + + -- Maximiliano Curia Mon, 08 Feb 2016 17:59:40 +0100 + +nemo (2.8.6-1) unstable; urgency=medium + + * New upstream release. + * Update install files. + + -- Maximiliano Curia Fri, 08 Jan 2016 20:19:31 +0100 + nemo (2.6.7-1) unstable; urgency=medium [ Fabio Fantoni ] diff -Nru nemo-2.6.7/debian/control nemo-2.8.6/debian/control --- nemo-2.6.7/debian/control 2015-07-07 13:12:34.000000000 +0000 +++ nemo-2.8.6/debian/control 2016-02-08 16:59:40.000000000 +0000 @@ -17,9 +17,9 @@ libexif-dev (>= 0.6.20), libgail-3-dev, libgirepository1.0-dev (>= 0.9.12), - libglib2.0-dev (>= 2.31.9), + libglib2.0-dev (>= 2.37.3), libglib2.0-doc, - libgtk-3-dev (>= 3.3.18), + libgtk-3-dev (>= 3.9.10), libgtk-3-doc, libnotify-dev (>= 0.7.0), libx11-dev, @@ -60,20 +60,6 @@ Several icon themes and components for viewing different kinds of files are available in separate packages. -Package: nemo-dbg -Section: debug -Priority: extra -Architecture: any -Depends: nemo (= ${binary:Version}), ${misc:Depends} -Description: File manager and graphical shell for Cinnamon (Debugging symbols) - Nemo is the official file manager for the Cinnamon desktop. It allows - to browse directories, preview files and launch applications associated - with them. It is also responsible for handling the icons on the Cinnamon - desktop. It works on local and remote filesystems. - . - This development package contains the debugging symbols of nemo and its - extension library. - Package: libnemo-extension1 Section: libs Architecture: any @@ -92,8 +78,8 @@ Section: libdevel Architecture: any Depends: gir1.2-nemo-3.0 (= ${binary:Version}), - libglib2.0-dev (>= 2.31.9), - libgtk-3-dev (>= 3.3.18), + libglib2.0-dev (>= 2.37.3), + libgtk-3-dev (>= 3.9.10), libnemo-extension1 (= ${binary:Version}), ${misc:Depends} Description: Nemo component system facilities (development files) diff -Nru nemo-2.6.7/debian/nemo-data.install nemo-2.8.6/debian/nemo-data.install --- nemo-2.6.7/debian/nemo-data.install 2015-07-07 13:12:34.000000000 +0000 +++ nemo-2.8.6/debian/nemo-data.install 2016-02-08 16:59:40.000000000 +0000 @@ -1,6 +1,8 @@ debian/nemo.xpm /usr/share/pixmaps usr/share/glib-2.0/schemas/org.nemo.gschema.xml usr/share/gtksourceview-*/*/nemo_* +usr/share/icons/*/*/*/collapse-menu-symbolic.svg +usr/share/icons/*/*/*/expand-menu-symbolic.svg usr/share/icons/*/*/*/location-symbolic.svg usr/share/icons/*/*/*/nemo* usr/share/icons/*/*/*/progress-*.png diff -Nru nemo-2.6.7/debian/patches/missing-files-potfiles.in nemo-2.8.6/debian/patches/missing-files-potfiles.in --- nemo-2.6.7/debian/patches/missing-files-potfiles.in 2015-07-07 13:12:34.000000000 +0000 +++ nemo-2.8.6/debian/patches/missing-files-potfiles.in 2016-02-08 16:59:40.000000000 +0000 @@ -2,17 +2,52 @@ Author: Iain Lane Forwarded: no =================================================================== ---- nemo.orig/po/POTFILES.in 2015-06-09 19:05:36.604232253 +0200 -+++ nemo/po/POTFILES.in 2015-06-14 18:22:32.905750013 +0200 -@@ -95,3 +95,11 @@ - src/nemo-window-private.h - src/nemo-window-slot.c - src/nemo-x-content-bar.c +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -46,10 +46,12 @@ + libnemo-private/nemo-undo-signal-handlers.c + libnemo-private/nemo-vfs-file.c + libnemo-private/org.nemo.gschema.xml.in +src/nemo-action-config-widget.c + src/nemo-application.c + src/nemo-autorun-software.c + src/nemo-bookmarks-window.c + [type: gettext/glade]src/nemo-bookmarks-window.glade +src/nemo-config-base-widget.c + src/nemo-connect-server-dialog.c + src/nemo-connect-server-dialog-main.c + src/nemo-desktop-icon-view.c +@@ -58,12 +60,14 @@ + src/nemo-desktop-window.c + src/nemo-directory-view-ui.xml + src/nemo-error-reporting.c +src/nemo-extension-config-widget.c + src/nemo-file-management-properties.c + [type: gettext/glade]src/nemo-file-management-properties.glade + src/nemo-icon-view.c + src/nemo-icon-view-container.c + src/nemo-icon-view-ui.xml + src/nemo-image-properties-page.c +src/nemo-interesting-folder-bar.c + src/nemo-list-model.c + src/nemo-list-view.c + src/nemo-list-view-ui.xml +@@ -72,14 +76,17 @@ + src/nemo-main.c + src/nemo-mime-actions.c + src/nemo-notebook.c +src/nemo-open-with-main.c + src/nemo-pathbar.c + src/nemo-places-sidebar.c +src/nemo-plugin-manager.c + src/nemo-progress-ui-handler.c + src/nemo-properties-window.c + src/nemo-query-editor.c +-src/nemo-search-bar.c +src/nemo-script-config-widget.c + src/nemo-shell-ui.xml + src/nemo-statusbar.c +src/nemo-thumbnail-problem-bar.c + src/nemo-toolbar.c + src/nemo-trash-bar.c + src/nemo-tree-sidebar.c diff -Nru nemo-2.6.7/debian/rules nemo-2.8.6/debian/rules --- nemo-2.6.7/debian/rules 2015-07-07 13:12:34.000000000 +0000 +++ nemo-2.8.6/debian/rules 2016-02-08 16:59:40.000000000 +0000 @@ -22,7 +22,7 @@ # Disable auto tests override_dh_strip: - dh_strip --dbg-package=nemo-dbg + dh_strip --ddeb-migration='nemo-dbg (<= 2.8.6-2~~)' override_dh_makeshlibs: dh_makeshlibs -Xusr/lib/nemo/extensions-3.0/ diff -Nru nemo-2.6.7/libnemo-private/nemo-action.c nemo-2.8.6/libnemo-private/nemo-action.c --- nemo-2.6.7/libnemo-private/nemo-action.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-action.c 2015-11-27 10:00:22.000000000 +0000 @@ -48,23 +48,6 @@ static gpointer parent_class; -#define ACTION_FILE_GROUP "Nemo Action" - -#define KEY_ACTIVE "Active" -#define KEY_NAME "Name" -#define KEY_COMMENT "Comment" -#define KEY_EXEC "Exec" -#define KEY_ICON_NAME "Icon-Name" -#define KEY_STOCK_ID "Stock-Id" -#define KEY_SELECTION "Selection" -#define KEY_EXTENSIONS "Extensions" -#define KEY_MIME_TYPES "Mimetypes" -#define KEY_SEPARATOR "Separator" -#define KEY_QUOTE_TYPE "Quote" -#define KEY_DEPENDENCIES "Dependencies" -#define KEY_CONDITIONS "Conditions" -#define KEY_WHITESPACE "EscapeSpaces" - enum { PROP_0, @@ -1241,6 +1224,7 @@ } else if (g_strcmp0 (op, GREATER_THAN) == 0) { return (vector > 0); } + return FALSE; } static gboolean diff -Nru nemo-2.6.7/libnemo-private/nemo-action.h nemo-2.8.6/libnemo-private/nemo-action.h --- nemo-2.6.7/libnemo-private/nemo-action.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-action.h 2015-11-27 10:00:22.000000000 +0000 @@ -52,6 +52,24 @@ #define TOKEN_LABEL_FILE_NAME "%N" // Leave in for compatibility, same as TOKEN_EXEC_FILE_NAME + +#define ACTION_FILE_GROUP "Nemo Action" + +#define KEY_ACTIVE "Active" +#define KEY_NAME "Name" +#define KEY_COMMENT "Comment" +#define KEY_EXEC "Exec" +#define KEY_ICON_NAME "Icon-Name" +#define KEY_STOCK_ID "Stock-Id" +#define KEY_SELECTION "Selection" +#define KEY_EXTENSIONS "Extensions" +#define KEY_MIME_TYPES "Mimetypes" +#define KEY_SEPARATOR "Separator" +#define KEY_QUOTE_TYPE "Quote" +#define KEY_DEPENDENCIES "Dependencies" +#define KEY_CONDITIONS "Conditions" +#define KEY_WHITESPACE "EscapeSpaces" + typedef struct _NemoAction NemoAction; typedef struct _NemoActionClass NemoActionClass; diff -Nru nemo-2.6.7/libnemo-private/nemo-action-manager.c nemo-2.8.6/libnemo-private/nemo-action-manager.c --- nemo-2.6.7/libnemo-private/nemo-action-manager.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-action-manager.c 2015-11-27 10:00:22.000000000 +0000 @@ -141,7 +141,7 @@ set_up_actions_directories (NemoActionManager *action_manager) { - gchar *sys_path = g_build_filename (NEMO_DATADIR, "actions", NULL); + gchar *sys_path = nemo_action_manager_get_sys_directory_path (); gchar *sys_uri = g_filename_to_uri (sys_path, NULL, NULL); gchar *user_path = g_build_filename (g_get_user_data_dir (), "nemo", "actions", NULL); @@ -356,3 +356,15 @@ { return action_manager->action_list_dirty ? NULL : action_manager->actions; } + +gchar * +nemo_action_manager_get_user_directory_path (void) +{ + return g_build_filename (g_get_user_data_dir (), "nemo", "actions", NULL); +} + +gchar * +nemo_action_manager_get_sys_directory_path (void) +{ + return g_build_filename (NEMO_DATADIR, "actions", NULL); +} diff -Nru nemo-2.6.7/libnemo-private/nemo-action-manager.h nemo-2.8.6/libnemo-private/nemo-action-manager.h --- nemo-2.6.7/libnemo-private/nemo-action-manager.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-action-manager.h 2015-11-27 10:00:22.000000000 +0000 @@ -53,5 +53,7 @@ GType nemo_action_manager_get_type (void); NemoActionManager *nemo_action_manager_new (void); GList * nemo_action_manager_list_actions (NemoActionManager *action_manager); +gchar * nemo_action_manager_get_user_directory_path (void); +gchar * nemo_action_manager_get_sys_directory_path (void); #endif /* NEMO_ACTION_MANAGER_H */ diff -Nru nemo-2.6.7/libnemo-private/nemo-bookmark.c nemo-2.8.6/libnemo-private/nemo-bookmark.c --- nemo-2.6.7/libnemo-private/nemo-bookmark.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-bookmark.c 2015-11-27 10:00:22.000000000 +0000 @@ -42,6 +42,7 @@ enum { CONTENTS_CHANGED, + LOCATION_MOUNTED, LAST_SIGNAL }; @@ -65,7 +66,6 @@ GFile *location; GIcon *icon; NemoFile *file; - gboolean visited; char *scroll_file; }; @@ -95,7 +95,7 @@ return; } - if (!nemo_file_is_local (bookmark->details->file) && !bookmark->details->visited) { + if (!nemo_file_is_local (bookmark->details->file)) { /* never update icons for remote bookmarks */ return; } @@ -127,9 +127,9 @@ display_name = nemo_file_get_display_name (self->details->file); if (nemo_file_is_home (self->details->file)) { - nemo_bookmark_set_name_internal (self, _("Home")); + nemo_bookmark_set_custom_name (self, _("Home")); } else if (g_strcmp0 (self->details->name, display_name) != 0) { - nemo_bookmark_set_name_internal (self, display_name); + nemo_bookmark_set_custom_name (self, display_name); DEBUG ("%s: name changed to %s", nemo_bookmark_get_name (self), display_name); } @@ -222,7 +222,6 @@ DEBUG ("%s: trashed", nemo_bookmark_get_name (bookmark)); nemo_bookmark_disconnect_file (bookmark); nemo_bookmark_set_icon_to_default (bookmark); - bookmark->details->visited = FALSE; } else { nemo_bookmark_update_icon (bookmark); bookmark_set_name_from_ready_file (bookmark, file); @@ -236,9 +235,10 @@ DEBUG ("%s: disconnecting file", nemo_bookmark_get_name (bookmark)); - g_signal_handlers_disconnect_by_func (bookmark->details->file, - G_CALLBACK (bookmark_file_changed_callback), - bookmark); + g_signal_handlers_disconnect_by_func (bookmark->details->file, + G_CALLBACK (bookmark_file_changed_callback), + bookmark); + g_clear_object (&bookmark->details->file); } } @@ -252,7 +252,7 @@ return; } - if (nemo_bookmark_uri_get_exists (bookmark) || bookmark->details->visited) { + if (nemo_bookmark_uri_get_exists (bookmark)) { DEBUG ("%s: creating file", nemo_bookmark_get_name (bookmark)); bookmark->details->file = nemo_file_get (bookmark->details->location); @@ -260,7 +260,8 @@ g_assert (!nemo_file_is_gone (bookmark->details->file)); g_signal_connect_object (bookmark->details->file, "changed", - G_CALLBACK (bookmark_file_changed_callback), bookmark, 0); + G_CALLBACK (bookmark_file_changed_callback), + bookmark, 0); } /* Set icon based on available information. */ @@ -364,14 +365,6 @@ } static void -nemo_bookmark_constructed (GObject *obj) -{ - NemoBookmark *self = NEMO_BOOKMARK (obj); - - nemo_bookmark_connect_file (self); -} - -static void nemo_bookmark_class_init (NemoBookmarkClass *class) { GObjectClass *oclass = G_OBJECT_CLASS (class); @@ -379,7 +372,6 @@ oclass->finalize = nemo_bookmark_finalize; oclass->get_property = nemo_bookmark_get_property; oclass->set_property = nemo_bookmark_set_property; - oclass->constructed = nemo_bookmark_constructed; signals[CONTENTS_CHANGED] = g_signal_new ("contents-changed", @@ -390,6 +382,16 @@ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[LOCATION_MOUNTED] = + g_signal_new ("location-mounted", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (NemoBookmarkClass, location_mounted), + NULL, NULL, + g_cclosure_marshal_generic, + G_TYPE_BOOLEAN, 1, + G_TYPE_FILE); + properties[PROP_NAME] = g_param_spec_string ("name", "Bookmark's name", @@ -428,8 +430,6 @@ { bookmark->details = G_TYPE_INSTANCE_GET_PRIVATE (bookmark, NEMO_TYPE_BOOKMARK, NemoBookmarkDetails); - - bookmark->details->visited = FALSE; } const gchar * @@ -585,16 +585,6 @@ return uri; } -void -nemo_bookmark_set_visited (NemoBookmark *bookmark, gboolean visited) -{ - g_return_if_fail (NEMO_IS_BOOKMARK (bookmark)); - - bookmark->details->visited = visited; - - nemo_bookmark_connect_file (bookmark); -} - NemoBookmark * nemo_bookmark_new (GFile *location, const gchar *custom_name, @@ -668,16 +658,16 @@ nemo_bookmark_uri_get_exists (NemoBookmark *bookmark) { char *path_name; - gboolean exists; + gboolean exists = FALSE; - /* Convert to a path, returning FALSE if not local. */ - if (!g_file_is_native (bookmark->details->location)) { - return FALSE; - } - path_name = g_file_get_path (bookmark->details->location); + path_name = g_file_get_path (bookmark->details->location); + + if (g_file_is_native (bookmark->details->location) && g_file_test (path_name, G_FILE_TEST_EXISTS)) { + exists = TRUE; + } else { + g_signal_emit_by_name (bookmark, "location-mounted", bookmark->details->location, &exists); + } - /* Now check if the file exists (sync. call OK because it is local). */ - exists = g_file_test (path_name, G_FILE_TEST_EXISTS); g_free (path_name); return exists; @@ -696,3 +686,9 @@ { return g_strdup (bookmark->details->scroll_file); } + +void +nemo_bookmark_connect (NemoBookmark *bookmark) +{ + nemo_bookmark_connect_file (bookmark); +} \ No newline at end of file diff -Nru nemo-2.6.7/libnemo-private/nemo-bookmark.h nemo-2.8.6/libnemo-private/nemo-bookmark.h --- nemo-2.6.7/libnemo-private/nemo-bookmark.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-bookmark.h 2015-11-27 10:00:22.000000000 +0000 @@ -59,6 +59,8 @@ * (custom name or URI) changed. */ void (* contents_changed) (NemoBookmark *bookmark); + + gboolean (* location_mounted) (GFile *location); }; typedef struct NemoBookmarkClass NemoBookmarkClass; @@ -76,8 +78,6 @@ void nemo_bookmark_set_custom_name (NemoBookmark *bookmark, const char *new_name); gboolean nemo_bookmark_uri_get_exists (NemoBookmark *bookmark); -void nemo_bookmark_set_visited (NemoBookmark *bookmark, - gboolean visited); int nemo_bookmark_compare_with (gconstpointer a, gconstpointer b); int nemo_bookmark_compare_uris (gconstpointer a, @@ -91,4 +91,6 @@ /* Helper functions for displaying bookmarks */ GtkWidget * nemo_bookmark_menu_item_new (NemoBookmark *bookmark); +void nemo_bookmark_connect (NemoBookmark *bookmark); + #endif /* NEMO_BOOKMARK_H */ diff -Nru nemo-2.6.7/libnemo-private/nemo-directory-async.c nemo-2.8.6/libnemo-private/nemo-directory-async.c --- nemo-2.6.7/libnemo-private/nemo-directory-async.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-directory-async.c 2015-11-27 10:00:22.000000000 +0000 @@ -3782,10 +3782,12 @@ thumb_mtime == file->details->mtime) { file->details->thumbnail = g_object_ref (pixbuf); file->details->thumbnail_mtime = thumb_mtime; + file->details->thumbnail_throttle_count = 1; } else { g_free (file->details->thumbnail_path); file->details->thumbnail_path = NULL; } + } nemo_directory_async_state_changed (directory); diff -Nru nemo-2.6.7/libnemo-private/nemo-file.c nemo-2.8.6/libnemo-private/nemo-file.c --- nemo-2.6.7/libnemo-private/nemo-file.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-file.c 2015-11-27 10:00:22.000000000 +0000 @@ -440,6 +440,8 @@ g_free (file->details->thumbnail_path); file->details->thumbnail_path = NULL; file->details->thumbnailing_failed = FALSE; + file->details->thumbnail_throttle_count = 1; + file->details->last_thumbnail_try_mtime = 0; file->details->is_launcher = FALSE; file->details->is_foreign_link = FALSE; @@ -4274,6 +4276,24 @@ } } +static gint +get_throttle_count (NemoFile *file) +{ + NemoFileDetails *details = file->details; + + gint diff = (gint)(details->mtime - details->last_thumbnail_try_mtime); + + if (diff != 0 && diff <= (THUMBNAIL_CREATION_DELAY_SECS * (details->thumbnail_throttle_count + 1))) { + details->thumbnail_throttle_count++; + } else { + details->thumbnail_throttle_count = 1; + } + + details->last_thumbnail_try_mtime = details->mtime; + + return details->thumbnail_throttle_count; +} + NemoIconInfo * nemo_file_get_icon (NemoFile *file, int size, @@ -4371,7 +4391,7 @@ !file->details->is_thumbnailing && !file->details->thumbnailing_failed) { if (nemo_can_thumbnail (file)) { - nemo_create_thumbnail (file); + nemo_create_thumbnail (file, get_throttle_count (file)); } } } diff -Nru nemo-2.6.7/libnemo-private/nemo-file-operations.c nemo-2.8.6/libnemo-private/nemo-file-operations.c --- nemo-2.6.7/libnemo-private/nemo-file-operations.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-file-operations.c 2015-11-27 10:00:22.000000000 +0000 @@ -69,6 +69,19 @@ /* TODO: TESTING!!! */ +typedef enum { + OP_KIND_COPY, + OP_KIND_MOVE, + OP_KIND_DELETE, + OP_KIND_TRASH, + OP_KIND_EMPTY_TRASH, + OP_KIND_DUPE, + OP_KIND_PERMISSIONS, + OP_KIND_LINK, + OP_KIND_CREATE, + OP_KIND_TRUST +} OpKind; + typedef struct { GIOSchedulerJob *io_job; GTimer *time; @@ -154,17 +167,6 @@ guint32 dir_mask; } SetPermissionsJob; -typedef enum { - OP_KIND_COPY, - OP_KIND_MOVE, - OP_KIND_DELETE, - OP_KIND_TRASH, - OP_KIND_EMPTY_TRASH, - OP_KIND_DUPE, - OP_KIND_PERMISSIONS, - OP_KIND_LINK -} OpKind; - typedef struct { int num_files; goffset num_bytes; @@ -196,6 +198,12 @@ #define MERGE _("_Merge") #define MERGE_ALL _("Merge _All") #define COPY_FORCE _("Copy _Anyway") +; +static void add_job_to_job_queue (GIOSchedulerJobFunc job_func, + gpointer user_data, + GCancellable *cancellable, + NemoProgressInfo *info, + OpKind kind); static void mark_desktop_file_trusted (CommonJob *common, @@ -2119,8 +2127,8 @@ generate_initial_job_details (job->common.progress, try_trash ? OP_KIND_TRASH : OP_KIND_DELETE, job->files, NULL); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, delete_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (delete_job, job, job->common.cancellable, job->common.progress, + try_trash ? OP_KIND_TRASH : OP_KIND_DELETE); } void @@ -2432,8 +2440,8 @@ generate_initial_job_details (job->common.progress, OP_KIND_EMPTY_TRASH, NULL, NULL); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, empty_trash_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (empty_trash_job, job, job->common.cancellable, job->common.progress, + OP_KIND_EMPTY_TRASH); return; } else if (response == GTK_RESPONSE_CANCEL) { if (callback) { @@ -4753,8 +4761,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_COPY, job->files, job->destination); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, copy_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (copy_job, job, job->common.cancellable, job->common.progress, OP_KIND_COPY); } void @@ -4797,8 +4804,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_COPY, job->files, job->destination); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, copy_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (copy_job, job, job->common.cancellable, job->common.progress, OP_KIND_COPY); } static void @@ -5339,8 +5345,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_MOVE, job->files, job->destination); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, move_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (move_job, job, job->common.cancellable, job->common.progress, OP_KIND_MOVE); } static void @@ -5654,8 +5659,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_LINK, job->files, job->destination); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, link_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (link_job, job, job->common.cancellable, job->common.progress, OP_KIND_LINK); } @@ -5697,8 +5701,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_DUPE, job->files, src_dir); g_object_unref (src_dir); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, copy_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (copy_job, job, job->common.cancellable, job->common.progress, OP_KIND_DUPE); } static gboolean @@ -5862,8 +5865,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_PERMISSIONS, NULL, job->file); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, set_permissions_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (set_permissions_job, job, job->common.cancellable, job->common.progress, OP_KIND_PERMISSIONS); } static GList * @@ -6341,8 +6343,7 @@ job->common.undo_info = nemo_file_undo_info_create_new (NEMO_FILE_UNDO_OP_CREATE_FOLDER); } - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, create_job, job, job->common.cancellable, job->common.progress, TRUE); + add_job_to_job_queue (create_job, job, job->common.cancellable, job->common.progress, OP_KIND_CREATE); } void @@ -6380,8 +6381,7 @@ job->common.undo_info = nemo_file_undo_info_create_new (NEMO_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE); } - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, create_job, job, job->common.cancellable, job->common.progress, TRUE); + add_job_to_job_queue (create_job, job, job->common.cancellable, job->common.progress, OP_KIND_CREATE); } void @@ -6418,8 +6418,7 @@ job->common.undo_info = nemo_file_undo_info_create_new (NEMO_FILE_UNDO_OP_CREATE_EMPTY_FILE); } - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, create_job, job, job->common.cancellable, job->common.progress, TRUE); + add_job_to_job_queue (create_job, job, job->common.cancellable, job->common.progress, OP_KIND_CREATE); } static void @@ -6537,8 +6536,7 @@ generate_initial_job_details (job->common.progress, OP_KIND_EMPTY_TRASH, NULL, NULL); - NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, empty_trash_job, job, job->common.cancellable, job->common.progress, FALSE); + add_job_to_job_queue (empty_trash_job, job, job->common.cancellable, job->common.progress, OP_KIND_EMPTY_TRASH); } static gboolean @@ -6758,10 +6756,212 @@ job->done_callback = done_callback; job->done_callback_data = done_callback_data; + add_job_to_job_queue (mark_trusted_job, job, job->common.cancellable, job->common.progress, OP_KIND_PERMISSIONS); +} + +#if 0 +#define DEBUG_FILE_OP_QUEUE +#endif + +static gboolean +job_is_local (GList *files, GFile *destination) +{ + gboolean ret = FALSE; + + NemoFile *source = nemo_file_get_existing (G_FILE (files->data)); + + if (source == NULL) + return FALSE; + + NemoFile *dest = destination != NULL ? nemo_file_get_existing (destination) : NULL; + + if (dest != NULL) { + ret = nemo_file_is_local (source) && + nemo_file_is_local (dest); + } else { + ret = nemo_file_is_local (source); + } + + nemo_file_unref (source); + nemo_file_unref (dest); + +#ifdef DEBUG_FILE_OP_QUEUE + g_message ("File op job is local: %s\n", ret ? "TRUE" : "FALSE"); +#endif + + return ret; +} + +static gboolean +job_is_same_fs (GList *files, GFile *destination) +{ + gboolean ret = FALSE; + + NemoFile *source = nemo_file_get_existing (G_FILE (files->data)); + + if (source == NULL) + return FALSE; + + NemoFile *dest = nemo_file_get_existing (destination); + + if (dest != NULL) { + gchar *src_fs_id = nemo_file_get_filesystem_id (source); + gchar *dst_fs_id = nemo_file_get_filesystem_id (dest); + + if (g_strcmp0 (src_fs_id, dst_fs_id) == 0) + ret = TRUE; + +#ifdef DEBUG_FILE_OP_QUEUE + g_message ("File op job is same filesystem (src: %s, dst: %s): %s\n", src_fs_id, dst_fs_id, ret ? "TRUE" : "FALSE"); +#endif + + g_free (src_fs_id); + g_free (dst_fs_id); + } + + nemo_file_unref (source); + nemo_file_unref (dest); + + return ret; +} + +static gboolean +job_has_no_folders (GList *files) +{ + GList *l; + gboolean ret = TRUE; + + for (l = files; l != NULL; l = l->next) { + GFile *location = G_FILE (l->data); + NemoFile *file = nemo_file_get_existing (location); + + if (file == NULL) { + ret = FALSE; + break; + } + + if (nemo_file_is_directory (file)) { + ret = FALSE; + nemo_file_unref (file); + break; + } + + nemo_file_unref (file); + } + +#ifdef DEBUG_FILE_OP_QUEUE + g_message ("File op job has no folders: %s\n", ret ? "TRUE" : "FALSE"); +#endif + + return ret; +} + +static gboolean +job_is_small (GList *files) +{ + gboolean ret = FALSE; + GList *l; + goffset size = 0; + + for (l = files; l != NULL; l = l->next) { + GFile *location = G_FILE (l->data); + NemoFile *file = nemo_file_get_existing (location); + + if (file == NULL) { + size = G_MAXOFFSET; + break; + } + + size = size + nemo_file_get_size (file); + + nemo_file_unref (file); + } + + ret = size < 104857600; /* 100 mb */ + +#ifdef DEBUG_FILE_OP_QUEUE + g_message ("File op job is small: %s\n", ret ? "TRUE" : "FALSE"); +#endif + + return ret; +} + +static gboolean +should_start_immediately (OpKind kind, gpointer op_data) +{ + gboolean ret = FALSE; + + switch (kind) { + case OP_KIND_CREATE: + case OP_KIND_TRUST: + case OP_KIND_EMPTY_TRASH: + case OP_KIND_PERMISSIONS: + case OP_KIND_LINK: + ret = TRUE; + break; + case OP_KIND_MOVE: + ; + CopyMoveJob *mjob = (CopyMoveJob *) op_data; + ret = job_is_same_fs (mjob->files, mjob->destination) && + job_is_local (mjob->files, mjob->destination); + break; + case OP_KIND_COPY: + ; + CopyMoveJob *cjob = (CopyMoveJob *) op_data; + ret = job_is_same_fs (cjob->files, cjob->destination) && + job_is_local (cjob->files, cjob->destination) && + job_has_no_folders (cjob->files) && + job_is_small (cjob->files); + break; + case OP_KIND_DUPE: + ; + CopyMoveJob *dupejob = (CopyMoveJob *) op_data; + ret = job_is_local (dupejob->files, dupejob->destination) && + job_has_no_folders (dupejob->files) && + job_is_small (dupejob->files); + break; + case OP_KIND_DELETE: + case OP_KIND_TRASH: + ; + DeleteJob *deljob = (DeleteJob *) op_data; + ret = job_is_local (deljob->files, NULL) || + (job_has_no_folders (deljob->files) && + job_is_small (deljob->files)); + break; + default: + ret = FALSE; + break; + } + +#ifdef DEBUG_FILE_OP_QUEUE + g_message ("File op job STARTING IMMEDIATELY: %s\n", ret ? "TRUE" : "FALSE"); +#endif + + return ret; +} + +void +add_job_to_job_queue (GIOSchedulerJobFunc job_func, + gpointer user_data, + GCancellable *cancellable, + NemoProgressInfo *info, + OpKind kind) +{ + gboolean start_immediately; + NemoJobQueue *job_queue = nemo_job_queue_get (); - nemo_job_queue_add_new_job (job_queue, mark_trusted_job, job, job->common.cancellable, job->common.progress, TRUE); + + start_immediately = should_start_immediately (kind, user_data); + + nemo_job_queue_add_new_job (job_queue, + job_func, + user_data, + cancellable, + info, + start_immediately); } + #if !defined (NEMO_OMIT_SELF_CHECK) void diff -Nru nemo-2.6.7/libnemo-private/nemo-file-private.h nemo-2.8.6/libnemo-private/nemo-file-private.h --- nemo-2.6.7/libnemo-private/nemo-file-private.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-file-private.h 2015-11-27 10:00:22.000000000 +0000 @@ -104,6 +104,8 @@ eel_boolean_bit thumbnail_access_problem : 1; GdkPixbuf *thumbnail; time_t thumbnail_mtime; + gint thumbnail_throttle_count; + time_t last_thumbnail_try_mtime; GdkPixbuf *scaled_thumbnail; double thumbnail_scale; diff -Nru nemo-2.6.7/libnemo-private/nemo-file-utilities.c nemo-2.8.6/libnemo-private/nemo-file-utilities.c --- nemo-2.6.7/libnemo-private/nemo-file-utilities.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-file-utilities.c 2015-11-27 10:00:22.000000000 +0000 @@ -151,6 +151,19 @@ } } +/** + * nemo_get_scripts_directory_path: + * + * Get the path for the directory containing nemo scripts. + * + * Return value: the directory path containing nemo scripts + **/ +char * +nemo_get_scripts_directory_path (void) +{ + return g_build_filename (g_get_user_data_dir (), "nemo", "scripts", NULL); +} + typedef struct { char *type; char *path; diff -Nru nemo-2.6.7/libnemo-private/nemo-file-utilities.h nemo-2.8.6/libnemo-private/nemo-file-utilities.h --- nemo-2.6.7/libnemo-private/nemo-file-utilities.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-file-utilities.h 2015-11-27 10:00:22.000000000 +0000 @@ -91,6 +91,8 @@ char * nemo_get_accel_map_file (void); +char * nemo_get_scripts_directory_path (void); + GHashTable * nemo_trashed_files_get_original_directories (GList *files, GList **unhandled_files); void nemo_restore_files_from_trash (GList *files, diff -Nru nemo-2.6.7/libnemo-private/nemo-global-preferences.h nemo-2.8.6/libnemo-private/nemo-global-preferences.h --- nemo-2.6.7/libnemo-private/nemo-global-preferences.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-global-preferences.h 2015-11-27 10:00:22.000000000 +0000 @@ -68,6 +68,9 @@ /* Single/Double click preference */ #define NEMO_PREFERENCES_CLICK_POLICY "click-policy" +/* Quick renames with two single clicks and pause in-between*/ +#define NEMO_PREFERENCES_CLICK_TO_RENAME "quick-renames-with-pause-in-between" + /* Activating executable text files */ #define NEMO_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION "executable-text-activation" @@ -241,6 +244,12 @@ #define NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS "disabled-actions" #define NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS "disabled-scripts" +/* Connect-to server dialog last-used method */ +#define NEMO_PREFERENCES_LAST_SERVER_CONNECT_METHOD "last-server-connect-method" + +/* File operations queue */ +#define NEMO_PREFERENCES_NEVER_QUEUE_FILE_OPS "never-queue-file-ops" + void nemo_global_preferences_init (void); char *nemo_global_preferences_get_default_folder_viewer_preference_as_iid (void); gboolean nemo_global_preferences_get_ignore_view_metadata (void); diff -Nru nemo-2.6.7/libnemo-private/nemo-icon-container.c nemo-2.8.6/libnemo-private/nemo-icon-container.c --- nemo-2.6.7/libnemo-private/nemo-icon-container.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-icon-container.c 2015-11-27 10:00:22.000000000 +0000 @@ -206,6 +206,10 @@ static void store_layout_timestamps_now (NemoIconContainer *container); static void remove_search_entry_timeout (NemoIconContainer *container); +static gboolean handle_icon_slow_two_click (NemoIconContainer *container, + NemoIcon *icon, + GdkEventButton *event); + static gpointer accessible_parent_class; static GQuark accessible_private_data_quark = 0; @@ -285,6 +289,50 @@ /* Functions dealing with NemoIcons. */ +static gboolean +clicked_on_text (NemoIconContainer *container, + NemoIcon *icon, + GdkEventButton *event) +{ + if (icon == NULL) + return FALSE; + + double eventX, eventY; + EelDRect icon_rect; + + icon_rect = nemo_icon_canvas_item_get_text_rectangle (icon->item, TRUE); + eel_canvas_window_to_world (EEL_CANVAS (container), event->x, event->y, &eventX, &eventY); + + gboolean ret = (eventX > icon_rect.x0) && + (eventX < icon_rect.x1) && + (eventY > icon_rect.y0) && + (eventY < icon_rect.y1); + + return ret; +} + +static gboolean +clicked_on_icon (NemoIconContainer *container, + NemoIcon *icon, + GdkEventButton *event) +{ + if (icon == NULL) + return FALSE; + + double eventX, eventY; + EelDRect icon_rect; + + icon_rect = nemo_icon_canvas_item_get_icon_rectangle (icon->item); + eel_canvas_window_to_world (EEL_CANVAS (container), event->x, event->y, &eventX, &eventY); + + gboolean ret = (eventX > icon_rect.x0) && + (eventX < icon_rect.x1) && + (eventY > icon_rect.y0) && + (eventY < icon_rect.y1); + + return ret; +} + static void icon_free (NemoIcon *icon) { @@ -4260,7 +4308,7 @@ NemoIconContainer *container; gboolean selection_changed; gboolean return_value; - gboolean clicked_on_icon; + gboolean clicked_on_item; container = NEMO_ICON_CONTAINER (widget); container->details->button_down_time = event->time; @@ -4275,7 +4323,7 @@ } /* Invoke the canvas event handler and see if an item picks up the event. */ - clicked_on_icon = GTK_WIDGET_CLASS (nemo_icon_container_parent_class)->button_press_event (widget, event); + clicked_on_item = GTK_WIDGET_CLASS (nemo_icon_container_parent_class)->button_press_event (widget, event); /* Move focus to icon container, unless we're still renaming (to avoid exiting * renaming mode) @@ -4284,18 +4332,17 @@ gtk_widget_grab_focus (widget); } - if (clicked_on_icon) { - NemoIcon *icon;//current icon which was clicked on - EelDRect icon_rect;//stores dimensions of the icon part - double eventX;//where did click event happened for x - double eventY;//where did click event happened for y - /* when icon is in renaming mode and user clicks on the image part of icon renaming should get closed */ - icon = get_first_selected_icon (container);//this function gets the clicked icon - icon_rect = nemo_icon_canvas_item_get_icon_rectangle (icon->item); - eel_canvas_window_to_world (EEL_CANVAS (container), event->x, event->y, &eventX, &eventY); - if (eventX > icon_rect.x0 && eventX < icon_rect.x1 && eventY > icon_rect.y0 && eventY < icon_rect.y1 && icon == get_icon_being_renamed (container)){ - end_renaming_mode (container,TRUE); - } + if (clicked_on_item) { + NemoIcon *icon; // current icon which was clicked on + + /* when icon is in renaming mode and user clicks on the image part of icon renaming should get closed */ + icon = get_first_selected_icon (container); // this function gets the clicked icon + + if (clicked_on_icon (container, icon, event) && + icon == get_icon_being_renamed (container)) { + end_renaming_mode (container, TRUE); + } + return TRUE; } @@ -4384,8 +4431,8 @@ signals[SELECTION_CHANGED], 0); } } - } - + } + if (details->drag_icon != NULL && (details->single_click_mode || event->button == MIDDLE_BUTTON)) { @@ -4427,6 +4474,12 @@ } } } + + if (details->drag_icon != NULL && + handle_icon_slow_two_click (container, details->drag_icon, event)) { + if (!details->skip_rename_on_release) + nemo_icon_container_start_renaming_selected_item (container, FALSE); + } } static gboolean @@ -4434,15 +4487,16 @@ { static gint64 last_click_time = 0; static gint click_count = 0; - gint double_click_time; gint64 current_time; + gint interval; + + /* fetch system double-click time */ + g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (container))), + "gtk-double-click-time", &interval, + NULL); - /* Determine click count */ - g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (container))), - "gtk-double-click-time", &double_click_time, - NULL); current_time = eel_get_system_time (); - if (current_time - last_click_time < double_click_time * 1000) { + if (current_time - last_click_time < interval * 1000) { click_count++; } else { click_count = 0; @@ -4460,6 +4514,46 @@ } } +static gboolean +clicked_within_slow_click_interval_on_text (NemoIconContainer *container, NemoIcon *icon, GdkEventButton *event) +{ + static gint64 last_slow_click_time = 0; + static gint slow_click_count = 0; + gint64 current_time; + gint interval; + gint double_click_interval; + + /* fetch system double-click time */ + g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (container))), + "gtk-double-click-time", &double_click_interval, + NULL); + + /* slow click interval is always 2 seconds longer than the system + * double-click interval. */ + + interval = double_click_interval + 2000; + + current_time = eel_get_system_time (); + if (current_time - last_slow_click_time < interval * 1000) { + slow_click_count = 1; + } else { + slow_click_count = 0; + } + + /* Stash time for next compare */ + last_slow_click_time = current_time; + + /* Only allow second click on text to trigger this */ + if (slow_click_count == 1 && + icon == get_first_selected_icon (container) && + clicked_on_text (container, icon, event)) { + slow_click_count = 0; + return TRUE; + } else { + return FALSE; + } +} + static void clear_drag_state (NemoIconContainer *container) { @@ -5495,7 +5589,7 @@ /* We pass the event to the search_entry. If its text changes, then we * start the typeahead find capabilities. * Copied from NemoIconContainer */ - if (!handled && + if (!handled && !nemo_icon_container_get_is_desktop (container) && event->keyval != GDK_KEY_asciitilde && event->keyval != GDK_KEY_KP_Divide && event->keyval != GDK_KEY_slash /* don't steal slash key events, used for "go to" */ && @@ -6212,6 +6306,8 @@ tooltip_prefs_changed_callback (container); + details->skip_rename_on_release = FALSE; + if (!setup_prefs) { g_signal_connect_swapped (nemo_icon_view_preferences, "changed::" NEMO_PREFERENCES_ICON_VIEW_TEXT_ELLIPSIS_LIMIT, @@ -6264,6 +6360,46 @@ return FALSE; } +static gboolean +handle_icon_slow_two_click (NemoIconContainer *container, + NemoIcon *icon, + GdkEventButton *event) +{ + NemoIconContainerDetails *details; + + NemoFile *file = NEMO_FILE (icon->data); + + if (!nemo_file_can_rename (file)) + return FALSE; + + if (event->button != DRAG_BUTTON) { + return FALSE; + } + + details = container->details; + + if (!details->click_to_rename) + return FALSE; + + GList *selection = nemo_icon_container_get_selection (container); + gint selected_count = g_list_length (selection); + g_list_free (selection); + + if (selected_count != 1) + return FALSE; + + if (!details->single_click_mode && + clicked_within_slow_click_interval_on_text (container, icon, event) && + details->double_click_icon[0] == details->double_click_icon[1] && + details->double_click_button[0] == details->double_click_button[1]) { + if (!button_event_modifies_selection (event)) { + return TRUE; + } + } + + return FALSE; +} + /* NemoIcon event handling. */ /* Conceptually, pressing button 1 together with CTRL or SHIFT toggles @@ -6284,6 +6420,8 @@ details = container->details; + details->skip_rename_on_release = FALSE; + if (event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS) { return TRUE; } @@ -6304,7 +6442,7 @@ details->double_click_button[0] = event->button; } - if (handle_icon_double_click (container, icon, event)) { + if (handle_icon_double_click (container, icon, event)) { /* Double clicking does not trigger a D&D action. */ details->drag_button = 0; details->drag_icon = NULL; @@ -6334,7 +6472,11 @@ * the same way for contextual menu as it would be without. */ details->icon_selected_on_button_down = icon->is_selected; - + + GList *sel = nemo_icon_container_get_selected_icons (container); + details->skip_rename_on_release = g_list_length (sel) > 1; + g_list_free (sel); + if ((event->button == DRAG_BUTTON || event->button == MIDDLE_BUTTON) && (event->state & GDK_SHIFT_MASK) != 0) { NemoIcon *start_icon; @@ -8379,10 +8521,10 @@ end_offset = -1; } else { /* if it is a directory it should select all of the text regardless of select_all option */ - if (nemo_file_is_directory (icon->data)){ + if (nemo_file_is_directory (NEMO_FILE (icon->data))) { start_offset = 0; end_offset = -1; - }else{ + } else { eel_filename_get_rename_region (editable_text, &start_offset, &end_offset); } } @@ -8480,6 +8622,15 @@ container->details->single_click_mode = single_click_mode; } +void +nemo_icon_container_set_click_to_rename_enabled (NemoIconContainer *container, + gboolean enabled) +{ + g_return_if_fail (NEMO_IS_ICON_CONTAINER (container)); + + container->details->click_to_rename = enabled; +} + /* Return if the icon container is a fixed size */ gboolean nemo_icon_container_get_is_fixed_size (NemoIconContainer *container) diff -Nru nemo-2.6.7/libnemo-private/nemo-icon-container.h nemo-2.8.6/libnemo-private/nemo-icon-container.h --- nemo-2.6.7/libnemo-private/nemo-icon-container.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-icon-container.h 2015-11-27 10:00:22.000000000 +0000 @@ -318,6 +318,8 @@ int new_zoom_level); void nemo_icon_container_set_single_click_mode (NemoIconContainer *container, gboolean single_click_mode); +void nemo_icon_container_set_click_to_rename_enabled (NemoIconContainer *container, + gboolean enabled); void nemo_icon_container_enable_linger_selection (NemoIconContainer *view, gboolean enable); gboolean nemo_icon_container_get_is_fixed_size (NemoIconContainer *container); diff -Nru nemo-2.6.7/libnemo-private/nemo-icon-private.h nemo-2.8.6/libnemo-private/nemo-icon-private.h --- nemo-2.6.7/libnemo-private/nemo-icon-private.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-icon-private.h 2015-11-27 10:00:22.000000000 +0000 @@ -175,6 +175,8 @@ NemoIcon *double_click_icon[2]; /* Both clicks in a double click need to be on the same icon */ guint double_click_button[2]; + gboolean skip_rename_on_release; + NemoIcon *range_selection_base_icon; /* Renaming Details */ @@ -213,6 +215,7 @@ gboolean single_click_mode; gboolean auto_layout; gboolean tighter_layout; + gboolean click_to_rename; /* Whether for the vertical layout, all columns are supposed to * have the same width. */ diff -Nru nemo-2.6.7/libnemo-private/nemo-job-queue.c nemo-2.8.6/libnemo-private/nemo-job-queue.c --- nemo-2.6.7/libnemo-private/nemo-job-queue.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-job-queue.c 2015-11-27 10:00:22.000000000 +0000 @@ -22,10 +22,13 @@ #include #include "nemo-job-queue.h" +#include "nemo-global-preferences.h" struct _NemoJobQueuePriv { GList *queued_jobs; GList *running_jobs; + gulong pref_changed_id; + gboolean skip_queue; }; enum { @@ -56,6 +59,11 @@ g_list_free_full (self->priv->queued_jobs, g_object_unref); } + if (self->priv->pref_changed_id != 0) { + g_signal_handler_disconnect (nemo_preferences, self->priv->pref_changed_id); + self->priv->pref_changed_id = 0; + } + G_OBJECT_CLASS (nemo_job_queue_parent_class)->finalize (obj); } @@ -80,6 +88,13 @@ } static void +pref_changed_cb (NemoJobQueue *self) +{ + self->priv->skip_queue = g_settings_get_boolean (nemo_preferences, + NEMO_PREFERENCES_NEVER_QUEUE_FILE_OPS); +} + +static void nemo_job_queue_init (NemoJobQueue *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NEMO_TYPE_JOB_QUEUE, @@ -87,6 +102,12 @@ self->priv->queued_jobs = NULL; self->priv->running_jobs = NULL; + + self->priv->pref_changed_id = g_signal_connect_swapped (nemo_preferences, + "changed::" NEMO_PREFERENCES_NEVER_QUEUE_FILE_OPS, + G_CALLBACK (pref_changed_cb), self); + + pref_changed_cb (self); } static void @@ -142,6 +163,8 @@ self->priv->running_jobs = g_list_remove (self->priv->running_jobs, job); self->priv->queued_jobs = g_list_remove (self->priv->queued_jobs, job); + g_slice_free (Job, job); + nemo_job_queue_start_next_job (self); } @@ -154,19 +177,19 @@ } void -nemo_job_queue_add_new_job (NemoJobQueue *self, - GIOSchedulerJobFunc job_func, - gpointer user_data, - GCancellable *cancellable, - NemoProgressInfo *info, - gboolean skip_queue) +nemo_job_queue_add_new_job (NemoJobQueue *self, + GIOSchedulerJobFunc job_func, + gpointer user_data, + GCancellable *cancellable, + NemoProgressInfo *info, + gboolean start_immediately) { if (g_list_find_custom (self->priv->queued_jobs, user_data, (GCompareFunc) compare_job_data_func) != NULL) { g_warning ("Adding the same file job object to the job queue"); return; } - Job *new_job = g_new0 (Job, 1); + Job *new_job = g_slice_new0 (Job); new_job->job_func = job_func; new_job->user_data = user_data; new_job->cancellable = cancellable; @@ -180,7 +203,7 @@ g_signal_connect_swapped (info, "finished", G_CALLBACK (job_finished_cb), self); - if (skip_queue) + if (self->priv->skip_queue || start_immediately) start_job (self, new_job); else nemo_job_queue_start_next_job (self); diff -Nru nemo-2.6.7/libnemo-private/nemo-job-queue.h nemo-2.8.6/libnemo-private/nemo-job-queue.h --- nemo-2.6.7/libnemo-private/nemo-job-queue.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-job-queue.h 2015-11-27 10:00:22.000000000 +0000 @@ -62,7 +62,7 @@ gpointer user_data, GCancellable *cancellable, NemoProgressInfo *info, - gboolean skip_queue); + gboolean start_immediately); void nemo_job_queue_start_next_job (NemoJobQueue *self); diff -Nru nemo-2.6.7/libnemo-private/nemo-monitor.c nemo-2.8.6/libnemo-private/nemo-monitor.c --- nemo-2.6.7/libnemo-private/nemo-monitor.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-monitor.c 2015-11-27 10:00:22.000000000 +0000 @@ -71,7 +71,7 @@ return FALSE; } - +static void schedule_call_consume_changes (void) { if (call_consume_changes_idle_id == 0) { diff -Nru nemo-2.6.7/libnemo-private/nemo-search-directory.c nemo-2.8.6/libnemo-private/nemo-search-directory.c --- nemo-2.6.7/libnemo-private/nemo-search-directory.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-search-directory.c 2015-11-27 10:00:22.000000000 +0000 @@ -621,6 +621,16 @@ } static gboolean +search_is_not_empty (NemoDirectory *directory) +{ + NemoSearchDirectory *search; + + search = NEMO_SEARCH_DIRECTORY (directory); + + return search->details->files != NULL; +} + +static gboolean search_contains_file (NemoDirectory *directory, NemoFile *file) { @@ -732,6 +742,7 @@ directory_class = NEMO_DIRECTORY_CLASS (class); directory_class->are_all_files_seen = search_are_all_files_seen; + directory_class->is_not_empty = search_is_not_empty; directory_class->contains_file = search_contains_file; directory_class->force_reload = search_force_reload; directory_class->call_when_ready = search_call_when_ready; diff -Nru nemo-2.6.7/libnemo-private/nemo-thumbnails.c nemo-2.8.6/libnemo-private/nemo-thumbnails.c --- nemo-2.6.7/libnemo-private/nemo-thumbnails.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-thumbnails.c 2015-11-27 10:00:22.000000000 +0000 @@ -56,9 +56,6 @@ /* Should never be a reasonable actual mtime */ #define INVALID_MTIME 0 -/* Cool-off period between last file modification time and thumbnail creation */ -#define THUMBNAIL_CREATION_DELAY_SECS 3 - static gpointer thumbnail_thread_start (gpointer data); /* structure used for making thumbnails, associating a uri with where the thumbnail is to be stored */ @@ -67,6 +64,7 @@ char *image_uri; char *mime_type; time_t original_file_mtime; + gint throttle_count; } NemoThumbnailInfo; /* @@ -545,7 +543,7 @@ } void -nemo_create_thumbnail (NemoFile *file) +nemo_create_thumbnail (NemoFile *file, gint throttle_count) { time_t file_mtime = 0; NemoThumbnailInfo *info; @@ -557,6 +555,7 @@ info = g_new0 (NemoThumbnailInfo, 1); info->image_uri = nemo_file_get_uri (file); info->mime_type = nemo_file_get_mime_type (file); + info->throttle_count = MIN (10, throttle_count); /* Hopefully the NemoFile will already have the image file mtime, so we can just use that. Otherwise we have to get it ourselves. */ @@ -698,14 +697,15 @@ /* Don't try to create a thumbnail if the file was modified recently. This prevents constant re-thumbnailing of changing files. */ - if (current_time < current_orig_mtime + THUMBNAIL_CREATION_DELAY_SECS && + if (current_time < current_orig_mtime + (THUMBNAIL_CREATION_DELAY_SECS * info->throttle_count) && current_time >= current_orig_mtime) { #ifdef DEBUG_THUMBNAILS - g_message ("(Thumbnail Thread) Skipping: %s\n", - info->image_uri); + g_message ("(Thumbnail Thread) Skipping for %d seconds: %s\n", + THUMBNAIL_CREATION_DELAY_SECS * info->throttle_count, + info->image_uri); #endif /* Reschedule thumbnailing via a change notification */ - g_timeout_add_seconds (1, thumbnail_thread_notify_file_changed, + g_timeout_add_seconds (THUMBNAIL_CREATION_DELAY_SECS * info->throttle_count, thumbnail_thread_notify_file_changed, g_strdup (info->image_uri)); continue; } @@ -731,6 +731,7 @@ info->image_uri, current_orig_mtime); } + /* We need to call nemo_file_changed(), but I don't think that is thread safe. So add an idle handler and do it from the main loop. */ g_idle_add_full (G_PRIORITY_HIGH_IDLE, diff -Nru nemo-2.6.7/libnemo-private/nemo-thumbnails.h nemo-2.8.6/libnemo-private/nemo-thumbnails.h --- nemo-2.6.7/libnemo-private/nemo-thumbnails.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-thumbnails.h 2015-11-27 10:00:22.000000000 +0000 @@ -43,8 +43,11 @@ #define NEMO_THUMBNAIL_FRAME_RIGHT 3 #define NEMO_THUMBNAIL_FRAME_BOTTOM 3 +/* Cool-off period between last file modification time and thumbnail creation */ +#define THUMBNAIL_CREATION_DELAY_SECS 3 + /* Returns NULL if there's no thumbnail yet. */ -void nemo_create_thumbnail (NemoFile *file); +void nemo_create_thumbnail (NemoFile *file, gint throttle_count); gboolean nemo_can_thumbnail (NemoFile *file); gboolean nemo_can_thumbnail_internally (NemoFile *file); gboolean nemo_thumbnail_is_mimetype_limited_by_size diff -Nru nemo-2.6.7/libnemo-private/nemo-ui-utilities.c nemo-2.8.6/libnemo-private/nemo-ui-utilities.c --- nemo-2.6.7/libnemo-private/nemo-ui-utilities.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-ui-utilities.c 2015-11-27 10:00:22.000000000 +0000 @@ -112,26 +112,6 @@ return action; } -gboolean -nemo_event_should_open_in_new_tab (void) -{ - GdkEvent *event; - - event = gtk_get_current_event (); - - if (event == NULL) { - return FALSE; - } - - if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) { - return event->button.button == 2; - } - - gdk_event_free (event); - - return FALSE; -} - GdkPixbuf * nemo_ui_get_menu_icon (const char *icon_name, GtkWidget *parent_widget) diff -Nru nemo-2.6.7/libnemo-private/nemo-ui-utilities.h nemo-2.8.6/libnemo-private/nemo-ui-utilities.h --- nemo-2.6.7/libnemo-private/nemo-ui-utilities.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-ui-utilities.h 2015-11-27 10:00:22.000000000 +0000 @@ -37,8 +37,6 @@ GtkAction * nemo_action_from_menu_item (NemoMenuItem *item, GtkWidget *parent_widget); -gboolean nemo_event_should_open_in_new_tab (void); - GdkPixbuf * nemo_ui_get_menu_icon (const char *icon_name, GtkWidget *parent_widget); diff -Nru nemo-2.6.7/libnemo-private/nemo-widget-action.c nemo-2.8.6/libnemo-private/nemo-widget-action.c --- nemo-2.6.7/libnemo-private/nemo-widget-action.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-widget-action.c 2015-11-27 10:00:22.000000000 +0000 @@ -79,7 +79,7 @@ action_class->create_tool_item = create_tool_item; action_class->menu_item_type = NEMO_TYPE_WIDGET_MENU_ITEM; - action_class->toolbar_item_type = NULL; + action_class->toolbar_item_type = G_TYPE_NONE; g_object_class_install_property (object_class, PROP_WIDGET_A, diff -Nru nemo-2.6.7/libnemo-private/nemo-widget-menu-item.c nemo-2.8.6/libnemo-private/nemo-widget-menu-item.c --- nemo-2.6.7/libnemo-private/nemo-widget-menu-item.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/nemo-widget-menu-item.c 2015-11-27 10:00:22.000000000 +0000 @@ -310,7 +310,7 @@ } gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (widget_menu_item), action); - nemo_widget_menu_item_sync_action_properties (widget_menu_item, action); + nemo_widget_menu_item_sync_action_properties (GTK_ACTIVATABLE (widget_menu_item), action); widget_menu_item->related_action = action; } diff -Nru nemo-2.6.7/libnemo-private/org.nemo.gschema.xml.in nemo-2.8.6/libnemo-private/org.nemo.gschema.xml.in --- nemo-2.6.7/libnemo-private/org.nemo.gschema.xml.in 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/libnemo-private/org.nemo.gschema.xml.in 2015-11-27 10:00:22.000000000 +0000 @@ -85,6 +85,11 @@ <_summary>Enables the classic Nemo behavior, where all windows are browsers <_description>If set to true, then all Nemo windows will be browser windows. This is how Nemo used to behave before version 2.6, and some people prefer this behavior. + + false + <_summary>Enables renaming of icons by two times clicking with pause between clicks + <_description>If set to true, then icons in all Nemo windows will be able to get renamed quickly. Users should click two times on icons with a pause time more than double-click time of their system. + false <_summary>Show the location entry by default @@ -351,6 +356,14 @@ <_summary>Don't show the explainer message when turning off the main menu <_description>If true, you will no longer recieve a popup explaining how to reactivate the main menu once you've hidden it + + 2 + <_summary>Last server connect method used + + + false + <_summary>If true, all file operations will start immediately + diff -Nru nemo-2.6.7/nemo.pot nemo-2.8.6/nemo.pot --- nemo-2.6.7/nemo.pot 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/nemo.pot 2015-11-27 10:00:22.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-21 11:02+0200\n" +"POT-Creation-Date: 2015-11-11 18:45+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,100 +18,100 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/nemo-action-config-widget.c:224 +#: src/nemo-action-config-widget.c:231 msgid "No actions found" msgstr "" -#: src/nemo-action-config-widget.c:427 +#: src/nemo-action-config-widget.c:440 msgid "Actions" msgstr "" -#: src/nemo-application.c:221 +#: src/nemo-application.c:222 #, c-format msgid "Nemo could not create the required folder \"%s\"." msgstr "" -#: src/nemo-application.c:223 +#: src/nemo-application.c:224 msgid "" "Before running Nemo, please create the following folder, or set permissions " "such that Nemo can create it." msgstr "" -#: src/nemo-application.c:226 +#: src/nemo-application.c:227 #, c-format msgid "Nemo could not create the following required folders: %s." msgstr "" -#: src/nemo-application.c:228 +#: src/nemo-application.c:229 msgid "" "Before running Nemo, please create these folders, or set permissions such " "that Nemo can create them." msgstr "" -#: src/nemo-application.c:808 +#: src/nemo-application.c:752 msgid "--check cannot be used with other options." msgstr "" -#: src/nemo-application.c:814 +#: src/nemo-application.c:758 msgid "--quit cannot be used with URIs." msgstr "" -#: src/nemo-application.c:821 +#: src/nemo-application.c:765 msgid "--geometry cannot be used with more than one URI." msgstr "" -#: src/nemo-application.c:879 +#: src/nemo-application.c:823 msgid "Perform a quick set of self-check tests." msgstr "" -#: src/nemo-application.c:885 +#: src/nemo-application.c:829 msgid "Show the version of the program." msgstr "" -#: src/nemo-application.c:887 +#: src/nemo-application.c:831 msgid "Create the initial window with the given geometry." msgstr "" -#: src/nemo-application.c:887 +#: src/nemo-application.c:831 msgid "GEOMETRY" msgstr "" -#: src/nemo-application.c:889 +#: src/nemo-application.c:833 msgid "Only create windows for explicitly specified URIs." msgstr "" -#: src/nemo-application.c:891 +#: src/nemo-application.c:835 msgid "" "Do not manage the desktop (ignore the preference set in the preferences " "dialog)." msgstr "" -#: src/nemo-application.c:893 +#: src/nemo-application.c:837 msgid "" "Repair the user thumbnail cache - this can be useful if you're having " "trouble with file thumbnails. Must be run as root" msgstr "" -#: src/nemo-application.c:895 +#: src/nemo-application.c:839 msgid "Quit Nemo." msgstr "" -#: src/nemo-application.c:896 +#: src/nemo-application.c:840 msgid "[URI...]" msgstr "" -#: src/nemo-application.c:907 +#: src/nemo-application.c:851 msgid "" "\n" "\n" "Browse the file system with the file manager" msgstr "" -#: src/nemo-application.c:1187 +#: src/nemo-application.c:1131 msgid "Nemo's main menu is now hidden" msgstr "" -#: src/nemo-application.c:1190 +#: src/nemo-application.c:1134 msgid "" "You have chosen to hide the main menu. You can get it back temporarily by:\n" "\n" @@ -123,7 +123,7 @@ "menu." msgstr "" -#: src/nemo-application.c:1201 +#: src/nemo-application.c:1145 msgid "Don't show this message again." msgstr "" @@ -159,7 +159,7 @@ msgid "_Run" msgstr "" -#: src/nemo-bookmarks-window.c:162 src/nemo-window-menus.c:385 +#: src/nemo-bookmarks-window.c:162 src/nemo-window-menus.c:379 #, c-format msgid "" "There was an error displaying help: \n" @@ -178,120 +178,120 @@ msgid "Enable all" msgstr "" -#: src/nemo-connect-server-dialog.c:128 +#: src/nemo-connect-server-dialog.c:125 msgid "SSH" msgstr "" -#: src/nemo-connect-server-dialog.c:131 +#: src/nemo-connect-server-dialog.c:128 msgid "Public FTP" msgstr "" -#: src/nemo-connect-server-dialog.c:133 +#: src/nemo-connect-server-dialog.c:130 msgid "FTP (with login)" msgstr "" -#: src/nemo-connect-server-dialog.c:136 +#: src/nemo-connect-server-dialog.c:133 msgid "Windows share" msgstr "" -#: src/nemo-connect-server-dialog.c:138 +#: src/nemo-connect-server-dialog.c:135 msgid "WebDAV (HTTP)" msgstr "" -#: src/nemo-connect-server-dialog.c:140 +#: src/nemo-connect-server-dialog.c:137 msgid "Secure WebDAV (HTTPS)" msgstr "" -#: src/nemo-connect-server-dialog.c:187 +#: src/nemo-connect-server-dialog.c:184 msgid "Connecting..." msgstr "" -#: src/nemo-connect-server-dialog.c:211 +#: src/nemo-connect-server-dialog.c:208 msgid "" "Can't load the supported server method list.\n" "Please check your gvfs installation." msgstr "" -#: src/nemo-connect-server-dialog.c:289 +#: src/nemo-connect-server-dialog.c:286 #, c-format msgid "The folder \"%s\" cannot be opened on \"%s\"." msgstr "" -#: src/nemo-connect-server-dialog.c:299 +#: src/nemo-connect-server-dialog.c:296 #, c-format msgid "The server at \"%s\" cannot be found." msgstr "" -#: src/nemo-connect-server-dialog.c:334 +#: src/nemo-connect-server-dialog.c:331 msgid "Try Again" msgstr "" -#: src/nemo-connect-server-dialog.c:399 +#: src/nemo-connect-server-dialog.c:396 msgid "Please verify your user details." msgstr "" -#: src/nemo-connect-server-dialog.c:429 +#: src/nemo-connect-server-dialog.c:426 msgid "Continue" msgstr "" -#: src/nemo-connect-server-dialog.c:701 src/nemo-properties-window.c:5149 -#: src/nemo-view.c:1569 +#: src/nemo-connect-server-dialog.c:698 src/nemo-properties-window.c:5149 +#: src/nemo-view.c:1578 msgid "There was an error displaying help." msgstr "" -#: src/nemo-connect-server-dialog.c:719 src/nemo-connect-server-dialog.c:1111 +#: src/nemo-connect-server-dialog.c:716 src/nemo-connect-server-dialog.c:1113 msgid "C_onnect" msgstr "" -#: src/nemo-connect-server-dialog.c:844 +#: src/nemo-connect-server-dialog.c:845 msgid "Connect to Server" msgstr "" -#: src/nemo-connect-server-dialog.c:862 +#: src/nemo-connect-server-dialog.c:863 msgid "Server Details" msgstr "" -#: src/nemo-connect-server-dialog.c:887 +#: src/nemo-connect-server-dialog.c:888 msgid "_Server:" msgstr "" -#: src/nemo-connect-server-dialog.c:907 +#: src/nemo-connect-server-dialog.c:908 msgid "_Port:" msgstr "" -#: src/nemo-connect-server-dialog.c:925 +#: src/nemo-connect-server-dialog.c:926 msgid "_Type:" msgstr "" -#: src/nemo-connect-server-dialog.c:994 +#: src/nemo-connect-server-dialog.c:996 msgid "Sh_are:" msgstr "" -#: src/nemo-connect-server-dialog.c:1009 src/nemo-view.c:1763 +#: src/nemo-connect-server-dialog.c:1011 src/nemo-view.c:1772 msgid "_Folder:" msgstr "" -#: src/nemo-connect-server-dialog.c:1027 +#: src/nemo-connect-server-dialog.c:1029 msgid "User Details" msgstr "" -#: src/nemo-connect-server-dialog.c:1051 +#: src/nemo-connect-server-dialog.c:1053 msgid "_Domain name:" msgstr "" -#: src/nemo-connect-server-dialog.c:1066 +#: src/nemo-connect-server-dialog.c:1068 msgid "_User name:" msgstr "" -#: src/nemo-connect-server-dialog.c:1081 +#: src/nemo-connect-server-dialog.c:1083 msgid "Pass_word:" msgstr "" -#: src/nemo-connect-server-dialog.c:1097 +#: src/nemo-connect-server-dialog.c:1099 msgid "_Remember this password" msgstr "" -#: src/nemo-connect-server-dialog.c:1197 +#: src/nemo-connect-server-dialog.c:1199 msgid "Operation cancelled" msgstr "" @@ -306,7 +306,7 @@ "Add connect to server mount" msgstr "" -#: src/nemo-desktop-icon-view.c:695 src/nemo-view.c:8092 src/nemo-view.c:9680 +#: src/nemo-desktop-icon-view.c:695 src/nemo-view.c:8312 src/nemo-view.c:9924 msgid "E_mpty Trash" msgstr "" @@ -315,7 +315,7 @@ msgstr "" #: src/nemo-desktop-icon-view.c:710 src/nemo-trash-bar.c:207 -#: src/nemo-view.c:8093 +#: src/nemo-view.c:8313 msgid "Delete all items in the Trash" msgstr "" @@ -347,8 +347,8 @@ msgstr "" #: src/nemo-desktop-window.c:92 src/nemo-desktop-window.c:305 -#: src/nemo-pathbar.c:1468 src/nemo-places-sidebar.c:770 -#: libnemo-private/nemo-action.c:949 +#: src/nemo-pathbar.c:1497 src/nemo-places-sidebar.c:770 +#: libnemo-private/nemo-action.c:932 msgid "Desktop" msgstr "" @@ -453,28 +453,28 @@ msgid "Renaming \"%s\" to \"%s\"." msgstr "" -#: src/nemo-extension-config-widget.c:190 +#: src/nemo-extension-config-widget.c:194 msgid "No extensions found" msgstr "" -#: src/nemo-extension-config-widget.c:230 +#: src/nemo-extension-config-widget.c:236 msgid "no information available" msgstr "" -#: src/nemo-extension-config-widget.c:337 +#: src/nemo-extension-config-widget.c:346 msgid "Extensions" msgstr "" -#: src/nemo-extension-config-widget.c:345 +#: src/nemo-extension-config-widget.c:354 msgid "Extensions changed. Restart required." msgstr "" -#: src/nemo-file-management-properties.c:279 src/nemo-properties-window.c:3945 +#: src/nemo-file-management-properties.c:281 src/nemo-properties-window.c:3945 #: src/nemo-properties-window.c:3956 msgid "None" msgstr "" -#: src/nemo-file-management-properties.c:462 libnemo-private/nemo-file.c:4472 +#: src/nemo-file-management-properties.c:464 libnemo-private/nemo-file.c:4492 msgid "today at %-I:%M:%S %p" msgstr "" @@ -482,7 +482,7 @@ msgid "by _Name" msgstr "" -#: src/nemo-icon-view.c:134 src/nemo-icon-view.c:1448 +#: src/nemo-icon-view.c:134 src/nemo-icon-view.c:1449 msgid "Keep icons sorted by name in rows" msgstr "" @@ -490,7 +490,7 @@ msgid "by _Size" msgstr "" -#: src/nemo-icon-view.c:141 src/nemo-icon-view.c:1452 +#: src/nemo-icon-view.c:141 src/nemo-icon-view.c:1453 msgid "Keep icons sorted by size in rows" msgstr "" @@ -498,7 +498,7 @@ msgid "by _Type" msgstr "" -#: src/nemo-icon-view.c:148 src/nemo-icon-view.c:1456 +#: src/nemo-icon-view.c:148 src/nemo-icon-view.c:1457 msgid "Keep icons sorted by type in rows" msgstr "" @@ -506,7 +506,7 @@ msgid "by _Detailed Type" msgstr "" -#: src/nemo-icon-view.c:155 src/nemo-icon-view.c:1460 +#: src/nemo-icon-view.c:155 src/nemo-icon-view.c:1461 msgid "Keep icons sorted by detailed type in rows" msgstr "" @@ -514,7 +514,7 @@ msgid "by Modification _Date" msgstr "" -#: src/nemo-icon-view.c:162 src/nemo-icon-view.c:1464 +#: src/nemo-icon-view.c:162 src/nemo-icon-view.c:1465 msgid "Keep icons sorted by modification date in rows" msgstr "" @@ -522,141 +522,141 @@ msgid "by T_rash Time" msgstr "" -#: src/nemo-icon-view.c:169 src/nemo-icon-view.c:1468 +#: src/nemo-icon-view.c:169 src/nemo-icon-view.c:1469 msgid "Keep icons sorted by trash time in rows" msgstr "" -#: src/nemo-icon-view.c:681 +#: src/nemo-icon-view.c:682 msgid "_Organize Desktop by Name" msgstr "" -#: src/nemo-icon-view.c:1407 +#: src/nemo-icon-view.c:1408 msgid "Arran_ge Items" msgstr "" -#: src/nemo-icon-view.c:1409 +#: src/nemo-icon-view.c:1410 msgid "Resize Icon..." msgstr "" -#: src/nemo-icon-view.c:1410 +#: src/nemo-icon-view.c:1411 msgid "Make the selected icon resizable" msgstr "" -#: src/nemo-icon-view.c:1413 src/nemo-icon-view.c:1587 +#: src/nemo-icon-view.c:1414 src/nemo-icon-view.c:1588 msgid "Restore Icons' Original Si_zes" msgstr "" -#: src/nemo-icon-view.c:1414 +#: src/nemo-icon-view.c:1415 msgid "Restore each selected icon to its original size" msgstr "" -#: src/nemo-icon-view.c:1417 +#: src/nemo-icon-view.c:1418 msgid "_Organize by Name" msgstr "" -#: src/nemo-icon-view.c:1418 +#: src/nemo-icon-view.c:1419 msgid "Reposition icons to better fit in the window and avoid overlapping" msgstr "" -#: src/nemo-icon-view.c:1425 +#: src/nemo-icon-view.c:1426 msgid "Compact _Layout" msgstr "" -#: src/nemo-icon-view.c:1426 +#: src/nemo-icon-view.c:1427 msgid "Toggle using a tighter layout scheme" msgstr "" -#: src/nemo-icon-view.c:1430 +#: src/nemo-icon-view.c:1431 msgid "Re_versed Order" msgstr "" -#: src/nemo-icon-view.c:1431 +#: src/nemo-icon-view.c:1432 msgid "Display icons in the opposite order" msgstr "" -#: src/nemo-icon-view.c:1435 +#: src/nemo-icon-view.c:1436 msgid "_Keep Aligned" msgstr "" -#: src/nemo-icon-view.c:1436 +#: src/nemo-icon-view.c:1437 msgid "Keep icons lined up on a grid" msgstr "" -#: src/nemo-icon-view.c:1443 +#: src/nemo-icon-view.c:1444 msgid "_Manually" msgstr "" -#: src/nemo-icon-view.c:1444 +#: src/nemo-icon-view.c:1445 msgid "Leave icons wherever they are dropped" msgstr "" -#: src/nemo-icon-view.c:1447 +#: src/nemo-icon-view.c:1448 msgid "By _Name" msgstr "" -#: src/nemo-icon-view.c:1451 +#: src/nemo-icon-view.c:1452 msgid "By _Size" msgstr "" -#: src/nemo-icon-view.c:1455 +#: src/nemo-icon-view.c:1456 msgid "By _Type" msgstr "" -#: src/nemo-icon-view.c:1459 +#: src/nemo-icon-view.c:1460 msgid "By _Detailed Type" msgstr "" -#: src/nemo-icon-view.c:1463 +#: src/nemo-icon-view.c:1464 msgid "By Modification _Date" msgstr "" -#: src/nemo-icon-view.c:1467 +#: src/nemo-icon-view.c:1468 msgid "By T_rash Time" msgstr "" -#: src/nemo-icon-view.c:1588 +#: src/nemo-icon-view.c:1589 msgid "Restore Icon's Original Si_ze" msgstr "" -#: src/nemo-icon-view.c:2854 src/nemo-icon-view-container.c:590 -#: src/nemo-window-menus.c:1444 src/nemo-file-management-properties.glade:12 +#: src/nemo-icon-view.c:2881 src/nemo-icon-view-container.c:590 +#: src/nemo-window-menus.c:1439 src/nemo-file-management-properties.glade:12 msgid "Icon View" msgstr "" -#: src/nemo-icon-view.c:2856 +#: src/nemo-icon-view.c:2883 msgid "_Icons" msgstr "" -#: src/nemo-icon-view.c:2857 +#: src/nemo-icon-view.c:2884 msgid "The icon view encountered an error." msgstr "" -#: src/nemo-icon-view.c:2858 +#: src/nemo-icon-view.c:2885 msgid "The icon view encountered an error while starting up." msgstr "" -#: src/nemo-icon-view.c:2859 +#: src/nemo-icon-view.c:2886 msgid "Display this location with the icon view." msgstr "" -#: src/nemo-icon-view.c:2868 src/nemo-window-menus.c:1467 +#: src/nemo-icon-view.c:2895 src/nemo-window-menus.c:1462 #: src/nemo-file-management-properties.glade:18 msgid "Compact View" msgstr "" -#: src/nemo-icon-view.c:2870 +#: src/nemo-icon-view.c:2897 msgid "_Compact" msgstr "" -#: src/nemo-icon-view.c:2871 +#: src/nemo-icon-view.c:2898 msgid "The compact view encountered an error." msgstr "" -#: src/nemo-icon-view.c:2872 +#: src/nemo-icon-view.c:2899 msgid "The compact view encountered an error while starting up." msgstr "" -#: src/nemo-icon-view.c:2873 +#: src/nemo-icon-view.c:2900 msgid "Display this location with the compact view." msgstr "" @@ -764,8 +764,8 @@ msgid "Software" msgstr "" -#: src/nemo-image-properties-page.c:413 src/nemo-query-editor.c:112 -#: src/nemo-window-menus.c:1409 libnemo-private/nemo-column-utilities.c:136 +#: src/nemo-image-properties-page.c:413 src/nemo-window-menus.c:1404 +#: libnemo-private/nemo-column-utilities.c:136 msgid "Location" msgstr "" @@ -786,35 +786,35 @@ msgstr "" #: src/nemo-image-properties-page.c:706 src/nemo-list-model.c:431 -#: src/nemo-tree-sidebar-model.c:1242 src/nemo-window-manage-views.c:1153 -#: src/nemo-window-slot.c:204 +#: src/nemo-tree-sidebar-model.c:1242 src/nemo-window-manage-views.c:1169 +#: src/nemo-window-slot.c:296 msgid "Loading..." msgstr "" -#: src/nemo-image-properties-page.c:767 libnemo-private/nemo-file.c:6397 +#: src/nemo-image-properties-page.c:767 libnemo-private/nemo-file.c:6417 msgid "Image" msgstr "" -#: src/nemo-interesting-folder-bar.c:125 +#: src/nemo-interesting-folder-bar.c:126 msgid "" "Actions: Action files can be added to this folder and will appear in the " "menu." msgstr "" -#: src/nemo-interesting-folder-bar.c:127 src/nemo-interesting-folder-bar.c:135 +#: src/nemo-interesting-folder-bar.c:128 src/nemo-interesting-folder-bar.c:136 msgid "More info" msgstr "" -#: src/nemo-interesting-folder-bar.c:129 +#: src/nemo-interesting-folder-bar.c:130 msgid "View a sample action file with documentation" msgstr "" -#: src/nemo-interesting-folder-bar.c:132 +#: src/nemo-interesting-folder-bar.c:133 msgid "" "Scripts: All executable files in this folder will appear in the Scripts menu." msgstr "" -#: src/nemo-interesting-folder-bar.c:137 +#: src/nemo-interesting-folder-bar.c:138 msgid "View additional information about creating scripts" msgstr "" @@ -822,36 +822,36 @@ msgid "(Empty)" msgstr "" -#: src/nemo-list-view.c:1728 +#: src/nemo-list-view.c:1876 msgid "Use Default" msgstr "" -#: src/nemo-list-view.c:1739 +#: src/nemo-list-view.c:1887 msgid "Temporarily disable auto-sort" msgstr "" -#: src/nemo-list-view.c:2048 libnemo-private/nemo-column-utilities.c:43 +#: src/nemo-list-view.c:2196 libnemo-private/nemo-column-utilities.c:43 msgid "Name" msgstr "" -#: src/nemo-list-view.c:2122 src/nemo-list-view.c:3667 -#: src/nemo-window-menus.c:1455 src/nemo-file-management-properties.glade:15 +#: src/nemo-list-view.c:2270 src/nemo-list-view.c:3830 +#: src/nemo-window-menus.c:1450 src/nemo-file-management-properties.glade:15 msgid "List View" msgstr "" -#: src/nemo-list-view.c:3669 +#: src/nemo-list-view.c:3832 msgid "_List" msgstr "" -#: src/nemo-list-view.c:3670 +#: src/nemo-list-view.c:3833 msgid "The list view encountered an error." msgstr "" -#: src/nemo-list-view.c:3671 +#: src/nemo-list-view.c:3834 msgid "The list view encountered an error while starting up." msgstr "" -#: src/nemo-list-view.c:3672 +#: src/nemo-list-view.c:3835 msgid "Display this location with the list view." msgstr "" @@ -888,9 +888,9 @@ msgid "This link cannot be used, because its target \"%s\" doesn't exist." msgstr "" -#: src/nemo-mime-actions.c:656 src/nemo-tree-sidebar.c:1343 -#: src/nemo-view.c:8144 src/nemo-view.c:8262 src/nemo-view.c:9304 -#: src/nemo-view.c:9603 +#: src/nemo-mime-actions.c:656 src/nemo-tree-sidebar.c:1339 +#: src/nemo-view.c:8364 src/nemo-view.c:8482 src/nemo-view.c:9520 +#: src/nemo-view.c:9847 msgid "Mo_ve to Trash" msgstr "" @@ -912,8 +912,8 @@ msgid "_Display" msgstr "" -#: src/nemo-mime-actions.c:1051 src/nemo-mime-actions.c:1567 -#: src/nemo-view.c:1052 +#: src/nemo-mime-actions.c:1051 src/nemo-mime-actions.c:1571 +#: src/nemo-view.c:1058 msgid "Are you sure you want to open all files?" msgstr "" @@ -924,16 +924,16 @@ msgstr[0] "" msgstr[1] "" -#: src/nemo-mime-actions.c:1154 src/nemo-open-with-main.c:142 -#: src/nemo-view.c:1316 +#: src/nemo-mime-actions.c:1155 src/nemo-open-with-main.c:144 +#: src/nemo-view.c:1323 msgid "Open with" msgstr "" -#: src/nemo-mime-actions.c:1219 +#: src/nemo-mime-actions.c:1224 msgid "Unknown file type" msgstr "" -#: src/nemo-mime-actions.c:1222 +#: src/nemo-mime-actions.c:1227 #, c-format msgid "" "The file \"%s\" has no known programs associated with it. If you trust the " @@ -942,55 +942,55 @@ "program to associate it with." msgstr "" -#: src/nemo-mime-actions.c:1239 +#: src/nemo-mime-actions.c:1244 msgid "Make executable and run" msgstr "" -#: src/nemo-mime-actions.c:1241 +#: src/nemo-mime-actions.c:1246 msgid "Choose a program" msgstr "" -#: src/nemo-mime-actions.c:1319 +#: src/nemo-mime-actions.c:1324 msgid "Untrusted application launcher" msgstr "" -#: src/nemo-mime-actions.c:1322 +#: src/nemo-mime-actions.c:1327 #, c-format msgid "" "The application launcher \"%s\" has not been marked as trusted (executable). " "If you do not know the source of this file, launching it may be unsafe." msgstr "" -#: src/nemo-mime-actions.c:1338 +#: src/nemo-mime-actions.c:1343 msgid "_Launch Anyway" msgstr "" -#: src/nemo-mime-actions.c:1341 +#: src/nemo-mime-actions.c:1346 msgid "Mark as _Trusted" msgstr "" -#: src/nemo-mime-actions.c:1568 +#: src/nemo-mime-actions.c:1572 #, c-format msgid "This will open %d separate application." msgid_plural "This will open %d separate applications." msgstr[0] "" msgstr[1] "" -#: src/nemo-mime-actions.c:1645 src/nemo-mime-actions.c:1919 -#: src/nemo-view.c:7262 +#: src/nemo-mime-actions.c:1649 src/nemo-mime-actions.c:1923 +#: src/nemo-view.c:7482 msgid "Unable to mount location" msgstr "" -#: src/nemo-mime-actions.c:1998 src/nemo-view.c:7409 +#: src/nemo-mime-actions.c:2002 src/nemo-view.c:7629 msgid "Unable to start location" msgstr "" -#: src/nemo-mime-actions.c:2082 +#: src/nemo-mime-actions.c:2086 #, c-format msgid "Opening \"%s\"." msgstr "" -#: src/nemo-mime-actions.c:2085 +#: src/nemo-mime-actions.c:2089 #, c-format msgid "Opening %d item." msgid_plural "Opening %d items." @@ -1001,7 +1001,7 @@ msgid "Close tab" msgstr "" -#: src/nemo-open-with-main.c:100 +#: src/nemo-open-with-main.c:102 msgid "" "\n" "\n" @@ -1013,7 +1013,7 @@ msgid "Devices" msgstr "" -#: src/nemo-places-sidebar.c:622 src/nemo-view.c:3097 +#: src/nemo-places-sidebar.c:622 src/nemo-view.c:3139 #, c-format msgid "Free space: %s" msgstr "" @@ -1029,8 +1029,9 @@ "%s" msgstr "" -#: src/nemo-places-sidebar.c:753 src/nemo-tree-sidebar.c:1479 -#: libnemo-private/nemo-bookmark.c:130 libnemo-private/nemo-desktop-link.c:118 +#: src/nemo-places-sidebar.c:753 src/nemo-query-editor.c:1109 +#: src/nemo-tree-sidebar.c:1475 libnemo-private/nemo-bookmark.c:130 +#: libnemo-private/nemo-desktop-link.c:118 #: libnemo-private/nemo-file-utilities.c:66 msgid "Home" msgstr "" @@ -1054,7 +1055,7 @@ "%s" msgstr "" -#: src/nemo-places-sidebar.c:836 src/nemo-tree-sidebar.c:1483 +#: src/nemo-places-sidebar.c:836 src/nemo-tree-sidebar.c:1479 msgid "File System" msgstr "" @@ -1071,186 +1072,186 @@ msgid "Bookmarks" msgstr "" -#: src/nemo-places-sidebar.c:973 +#: src/nemo-places-sidebar.c:978 #, c-format msgid "" "%s (%s)\n" "%s" msgstr "" -#: src/nemo-places-sidebar.c:1002 +#: src/nemo-places-sidebar.c:1007 #, c-format msgid "Mount and open %s (%s)" msgstr "" -#: src/nemo-places-sidebar.c:1030 src/nemo-places-sidebar.c:1119 +#: src/nemo-places-sidebar.c:1035 src/nemo-places-sidebar.c:1124 #, c-format msgid "Mount and open %s" msgstr "" -#: src/nemo-places-sidebar.c:1072 +#: src/nemo-places-sidebar.c:1077 #, c-format msgid "" "%s\n" "%s" msgstr "" -#: src/nemo-places-sidebar.c:1106 src/nemo-places-sidebar.c:1161 -#: src/nemo-tree-sidebar.c:1487 libnemo-private/nemo-desktop-link.c:147 +#: src/nemo-places-sidebar.c:1111 src/nemo-places-sidebar.c:1166 +#: src/nemo-tree-sidebar.c:1483 libnemo-private/nemo-desktop-link.c:147 msgid "Network" msgstr "" -#: src/nemo-places-sidebar.c:1163 +#: src/nemo-places-sidebar.c:1168 msgid "Browse the contents of the network" msgstr "" -#: src/nemo-places-sidebar.c:2239 src/nemo-places-sidebar.c:3416 -#: src/nemo-view.c:8190 src/nemo-view.c:8214 src/nemo-view.c:8286 -#: src/nemo-view.c:8927 src/nemo-view.c:8931 src/nemo-view.c:9014 -#: src/nemo-view.c:9018 src/nemo-view.c:9118 src/nemo-view.c:9122 +#: src/nemo-places-sidebar.c:2245 src/nemo-places-sidebar.c:3425 +#: src/nemo-view.c:8410 src/nemo-view.c:8434 src/nemo-view.c:8506 +#: src/nemo-view.c:9143 src/nemo-view.c:9147 src/nemo-view.c:9230 +#: src/nemo-view.c:9234 src/nemo-view.c:9334 src/nemo-view.c:9338 msgid "_Start" msgstr "" -#: src/nemo-places-sidebar.c:2240 src/nemo-places-sidebar.c:3423 -#: src/nemo-view.c:8194 src/nemo-view.c:8218 src/nemo-view.c:8290 -#: src/nemo-view.c:8956 src/nemo-view.c:9043 src/nemo-view.c:9147 -#: src/nemo-window-menus.c:1130 +#: src/nemo-places-sidebar.c:2246 src/nemo-places-sidebar.c:3432 +#: src/nemo-view.c:8414 src/nemo-view.c:8438 src/nemo-view.c:8510 +#: src/nemo-view.c:9172 src/nemo-view.c:9259 src/nemo-view.c:9363 +#: src/nemo-window-menus.c:1125 msgid "_Stop" msgstr "" -#: src/nemo-places-sidebar.c:2245 +#: src/nemo-places-sidebar.c:2251 msgid "_Power On" msgstr "" -#: src/nemo-places-sidebar.c:2246 src/nemo-view.c:8960 src/nemo-view.c:9047 -#: src/nemo-view.c:9151 +#: src/nemo-places-sidebar.c:2252 src/nemo-view.c:9176 src/nemo-view.c:9263 +#: src/nemo-view.c:9367 msgid "_Safely Remove Drive" msgstr "" -#: src/nemo-places-sidebar.c:2249 +#: src/nemo-places-sidebar.c:2255 msgid "_Connect Drive" msgstr "" -#: src/nemo-places-sidebar.c:2250 +#: src/nemo-places-sidebar.c:2256 msgid "_Disconnect Drive" msgstr "" -#: src/nemo-places-sidebar.c:2253 +#: src/nemo-places-sidebar.c:2259 msgid "_Start Multi-disk Device" msgstr "" -#: src/nemo-places-sidebar.c:2254 +#: src/nemo-places-sidebar.c:2260 msgid "_Stop Multi-disk Device" msgstr "" -#: src/nemo-places-sidebar.c:2258 src/nemo-view.c:9030 src/nemo-view.c:9134 +#: src/nemo-places-sidebar.c:2264 src/nemo-view.c:9246 src/nemo-view.c:9350 msgid "_Unlock Drive" msgstr "" -#: src/nemo-places-sidebar.c:2259 src/nemo-view.c:8972 src/nemo-view.c:9059 -#: src/nemo-view.c:9163 +#: src/nemo-places-sidebar.c:2265 src/nemo-view.c:9188 src/nemo-view.c:9275 +#: src/nemo-view.c:9379 msgid "_Lock Drive" msgstr "" -#: src/nemo-places-sidebar.c:2362 src/nemo-places-sidebar.c:2970 +#: src/nemo-places-sidebar.c:2371 src/nemo-places-sidebar.c:2979 #, c-format msgid "Unable to start %s" msgstr "" -#: src/nemo-places-sidebar.c:2730 src/nemo-places-sidebar.c:2758 -#: src/nemo-places-sidebar.c:2786 +#: src/nemo-places-sidebar.c:2739 src/nemo-places-sidebar.c:2767 +#: src/nemo-places-sidebar.c:2795 #, c-format msgid "Unable to eject %s" msgstr "" -#: src/nemo-places-sidebar.c:2925 +#: src/nemo-places-sidebar.c:2934 #, c-format msgid "Unable to poll %s for media changes" msgstr "" -#: src/nemo-places-sidebar.c:3025 +#: src/nemo-places-sidebar.c:3034 #, c-format msgid "Unable to stop %s" msgstr "" -#: src/nemo-places-sidebar.c:3328 src/nemo-tree-sidebar.c:1254 -#: src/nemo-view.c:8051 src/nemo-view.c:9518 +#: src/nemo-places-sidebar.c:3337 src/nemo-tree-sidebar.c:1250 +#: src/nemo-view.c:8271 src/nemo-view.c:9762 msgid "_Open" msgstr "" -#: src/nemo-places-sidebar.c:3336 src/nemo-tree-sidebar.c:1265 -#: src/nemo-view.c:8063 src/nemo-view.c:8244 src/nemo-view.c:9251 -#: src/nemo-view.c:9580 +#: src/nemo-places-sidebar.c:3345 src/nemo-tree-sidebar.c:1261 +#: src/nemo-view.c:8283 src/nemo-view.c:8464 src/nemo-view.c:9467 +#: src/nemo-view.c:9824 msgid "Open in New _Tab" msgstr "" -#: src/nemo-places-sidebar.c:3346 src/nemo-tree-sidebar.c:1279 -#: src/nemo-view.c:9242 src/nemo-view.c:9560 +#: src/nemo-places-sidebar.c:3355 src/nemo-tree-sidebar.c:1275 +#: src/nemo-view.c:9458 src/nemo-view.c:9804 msgid "Open in New _Window" msgstr "" -#: src/nemo-places-sidebar.c:3357 src/nemo-window-menus.c:1236 +#: src/nemo-places-sidebar.c:3366 src/nemo-window-menus.c:1231 msgid "_Add Bookmark" msgstr "" -#: src/nemo-places-sidebar.c:3363 +#: src/nemo-places-sidebar.c:3372 msgid "Remove" msgstr "" -#: src/nemo-places-sidebar.c:3372 +#: src/nemo-places-sidebar.c:3381 msgid "Rename..." msgstr "" -#: src/nemo-places-sidebar.c:3388 src/nemo-view.c:8178 src/nemo-view.c:8202 -#: src/nemo-view.c:8274 +#: src/nemo-places-sidebar.c:3397 src/nemo-view.c:8398 src/nemo-view.c:8422 +#: src/nemo-view.c:8494 msgid "_Mount" msgstr "" -#: src/nemo-places-sidebar.c:3395 src/nemo-tree-sidebar.c:1375 -#: src/nemo-view.c:8182 src/nemo-view.c:8206 src/nemo-view.c:8278 +#: src/nemo-places-sidebar.c:3404 src/nemo-tree-sidebar.c:1371 +#: src/nemo-view.c:8402 src/nemo-view.c:8426 src/nemo-view.c:8498 msgid "_Unmount" msgstr "" -#: src/nemo-places-sidebar.c:3402 src/nemo-tree-sidebar.c:1384 -#: src/nemo-view.c:8186 src/nemo-view.c:8210 src/nemo-view.c:8282 +#: src/nemo-places-sidebar.c:3411 src/nemo-tree-sidebar.c:1380 +#: src/nemo-view.c:8406 src/nemo-view.c:8430 src/nemo-view.c:8502 msgid "_Eject" msgstr "" -#: src/nemo-places-sidebar.c:3409 src/nemo-view.c:8198 src/nemo-view.c:8222 -#: src/nemo-view.c:8294 +#: src/nemo-places-sidebar.c:3418 src/nemo-view.c:8418 src/nemo-view.c:8442 +#: src/nemo-view.c:8514 msgid "_Detect Media" msgstr "" -#: src/nemo-places-sidebar.c:3432 src/nemo-trash-bar.c:204 -#: libnemo-private/nemo-file-operations.c:1487 -#: libnemo-private/nemo-file-operations.c:2363 +#: src/nemo-places-sidebar.c:3441 src/nemo-trash-bar.c:204 +#: libnemo-private/nemo-file-operations.c:1495 +#: libnemo-private/nemo-file-operations.c:2371 msgid "Empty _Trash" msgstr "" -#: src/nemo-places-sidebar.c:3444 src/nemo-view.c:8033 src/nemo-view.c:8299 +#: src/nemo-places-sidebar.c:3453 src/nemo-view.c:8253 src/nemo-view.c:8519 msgid "_Properties" msgstr "" -#: src/nemo-plugin-manager.c:126 src/nemo-window-menus.c:1115 +#: src/nemo-plugin-manager.c:126 src/nemo-window-menus.c:1110 msgid "Plugins" msgstr "" -#: src/nemo-progress-ui-handler.c:121 +#: src/nemo-progress-ui-handler.c:115 #, c-format msgid "%1$s file operation active. %2$d%% complete." msgid_plural "%1$s file operations active. %2$d%% complete." msgstr[0] "" msgstr[1] "" -#: src/nemo-progress-ui-handler.c:238 src/nemo-progress-ui-handler.c:314 +#: src/nemo-progress-ui-handler.c:206 src/nemo-progress-ui-handler.c:263 msgid "File Operations" msgstr "" -#: src/nemo-progress-ui-handler.c:315 +#: src/nemo-progress-ui-handler.c:264 msgid "All file operations have been successfully completed" msgstr "" -#: src/nemo-progress-ui-handler.c:366 +#: src/nemo-progress-ui-handler.c:317 #, c-format msgid "%d%% %s" msgstr "" @@ -1290,7 +1291,7 @@ msgid "%s Properties" msgstr "" -#: src/nemo-properties-window.c:1125 libnemo-private/nemo-file.c:6365 +#: src/nemo-properties-window.c:1125 libnemo-private/nemo-file.c:6385 msgid "unknown" msgstr "" @@ -1358,7 +1359,7 @@ msgid "Type:" msgstr "" -#: src/nemo-properties-window.c:3110 libnemo-private/nemo-file.c:7588 +#: src/nemo-properties-window.c:3110 libnemo-private/nemo-file.c:7608 msgid "Link target:" msgstr "" @@ -1557,115 +1558,86 @@ msgid "Select Custom Icon" msgstr "" -#: src/nemo-query-editor.c:118 +#: src/nemo-query-editor.c:106 msgid "File Type" msgstr "" -#: src/nemo-query-editor.c:276 -msgid "Select folder to search in" -msgstr "" - -#: src/nemo-query-editor.c:366 +#: src/nemo-query-editor.c:262 msgid "Documents" msgstr "" -#: src/nemo-query-editor.c:384 +#: src/nemo-query-editor.c:280 msgid "Music" msgstr "" -#: src/nemo-query-editor.c:399 libnemo-private/nemo-file.c:6403 +#: src/nemo-query-editor.c:295 libnemo-private/nemo-file.c:6423 msgid "Video" msgstr "" -#: src/nemo-query-editor.c:415 +#: src/nemo-query-editor.c:311 msgid "Picture" msgstr "" -#: src/nemo-query-editor.c:435 +#: src/nemo-query-editor.c:331 msgid "Illustration" msgstr "" -#: src/nemo-query-editor.c:449 libnemo-private/nemo-file.c:6408 +#: src/nemo-query-editor.c:345 libnemo-private/nemo-file.c:6428 msgid "Spreadsheet" msgstr "" -#: src/nemo-query-editor.c:465 libnemo-private/nemo-file.c:6407 +#: src/nemo-query-editor.c:361 libnemo-private/nemo-file.c:6427 msgid "Presentation" msgstr "" -#: src/nemo-query-editor.c:474 +#: src/nemo-query-editor.c:370 msgid "Pdf / Postscript" msgstr "" -#: src/nemo-query-editor.c:482 +#: src/nemo-query-editor.c:378 msgid "Text File" msgstr "" -#: src/nemo-query-editor.c:561 +#: src/nemo-query-editor.c:457 msgid "Select type" msgstr "" -#: src/nemo-query-editor.c:645 +#: src/nemo-query-editor.c:541 msgid "Any" msgstr "" -#: src/nemo-query-editor.c:660 +#: src/nemo-query-editor.c:556 msgid "Other Type..." msgstr "" -#: src/nemo-query-editor.c:941 +#: src/nemo-query-editor.c:836 msgid "Remove this criterion from the search" msgstr "" -#: src/nemo-query-editor.c:991 -msgid "Search Folder" -msgstr "" - -#: src/nemo-query-editor.c:1001 -#: libnemo-private/nemo-undo-signal-handlers.c:173 -msgid "Edit" -msgstr "" - -#: src/nemo-query-editor.c:1009 -msgid "Edit the saved search" -msgstr "" - -#: src/nemo-query-editor.c:1038 +#: src/nemo-query-editor.c:913 msgid "Add a new criterion to this search" msgstr "" -#: src/nemo-query-editor.c:1041 -msgid "Go" -msgstr "" - -#: src/nemo-query-editor.c:1043 -msgid "Reload" +#: src/nemo-query-editor.c:915 +msgid "Current" msgstr "" -#: src/nemo-query-editor.c:1048 -msgid "Perform or update the search" +#: src/nemo-query-editor.c:919 +msgid "All Files" msgstr "" -#: src/nemo-query-editor.c:1068 +#: src/nemo-query-editor.c:944 msgid "_Search for:" msgstr "" -#: src/nemo-query-editor.c:1102 -msgid "Search results" -msgstr "" - #: src/nemo-script-config-widget.c:148 msgid "No scripts found" msgstr "" -#: src/nemo-script-config-widget.c:340 +#: src/nemo-script-config-widget.c:344 msgid "Scripts" msgstr "" -#: src/nemo-search-bar.c:146 -msgid "Search:" -msgstr "" - #: src/nemo-statusbar.c:200 msgid "Show Places" msgstr "" @@ -1686,21 +1658,21 @@ msgid "Adjust zoom level" msgstr "" -#: src/nemo-thumbnail-problem-bar.c:113 +#: src/nemo-thumbnail-problem-bar.c:114 msgid "" "A problem has been detected with your thumbnail cache. Fixing it will " "require administrative privileges." msgstr "" -#: src/nemo-thumbnail-problem-bar.c:115 +#: src/nemo-thumbnail-problem-bar.c:118 msgid "Fix now" msgstr "" -#: src/nemo-thumbnail-problem-bar.c:118 +#: src/nemo-thumbnail-problem-bar.c:121 msgid "Dismiss" msgstr "" -#: src/nemo-toolbar.c:245 +#: src/nemo-toolbar.c:238 msgid "Elevated Privileges" msgstr "" @@ -1712,194 +1684,202 @@ msgid "Restore selected items to their original position" msgstr "" -#: src/nemo-tree-sidebar.c:955 src/nemo-view.c:6630 +#: src/nemo-tree-sidebar.c:951 src/nemo-view.c:6850 #, c-format msgid "\"%s\" will be moved if you select the Paste command" msgstr "" -#: src/nemo-tree-sidebar.c:959 src/nemo-view.c:6634 +#: src/nemo-tree-sidebar.c:955 src/nemo-view.c:6854 #, c-format msgid "\"%s\" will be copied if you select the Paste command" msgstr "" -#: src/nemo-tree-sidebar.c:998 src/nemo-view.c:6880 +#: src/nemo-tree-sidebar.c:994 src/nemo-view.c:7100 msgid "There is nothing on the clipboard to paste." msgstr "" -#: src/nemo-tree-sidebar.c:1295 src/nemo-view.c:8041 +#: src/nemo-tree-sidebar.c:1291 src/nemo-view.c:8261 msgid "Create New _Folder" msgstr "" -#: src/nemo-tree-sidebar.c:1327 src/nemo-view.c:8110 src/nemo-view.c:8257 +#: src/nemo-tree-sidebar.c:1323 src/nemo-view.c:8330 src/nemo-view.c:8477 msgid "_Paste Into Folder" msgstr "" -#: src/nemo-tree-sidebar.c:1357 src/nemo-view.c:8148 src/nemo-view.c:8266 -#: src/nemo-view.c:9626 +#: src/nemo-tree-sidebar.c:1353 src/nemo-view.c:8368 src/nemo-view.c:8486 +#: src/nemo-view.c:9870 msgid "_Delete" msgstr "" -#: src/nemo-tree-sidebar.c:1474 libnemo-private/nemo-desktop-link.c:126 +#: src/nemo-tree-sidebar.c:1470 libnemo-private/nemo-desktop-link.c:126 msgid "Computer" msgstr "" -#: src/nemo-view.c:1054 +#: src/nemo-view.c:1060 #, c-format msgid "This will open %'d separate tab." msgid_plural "This will open %'d separate tabs." msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:1057 +#: src/nemo-view.c:1063 #, c-format msgid "This will open %'d separate window." msgid_plural "This will open %'d separate windows." msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:1589 +#: src/nemo-view.c:1598 msgid "Select Items Matching" msgstr "" -#: src/nemo-view.c:1604 +#: src/nemo-view.c:1613 msgid "_Pattern:" msgstr "" -#: src/nemo-view.c:1610 +#: src/nemo-view.c:1619 msgid "Examples: " msgstr "" -#: src/nemo-view.c:1723 +#: src/nemo-view.c:1732 msgid "Save Search as" msgstr "" -#: src/nemo-view.c:1746 +#: src/nemo-view.c:1755 msgid "Search _name:" msgstr "" -#: src/nemo-view.c:1768 +#: src/nemo-view.c:1777 msgid "Select Folder to Save Search In" msgstr "" -#: src/nemo-view.c:2564 libnemo-private/nemo-file-undo-operations.c:135 +#: src/nemo-view.c:2586 libnemo-private/nemo-file-undo-operations.c:135 msgid "Undo" msgstr "" -#: src/nemo-view.c:2565 libnemo-private/nemo-file-undo-operations.c:138 +#: src/nemo-view.c:2587 libnemo-private/nemo-file-undo-operations.c:138 msgid "Undo last action" msgstr "" -#: src/nemo-view.c:2583 libnemo-private/nemo-file-undo-operations.c:142 +#: src/nemo-view.c:2605 libnemo-private/nemo-file-undo-operations.c:142 msgid "Redo" msgstr "" -#: src/nemo-view.c:2584 libnemo-private/nemo-file-undo-operations.c:145 +#: src/nemo-view.c:2606 libnemo-private/nemo-file-undo-operations.c:145 msgid "Redo last undone action" msgstr "" -#: src/nemo-view.c:2759 +#: src/nemo-view.c:2790 msgid "Content View" msgstr "" -#: src/nemo-view.c:2760 +#: src/nemo-view.c:2791 msgid "View of the current folder" msgstr "" -#: src/nemo-view.c:3020 src/nemo-view.c:3057 +#: src/nemo-view.c:3062 src/nemo-view.c:3099 #, c-format msgid "\"%s\" selected" msgstr "" -#: src/nemo-view.c:3022 +#: src/nemo-view.c:3064 #, c-format msgid "%'d folder selected" msgid_plural "%'d folders selected" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3032 +#: src/nemo-view.c:3074 #, c-format msgid " (containing %'d item)" msgid_plural " (containing %'d items)" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3043 +#: src/nemo-view.c:3085 #, c-format msgid " (containing a total of %'d item)" msgid_plural " (containing a total of %'d items)" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3060 +#: src/nemo-view.c:3102 #, c-format msgid "%'d item selected" msgid_plural "%'d items selected" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3067 +#: src/nemo-view.c:3109 #, c-format msgid "%'d other item selected" msgid_plural "%'d other items selected" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3084 +#: src/nemo-view.c:3126 #, c-format msgid "%s (%s)" msgstr "" -#: src/nemo-view.c:3105 libnemo-private/nemo-file.c:5931 +#: src/nemo-view.c:3147 libnemo-private/nemo-file.c:5951 #, c-format msgid "%'u item" msgid_plural "%'u items" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:3108 +#: src/nemo-view.c:3150 #, c-format msgid "%s, Free space: %s" msgstr "" -#: src/nemo-view.c:3123 +#: src/nemo-view.c:3165 #, c-format msgid "%s, %s" msgstr "" -#: src/nemo-view.c:3142 src/nemo-view.c:3155 +#: src/nemo-view.c:3184 src/nemo-view.c:3197 #, c-format msgid "%s%s, %s" msgstr "" -#: src/nemo-view.c:3169 +#: src/nemo-view.c:3211 #, c-format msgid "%s%s, %s, %s" msgstr "" -#: src/nemo-view.c:4642 +#: src/nemo-view.c:4693 #, c-format msgid "Open With %s" msgstr "" -#: src/nemo-view.c:4644 +#: src/nemo-view.c:4695 #, c-format msgid "Use \"%s\" to open the selected item" msgid_plural "Use \"%s\" to open the selected items" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:5958 +#: src/nemo-view.c:6014 #, c-format msgid "Run \"%s\" on any selected items" msgstr "" -#: src/nemo-view.c:6341 +#: src/nemo-view.c:6397 #, c-format msgid "Create a new document from template \"%s\"" msgstr "" -#: src/nemo-view.c:6641 +#: src/nemo-view.c:6718 +msgid "Show less actions" +msgstr "" + +#: src/nemo-view.c:6718 +msgid "Show more actions" +msgstr "" + +#: src/nemo-view.c:6861 #, c-format msgid "The %'d selected item will be moved if you select the Paste command" msgid_plural "" @@ -1907,7 +1887,7 @@ msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:6648 +#: src/nemo-view.c:6868 #, c-format msgid "The %'d selected item will be copied if you select the Paste command" msgid_plural "" @@ -1915,609 +1895,609 @@ msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:6818 +#: src/nemo-view.c:7038 msgid "Select Target Folder For Move" msgstr "" -#: src/nemo-view.c:6839 +#: src/nemo-view.c:7059 msgid "Select Target Folder For Copy" msgstr "" -#: src/nemo-view.c:7282 +#: src/nemo-view.c:7502 msgid "Unable to unmount location" msgstr "" -#: src/nemo-view.c:7302 +#: src/nemo-view.c:7522 msgid "Unable to eject location" msgstr "" -#: src/nemo-view.c:7317 +#: src/nemo-view.c:7537 msgid "Unable to stop drive" msgstr "" -#: src/nemo-view.c:7803 +#: src/nemo-view.c:8023 #, c-format msgid "Connect to Server %s" msgstr "" -#: src/nemo-view.c:7808 src/nemo-view.c:8935 src/nemo-view.c:9022 -#: src/nemo-view.c:9126 +#: src/nemo-view.c:8028 src/nemo-view.c:9151 src/nemo-view.c:9238 +#: src/nemo-view.c:9342 msgid "_Connect" msgstr "" -#: src/nemo-view.c:7822 +#: src/nemo-view.c:8042 msgid "Link _name:" msgstr "" -#: src/nemo-view.c:8029 +#: src/nemo-view.c:8249 msgid "Create New _Document" msgstr "" -#: src/nemo-view.c:8030 +#: src/nemo-view.c:8250 msgid "Open Wit_h" msgstr "" -#: src/nemo-view.c:8031 +#: src/nemo-view.c:8251 msgid "Choose a program with which to open the selected item" msgstr "" -#: src/nemo-view.c:8034 src/nemo-view.c:9667 +#: src/nemo-view.c:8254 src/nemo-view.c:9911 msgid "View or modify the properties of each selected item" msgstr "" -#: src/nemo-view.c:8042 +#: src/nemo-view.c:8262 msgid "Create a new empty folder inside this folder" msgstr "" -#: src/nemo-view.c:8044 +#: src/nemo-view.c:8264 msgid "No templates installed" msgstr "" -#: src/nemo-view.c:8047 +#: src/nemo-view.c:8267 msgid "_Empty Document" msgstr "" -#: src/nemo-view.c:8048 +#: src/nemo-view.c:8268 msgid "Create a new empty document inside this folder" msgstr "" -#: src/nemo-view.c:8052 +#: src/nemo-view.c:8272 msgid "Open the selected item in this window" msgstr "" -#: src/nemo-view.c:8059 src/nemo-view.c:8240 +#: src/nemo-view.c:8279 src/nemo-view.c:8460 msgid "Open in Navigation Window" msgstr "" -#: src/nemo-view.c:8060 +#: src/nemo-view.c:8280 msgid "Open each selected item in a navigation window" msgstr "" -#: src/nemo-view.c:8064 +#: src/nemo-view.c:8284 msgid "Open each selected item in a new tab" msgstr "" -#: src/nemo-view.c:8067 src/nemo-window-menus.c:1432 +#: src/nemo-view.c:8287 src/nemo-window-menus.c:1427 msgid "Open in Terminal" msgstr "" -#: src/nemo-view.c:8068 +#: src/nemo-view.c:8288 msgid "Open terminal in the selected folder" msgstr "" -#: src/nemo-view.c:8071 +#: src/nemo-view.c:8291 msgid "Open as Root" msgstr "" -#: src/nemo-view.c:8072 +#: src/nemo-view.c:8292 msgid "Open the folder with administration privileges" msgstr "" -#: src/nemo-view.c:8076 +#: src/nemo-view.c:8296 msgid "Follow link to original file" msgstr "" -#: src/nemo-view.c:8077 +#: src/nemo-view.c:8297 msgid "Navigate to the original file that this symbolic link points to" msgstr "" -#: src/nemo-view.c:8080 +#: src/nemo-view.c:8300 msgid "Open containing folder" msgstr "" -#: src/nemo-view.c:8081 +#: src/nemo-view.c:8301 msgid "Navigate to the folder that the selected item is stored in" msgstr "" -#: src/nemo-view.c:8084 +#: src/nemo-view.c:8304 msgid "Other _Application..." msgstr "" -#: src/nemo-view.c:8085 src/nemo-view.c:8089 +#: src/nemo-view.c:8305 src/nemo-view.c:8309 msgid "Choose another application with which to open the selected item" msgstr "" -#: src/nemo-view.c:8088 +#: src/nemo-view.c:8308 msgid "Open With Other _Application..." msgstr "" -#: src/nemo-view.c:8097 +#: src/nemo-view.c:8317 msgid "Prepare the selected files to be moved with a Paste command" msgstr "" -#: src/nemo-view.c:8101 +#: src/nemo-view.c:8321 msgid "Prepare the selected files to be copied with a Paste command" msgstr "" -#: src/nemo-view.c:8105 +#: src/nemo-view.c:8325 msgid "Move or copy files previously selected by a Cut or Copy command" msgstr "" -#: src/nemo-view.c:8111 +#: src/nemo-view.c:8331 msgid "" "Move or copy files previously selected by a Cut or Copy command into the " "selected folder" msgstr "" -#: src/nemo-view.c:8113 +#: src/nemo-view.c:8333 msgid "Cop_y to" msgstr "" -#: src/nemo-view.c:8114 +#: src/nemo-view.c:8334 msgid "M_ove to" msgstr "" -#: src/nemo-view.c:8116 libnemo-private/nemo-clipboard.c:444 +#: src/nemo-view.c:8336 libnemo-private/nemo-clipboard.c:444 msgid "Select _All" msgstr "" -#: src/nemo-view.c:8117 +#: src/nemo-view.c:8337 msgid "Select all items in this window" msgstr "" -#: src/nemo-view.c:8120 +#: src/nemo-view.c:8340 msgid "Select I_tems Matching..." msgstr "" -#: src/nemo-view.c:8121 +#: src/nemo-view.c:8341 msgid "Select items in this window matching a given pattern" msgstr "" -#: src/nemo-view.c:8124 +#: src/nemo-view.c:8344 msgid "_Invert Selection" msgstr "" -#: src/nemo-view.c:8125 +#: src/nemo-view.c:8345 msgid "Select all and only the items that are not currently selected" msgstr "" -#: src/nemo-view.c:8128 +#: src/nemo-view.c:8348 msgid "D_uplicate" msgstr "" -#: src/nemo-view.c:8129 +#: src/nemo-view.c:8349 msgid "Duplicate each selected item" msgstr "" -#: src/nemo-view.c:8132 src/nemo-view.c:9652 +#: src/nemo-view.c:8352 src/nemo-view.c:9896 msgid "Ma_ke Link" msgid_plural "Ma_ke Links" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8133 +#: src/nemo-view.c:8353 msgid "Create a symbolic link for each selected item" msgstr "" -#: src/nemo-view.c:8136 +#: src/nemo-view.c:8356 msgid "_Rename..." msgstr "" -#: src/nemo-view.c:8137 +#: src/nemo-view.c:8357 msgid "Rename selected item" msgstr "" -#: src/nemo-view.c:8145 src/nemo-view.c:9604 +#: src/nemo-view.c:8365 src/nemo-view.c:9848 msgid "Move each selected item to the Trash" msgstr "" -#: src/nemo-view.c:8149 src/nemo-view.c:9627 +#: src/nemo-view.c:8369 src/nemo-view.c:9871 msgid "Delete each selected item, without moving to the Trash" msgstr "" -#: src/nemo-view.c:8152 src/nemo-view.c:8270 +#: src/nemo-view.c:8372 src/nemo-view.c:8490 msgid "_Restore" msgstr "" -#: src/nemo-view.c:8156 src/nemo-window-menus.c:1119 +#: src/nemo-view.c:8376 src/nemo-window-menus.c:1114 msgid "_Undo" msgstr "" -#: src/nemo-view.c:8157 +#: src/nemo-view.c:8377 msgid "Undo the last action" msgstr "" -#: src/nemo-view.c:8160 +#: src/nemo-view.c:8380 msgid "_Redo" msgstr "" -#: src/nemo-view.c:8161 +#: src/nemo-view.c:8381 msgid "Redo the last undone action" msgstr "" -#: src/nemo-view.c:8170 +#: src/nemo-view.c:8390 msgid "Reset View to _Defaults" msgstr "" -#: src/nemo-view.c:8171 +#: src/nemo-view.c:8391 msgid "Reset sorting order and zoom level to match preferences for this view" msgstr "" -#: src/nemo-view.c:8174 +#: src/nemo-view.c:8394 msgid "Connect To This Server" msgstr "" -#: src/nemo-view.c:8175 +#: src/nemo-view.c:8395 msgid "Make a permanent connection to this server" msgstr "" -#: src/nemo-view.c:8179 +#: src/nemo-view.c:8399 msgid "Mount the selected volume" msgstr "" -#: src/nemo-view.c:8183 +#: src/nemo-view.c:8403 msgid "Unmount the selected volume" msgstr "" -#: src/nemo-view.c:8187 +#: src/nemo-view.c:8407 msgid "Eject the selected volume" msgstr "" -#: src/nemo-view.c:8191 +#: src/nemo-view.c:8411 msgid "Start the selected volume" msgstr "" -#: src/nemo-view.c:8195 src/nemo-view.c:9148 +#: src/nemo-view.c:8415 src/nemo-view.c:9364 msgid "Stop the selected volume" msgstr "" -#: src/nemo-view.c:8199 src/nemo-view.c:8223 src/nemo-view.c:8295 +#: src/nemo-view.c:8419 src/nemo-view.c:8443 src/nemo-view.c:8515 msgid "Detect media in the selected drive" msgstr "" -#: src/nemo-view.c:8203 +#: src/nemo-view.c:8423 msgid "Mount the volume associated with the open folder" msgstr "" -#: src/nemo-view.c:8207 +#: src/nemo-view.c:8427 msgid "Unmount the volume associated with the open folder" msgstr "" -#: src/nemo-view.c:8211 +#: src/nemo-view.c:8431 msgid "Eject the volume associated with the open folder" msgstr "" -#: src/nemo-view.c:8215 +#: src/nemo-view.c:8435 msgid "Start the volume associated with the open folder" msgstr "" -#: src/nemo-view.c:8219 +#: src/nemo-view.c:8439 msgid "Stop the volume associated with the open folder" msgstr "" -#: src/nemo-view.c:8226 +#: src/nemo-view.c:8446 msgid "Open File and Close window" msgstr "" -#: src/nemo-view.c:8230 +#: src/nemo-view.c:8450 msgid "Sa_ve Search" msgstr "" -#: src/nemo-view.c:8231 +#: src/nemo-view.c:8451 msgid "Save the edited search" msgstr "" -#: src/nemo-view.c:8234 +#: src/nemo-view.c:8454 msgid "Sa_ve Search As..." msgstr "" -#: src/nemo-view.c:8235 +#: src/nemo-view.c:8455 msgid "Save the current search as a file" msgstr "" -#: src/nemo-view.c:8241 +#: src/nemo-view.c:8461 msgid "Open this folder in a navigation window" msgstr "" -#: src/nemo-view.c:8245 +#: src/nemo-view.c:8465 msgid "Open this folder in a new tab" msgstr "" -#: src/nemo-view.c:8250 +#: src/nemo-view.c:8470 msgid "Prepare this folder to be moved with a Paste command" msgstr "" -#: src/nemo-view.c:8254 +#: src/nemo-view.c:8474 msgid "Prepare this folder to be copied with a Paste command" msgstr "" -#: src/nemo-view.c:8258 +#: src/nemo-view.c:8478 msgid "" "Move or copy files previously selected by a Cut or Copy command into this " "folder" msgstr "" -#: src/nemo-view.c:8263 +#: src/nemo-view.c:8483 msgid "Move this folder to the Trash" msgstr "" -#: src/nemo-view.c:8267 +#: src/nemo-view.c:8487 msgid "Delete this folder, without moving to the Trash" msgstr "" -#: src/nemo-view.c:8275 +#: src/nemo-view.c:8495 msgid "Mount the volume associated with this folder" msgstr "" -#: src/nemo-view.c:8279 +#: src/nemo-view.c:8499 msgid "Unmount the volume associated with this folder" msgstr "" -#: src/nemo-view.c:8283 +#: src/nemo-view.c:8503 msgid "Eject the volume associated with this folder" msgstr "" -#: src/nemo-view.c:8287 +#: src/nemo-view.c:8507 msgid "Start the volume associated with this folder" msgstr "" -#: src/nemo-view.c:8291 +#: src/nemo-view.c:8511 msgid "Stop the volume associated with this folder" msgstr "" -#: src/nemo-view.c:8300 +#: src/nemo-view.c:8520 msgid "View or modify the properties of this folder" msgstr "" -#: src/nemo-view.c:8303 src/nemo-view.c:8306 +#: src/nemo-view.c:8523 src/nemo-view.c:8526 msgid "_Other pane" msgstr "" -#: src/nemo-view.c:8304 +#: src/nemo-view.c:8524 msgid "Copy the current selection to the other pane in the window" msgstr "" -#: src/nemo-view.c:8307 +#: src/nemo-view.c:8527 msgid "Move the current selection to the other pane in the window" msgstr "" -#: src/nemo-view.c:8310 src/nemo-view.c:8314 src/nemo-window-menus.c:1190 -#: src/nemo-window-menus.c:1382 src/nemo-window-menus.c:1596 +#: src/nemo-view.c:8530 src/nemo-view.c:8534 src/nemo-window-menus.c:1185 +#: src/nemo-window-menus.c:1377 src/nemo-window-menus.c:1591 msgid "_Home" msgstr "" -#: src/nemo-view.c:8311 +#: src/nemo-view.c:8531 msgid "Copy the current selection to the home folder" msgstr "" -#: src/nemo-view.c:8315 +#: src/nemo-view.c:8535 msgid "Move the current selection to the home folder" msgstr "" -#: src/nemo-view.c:8318 src/nemo-view.c:8322 +#: src/nemo-view.c:8538 src/nemo-view.c:8542 msgid "_Desktop" msgstr "" -#: src/nemo-view.c:8319 +#: src/nemo-view.c:8539 msgid "Copy the current selection to the desktop" msgstr "" -#: src/nemo-view.c:8323 +#: src/nemo-view.c:8543 msgid "Move the current selection to the desktop" msgstr "" -#: src/nemo-view.c:8326 src/nemo-view.c:8330 +#: src/nemo-view.c:8546 src/nemo-view.c:8550 msgid "Browse…" msgstr "" -#: src/nemo-view.c:8327 +#: src/nemo-view.c:8547 msgid "Browse for a folder to move the selection to" msgstr "" -#: src/nemo-view.c:8331 +#: src/nemo-view.c:8551 msgid "Browse for a folder to copy the selection to" msgstr "" -#: src/nemo-view.c:8404 +#: src/nemo-view.c:8625 msgid "Run scripts" msgstr "" -#: src/nemo-view.c:8406 +#: src/nemo-view.c:8627 msgid "_Scripts" msgstr "" -#: src/nemo-view.c:8784 +#: src/nemo-view.c:9000 #, c-format msgid "Move the open folder out of the trash to \"%s\"" msgstr "" -#: src/nemo-view.c:8787 +#: src/nemo-view.c:9003 #, c-format msgid "Move the selected folder out of the trash to \"%s\"" msgid_plural "Move the selected folders out of the trash to \"%s\"" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8791 +#: src/nemo-view.c:9007 msgid "Move the selected folder out of the trash" msgid_plural "Move the selected folders out of the trash" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8797 +#: src/nemo-view.c:9013 #, c-format msgid "Move the selected file out of the trash to \"%s\"" msgid_plural "Move the selected files out of the trash to \"%s\"" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8801 +#: src/nemo-view.c:9017 msgid "Move the selected file out of the trash" msgid_plural "Move the selected files out of the trash" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8807 +#: src/nemo-view.c:9023 #, c-format msgid "Move the selected item out of the trash to \"%s\"" msgid_plural "Move the selected items out of the trash to \"%s\"" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8811 +#: src/nemo-view.c:9027 msgid "Move the selected item out of the trash" msgid_plural "Move the selected items out of the trash" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:8928 src/nemo-view.c:8932 src/nemo-view.c:9119 -#: src/nemo-view.c:9123 +#: src/nemo-view.c:9144 src/nemo-view.c:9148 src/nemo-view.c:9335 +#: src/nemo-view.c:9339 msgid "Start the selected drive" msgstr "" -#: src/nemo-view.c:8936 src/nemo-view.c:9127 +#: src/nemo-view.c:9152 src/nemo-view.c:9343 msgid "Connect to the selected drive" msgstr "" -#: src/nemo-view.c:8939 src/nemo-view.c:9026 src/nemo-view.c:9130 +#: src/nemo-view.c:9155 src/nemo-view.c:9242 src/nemo-view.c:9346 msgid "_Start Multi-disk Drive" msgstr "" -#: src/nemo-view.c:8940 src/nemo-view.c:9131 +#: src/nemo-view.c:9156 src/nemo-view.c:9347 msgid "Start the selected multi-disk drive" msgstr "" -#: src/nemo-view.c:8943 +#: src/nemo-view.c:9159 msgid "U_nlock Drive" msgstr "" -#: src/nemo-view.c:8944 src/nemo-view.c:9135 +#: src/nemo-view.c:9160 src/nemo-view.c:9351 msgid "Unlock the selected drive" msgstr "" -#: src/nemo-view.c:8957 +#: src/nemo-view.c:9173 msgid "Stop the selected drive" msgstr "" -#: src/nemo-view.c:8961 src/nemo-view.c:9152 +#: src/nemo-view.c:9177 src/nemo-view.c:9368 msgid "Safely remove the selected drive" msgstr "" -#: src/nemo-view.c:8964 src/nemo-view.c:9051 src/nemo-view.c:9155 +#: src/nemo-view.c:9180 src/nemo-view.c:9267 src/nemo-view.c:9371 msgid "_Disconnect" msgstr "" -#: src/nemo-view.c:8965 src/nemo-view.c:9156 +#: src/nemo-view.c:9181 src/nemo-view.c:9372 msgid "Disconnect the selected drive" msgstr "" -#: src/nemo-view.c:8968 src/nemo-view.c:9055 src/nemo-view.c:9159 +#: src/nemo-view.c:9184 src/nemo-view.c:9271 src/nemo-view.c:9375 msgid "_Stop Multi-disk Drive" msgstr "" -#: src/nemo-view.c:8969 src/nemo-view.c:9160 +#: src/nemo-view.c:9185 src/nemo-view.c:9376 msgid "Stop the selected multi-disk drive" msgstr "" -#: src/nemo-view.c:8973 src/nemo-view.c:9164 +#: src/nemo-view.c:9189 src/nemo-view.c:9380 msgid "Lock the selected drive" msgstr "" -#: src/nemo-view.c:9015 src/nemo-view.c:9019 +#: src/nemo-view.c:9231 src/nemo-view.c:9235 msgid "Start the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9023 +#: src/nemo-view.c:9239 msgid "Connect to the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9027 +#: src/nemo-view.c:9243 msgid "Start the multi-disk drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9031 +#: src/nemo-view.c:9247 msgid "Unlock the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9044 +#: src/nemo-view.c:9260 msgid "_Stop the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9048 +#: src/nemo-view.c:9264 msgid "Safely remove the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9052 +#: src/nemo-view.c:9268 msgid "Disconnect the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9056 +#: src/nemo-view.c:9272 msgid "Stop the multi-disk drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9060 +#: src/nemo-view.c:9276 msgid "Lock the drive associated with the open folder" msgstr "" -#: src/nemo-view.c:9300 src/nemo-view.c:9599 +#: src/nemo-view.c:9516 src/nemo-view.c:9843 msgid "_Delete Permanently" msgstr "" -#: src/nemo-view.c:9301 +#: src/nemo-view.c:9517 msgid "Delete the open folder permanently" msgstr "" -#: src/nemo-view.c:9305 +#: src/nemo-view.c:9521 msgid "Move the open folder to the Trash" msgstr "" -#: src/nemo-view.c:9505 +#: src/nemo-view.c:9749 #, c-format msgid "_Open With %s" msgstr "" -#: src/nemo-view.c:9562 +#: src/nemo-view.c:9806 #, c-format msgid "Open in %'d New _Window" msgid_plural "Open in %'d New _Windows" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:9582 +#: src/nemo-view.c:9826 #, c-format msgid "Open in %'d New _Tab" msgid_plural "Open in %'d New _Tabs" msgstr[0] "" msgstr[1] "" -#: src/nemo-view.c:9600 +#: src/nemo-view.c:9844 msgid "Delete all selected items permanently" msgstr "" -#: src/nemo-view.c:9623 +#: src/nemo-view.c:9867 msgid "Remo_ve from Recent" msgstr "" -#: src/nemo-view.c:9624 +#: src/nemo-view.c:9868 msgid "Remove each selected item from the recently used list" msgstr "" -#: src/nemo-view.c:9665 +#: src/nemo-view.c:9909 msgid "View or modify the properties of the open folder" msgstr "" -#: src/nemo-view-dnd.c:125 libnemo-private/nemo-file.c:6537 -#: libnemo-private/nemo-file-operations.c:382 +#: src/nemo-view-dnd.c:125 libnemo-private/nemo-file.c:6557 +#: libnemo-private/nemo-file-operations.c:390 #, c-format msgid "Link to %s" msgstr "" @@ -2557,82 +2537,82 @@ msgid "Bookmark for Nonexistent Location" msgstr "" -#: src/nemo-window-bookmarks.c:316 +#: src/nemo-window-bookmarks.c:315 msgid "Go to the location specified by this bookmark" msgstr "" -#: src/nemo-window.c:1570 +#: src/nemo-window.c:1588 #, c-format msgid "%s - File Browser" msgstr "" -#: src/nemo-window.c:2065 src/nemo-window-menus.c:322 +#: src/nemo-window.c:2093 src/nemo-window-menus.c:316 msgid "Nemo" msgstr "" -#: src/nemo-window-manage-views.c:1153 +#: src/nemo-window-manage-views.c:1169 msgid "Searching..." msgstr "" -#: src/nemo-window-manage-views.c:1652 src/nemo-window-manage-views.c:1658 -#: src/nemo-window-manage-views.c:1675 src/nemo-window-manage-views.c:1686 -#: src/nemo-window-manage-views.c:1692 src/nemo-window-manage-views.c:1718 +#: src/nemo-window-manage-views.c:1668 src/nemo-window-manage-views.c:1674 +#: src/nemo-window-manage-views.c:1691 src/nemo-window-manage-views.c:1702 +#: src/nemo-window-manage-views.c:1708 src/nemo-window-manage-views.c:1734 #, c-format msgid "Could not display \"%s\"." msgstr "" -#: src/nemo-window-manage-views.c:1655 +#: src/nemo-window-manage-views.c:1671 msgid "Nemo has no installed viewer capable of displaying the folder." msgstr "" -#: src/nemo-window-manage-views.c:1661 +#: src/nemo-window-manage-views.c:1677 msgid "The location is not a folder." msgstr "" -#: src/nemo-window-manage-views.c:1667 +#: src/nemo-window-manage-views.c:1683 #, c-format msgid "Could not find \"%s\"." msgstr "" -#: src/nemo-window-manage-views.c:1670 +#: src/nemo-window-manage-views.c:1686 msgid "Please check the spelling and try again." msgstr "" -#: src/nemo-window-manage-views.c:1678 +#: src/nemo-window-manage-views.c:1694 #, c-format msgid "Nemo cannot handle \"%s\" locations." msgstr "" -#: src/nemo-window-manage-views.c:1681 +#: src/nemo-window-manage-views.c:1697 msgid "Nemo cannot handle this kind of location." msgstr "" -#: src/nemo-window-manage-views.c:1688 +#: src/nemo-window-manage-views.c:1704 msgid "Unable to mount the location." msgstr "" -#: src/nemo-window-manage-views.c:1694 +#: src/nemo-window-manage-views.c:1710 msgid "Access was denied." msgstr "" -#: src/nemo-window-manage-views.c:1703 +#: src/nemo-window-manage-views.c:1719 #, c-format msgid "Could not display \"%s\", because the host could not be found." msgstr "" -#: src/nemo-window-manage-views.c:1705 +#: src/nemo-window-manage-views.c:1721 msgid "" "Check that the spelling is correct and that your proxy settings are correct." msgstr "" -#: src/nemo-window-manage-views.c:1720 +#: src/nemo-window-manage-views.c:1736 #, c-format msgid "" "Error: %s\n" "Please select another viewer and try again." msgstr "" -#: src/nemo-window-menus.c:301 +#: src/nemo-window-menus.c:295 msgid "" "Nemo is free software; you can redistribute it and/or modify it under the " "terms of the GNU General Public License as published by the Free Software " @@ -2640,7 +2620,7 @@ "version." msgstr "" -#: src/nemo-window-menus.c:305 +#: src/nemo-window-menus.c:299 msgid "" "Nemo is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " @@ -2648,427 +2628,427 @@ "details." msgstr "" -#: src/nemo-window-menus.c:309 +#: src/nemo-window-menus.c:303 msgid "" "You should have received a copy of the GNU General Public License along with " "Nemo; if not, write to the Free Software Foundation, Inc., 51 Franklin " "Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" -#: src/nemo-window-menus.c:324 +#: src/nemo-window-menus.c:318 msgid "" "Nemo lets you organize files and folders, both on your computer and online." msgstr "" -#: src/nemo-window-menus.c:1102 +#: src/nemo-window-menus.c:1097 msgid "_File" msgstr "" -#: src/nemo-window-menus.c:1103 +#: src/nemo-window-menus.c:1098 msgid "_Edit" msgstr "" -#: src/nemo-window-menus.c:1104 +#: src/nemo-window-menus.c:1099 msgid "_View" msgstr "" -#: src/nemo-window-menus.c:1105 +#: src/nemo-window-menus.c:1100 msgid "_Help" msgstr "" -#: src/nemo-window-menus.c:1107 +#: src/nemo-window-menus.c:1102 msgid "_Close" msgstr "" -#: src/nemo-window-menus.c:1108 +#: src/nemo-window-menus.c:1103 msgid "Close this folder" msgstr "" -#: src/nemo-window-menus.c:1111 +#: src/nemo-window-menus.c:1106 msgid "Prefere_nces" msgstr "" -#: src/nemo-window-menus.c:1112 +#: src/nemo-window-menus.c:1107 msgid "Edit Nemo preferences" msgstr "" -#: src/nemo-window-menus.c:1116 +#: src/nemo-window-menus.c:1111 msgid "Manage extensions, actions and scripts" msgstr "" -#: src/nemo-window-menus.c:1120 +#: src/nemo-window-menus.c:1115 msgid "Undo the last text change" msgstr "" -#: src/nemo-window-menus.c:1123 +#: src/nemo-window-menus.c:1118 msgid "Open _Parent" msgstr "" -#: src/nemo-window-menus.c:1124 +#: src/nemo-window-menus.c:1119 msgid "Open the parent folder" msgstr "" -#: src/nemo-window-menus.c:1131 +#: src/nemo-window-menus.c:1126 msgid "Stop loading the current location" msgstr "" -#: src/nemo-window-menus.c:1134 src/nemo-window-menus.c:1368 +#: src/nemo-window-menus.c:1129 src/nemo-window-menus.c:1363 msgid "_Reload" msgstr "" -#: src/nemo-window-menus.c:1135 src/nemo-window-menus.c:1370 +#: src/nemo-window-menus.c:1130 src/nemo-window-menus.c:1365 msgid "Reload the current location" msgstr "" -#: src/nemo-window-menus.c:1138 +#: src/nemo-window-menus.c:1133 msgid "_All Topics" msgstr "" -#: src/nemo-window-menus.c:1139 +#: src/nemo-window-menus.c:1134 msgid "Display Nemo help" msgstr "" -#: src/nemo-window-menus.c:1158 +#: src/nemo-window-menus.c:1153 msgid "_About" msgstr "" -#: src/nemo-window-menus.c:1159 +#: src/nemo-window-menus.c:1154 msgid "Display credits for the creators of Nemo" msgstr "" -#: src/nemo-window-menus.c:1162 +#: src/nemo-window-menus.c:1157 msgid "Zoom _In" msgstr "" -#: src/nemo-window-menus.c:1163 +#: src/nemo-window-menus.c:1158 msgid "Increase the view size" msgstr "" -#: src/nemo-window-menus.c:1174 +#: src/nemo-window-menus.c:1169 msgid "Zoom _Out" msgstr "" -#: src/nemo-window-menus.c:1175 +#: src/nemo-window-menus.c:1170 msgid "Decrease the view size" msgstr "" -#: src/nemo-window-menus.c:1182 +#: src/nemo-window-menus.c:1177 msgid "Normal Si_ze" msgstr "" -#: src/nemo-window-menus.c:1183 +#: src/nemo-window-menus.c:1178 msgid "Use the normal view size" msgstr "" -#: src/nemo-window-menus.c:1186 +#: src/nemo-window-menus.c:1181 msgid "Connect to _Server..." msgstr "" -#: src/nemo-window-menus.c:1187 +#: src/nemo-window-menus.c:1182 msgid "Connect to a remote computer or shared disk" msgstr "" -#: src/nemo-window-menus.c:1191 +#: src/nemo-window-menus.c:1186 msgid "Open your personal folder" msgstr "" -#: src/nemo-window-menus.c:1194 src/nemo-window-menus.c:1396 +#: src/nemo-window-menus.c:1189 src/nemo-window-menus.c:1391 msgid "_Computer" msgstr "" -#: src/nemo-window-menus.c:1195 +#: src/nemo-window-menus.c:1190 msgid "" "Browse all local and remote disks and folders accessible from this computer" msgstr "" -#: src/nemo-window-menus.c:1198 +#: src/nemo-window-menus.c:1193 msgid "_Network" msgstr "" -#: src/nemo-window-menus.c:1199 +#: src/nemo-window-menus.c:1194 msgid "Browse bookmarked and local network locations" msgstr "" -#: src/nemo-window-menus.c:1202 +#: src/nemo-window-menus.c:1197 msgid "T_emplates" msgstr "" -#: src/nemo-window-menus.c:1203 +#: src/nemo-window-menus.c:1198 msgid "Open your personal templates folder" msgstr "" -#: src/nemo-window-menus.c:1206 +#: src/nemo-window-menus.c:1201 msgid "_Trash" msgstr "" -#: src/nemo-window-menus.c:1207 +#: src/nemo-window-menus.c:1202 msgid "Open your personal trash folder" msgstr "" -#: src/nemo-window-menus.c:1209 +#: src/nemo-window-menus.c:1204 msgid "_Go" msgstr "" -#: src/nemo-window-menus.c:1210 +#: src/nemo-window-menus.c:1205 msgid "_Bookmarks" msgstr "" -#: src/nemo-window-menus.c:1211 +#: src/nemo-window-menus.c:1206 msgid "_Tabs" msgstr "" -#: src/nemo-window-menus.c:1212 +#: src/nemo-window-menus.c:1207 msgid "New _Window" msgstr "" -#: src/nemo-window-menus.c:1213 +#: src/nemo-window-menus.c:1208 msgid "Open another Nemo window for the displayed location" msgstr "" -#: src/nemo-window-menus.c:1215 +#: src/nemo-window-menus.c:1210 msgid "New _Tab" msgstr "" -#: src/nemo-window-menus.c:1216 +#: src/nemo-window-menus.c:1211 msgid "Open another tab for the displayed location" msgstr "" -#: src/nemo-window-menus.c:1218 +#: src/nemo-window-menus.c:1213 msgid "Close _All Windows" msgstr "" -#: src/nemo-window-menus.c:1219 +#: src/nemo-window-menus.c:1214 msgid "Close all Navigation windows" msgstr "" -#: src/nemo-window-menus.c:1221 src/nemo-window-menus.c:1318 +#: src/nemo-window-menus.c:1216 src/nemo-window-menus.c:1313 msgid "_Back" msgstr "" -#: src/nemo-window-menus.c:1222 src/nemo-window-menus.c:1320 +#: src/nemo-window-menus.c:1217 src/nemo-window-menus.c:1315 msgid "Go to the previous visited location" msgstr "" -#: src/nemo-window-menus.c:1224 src/nemo-window-menus.c:1334 +#: src/nemo-window-menus.c:1219 src/nemo-window-menus.c:1329 msgid "_Forward" msgstr "" -#: src/nemo-window-menus.c:1225 src/nemo-window-menus.c:1336 +#: src/nemo-window-menus.c:1220 src/nemo-window-menus.c:1331 msgid "Go to the next visited location" msgstr "" -#: src/nemo-window-menus.c:1227 +#: src/nemo-window-menus.c:1222 msgid "Toggle _Location Entry" msgstr "" -#: src/nemo-window-menus.c:1228 +#: src/nemo-window-menus.c:1223 msgid "Switch between location entry and breadcrumbs" msgstr "" -#: src/nemo-window-menus.c:1230 +#: src/nemo-window-menus.c:1225 msgid "S_witch to Other Pane" msgstr "" -#: src/nemo-window-menus.c:1231 +#: src/nemo-window-menus.c:1226 msgid "Move focus to the other pane in a split view window" msgstr "" -#: src/nemo-window-menus.c:1233 +#: src/nemo-window-menus.c:1228 msgid "Sa_me Location as Other Pane" msgstr "" -#: src/nemo-window-menus.c:1234 +#: src/nemo-window-menus.c:1229 msgid "Go to the same location as in the extra pane" msgstr "" -#: src/nemo-window-menus.c:1237 +#: src/nemo-window-menus.c:1232 msgid "Add a bookmark for the current location to this menu" msgstr "" -#: src/nemo-window-menus.c:1239 +#: src/nemo-window-menus.c:1234 msgid "_Edit Bookmarks..." msgstr "" -#: src/nemo-window-menus.c:1240 +#: src/nemo-window-menus.c:1235 msgid "Display a window that allows editing the bookmarks in this menu" msgstr "" -#: src/nemo-window-menus.c:1242 +#: src/nemo-window-menus.c:1237 msgid "_Previous Tab" msgstr "" -#: src/nemo-window-menus.c:1243 +#: src/nemo-window-menus.c:1238 msgid "Activate previous tab" msgstr "" -#: src/nemo-window-menus.c:1245 +#: src/nemo-window-menus.c:1240 msgid "_Next Tab" msgstr "" -#: src/nemo-window-menus.c:1246 +#: src/nemo-window-menus.c:1241 msgid "Activate next tab" msgstr "" -#: src/nemo-window-menus.c:1248 src/nemo-window-pane.c:587 +#: src/nemo-window-menus.c:1243 src/nemo-window-pane.c:502 msgid "Move Tab _Left" msgstr "" -#: src/nemo-window-menus.c:1249 +#: src/nemo-window-menus.c:1244 msgid "Move current tab to left" msgstr "" -#: src/nemo-window-menus.c:1251 src/nemo-window-pane.c:595 +#: src/nemo-window-menus.c:1246 src/nemo-window-pane.c:510 msgid "Move Tab _Right" msgstr "" -#: src/nemo-window-menus.c:1252 +#: src/nemo-window-menus.c:1247 msgid "Move current tab to right" msgstr "" -#: src/nemo-window-menus.c:1254 +#: src/nemo-window-menus.c:1249 msgid "Sidebar" msgstr "" -#: src/nemo-window-menus.c:1259 +#: src/nemo-window-menus.c:1254 msgid "Show _Hidden Files" msgstr "" -#: src/nemo-window-menus.c:1260 +#: src/nemo-window-menus.c:1255 msgid "Toggle the display of hidden files in the current window" msgstr "" -#: src/nemo-window-menus.c:1264 +#: src/nemo-window-menus.c:1259 msgid "_Main Toolbar" msgstr "" -#: src/nemo-window-menus.c:1265 +#: src/nemo-window-menus.c:1260 msgid "Change the visibility of this window's main toolbar" msgstr "" -#: src/nemo-window-menus.c:1269 +#: src/nemo-window-menus.c:1264 msgid "_Show Sidebar" msgstr "" -#: src/nemo-window-menus.c:1270 +#: src/nemo-window-menus.c:1265 msgid "Change the visibility of this window's side pane" msgstr "" -#: src/nemo-window-menus.c:1274 +#: src/nemo-window-menus.c:1269 msgid "St_atusbar" msgstr "" -#: src/nemo-window-menus.c:1275 +#: src/nemo-window-menus.c:1270 msgid "Change the visibility of this window's statusbar" msgstr "" -#: src/nemo-window-menus.c:1279 +#: src/nemo-window-menus.c:1274 msgid "M_enubar" msgstr "" -#: src/nemo-window-menus.c:1280 +#: src/nemo-window-menus.c:1275 msgid "Change the default visibility of the menubar" msgstr "" -#: src/nemo-window-menus.c:1284 +#: src/nemo-window-menus.c:1279 msgid "_Search for Files..." msgstr "" -#: src/nemo-window-menus.c:1285 src/nemo-window-menus.c:1478 +#: src/nemo-window-menus.c:1280 src/nemo-window-menus.c:1473 msgid "Search documents and folders by name" msgstr "" -#: src/nemo-window-menus.c:1289 +#: src/nemo-window-menus.c:1284 msgid "E_xtra Pane" msgstr "" -#: src/nemo-window-menus.c:1290 +#: src/nemo-window-menus.c:1285 msgid "Open an extra folder view side-by-side" msgstr "" -#: src/nemo-window-menus.c:1297 +#: src/nemo-window-menus.c:1292 msgid "Places" msgstr "" -#: src/nemo-window-menus.c:1297 +#: src/nemo-window-menus.c:1292 msgid "Select Places as the default sidebar" msgstr "" -#: src/nemo-window-menus.c:1300 +#: src/nemo-window-menus.c:1295 msgid "Tree" msgstr "" -#: src/nemo-window-menus.c:1300 +#: src/nemo-window-menus.c:1295 msgid "Select Tree as the default sidebar" msgstr "" -#: src/nemo-window-menus.c:1321 +#: src/nemo-window-menus.c:1316 msgid "Back history" msgstr "" -#: src/nemo-window-menus.c:1337 src/nemo-window-menus.c:1356 +#: src/nemo-window-menus.c:1332 src/nemo-window-menus.c:1351 msgid "Forward history" msgstr "" -#: src/nemo-window-menus.c:1353 src/nemo-window-menus.c:1593 +#: src/nemo-window-menus.c:1348 src/nemo-window-menus.c:1588 msgid "_Up" msgstr "" -#: src/nemo-window-menus.c:1355 +#: src/nemo-window-menus.c:1350 msgid "Go to parent folder" msgstr "" -#: src/nemo-window-menus.c:1384 +#: src/nemo-window-menus.c:1379 msgid "Go to home directory" msgstr "" -#: src/nemo-window-menus.c:1398 +#: src/nemo-window-menus.c:1393 msgid "Go to Computer" msgstr "" -#: src/nemo-window-menus.c:1410 +#: src/nemo-window-menus.c:1405 msgid "Toggle Location Entry" msgstr "" -#: src/nemo-window-menus.c:1422 +#: src/nemo-window-menus.c:1417 msgid "New folder" msgstr "" -#: src/nemo-window-menus.c:1423 +#: src/nemo-window-menus.c:1418 msgid "Create a new folder" msgstr "" -#: src/nemo-window-menus.c:1433 +#: src/nemo-window-menus.c:1428 msgid "Open a terminal in the active folder" msgstr "" -#: src/nemo-window-menus.c:1443 +#: src/nemo-window-menus.c:1438 msgid "Icons" msgstr "" -#: src/nemo-window-menus.c:1454 +#: src/nemo-window-menus.c:1449 msgid "List" msgstr "" -#: src/nemo-window-menus.c:1466 +#: src/nemo-window-menus.c:1461 msgid "Compact" msgstr "" -#: src/nemo-window-menus.c:1478 libnemo-private/nemo-query.c:130 +#: src/nemo-window-menus.c:1473 libnemo-private/nemo-query.c:130 #: libnemo-private/nemo-search-directory-file.c:164 #: libnemo-private/nemo-search-directory-file.c:190 #: libnemo-private/nemo-search-directory-file.c:224 msgid "Search" msgstr "" -#: src/nemo-window-menus.c:1599 +#: src/nemo-window-menus.c:1594 msgid "_Location" msgstr "" -#: src/nemo-window-pane.c:570 +#: src/nemo-window-pane.c:485 msgid "_New Tab" msgstr "" -#: src/nemo-window-pane.c:606 +#: src/nemo-window-pane.c:521 msgid "_Close Tab" msgstr "" @@ -3292,296 +3272,296 @@ msgid "Cancel" msgstr "" -#: libnemo-private/nemo-file.c:1224 libnemo-private/nemo-vfs-file.c:405 +#: libnemo-private/nemo-file.c:1226 libnemo-private/nemo-vfs-file.c:405 msgid "This file cannot be mounted" msgstr "" -#: libnemo-private/nemo-file.c:1269 +#: libnemo-private/nemo-file.c:1271 msgid "This file cannot be unmounted" msgstr "" -#: libnemo-private/nemo-file.c:1303 +#: libnemo-private/nemo-file.c:1305 msgid "This file cannot be ejected" msgstr "" -#: libnemo-private/nemo-file.c:1336 libnemo-private/nemo-vfs-file.c:583 +#: libnemo-private/nemo-file.c:1338 libnemo-private/nemo-vfs-file.c:583 msgid "This file cannot be started" msgstr "" -#: libnemo-private/nemo-file.c:1388 libnemo-private/nemo-file.c:1419 +#: libnemo-private/nemo-file.c:1390 libnemo-private/nemo-file.c:1421 msgid "This file cannot be stopped" msgstr "" -#: libnemo-private/nemo-file.c:1846 +#: libnemo-private/nemo-file.c:1848 msgid "Slashes are not allowed in filenames" msgstr "" -#: libnemo-private/nemo-file.c:1864 +#: libnemo-private/nemo-file.c:1866 msgid "File not found" msgstr "" -#: libnemo-private/nemo-file.c:1892 +#: libnemo-private/nemo-file.c:1894 msgid "Toplevel files cannot be renamed" msgstr "" -#: libnemo-private/nemo-file.c:1915 +#: libnemo-private/nemo-file.c:1917 msgid "Unable to rename desktop icon" msgstr "" -#: libnemo-private/nemo-file.c:1944 +#: libnemo-private/nemo-file.c:1946 msgid "Unable to rename desktop file" msgstr "" -#: libnemo-private/nemo-file.c:4471 +#: libnemo-private/nemo-file.c:4491 msgid "today at 00:00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4474 +#: libnemo-private/nemo-file.c:4494 msgid "today at 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4475 +#: libnemo-private/nemo-file.c:4495 msgid "today at %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4477 +#: libnemo-private/nemo-file.c:4497 msgid "today, 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4478 +#: libnemo-private/nemo-file.c:4498 msgid "today, %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4480 libnemo-private/nemo-file.c:4481 +#: libnemo-private/nemo-file.c:4500 libnemo-private/nemo-file.c:4501 msgid "today" msgstr "" -#: libnemo-private/nemo-file.c:4490 +#: libnemo-private/nemo-file.c:4510 msgid "yesterday at 00:00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4491 +#: libnemo-private/nemo-file.c:4511 msgid "yesterday at %-I:%M:%S %p" msgstr "" -#: libnemo-private/nemo-file.c:4493 +#: libnemo-private/nemo-file.c:4513 msgid "yesterday at 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4494 +#: libnemo-private/nemo-file.c:4514 msgid "yesterday at %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4496 +#: libnemo-private/nemo-file.c:4516 msgid "yesterday, 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4497 +#: libnemo-private/nemo-file.c:4517 msgid "yesterday, %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4499 libnemo-private/nemo-file.c:4500 +#: libnemo-private/nemo-file.c:4519 libnemo-private/nemo-file.c:4520 msgid "yesterday" msgstr "" -#: libnemo-private/nemo-file.c:4511 +#: libnemo-private/nemo-file.c:4531 msgid "Wednesday, September 00 0000 at 00:00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4512 +#: libnemo-private/nemo-file.c:4532 msgid "%A, %B %-d %Y at %-I:%M:%S %p" msgstr "" -#: libnemo-private/nemo-file.c:4514 +#: libnemo-private/nemo-file.c:4534 msgid "Mon, Oct 00 0000 at 00:00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4515 +#: libnemo-private/nemo-file.c:4535 msgid "%a, %b %-d %Y at %-I:%M:%S %p" msgstr "" -#: libnemo-private/nemo-file.c:4517 +#: libnemo-private/nemo-file.c:4537 msgid "Mon, Oct 00 0000 at 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4518 +#: libnemo-private/nemo-file.c:4538 msgid "%a, %b %-d %Y at %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4520 +#: libnemo-private/nemo-file.c:4540 msgid "Oct 00 0000 at 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4521 +#: libnemo-private/nemo-file.c:4541 msgid "%b %-d %Y at %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4523 +#: libnemo-private/nemo-file.c:4543 msgid "Oct 00 0000, 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4524 +#: libnemo-private/nemo-file.c:4544 msgid "%b %-d %Y, %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4526 +#: libnemo-private/nemo-file.c:4546 msgid "00/00/00, 00:00 PM" msgstr "" -#: libnemo-private/nemo-file.c:4527 +#: libnemo-private/nemo-file.c:4547 msgid "%m/%-d/%y, %-I:%M %p" msgstr "" -#: libnemo-private/nemo-file.c:4529 +#: libnemo-private/nemo-file.c:4549 msgid "00/00/00" msgstr "" -#: libnemo-private/nemo-file.c:4530 +#: libnemo-private/nemo-file.c:4550 msgid "%m/%d/%y" msgstr "" -#: libnemo-private/nemo-file.c:5179 +#: libnemo-private/nemo-file.c:5199 msgid "Not allowed to set permissions" msgstr "" -#: libnemo-private/nemo-file.c:5474 +#: libnemo-private/nemo-file.c:5494 msgid "Not allowed to set owner" msgstr "" -#: libnemo-private/nemo-file.c:5492 +#: libnemo-private/nemo-file.c:5512 #, c-format msgid "Specified owner '%s' doesn't exist" msgstr "" -#: libnemo-private/nemo-file.c:5756 +#: libnemo-private/nemo-file.c:5776 msgid "Not allowed to set group" msgstr "" -#: libnemo-private/nemo-file.c:5774 +#: libnemo-private/nemo-file.c:5794 #, c-format msgid "Specified group '%s' doesn't exist" msgstr "" -#: libnemo-private/nemo-file.c:5932 +#: libnemo-private/nemo-file.c:5952 #, c-format msgid "%'u folder" msgid_plural "%'u folders" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file.c:5933 +#: libnemo-private/nemo-file.c:5953 #, c-format msgid "%'u file" msgid_plural "%'u files" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file.c:6328 libnemo-private/nemo-file.c:6344 +#: libnemo-private/nemo-file.c:6348 libnemo-private/nemo-file.c:6364 msgid "? items" msgstr "" -#: libnemo-private/nemo-file.c:6334 +#: libnemo-private/nemo-file.c:6354 msgid "? bytes" msgstr "" -#: libnemo-private/nemo-file.c:6351 libnemo-private/nemo-file.c:6434 -#: libnemo-private/nemo-file.c:6468 +#: libnemo-private/nemo-file.c:6371 libnemo-private/nemo-file.c:6454 +#: libnemo-private/nemo-file.c:6488 msgid "Unknown" msgstr "" -#: libnemo-private/nemo-file.c:6394 libnemo-private/nemo-file.c:6402 -#: libnemo-private/nemo-file.c:6494 +#: libnemo-private/nemo-file.c:6414 libnemo-private/nemo-file.c:6422 +#: libnemo-private/nemo-file.c:6514 msgid "Program" msgstr "" -#: libnemo-private/nemo-file.c:6395 +#: libnemo-private/nemo-file.c:6415 msgid "Audio" msgstr "" -#: libnemo-private/nemo-file.c:6396 +#: libnemo-private/nemo-file.c:6416 msgid "Font" msgstr "" -#: libnemo-private/nemo-file.c:6398 +#: libnemo-private/nemo-file.c:6418 msgid "Archive" msgstr "" -#: libnemo-private/nemo-file.c:6399 +#: libnemo-private/nemo-file.c:6419 msgid "Markup" msgstr "" -#: libnemo-private/nemo-file.c:6400 libnemo-private/nemo-file.c:6401 +#: libnemo-private/nemo-file.c:6420 libnemo-private/nemo-file.c:6421 #: eel/eel-editable-label.c:311 msgid "Text" msgstr "" -#: libnemo-private/nemo-file.c:6404 +#: libnemo-private/nemo-file.c:6424 msgid "Contacts" msgstr "" -#: libnemo-private/nemo-file.c:6405 +#: libnemo-private/nemo-file.c:6425 msgid "Calendar" msgstr "" -#: libnemo-private/nemo-file.c:6406 +#: libnemo-private/nemo-file.c:6426 msgid "Document" msgstr "" -#: libnemo-private/nemo-file.c:6496 +#: libnemo-private/nemo-file.c:6516 #: src/nemo-file-management-properties.glade:52 msgid "Binary" msgstr "" -#: libnemo-private/nemo-file.c:6500 +#: libnemo-private/nemo-file.c:6520 msgid "Folder" msgstr "" -#: libnemo-private/nemo-file.c:6531 +#: libnemo-private/nemo-file.c:6551 msgid "link" msgstr "" -#: libnemo-private/nemo-file.c:6553 libnemo-private/nemo-file.c:6567 +#: libnemo-private/nemo-file.c:6573 libnemo-private/nemo-file.c:6587 msgid "link (broken)" msgstr "" -#: libnemo-private/nemo-file.c:7528 +#: libnemo-private/nemo-file.c:7548 #, c-format msgid "Name: %s" msgstr "" -#: libnemo-private/nemo-file.c:7535 +#: libnemo-private/nemo-file.c:7555 #, c-format msgid "Type: %s" msgstr "" -#: libnemo-private/nemo-file.c:7545 +#: libnemo-private/nemo-file.c:7565 #, c-format msgid "%s item" msgid_plural "%s items" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file.c:7547 +#: libnemo-private/nemo-file.c:7567 #, c-format msgid "Contains: %s" msgstr "" -#: libnemo-private/nemo-file.c:7556 +#: libnemo-private/nemo-file.c:7576 #, c-format msgid "Size: %s" msgstr "" -#: libnemo-private/nemo-file.c:7564 +#: libnemo-private/nemo-file.c:7584 #, c-format msgid "Accessed: %s" msgstr "" -#: libnemo-private/nemo-file.c:7572 +#: libnemo-private/nemo-file.c:7592 #, c-format msgid "Modified: %s" msgstr "" -#: libnemo-private/nemo-file.c:7581 +#: libnemo-private/nemo-file.c:7601 #, c-format msgid "Location: %s" msgstr "" @@ -3680,7 +3660,7 @@ msgstr "" #: libnemo-private/nemo-file-conflict-dialog.c:546 -#: libnemo-private/nemo-file-operations.c:190 +#: libnemo-private/nemo-file-operations.c:192 msgid "_Skip" msgstr "" @@ -3696,217 +3676,217 @@ msgid "File conflict" msgstr "" -#: libnemo-private/nemo-file-operations.c:191 +#: libnemo-private/nemo-file-operations.c:193 msgid "S_kip All" msgstr "" -#: libnemo-private/nemo-file-operations.c:192 +#: libnemo-private/nemo-file-operations.c:194 msgid "_Retry" msgstr "" -#: libnemo-private/nemo-file-operations.c:193 +#: libnemo-private/nemo-file-operations.c:195 msgid "Delete _All" msgstr "" -#: libnemo-private/nemo-file-operations.c:194 +#: libnemo-private/nemo-file-operations.c:196 msgid "_Replace" msgstr "" -#: libnemo-private/nemo-file-operations.c:195 +#: libnemo-private/nemo-file-operations.c:197 msgid "Replace _All" msgstr "" -#: libnemo-private/nemo-file-operations.c:196 +#: libnemo-private/nemo-file-operations.c:198 msgid "_Merge" msgstr "" -#: libnemo-private/nemo-file-operations.c:197 +#: libnemo-private/nemo-file-operations.c:199 msgid "Merge _All" msgstr "" -#: libnemo-private/nemo-file-operations.c:198 +#: libnemo-private/nemo-file-operations.c:200 msgid "Copy _Anyway" msgstr "" -#: libnemo-private/nemo-file-operations.c:283 +#: libnemo-private/nemo-file-operations.c:291 #, c-format msgid "%'d second" msgid_plural "%'d seconds" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:288 -#: libnemo-private/nemo-file-operations.c:299 +#: libnemo-private/nemo-file-operations.c:296 +#: libnemo-private/nemo-file-operations.c:307 #, c-format msgid "%'d minute" msgid_plural "%'d minutes" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:298 +#: libnemo-private/nemo-file-operations.c:306 #, c-format msgid "%'d hour" msgid_plural "%'d hours" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:306 +#: libnemo-private/nemo-file-operations.c:314 #, c-format msgid "approximately %'d hour" msgid_plural "approximately %'d hours" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:386 +#: libnemo-private/nemo-file-operations.c:394 #, c-format msgid "Another link to %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:402 +#: libnemo-private/nemo-file-operations.c:410 #, c-format msgid "%'dst link to %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:406 +#: libnemo-private/nemo-file-operations.c:414 #, c-format msgid "%'dnd link to %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:410 +#: libnemo-private/nemo-file-operations.c:418 #, c-format msgid "%'drd link to %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:414 +#: libnemo-private/nemo-file-operations.c:422 #, c-format msgid "%'dth link to %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:453 +#: libnemo-private/nemo-file-operations.c:461 msgid " (copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:455 +#: libnemo-private/nemo-file-operations.c:463 msgid " (another copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:458 -#: libnemo-private/nemo-file-operations.c:460 -#: libnemo-private/nemo-file-operations.c:462 -#: libnemo-private/nemo-file-operations.c:472 +#: libnemo-private/nemo-file-operations.c:466 +#: libnemo-private/nemo-file-operations.c:468 +#: libnemo-private/nemo-file-operations.c:470 +#: libnemo-private/nemo-file-operations.c:480 msgid "th copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:465 +#: libnemo-private/nemo-file-operations.c:473 msgid "st copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:467 +#: libnemo-private/nemo-file-operations.c:475 msgid "nd copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:469 +#: libnemo-private/nemo-file-operations.c:477 msgid "rd copy)" msgstr "" -#: libnemo-private/nemo-file-operations.c:486 +#: libnemo-private/nemo-file-operations.c:494 #, c-format msgid "%s (copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:488 +#: libnemo-private/nemo-file-operations.c:496 #, c-format msgid "%s (another copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:491 -#: libnemo-private/nemo-file-operations.c:493 -#: libnemo-private/nemo-file-operations.c:495 -#: libnemo-private/nemo-file-operations.c:509 +#: libnemo-private/nemo-file-operations.c:499 +#: libnemo-private/nemo-file-operations.c:501 +#: libnemo-private/nemo-file-operations.c:503 +#: libnemo-private/nemo-file-operations.c:517 #, c-format msgid "%s (%'dth copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:503 +#: libnemo-private/nemo-file-operations.c:511 #, c-format msgid "%s (%'dst copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:505 +#: libnemo-private/nemo-file-operations.c:513 #, c-format msgid "%s (%'dnd copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:507 +#: libnemo-private/nemo-file-operations.c:515 #, c-format msgid "%s (%'drd copy)%s" msgstr "" -#: libnemo-private/nemo-file-operations.c:608 +#: libnemo-private/nemo-file-operations.c:616 msgid " (" msgstr "" -#: libnemo-private/nemo-file-operations.c:616 +#: libnemo-private/nemo-file-operations.c:624 #, c-format msgid " (%'d" msgstr "" -#: libnemo-private/nemo-file-operations.c:985 +#: libnemo-private/nemo-file-operations.c:993 #, c-format msgid "Waiting to copy a file from '%1$s' to '%2$s'" msgid_plural "Waiting to copy files from '%1$s' to '%2$s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:994 +#: libnemo-private/nemo-file-operations.c:1002 #, c-format msgid "Waiting to move a file from '%1$s' to '%2$s'" msgid_plural "Waiting to move files from '%1$s' to '%2$s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1002 +#: libnemo-private/nemo-file-operations.c:1010 #, c-format msgid "Waiting to permanently delete a file from '%s'" msgid_plural "Waiting to permanently delete files from '%s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1010 +#: libnemo-private/nemo-file-operations.c:1018 #, c-format msgid "Waiting to trash a file in '%s'" msgid_plural "Waiting to trash files in '%s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1016 +#: libnemo-private/nemo-file-operations.c:1024 msgid "Waiting to empty the trash" msgstr "" -#: libnemo-private/nemo-file-operations.c:1022 +#: libnemo-private/nemo-file-operations.c:1030 #, c-format msgid "Waiting to duplicate a file in '%s'" msgid_plural "Waiting to duplicate files in '%s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1030 +#: libnemo-private/nemo-file-operations.c:1038 #, c-format msgid "Waiting to change permissions of files in '%s'" msgstr "" -#: libnemo-private/nemo-file-operations.c:1036 +#: libnemo-private/nemo-file-operations.c:1044 #, c-format msgid "Waiting to link a file from '%1$s' to '%2$s'" msgid_plural "Waiting to link files from '%1$s' to '%2$s'" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1447 +#: libnemo-private/nemo-file-operations.c:1455 msgid "Are you sure you want to permanently delete \"%B\" from the trash?" msgstr "" -#: libnemo-private/nemo-file-operations.c:1450 +#: libnemo-private/nemo-file-operations.c:1458 #, c-format msgid "" "Are you sure you want to permanently delete the %'d selected item from the " @@ -3917,24 +3897,24 @@ msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1460 -#: libnemo-private/nemo-file-operations.c:1526 +#: libnemo-private/nemo-file-operations.c:1468 +#: libnemo-private/nemo-file-operations.c:1534 msgid "If you delete an item, it will be permanently lost." msgstr "" -#: libnemo-private/nemo-file-operations.c:1480 +#: libnemo-private/nemo-file-operations.c:1488 msgid "Empty all items from Trash?" msgstr "" -#: libnemo-private/nemo-file-operations.c:1484 +#: libnemo-private/nemo-file-operations.c:1492 msgid "All items in the Trash will be permanently deleted." msgstr "" -#: libnemo-private/nemo-file-operations.c:1514 +#: libnemo-private/nemo-file-operations.c:1522 msgid "Are you sure you want to permanently delete \"%B\"?" msgstr "" -#: libnemo-private/nemo-file-operations.c:1517 +#: libnemo-private/nemo-file-operations.c:1525 #, c-format msgid "Are you sure you want to permanently delete the %'d selected item?" msgid_plural "" @@ -3942,449 +3922,449 @@ msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1560 +#: libnemo-private/nemo-file-operations.c:1568 #, c-format msgid "%'d file left to delete" msgid_plural "%'d files left to delete" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1566 +#: libnemo-private/nemo-file-operations.c:1574 msgid "Deleting files" msgstr "" -#: libnemo-private/nemo-file-operations.c:1580 +#: libnemo-private/nemo-file-operations.c:1588 msgid "%T left" msgid_plural "%T left" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1647 -#: libnemo-private/nemo-file-operations.c:1681 -#: libnemo-private/nemo-file-operations.c:1720 -#: libnemo-private/nemo-file-operations.c:1797 -#: libnemo-private/nemo-file-operations.c:2619 +#: libnemo-private/nemo-file-operations.c:1655 +#: libnemo-private/nemo-file-operations.c:1689 +#: libnemo-private/nemo-file-operations.c:1728 +#: libnemo-private/nemo-file-operations.c:1805 +#: libnemo-private/nemo-file-operations.c:2627 msgid "Error while deleting." msgstr "" -#: libnemo-private/nemo-file-operations.c:1651 +#: libnemo-private/nemo-file-operations.c:1659 msgid "" "Files in the folder \"%B\" cannot be deleted because you do not have " "permissions to see them." msgstr "" -#: libnemo-private/nemo-file-operations.c:1654 -#: libnemo-private/nemo-file-operations.c:2678 -#: libnemo-private/nemo-file-operations.c:3666 +#: libnemo-private/nemo-file-operations.c:1662 +#: libnemo-private/nemo-file-operations.c:2686 +#: libnemo-private/nemo-file-operations.c:3674 msgid "" "There was an error getting information about the files in the folder \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:1663 -#: libnemo-private/nemo-file-operations.c:3675 +#: libnemo-private/nemo-file-operations.c:1671 +#: libnemo-private/nemo-file-operations.c:3683 msgid "_Skip files" msgstr "" -#: libnemo-private/nemo-file-operations.c:1684 +#: libnemo-private/nemo-file-operations.c:1692 msgid "" "The folder \"%B\" cannot be deleted because you do not have permissions to " "read it." msgstr "" -#: libnemo-private/nemo-file-operations.c:1687 -#: libnemo-private/nemo-file-operations.c:2717 -#: libnemo-private/nemo-file-operations.c:3711 +#: libnemo-private/nemo-file-operations.c:1695 +#: libnemo-private/nemo-file-operations.c:2725 +#: libnemo-private/nemo-file-operations.c:3719 msgid "There was an error reading the folder \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:1721 +#: libnemo-private/nemo-file-operations.c:1729 msgid "Could not remove the folder %B." msgstr "" -#: libnemo-private/nemo-file-operations.c:1798 +#: libnemo-private/nemo-file-operations.c:1806 msgid "There was an error deleting %B." msgstr "" -#: libnemo-private/nemo-file-operations.c:1878 +#: libnemo-private/nemo-file-operations.c:1886 msgid "Moving files to trash" msgstr "" -#: libnemo-private/nemo-file-operations.c:1880 +#: libnemo-private/nemo-file-operations.c:1888 #, c-format msgid "%'d file left to trash" msgid_plural "%'d files left to trash" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:1931 +#: libnemo-private/nemo-file-operations.c:1939 msgid "Cannot move file to trash, do you want to delete immediately?" msgstr "" -#: libnemo-private/nemo-file-operations.c:1932 +#: libnemo-private/nemo-file-operations.c:1940 msgid "The file \"%B\" cannot be moved to the trash." msgstr "" -#: libnemo-private/nemo-file-operations.c:2111 +#: libnemo-private/nemo-file-operations.c:2119 msgid "Trashing Files" msgstr "" -#: libnemo-private/nemo-file-operations.c:2113 +#: libnemo-private/nemo-file-operations.c:2121 msgid "Deleting Files" msgstr "" -#: libnemo-private/nemo-file-operations.c:2194 +#: libnemo-private/nemo-file-operations.c:2202 msgid "Unable to eject %V" msgstr "" -#: libnemo-private/nemo-file-operations.c:2196 +#: libnemo-private/nemo-file-operations.c:2204 msgid "Unable to unmount %V" msgstr "" -#: libnemo-private/nemo-file-operations.c:2353 +#: libnemo-private/nemo-file-operations.c:2361 msgid "Do you want to empty the trash before you unmount?" msgstr "" -#: libnemo-private/nemo-file-operations.c:2355 +#: libnemo-private/nemo-file-operations.c:2363 msgid "" "In order to regain the free space on this volume the trash must be emptied. " "All trashed items on the volume will be permanently lost." msgstr "" -#: libnemo-private/nemo-file-operations.c:2361 +#: libnemo-private/nemo-file-operations.c:2369 msgid "Do _not Empty Trash" msgstr "" -#: libnemo-private/nemo-file-operations.c:2490 +#: libnemo-private/nemo-file-operations.c:2498 #, c-format msgid "Unable to mount %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:2566 +#: libnemo-private/nemo-file-operations.c:2574 #, c-format msgid "Preparing to copy %'d file (%S)" msgid_plural "Preparing to copy %'d files (%S)" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:2572 +#: libnemo-private/nemo-file-operations.c:2580 #, c-format msgid "Preparing to move %'d file (%S)" msgid_plural "Preparing to move %'d files (%S)" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:2578 +#: libnemo-private/nemo-file-operations.c:2586 #, c-format msgid "Preparing to delete %'d file (%S)" msgid_plural "Preparing to delete %'d files (%S)" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:2584 +#: libnemo-private/nemo-file-operations.c:2592 #, c-format msgid "Preparing to trash %'d file" msgid_plural "Preparing to trash %'d files" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:2615 -#: libnemo-private/nemo-file-operations.c:3526 -#: libnemo-private/nemo-file-operations.c:3658 -#: libnemo-private/nemo-file-operations.c:3703 +#: libnemo-private/nemo-file-operations.c:2623 +#: libnemo-private/nemo-file-operations.c:3534 +#: libnemo-private/nemo-file-operations.c:3666 +#: libnemo-private/nemo-file-operations.c:3711 msgid "Error while copying." msgstr "" -#: libnemo-private/nemo-file-operations.c:2617 -#: libnemo-private/nemo-file-operations.c:3656 -#: libnemo-private/nemo-file-operations.c:3701 +#: libnemo-private/nemo-file-operations.c:2625 +#: libnemo-private/nemo-file-operations.c:3664 +#: libnemo-private/nemo-file-operations.c:3709 msgid "Error while moving." msgstr "" -#: libnemo-private/nemo-file-operations.c:2621 +#: libnemo-private/nemo-file-operations.c:2629 msgid "Error while moving files to trash." msgstr "" -#: libnemo-private/nemo-file-operations.c:2675 +#: libnemo-private/nemo-file-operations.c:2683 msgid "" "Files in the folder \"%B\" cannot be handled because you do not have " "permissions to see them." msgstr "" -#: libnemo-private/nemo-file-operations.c:2714 +#: libnemo-private/nemo-file-operations.c:2722 msgid "" "The folder \"%B\" cannot be handled because you do not have permissions to " "read it." msgstr "" -#: libnemo-private/nemo-file-operations.c:2791 +#: libnemo-private/nemo-file-operations.c:2799 msgid "" "The file \"%B\" cannot be handled because you do not have permissions to " "read it." msgstr "" -#: libnemo-private/nemo-file-operations.c:2794 +#: libnemo-private/nemo-file-operations.c:2802 msgid "There was an error getting information about \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:2895 -#: libnemo-private/nemo-file-operations.c:2937 -#: libnemo-private/nemo-file-operations.c:2971 -#: libnemo-private/nemo-file-operations.c:3001 +#: libnemo-private/nemo-file-operations.c:2903 +#: libnemo-private/nemo-file-operations.c:2945 +#: libnemo-private/nemo-file-operations.c:2979 +#: libnemo-private/nemo-file-operations.c:3009 msgid "Error while copying to \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:2899 +#: libnemo-private/nemo-file-operations.c:2907 msgid "You do not have permissions to access the destination folder." msgstr "" -#: libnemo-private/nemo-file-operations.c:2901 +#: libnemo-private/nemo-file-operations.c:2909 msgid "There was an error getting information about the destination." msgstr "" -#: libnemo-private/nemo-file-operations.c:2938 +#: libnemo-private/nemo-file-operations.c:2946 msgid "The destination is not a folder." msgstr "" -#: libnemo-private/nemo-file-operations.c:2972 +#: libnemo-private/nemo-file-operations.c:2980 msgid "" "There is not enough space on the destination. Try to remove files to make " "space." msgstr "" -#: libnemo-private/nemo-file-operations.c:2974 +#: libnemo-private/nemo-file-operations.c:2982 #, c-format msgid "%S more space is required to copy to the destination." msgstr "" -#: libnemo-private/nemo-file-operations.c:3002 +#: libnemo-private/nemo-file-operations.c:3010 msgid "The destination is read-only." msgstr "" -#: libnemo-private/nemo-file-operations.c:3061 +#: libnemo-private/nemo-file-operations.c:3069 msgid "Moving \"%B\" to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3062 +#: libnemo-private/nemo-file-operations.c:3070 msgid "Copying \"%B\" to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3069 +#: libnemo-private/nemo-file-operations.c:3077 msgid "Duplicating \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3077 +#: libnemo-private/nemo-file-operations.c:3085 msgid "Moving file %'d of %'d (in \"%B\") to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3079 +#: libnemo-private/nemo-file-operations.c:3087 msgid "Copying file %'d of %'d (in \"%B\") to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3086 +#: libnemo-private/nemo-file-operations.c:3094 msgid "Duplicating file %'d of %'d (in \"%B\")" msgstr "" -#: libnemo-private/nemo-file-operations.c:3095 +#: libnemo-private/nemo-file-operations.c:3103 msgid "Moving file %'d of %'d to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3097 +#: libnemo-private/nemo-file-operations.c:3105 msgid "Copying file %'d of %'d to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:3103 +#: libnemo-private/nemo-file-operations.c:3111 #, c-format msgid "Duplicating file %'d of %'d" msgstr "" -#: libnemo-private/nemo-file-operations.c:3122 +#: libnemo-private/nemo-file-operations.c:3130 #, c-format msgid "%S of %S" msgstr "" -#: libnemo-private/nemo-file-operations.c:3133 +#: libnemo-private/nemo-file-operations.c:3141 msgid "%S of %S — %T left (%S/sec)" msgid_plural "%S of %S — %T left (%S/sec)" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:3530 +#: libnemo-private/nemo-file-operations.c:3538 msgid "" "The folder \"%B\" cannot be copied because you do not have permissions to " "create it in the destination." msgstr "" -#: libnemo-private/nemo-file-operations.c:3533 +#: libnemo-private/nemo-file-operations.c:3541 msgid "There was an error creating the folder \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:3663 +#: libnemo-private/nemo-file-operations.c:3671 msgid "" "Files in the folder \"%B\" cannot be copied because you do not have " "permissions to see them." msgstr "" -#: libnemo-private/nemo-file-operations.c:3708 +#: libnemo-private/nemo-file-operations.c:3716 msgid "" "The folder \"%B\" cannot be copied because you do not have permissions to " "read it." msgstr "" -#: libnemo-private/nemo-file-operations.c:3753 -#: libnemo-private/nemo-file-operations.c:4446 -#: libnemo-private/nemo-file-operations.c:5057 +#: libnemo-private/nemo-file-operations.c:3761 +#: libnemo-private/nemo-file-operations.c:4454 +#: libnemo-private/nemo-file-operations.c:5063 msgid "Error while moving \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:3754 +#: libnemo-private/nemo-file-operations.c:3762 msgid "Could not remove the source folder." msgstr "" -#: libnemo-private/nemo-file-operations.c:3839 -#: libnemo-private/nemo-file-operations.c:3880 -#: libnemo-private/nemo-file-operations.c:4448 -#: libnemo-private/nemo-file-operations.c:4519 +#: libnemo-private/nemo-file-operations.c:3847 +#: libnemo-private/nemo-file-operations.c:3888 +#: libnemo-private/nemo-file-operations.c:4456 +#: libnemo-private/nemo-file-operations.c:4527 msgid "Error while copying \"%B\"." msgstr "" -#: libnemo-private/nemo-file-operations.c:3840 +#: libnemo-private/nemo-file-operations.c:3848 #, c-format msgid "Could not remove files from the already existing folder %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:3881 +#: libnemo-private/nemo-file-operations.c:3889 #, c-format msgid "Could not remove the already existing file %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:4201 -#: libnemo-private/nemo-file-operations.c:4902 +#: libnemo-private/nemo-file-operations.c:4209 +#: libnemo-private/nemo-file-operations.c:4908 msgid "You cannot move a folder into itself." msgstr "" -#: libnemo-private/nemo-file-operations.c:4202 -#: libnemo-private/nemo-file-operations.c:4903 +#: libnemo-private/nemo-file-operations.c:4210 +#: libnemo-private/nemo-file-operations.c:4909 msgid "You cannot copy a folder into itself." msgstr "" -#: libnemo-private/nemo-file-operations.c:4203 -#: libnemo-private/nemo-file-operations.c:4904 +#: libnemo-private/nemo-file-operations.c:4211 +#: libnemo-private/nemo-file-operations.c:4910 msgid "The destination folder is inside the source folder." msgstr "" -#: libnemo-private/nemo-file-operations.c:4234 +#: libnemo-private/nemo-file-operations.c:4242 msgid "You cannot move a file over itself." msgstr "" -#: libnemo-private/nemo-file-operations.c:4235 +#: libnemo-private/nemo-file-operations.c:4243 msgid "You cannot copy a file over itself." msgstr "" -#: libnemo-private/nemo-file-operations.c:4236 +#: libnemo-private/nemo-file-operations.c:4244 msgid "The source file would be overwritten by the destination." msgstr "" -#: libnemo-private/nemo-file-operations.c:4450 +#: libnemo-private/nemo-file-operations.c:4458 #, c-format msgid "Could not remove the already existing file with the same name in %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:4520 +#: libnemo-private/nemo-file-operations.c:4528 #, c-format msgid "There was an error copying the file into %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:4752 -#: libnemo-private/nemo-file-operations.c:4785 +#: libnemo-private/nemo-file-operations.c:4760 +#: libnemo-private/nemo-file-operations.c:4792 msgid "Copying Files" msgstr "" -#: libnemo-private/nemo-file-operations.c:4812 +#: libnemo-private/nemo-file-operations.c:4818 msgid "Preparing to Move to \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:4816 +#: libnemo-private/nemo-file-operations.c:4822 #, c-format msgid "Preparing to move %'d file" msgid_plural "Preparing to move %'d files" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:5058 +#: libnemo-private/nemo-file-operations.c:5064 #, c-format msgid "There was an error moving the file into %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:5320 +#: libnemo-private/nemo-file-operations.c:5326 msgid "Moving Files" msgstr "" -#: libnemo-private/nemo-file-operations.c:5354 +#: libnemo-private/nemo-file-operations.c:5359 msgid "Creating links in \"%B\"" msgstr "" -#: libnemo-private/nemo-file-operations.c:5358 +#: libnemo-private/nemo-file-operations.c:5363 #, c-format msgid "Making link to %'d file" msgid_plural "Making links to %'d files" msgstr[0] "" msgstr[1] "" -#: libnemo-private/nemo-file-operations.c:5493 +#: libnemo-private/nemo-file-operations.c:5498 msgid "Error while creating link to %B." msgstr "" -#: libnemo-private/nemo-file-operations.c:5495 +#: libnemo-private/nemo-file-operations.c:5500 msgid "Symbolic links only supported for local files" msgstr "" -#: libnemo-private/nemo-file-operations.c:5498 +#: libnemo-private/nemo-file-operations.c:5503 msgid "The target doesn't support symbolic links." msgstr "" -#: libnemo-private/nemo-file-operations.c:5501 +#: libnemo-private/nemo-file-operations.c:5506 #, c-format msgid "There was an error creating the symlink in %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:5820 +#: libnemo-private/nemo-file-operations.c:5823 msgid "Setting permissions" msgstr "" -#: libnemo-private/nemo-file-operations.c:6084 +#: libnemo-private/nemo-file-operations.c:6086 msgid "Untitled Folder" msgstr "" -#: libnemo-private/nemo-file-operations.c:6090 +#: libnemo-private/nemo-file-operations.c:6092 #, c-format msgid "Untitled %s" msgstr "" -#: libnemo-private/nemo-file-operations.c:6096 +#: libnemo-private/nemo-file-operations.c:6098 msgid "Untitled Document" msgstr "" -#: libnemo-private/nemo-file-operations.c:6274 +#: libnemo-private/nemo-file-operations.c:6276 msgid "Error while creating directory %B." msgstr "" -#: libnemo-private/nemo-file-operations.c:6276 +#: libnemo-private/nemo-file-operations.c:6278 msgid "Error while creating file %B." msgstr "" -#: libnemo-private/nemo-file-operations.c:6278 +#: libnemo-private/nemo-file-operations.c:6280 #, c-format msgid "There was an error creating the directory in %F." msgstr "" -#: libnemo-private/nemo-file-operations.c:6536 +#: libnemo-private/nemo-file-operations.c:6535 msgid "Emptying Trash" msgstr "" -#: libnemo-private/nemo-file-operations.c:6583 -#: libnemo-private/nemo-file-operations.c:6624 -#: libnemo-private/nemo-file-operations.c:6659 -#: libnemo-private/nemo-file-operations.c:6694 +#: libnemo-private/nemo-file-operations.c:6581 +#: libnemo-private/nemo-file-operations.c:6622 +#: libnemo-private/nemo-file-operations.c:6657 +#: libnemo-private/nemo-file-operations.c:6692 msgid "Unable to mark launcher trusted (executable)" msgstr "" @@ -4732,82 +4712,82 @@ msgid "_Redo Change Owner" msgstr "" -#: libnemo-private/nemo-file-utilities.c:1254 +#: libnemo-private/nemo-file-utilities.c:1267 #, c-format msgid "Could not determine original location of \"%s\" " msgstr "" -#: libnemo-private/nemo-file-utilities.c:1258 +#: libnemo-private/nemo-file-utilities.c:1271 msgid "The item cannot be restored from trash" msgstr "" -#: libnemo-private/nemo-icon-container.c:2693 +#: libnemo-private/nemo-icon-container.c:2737 msgid "The selection rectangle" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:113 +#: libnemo-private/nemo-mime-application-chooser.c:116 msgid "Could not forget association" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:137 +#: libnemo-private/nemo-mime-application-chooser.c:140 msgid "Forget association" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:265 +#: libnemo-private/nemo-mime-application-chooser.c:284 msgid "Valid executable." msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:272 +#: libnemo-private/nemo-mime-application-chooser.c:291 msgid "" "Not a valid executable. Spaces in the file path must be escaped with " "backslash (\\)." msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:402 -#: libnemo-private/nemo-mime-application-chooser.c:420 +#: libnemo-private/nemo-mime-application-chooser.c:428 +#: libnemo-private/nemo-mime-application-chooser.c:446 #, c-format msgid "%s document" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:407 +#: libnemo-private/nemo-mime-application-chooser.c:433 #, c-format msgid "Open all files of type \"%s\" with" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:427 +#: libnemo-private/nemo-mime-application-chooser.c:453 #, c-format msgid "" "Select an application in the list to open %s and other files of type \"%s\"" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:494 +#: libnemo-private/nemo-mime-application-chooser.c:523 msgid "" "You can also type or select a custom executable file to use to open this " "file type. You can use this command just once, or set it as default for all " "files of this type." msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:508 +#: libnemo-private/nemo-mime-application-chooser.c:537 msgid "Enter a custom command..." msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:516 +#: libnemo-private/nemo-mime-application-chooser.c:546 msgid "Custom application" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:541 +#: libnemo-private/nemo-mime-application-chooser.c:587 msgid "Executables" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:544 +#: libnemo-private/nemo-mime-application-chooser.c:590 msgid "Add to list" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:552 +#: libnemo-private/nemo-mime-application-chooser.c:598 msgid "Set as default" msgstr "" -#: libnemo-private/nemo-mime-application-chooser.c:561 +#: libnemo-private/nemo-mime-application-chooser.c:607 msgid "Reset to system defaults" msgstr "" @@ -4855,6 +4835,10 @@ msgid "Search for \"%s\"" msgstr "" +#: libnemo-private/nemo-undo-signal-handlers.c:173 +msgid "Edit" +msgstr "" + #: libnemo-private/nemo-undo-signal-handlers.c:174 msgid "Undo Edit" msgstr "" @@ -4958,21 +4942,21 @@ #: src/nemo-file-management-properties.glade:29 #: src/nemo-file-management-properties.glade:182 #: src/nemo-file-management-properties.glade:199 -#: src/nemo-file-management-properties.glade:3182 +#: src/nemo-file-management-properties.glade:3226 msgid "Always" msgstr "" #: src/nemo-file-management-properties.glade:32 #: src/nemo-file-management-properties.glade:185 #: src/nemo-file-management-properties.glade:202 -#: src/nemo-file-management-properties.glade:3185 +#: src/nemo-file-management-properties.glade:3229 msgid "Local Files Only" msgstr "" #: src/nemo-file-management-properties.glade:35 #: src/nemo-file-management-properties.glade:188 #: src/nemo-file-management-properties.glade:205 -#: src/nemo-file-management-properties.glade:3188 +#: src/nemo-file-management-properties.glade:3232 msgid "Never" msgstr "" @@ -5102,379 +5086,391 @@ msgid "8 GB" msgstr "" -#: src/nemo-file-management-properties.glade:253 +#: src/nemo-file-management-properties.glade:252 msgid "File Management Preferences" msgstr "" -#: src/nemo-file-management-properties.glade:357 +#: src/nemo-file-management-properties.glade:367 msgid "Default View" msgstr "" -#: src/nemo-file-management-properties.glade:387 +#: src/nemo-file-management-properties.glade:397 msgid "View _new folders using:" msgstr "" -#: src/nemo-file-management-properties.glade:432 +#: src/nemo-file-management-properties.glade:442 msgid "_Arrange items:" msgstr "" -#: src/nemo-file-management-properties.glade:469 +#: src/nemo-file-management-properties.glade:479 msgid "Sort _folders before files" msgstr "" -#: src/nemo-file-management-properties.glade:522 +#: src/nemo-file-management-properties.glade:532 msgid "Icon View Defaults" msgstr "" -#: src/nemo-file-management-properties.glade:552 +#: src/nemo-file-management-properties.glade:562 msgid "Default _zoom level:" msgstr "" -#: src/nemo-file-management-properties.glade:589 +#: src/nemo-file-management-properties.glade:599 msgid "_Text beside icons" msgstr "" -#: src/nemo-file-management-properties.glade:605 +#: src/nemo-file-management-properties.glade:615 msgid "_Use compact layout" msgstr "" -#: src/nemo-file-management-properties.glade:658 +#: src/nemo-file-management-properties.glade:668 msgid "Compact View Defaults" msgstr "" -#: src/nemo-file-management-properties.glade:688 +#: src/nemo-file-management-properties.glade:698 msgid "_Default zoom level:" msgstr "" -#: src/nemo-file-management-properties.glade:725 +#: src/nemo-file-management-properties.glade:735 msgid "A_ll columns have the same width" msgstr "" -#: src/nemo-file-management-properties.glade:778 +#: src/nemo-file-management-properties.glade:788 msgid "List View Defaults" msgstr "" -#: src/nemo-file-management-properties.glade:808 +#: src/nemo-file-management-properties.glade:818 msgid "D_efault zoom level:" msgstr "" -#: src/nemo-file-management-properties.glade:882 +#: src/nemo-file-management-properties.glade:892 msgid "Tree View Defaults" msgstr "" -#: src/nemo-file-management-properties.glade:904 +#: src/nemo-file-management-properties.glade:914 msgid "Show _only folders" msgstr "" -#: src/nemo-file-management-properties.glade:941 +#: src/nemo-file-management-properties.glade:951 msgid "Views" msgstr "" -#: src/nemo-file-management-properties.glade:969 +#: src/nemo-file-management-properties.glade:979 msgid "Behavior" msgstr "" -#: src/nemo-file-management-properties.glade:990 +#: src/nemo-file-management-properties.glade:1000 msgid "_Single click to open items" msgstr "" -#: src/nemo-file-management-properties.glade:1007 +#: src/nemo-file-management-properties.glade:1017 msgid "_Double click to open items" msgstr "" -#: src/nemo-file-management-properties.glade:1025 +#: src/nemo-file-management-properties.glade:1035 +msgid "Click twice with a pause in between to rename items" +msgstr "" + +#: src/nemo-file-management-properties.glade:1052 msgid "Open each _folder in its own window" msgstr "" -#: src/nemo-file-management-properties.glade:1042 +#: src/nemo-file-management-properties.glade:1069 msgid "Always start in dual-pane view" msgstr "" -#: src/nemo-file-management-properties.glade:1059 +#: src/nemo-file-management-properties.glade:1086 msgid "Ignore per-folder view preferences" msgstr "" -#: src/nemo-file-management-properties.glade:1113 +#: src/nemo-file-management-properties.glade:1103 +msgid "Disable file operation queueing" +msgstr "" + +#: src/nemo-file-management-properties.glade:1157 msgid "Executable Text Files" msgstr "" -#: src/nemo-file-management-properties.glade:1135 +#: src/nemo-file-management-properties.glade:1179 msgid "_Run executable text files when they are opened" msgstr "" -#: src/nemo-file-management-properties.glade:1152 +#: src/nemo-file-management-properties.glade:1196 msgid "_View executable text files when they are opened" msgstr "" -#: src/nemo-file-management-properties.glade:1169 +#: src/nemo-file-management-properties.glade:1213 msgid "_Ask each time" msgstr "" -#: src/nemo-file-management-properties.glade:1223 +#: src/nemo-file-management-properties.glade:1267 msgid "Trash" msgstr "" -#: src/nemo-file-management-properties.glade:1245 +#: src/nemo-file-management-properties.glade:1289 msgid "Ask before _emptying the Trash or deleting files" msgstr "" -#: src/nemo-file-management-properties.glade:1261 +#: src/nemo-file-management-properties.glade:1305 msgid "I_nclude a Delete command that bypasses Trash" msgstr "" -#: src/nemo-file-management-properties.glade:1277 +#: src/nemo-file-management-properties.glade:1321 msgid "Bypass the Trash when the Delete key is pressed" msgstr "" -#: src/nemo-file-management-properties.glade:1329 +#: src/nemo-file-management-properties.glade:1373 msgid "Media Handling" msgstr "" -#: src/nemo-file-management-properties.glade:1351 +#: src/nemo-file-management-properties.glade:1395 msgid "Automatically mount removeable media when inserted and on startup" msgstr "" -#: src/nemo-file-management-properties.glade:1367 +#: src/nemo-file-management-properties.glade:1411 msgid "Automatically open a folder for automounted media" msgstr "" -#: src/nemo-file-management-properties.glade:1383 +#: src/nemo-file-management-properties.glade:1427 msgid "Prompt or autorun/autostart programs when media are inserted" msgstr "" -#: src/nemo-file-management-properties.glade:1399 +#: src/nemo-file-management-properties.glade:1443 msgid "" "Automatically close the device's tab, pane, or window when a device is " "unmounted or ejected" msgstr "" -#: src/nemo-file-management-properties.glade:1452 +#: src/nemo-file-management-properties.glade:1496 msgid "Bulk Rename" msgstr "" -#: src/nemo-file-management-properties.glade:1482 +#: src/nemo-file-management-properties.glade:1526 msgid "Command to invoke when renaming multiple items:" msgstr "" -#: src/nemo-file-management-properties.glade:1534 +#: src/nemo-file-management-properties.glade:1578 msgid "Behavior" msgstr "" -#: src/nemo-file-management-properties.glade:1562 +#: src/nemo-file-management-properties.glade:1606 +msgid "Context Menus" +msgstr "" + +#: src/nemo-file-management-properties.glade:1628 +msgid "" +"Show all available actions in context menus (restart Nemo if you change this " +"option)" +msgstr "" + +#: src/nemo-file-management-properties.glade:1681 msgid "Icon Captions" msgstr "" -#: src/nemo-file-management-properties.glade:1587 +#: src/nemo-file-management-properties.glade:1706 msgid "" "Choose the order of information to appear beneath icon names. More " "information will appear when zooming in closer." msgstr "" -#: src/nemo-file-management-properties.glade:1738 +#: src/nemo-file-management-properties.glade:1857 msgid "Date" msgstr "" -#: src/nemo-file-management-properties.glade:1761 +#: src/nemo-file-management-properties.glade:1880 msgid "_Format:" msgstr "" -#: src/nemo-file-management-properties.glade:1821 +#: src/nemo-file-management-properties.glade:1940 msgid "Window and Tab Titles" msgstr "" -#: src/nemo-file-management-properties.glade:1843 +#: src/nemo-file-management-properties.glade:1962 msgid "Show the full p_ath in the title bar and tab bars" msgstr "" -#: src/nemo-file-management-properties.glade:1885 +#: src/nemo-file-management-properties.glade:2015 msgid "File Size" msgstr "" -#: src/nemo-file-management-properties.glade:1908 +#: src/nemo-file-management-properties.glade:2038 msgid "_Prefixes:" msgstr "" -#: src/nemo-file-management-properties.glade:1986 +#: src/nemo-file-management-properties.glade:2105 msgid "File Properties" msgstr "" -#: src/nemo-file-management-properties.glade:2008 +#: src/nemo-file-management-properties.glade:2127 msgid "Show advanced permissions in the file property dialog" msgstr "" -#: src/nemo-file-management-properties.glade:2061 +#: src/nemo-file-management-properties.glade:2180 msgid "Move/Copy To Menu" msgstr "" -#: src/nemo-file-management-properties.glade:2083 +#: src/nemo-file-management-properties.glade:2202 msgid "List bookmarks in the menu" msgstr "" -#: src/nemo-file-management-properties.glade:2099 +#: src/nemo-file-management-properties.glade:2218 msgid "List devices and network locations in the menu" msgstr "" -#: src/nemo-file-management-properties.glade:2152 -msgid "Context Menus" -msgstr "" - -#: src/nemo-file-management-properties.glade:2174 -msgid "" -"Show all available actions in context menus (restart Nemo if you change this " -"option)" -msgstr "" - -#: src/nemo-file-management-properties.glade:2211 +#: src/nemo-file-management-properties.glade:2255 msgid "Display" msgstr "" -#: src/nemo-file-management-properties.glade:2240 +#: src/nemo-file-management-properties.glade:2284 msgid "List Columns" msgstr "" -#: src/nemo-file-management-properties.glade:2265 +#: src/nemo-file-management-properties.glade:2309 msgid "Choose the order of information to appear in the list view." msgstr "" -#: src/nemo-file-management-properties.glade:2300 +#: src/nemo-file-management-properties.glade:2344 msgid "List Columns" msgstr "" -#: src/nemo-file-management-properties.glade:2328 +#: src/nemo-file-management-properties.glade:2372 msgid "Text Files" msgstr "" -#: src/nemo-file-management-properties.glade:2358 +#: src/nemo-file-management-properties.glade:2402 msgid "Show te_xt in icons:" msgstr "" -#: src/nemo-file-management-properties.glade:2432 +#: src/nemo-file-management-properties.glade:2476 msgid "Other Previewable Files" msgstr "" -#: src/nemo-file-management-properties.glade:2462 +#: src/nemo-file-management-properties.glade:2506 msgid "Show _thumbnails:" msgstr "" -#: src/nemo-file-management-properties.glade:2507 +#: src/nemo-file-management-properties.glade:2551 msgid "_Only for files smaller than:" msgstr "" -#: src/nemo-file-management-properties.glade:2581 +#: src/nemo-file-management-properties.glade:2625 msgid "Folders" msgstr "" -#: src/nemo-file-management-properties.glade:2611 +#: src/nemo-file-management-properties.glade:2655 msgid "Count _number of items:" msgstr "" -#: src/nemo-file-management-properties.glade:2685 +#: src/nemo-file-management-properties.glade:2729 msgid "Tooltips" msgstr "" -#: src/nemo-file-management-properties.glade:2707 +#: src/nemo-file-management-properties.glade:2751 msgid "Show tooltips in icon and compact views" msgstr "" -#: src/nemo-file-management-properties.glade:2724 +#: src/nemo-file-management-properties.glade:2768 msgid "Show tooltips in list views" msgstr "" -#: src/nemo-file-management-properties.glade:2741 +#: src/nemo-file-management-properties.glade:2785 msgid "Show tooltips on the desktop" msgstr "" -#: src/nemo-file-management-properties.glade:2761 +#: src/nemo-file-management-properties.glade:2805 msgid "" "By default, a folder tooltip shows the item count, and files display " "their size.\n" " Select additional information to display in the tooltip:" msgstr "" -#: src/nemo-file-management-properties.glade:2785 +#: src/nemo-file-management-properties.glade:2829 msgid "Detailed file type" msgstr "" -#: src/nemo-file-management-properties.glade:2800 +#: src/nemo-file-management-properties.glade:2844 msgid "Accessed date" msgstr "" -#: src/nemo-file-management-properties.glade:2816 +#: src/nemo-file-management-properties.glade:2860 msgid "Modified date" msgstr "" -#: src/nemo-file-management-properties.glade:2831 +#: src/nemo-file-management-properties.glade:2875 msgid "File or folder location" msgstr "" -#: src/nemo-file-management-properties.glade:2877 +#: src/nemo-file-management-properties.glade:2921 msgid "Preview" msgstr "" -#: src/nemo-file-management-properties.glade:2905 +#: src/nemo-file-management-properties.glade:2949 msgid "Options" msgstr "" -#: src/nemo-file-management-properties.glade:2927 +#: src/nemo-file-management-properties.glade:2971 msgid "Show previous button" msgstr "" -#: src/nemo-file-management-properties.glade:2944 +#: src/nemo-file-management-properties.glade:2988 msgid "Show next button" msgstr "" -#: src/nemo-file-management-properties.glade:2960 +#: src/nemo-file-management-properties.glade:3004 msgid "Show up button" msgstr "" -#: src/nemo-file-management-properties.glade:2976 +#: src/nemo-file-management-properties.glade:3020 msgid "Show refresh button" msgstr "" -#: src/nemo-file-management-properties.glade:2992 +#: src/nemo-file-management-properties.glade:3036 msgid "Show computer button" msgstr "" -#: src/nemo-file-management-properties.glade:3008 +#: src/nemo-file-management-properties.glade:3052 msgid "Show home button" msgstr "" -#: src/nemo-file-management-properties.glade:3024 +#: src/nemo-file-management-properties.glade:3068 msgid "Show location entry/breadcrumbs toggle button" msgstr "" -#: src/nemo-file-management-properties.glade:3040 +#: src/nemo-file-management-properties.glade:3084 msgid "Show open in terminal button" msgstr "" -#: src/nemo-file-management-properties.glade:3056 +#: src/nemo-file-management-properties.glade:3100 msgid "Show new folder button" msgstr "" -#: src/nemo-file-management-properties.glade:3072 +#: src/nemo-file-management-properties.glade:3116 msgid "Show search button" msgstr "" -#: src/nemo-file-management-properties.glade:3088 +#: src/nemo-file-management-properties.glade:3132 msgid "Show icon view button" msgstr "" -#: src/nemo-file-management-properties.glade:3104 +#: src/nemo-file-management-properties.glade:3148 msgid "Show list view button" msgstr "" -#: src/nemo-file-management-properties.glade:3120 +#: src/nemo-file-management-properties.glade:3164 msgid "Show compact view button" msgstr "" -#: src/nemo-file-management-properties.glade:3157 +#: src/nemo-file-management-properties.glade:3201 msgid "Toolbar" msgstr "" -#: data/action_i18n_strings.py:7 data/action_i18n_strings.py:8 +#: data/action_i18n_strings.py:7 msgid "Add Desklets" msgstr "" +#: data/action_i18n_strings.py:8 +msgid "Add Cinamon desklets" +msgstr "" + #: data/action_i18n_strings.py:9 msgid "Manage workspaces (Expo)" msgstr "" @@ -5488,7 +5484,7 @@ msgstr "" #: data/action_i18n_strings.py:12 -msgid "Set the selected image as your desktop wallpaper" +msgid "Set the selected image as your Cinnamon desktop wallpaper" msgstr "" #: data/action_i18n_strings.py:13 @@ -5499,10 +5495,14 @@ msgid "Create a new launcher in this folder" msgstr "" -#: data/action_i18n_strings.py:15 data/action_i18n_strings.py:16 +#: data/action_i18n_strings.py:15 msgid "Change Desktop _Background" msgstr "" +#: data/action_i18n_strings.py:16 +msgid "Change the Cinnamon desktop background" +msgstr "" + #: data/action_i18n_strings.py:17 msgid "Remove workspace" msgstr "" diff -Nru nemo-2.6.7/po/POTFILES.in nemo-2.8.6/po/POTFILES.in --- nemo-2.6.7/po/POTFILES.in 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/po/POTFILES.in 2015-11-27 10:00:22.000000000 +0000 @@ -57,7 +57,6 @@ src/nemo-desktop-item-properties.c src/nemo-desktop-window.c src/nemo-directory-view-ui.xml -src/nemo-directory-view-ui-light.xml src/nemo-error-reporting.c src/nemo-file-management-properties.c [type: gettext/glade]src/nemo-file-management-properties.glade diff -Nru nemo-2.6.7/src/Makefile.am nemo-2.8.6/src/Makefile.am --- nemo-2.6.7/src/Makefile.am 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/Makefile.am 2015-11-27 10:00:22.000000000 +0000 @@ -61,7 +61,6 @@ nemo-file-management-properties.glade \ nemo-icon-view-ui.xml \ nemo-directory-view-ui.xml \ - nemo-directory-view-ui-light.xml \ nemo-desktop-icon-view-ui.xml \ nemo-shell-ui.xml \ $(NULL) @@ -156,8 +155,6 @@ nemo-query-editor.h \ nemo-script-config-widget.c \ nemo-script-config-widget.h \ - nemo-search-bar.c \ - nemo-search-bar.h \ nemo-self-check-functions.c \ nemo-self-check-functions.h \ nemo-statusbar.c \ diff -Nru nemo-2.6.7/src/nemo-action-config-widget.c nemo-2.8.6/src/nemo-action-config-widget.c --- nemo-2.6.7/src/nemo-action-config-widget.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-action-config-widget.c 2015-11-27 10:00:22.000000000 +0000 @@ -10,21 +10,18 @@ #include "nemo-view.h" #include "nemo-file.h" #include +#include +#include +#include "nemo-global-preferences.h" G_DEFINE_TYPE (NemoActionConfigWidget, nemo_action_config_widget, NEMO_TYPE_CONFIG_BASE_WIDGET); -#define BLACKLIST_KEY "disabled-actions" - -#define ACTION_FILE_GROUP "Nemo Action" -#define KEY_ACTIVE "Active" -#define KEY_NAME "Name" -#define KEY_ICON_NAME "Icon-Name" -#define KEY_STOCK_ID "Stock-Id" typedef struct { NemoActionConfigWidget *widget; gchar *name; + gchar *comment; gchar *stock_id; gchar *icon_name; gchar *filename; @@ -34,6 +31,7 @@ action_proxy_free (ActionProxy *proxy) { g_clear_pointer (&proxy->name, g_free); + g_clear_pointer (&proxy->comment, g_free); g_clear_pointer (&proxy->stock_id, g_free); g_clear_pointer (&proxy->icon_name, g_free); g_clear_pointer (&proxy->filename, g_free); @@ -67,7 +65,7 @@ { gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - gchar **blacklist = g_settings_get_strv (proxy->widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS); GPtrArray *new_list = g_ptr_array_new (); @@ -91,9 +89,11 @@ gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_signal_handler_block (proxy->widget->settings, proxy->widget->bl_handler); - g_settings_set_strv (proxy->widget->settings, BLACKLIST_KEY, (const gchar * const *) new_list_ptr); - g_signal_handler_unblock (proxy->widget->settings, proxy->widget->bl_handler); + g_signal_handler_block (nemo_plugin_preferences, proxy->widget->bl_handler); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS, + (const gchar * const *) new_list_ptr); + g_signal_handler_unblock (nemo_plugin_preferences, proxy->widget->bl_handler); g_strfreev (blacklist); g_strfreev (new_list_ptr); @@ -120,15 +120,22 @@ KEY_NAME, NULL, NULL); - if (name != NULL) proxy->name = g_strdup (name); + gchar *comment = g_key_file_get_locale_string (key_file, + ACTION_FILE_GROUP, + KEY_COMMENT, + NULL, + NULL); + if (comment != NULL) + proxy->comment = g_strdup (comment); + + gchar *icon_name = g_key_file_get_string (key_file, ACTION_FILE_GROUP, KEY_ICON_NAME, NULL); - if (icon_name != NULL) proxy->icon_name = g_strdup (icon_name); @@ -209,11 +216,11 @@ gchar *path = NULL; - path = g_build_filename ("/", "usr", "share", "nemo", "actions", NULL); + path = nemo_action_manager_get_sys_directory_path (); populate_from_directory (widget, path); g_clear_pointer (&path, g_free); - path = g_build_filename (g_get_user_data_dir (), "nemo", "actions", NULL); + path = nemo_action_manager_get_user_directory_path (); populate_from_directory (widget, path); g_clear_pointer (&path, g_free); @@ -234,7 +241,8 @@ gtk_widget_set_sensitive (GTK_WIDGET (NEMO_CONFIG_BASE_WIDGET (widget)->listbox), FALSE); } else { GList *l; - gchar **blacklist = g_settings_get_strv (widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS); for (l = widget->actions; l != NULL; l=l->next) { ActionProxy *proxy = l->data; @@ -269,6 +277,8 @@ w = gtk_label_new (display_name); g_free (display_name); + gtk_widget_set_tooltip_text(w, proxy->comment); + gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 2); GtkWidget *row = gtk_list_box_row_new (); @@ -297,7 +307,9 @@ static void on_enable_clicked (GtkWidget *button, NemoActionConfigWidget *widget) { - g_settings_set_strv (widget->settings, BLACKLIST_KEY, NULL); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS, + NULL); } static void @@ -313,7 +325,9 @@ g_ptr_array_add (new_list, NULL); gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_settings_set_strv (widget->settings, BLACKLIST_KEY, (const gchar * const *) new_list_ptr); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS, + (const gchar * const *) new_list_ptr); g_strfreev (new_list_ptr); } @@ -398,8 +412,7 @@ g_list_free (widget->dir_monitors); - g_signal_handler_disconnect (widget->settings, widget->bl_handler); - g_clear_object (&widget->settings); + g_signal_handler_disconnect (nemo_plugin_preferences, widget->bl_handler); G_OBJECT_CLASS (nemo_action_config_widget_parent_class)->finalize (object); } @@ -418,8 +431,8 @@ { self->actions = NULL; - self->settings = g_settings_new ("org.nemo.plugins"); - self->bl_handler = g_signal_connect (self->settings, "changed::" BLACKLIST_KEY, + self->bl_handler = g_signal_connect (nemo_plugin_preferences, + "changed::" NEMO_PLUGIN_PREFERENCES_DISABLED_ACTIONS, G_CALLBACK (on_settings_changed), self); GtkWidget *label = nemo_config_base_widget_get_label (NEMO_CONFIG_BASE_WIDGET (self)); diff -Nru nemo-2.6.7/src/nemo-action-config-widget.h nemo-2.8.6/src/nemo-action-config-widget.h --- nemo-2.6.7/src/nemo-action-config-widget.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-action-config-widget.h 2015-11-27 10:00:22.000000000 +0000 @@ -31,7 +31,6 @@ NemoConfigBaseWidget parent; GList *actions; - GSettings *settings; GList *dir_monitors; gulong bl_handler; diff -Nru nemo-2.6.7/src/nemo-application.c nemo-2.8.6/src/nemo-application.c --- nemo-2.6.7/src/nemo-application.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-application.c 2015-11-27 10:00:22.000000000 +0000 @@ -409,63 +409,6 @@ g_list_free (list_copy); } -static gboolean -nemo_window_delete_event_callback (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - NemoWindow *window; - - window = NEMO_WINDOW (widget); - nemo_window_close (window); - - return TRUE; -} - - -static NemoWindow * -create_window (NemoApplication *application, - GdkScreen *screen) -{ - NemoWindow *window; - - g_return_val_if_fail (NEMO_IS_APPLICATION (application), NULL); - - window = g_object_new (NEMO_TYPE_WINDOW, - "screen", screen, - NULL); - - g_signal_connect_data (window, "delete_event", - G_CALLBACK (nemo_window_delete_event_callback), NULL, NULL, - G_CONNECT_AFTER); - - gtk_application_add_window (GTK_APPLICATION (application), - GTK_WINDOW (window)); - - /* Do not yet show the window. It will be shown later on if it can - * successfully display its initial URI. Otherwise it will be destroyed - * without ever having seen the light of day. - */ - - return window; -} - -static gboolean -another_navigation_window_already_showing (NemoApplication *application, - NemoWindow *the_window) -{ - GList *list, *item; - - list = gtk_application_get_windows (GTK_APPLICATION (application)); - for (item = list; item != NULL; item = item->next) { - if (item->data != the_window) { - return TRUE; - } - } - - return FALSE; -} - NemoWindow * nemo_application_create_window (NemoApplication *application, GdkScreen *screen) @@ -476,7 +419,9 @@ g_return_val_if_fail (NEMO_IS_APPLICATION (application), NULL); - window = create_window (application, screen); + window = nemo_window_new (screen); + gtk_application_add_window (GTK_APPLICATION (application), + GTK_WINDOW (window)); maximized = g_settings_get_boolean (nemo_window_state, NEMO_WINDOW_STATE_MAXIMIZED); @@ -499,7 +444,7 @@ geometry_string, NEMO_WINDOW_MIN_WIDTH, NEMO_WINDOW_MIN_HEIGHT, - another_navigation_window_already_showing (application, window)); + TRUE); } g_free (geometry_string); @@ -635,7 +580,7 @@ nemo_window_slot_go_home (slot, FALSE); } else { computer = g_file_new_for_path (g_get_home_dir ()); - nemo_window_slot_go_to (slot, computer, FALSE); + nemo_window_slot_open_location (slot, computer, 0); g_object_unref(computer); } } @@ -708,10 +653,8 @@ sel_list = g_list_prepend (sel_list, nemo_file_get (selection)); } - nemo_window_slot_open_location (nemo_window_get_active_slot (window), - location, - 0, - sel_list); + nemo_window_slot_open_location_full (nemo_window_get_active_slot (window), location, + 0, sel_list, NULL, NULL); if (sel_list != NULL) { nemo_file_list_free (sel_list); @@ -1395,4 +1338,4 @@ nemo_application_get_cache_problem_ignored (NemoApplication *application) { return application->priv->ignore_cache_problem; -} \ No newline at end of file +} diff -Nru nemo-2.6.7/src/nemo-bookmark-list.c nemo-2.8.6/src/nemo-bookmark-list.c --- nemo-2.6.7/src/nemo-bookmark-list.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-bookmark-list.c 2015-11-27 10:00:22.000000000 +0000 @@ -133,6 +133,41 @@ g_signal_emit (bookmarks, signals[CHANGED], 0); } +static gboolean +bookmark_location_mounted_callback (NemoBookmark *bookmark, + GFile *location, + NemoBookmarkList *bookmarks) +{ + gboolean ret = FALSE; + + GList *volumes = g_volume_monitor_get_mounts (bookmarks->volume_monitor); + GList *iter = volumes; + + while (iter != NULL) { + GMount *mount = G_MOUNT (iter->data); + GFile *mount_location = g_mount_get_root (mount); + + gchar *mount_root_uri = g_file_get_uri (mount_location); + gchar *location_uri = g_file_get_uri (location); + + ret = g_str_has_prefix (location_uri, mount_root_uri); + + g_free (mount_root_uri); + g_free (location_uri); + + g_object_unref (mount_location); + + if (ret == TRUE) + break; + + iter = iter->next; + } + + g_list_free_full (volumes, (GDestroyNotify) g_object_unref); + + return ret; +} + static void stop_monitoring_bookmark (NemoBookmarkList *bookmarks, NemoBookmark *bookmark) @@ -140,6 +175,9 @@ g_signal_handlers_disconnect_by_func (bookmark, bookmark_in_list_changed_callback, bookmarks); + g_signal_handlers_disconnect_by_func (bookmark, + bookmark_location_mounted_callback, + bookmarks); } static void @@ -172,6 +210,8 @@ clear_bookmarks (NEMO_BOOKMARK_LIST (object)); + g_object_unref (NEMO_BOOKMARK_LIST (object)->volume_monitor); + G_OBJECT_CLASS (nemo_bookmark_list_parent_class)->finalize (object); } @@ -230,6 +270,14 @@ } static void +volume_monitor_activity_cb (GVolumeMonitor *monitor, GMount *mount, gpointer user_data) +{ + NemoBookmarkList *bookmarks = NEMO_BOOKMARK_LIST (user_data); + + nemo_bookmark_list_load_file (bookmarks); +} + +static void nemo_bookmark_list_init (NemoBookmarkList *bookmarks) { GFile *file; @@ -246,6 +294,15 @@ G_CALLBACK (bookmark_monitor_changed_cb), bookmarks); g_object_unref (file); + + bookmarks->volume_monitor = g_volume_monitor_get (); + + g_signal_connect (bookmarks->volume_monitor, "mount-added", + G_CALLBACK (volume_monitor_activity_cb), bookmarks); + g_signal_connect (bookmarks->volume_monitor, "mount-removed", + G_CALLBACK (volume_monitor_activity_cb), bookmarks); + g_signal_connect (bookmarks->volume_monitor, "mount-changed", + G_CALLBACK (volume_monitor_activity_cb), bookmarks); } static void @@ -255,12 +312,16 @@ { bookmarks->list = g_list_insert (bookmarks->list, bookmark, index); + g_signal_connect_object (bookmark, "location-mounted", + G_CALLBACK (bookmark_location_mounted_callback), bookmarks, 0); g_signal_connect_object (bookmark, "contents-changed", G_CALLBACK (bookmark_in_list_changed_callback), bookmarks, 0); g_signal_connect_object (bookmark, "notify::icon", G_CALLBACK (bookmark_in_list_notify), bookmarks, 0); g_signal_connect_object (bookmark, "notify::name", G_CALLBACK (bookmark_in_list_notify), bookmarks, 0); + + nemo_bookmark_connect (bookmark); } /** diff -Nru nemo-2.6.7/src/nemo-bookmark-list.h nemo-2.8.6/src/nemo-bookmark-list.h --- nemo-2.6.7/src/nemo-bookmark-list.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-bookmark-list.h 2015-11-27 10:00:22.000000000 +0000 @@ -52,6 +52,7 @@ GList *list; GFileMonitor *monitor; GQueue *pending_ops; + GVolumeMonitor *volume_monitor; }; struct NemoBookmarkListClass { diff -Nru nemo-2.6.7/src/nemo-connect-server-dialog.c nemo-2.8.6/src/nemo-connect-server-dialog.c --- nemo-2.6.7/src/nemo-connect-server-dialog.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-connect-server-dialog.c 2015-11-27 10:00:22.000000000 +0000 @@ -97,15 +97,12 @@ /* A collection of flags for MethodInfo.flags */ enum { - DEFAULT_METHOD = (1 << 0), - - /* Widgets to display in connect_dialog_setup_for_type */ - SHOW_SHARE = (1 << 1), - SHOW_PORT = (1 << 2), - SHOW_USER = (1 << 3), - SHOW_DOMAIN = (1 << 4), - - IS_ANONYMOUS = (1 << 5) + /* Widgets to display in connect_dialog_setup_for_type */ + SHOW_SHARE = (1 << 0), + SHOW_PORT = (1 << 1), + SHOW_USER = (1 << 2), + SHOW_DOMAIN = (1 << 3), + IS_ANONYMOUS = (1 << 4) }; /* Remember to fill in descriptions below */ @@ -113,7 +110,7 @@ /* FIXME: we need to alias ssh to sftp */ { "sftp", SHOW_PORT | SHOW_USER, 22 }, { "ftp", SHOW_PORT | SHOW_USER, 21 }, - { "ftp", DEFAULT_METHOD | IS_ANONYMOUS | SHOW_PORT, 21 }, + { "ftp", IS_ANONYMOUS | SHOW_PORT, 21 }, { "smb", SHOW_SHARE | SHOW_USER | SHOW_DOMAIN, 0 }, { "dav", SHOW_PORT | SHOW_USER, 80 }, /* FIXME: hrm, shouldn't it work? */ @@ -568,7 +565,7 @@ /* domain */ domain = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->domain_entry), 0, -1); - if (strlen (domain) != 0) { + if (strlen (domain) != 0 && strcmp(meth->scheme, "smb") == 0) { t = user; user = g_strconcat (domain , ";" , t, NULL); @@ -766,6 +763,10 @@ g_assert (index < G_N_ELEMENTS (methods) && index >= 0); meth = &(methods[index]); + if (g_settings_get_int (nemo_preferences, NEMO_PREFERENCES_LAST_SERVER_CONNECT_METHOD) != index) { + g_settings_set_int (nemo_preferences, NEMO_PREFERENCES_LAST_SERVER_CONNECT_METHOD, index); + } + g_object_set (dialog->details->share_entry, "visible", (meth->flags & SHOW_SHARE) != 0, @@ -932,6 +933,8 @@ gtk_size_group_add_widget (dialog->details->contents_size_group, dialog->details->type_combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->type_combo); + gint last = g_settings_get_int (nemo_preferences, NEMO_PREFERENCES_LAST_SERVER_CONNECT_METHOD); + /* each row contains: method index, textual description */ store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store)); @@ -971,10 +974,9 @@ 1, get_method_description (&(methods[i])), -1); - - if (methods[i].flags & DEFAULT_METHOD) { - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter); - } + if (i == last) { + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter); + } } if (gtk_combo_box_get_active (GTK_COMBO_BOX (combo)) < 0) { diff -Nru nemo-2.6.7/src/nemo-directory-view-ui-light.xml nemo-2.8.6/src/nemo-directory-view-ui-light.xml --- nemo-2.6.7/src/nemo-directory-view-ui-light.xml 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-directory-view-ui-light.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru nemo-2.6.7/src/nemo-extension-config-widget.c nemo-2.8.6/src/nemo-extension-config-widget.c --- nemo-2.6.7/src/nemo-extension-config-widget.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-extension-config-widget.c 2015-11-27 10:00:22.000000000 +0000 @@ -7,12 +7,12 @@ #include #include "nemo-extension-config-widget.h" #include "nemo-application.h" +#include "nemo-global-preferences.h" #include G_DEFINE_TYPE (NemoExtensionConfigWidget, nemo_extension_config_widget, NEMO_TYPE_CONFIG_BASE_WIDGET); -#define BLACKLIST_KEY "disabled-extensions" typedef struct { NemoExtensionConfigWidget *widget; @@ -34,7 +34,8 @@ update_restart_visiblity (NemoExtensionConfigWidget *widget) { GList *tmp = g_list_copy (widget->initial_extension_ids); - gchar **new_settings = g_settings_get_strv (widget->settings, BLACKLIST_KEY); + gchar **new_settings = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS); gboolean needs_restart = FALSE; @@ -87,7 +88,8 @@ { gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - gchar **blacklist = g_settings_get_strv (proxy->widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS); GPtrArray *new_list = g_ptr_array_new (); @@ -111,9 +113,11 @@ gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_signal_handler_block (proxy->widget->settings, proxy->widget->bl_handler); - g_settings_set_strv (proxy->widget->settings, BLACKLIST_KEY, (const gchar * const *)new_list_ptr); - g_signal_handler_unblock (proxy->widget->settings, proxy->widget->bl_handler); + g_signal_handler_block (nemo_plugin_preferences, proxy->widget->bl_handler); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS, + (const gchar * const *)new_list_ptr); + g_signal_handler_unblock (nemo_plugin_preferences, proxy->widget->bl_handler); update_restart_visiblity (proxy->widget); @@ -197,9 +201,11 @@ gtk_widget_show_all (empty_row); gtk_container_add (GTK_CONTAINER (NEMO_CONFIG_BASE_WIDGET (widget)->listbox), empty_row); + gtk_widget_set_sensitive (GTK_WIDGET (NEMO_CONFIG_BASE_WIDGET (widget)->listbox), FALSE); } else { GList *l; - gchar **blacklist = g_settings_get_strv (widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS); for (l = widget->current_extensions; l != NULL; l=l->next) { ExtensionProxy *proxy = l->data; @@ -262,7 +268,9 @@ static void on_enable_clicked (GtkWidget *button, NemoExtensionConfigWidget *widget) { - g_settings_set_strv (widget->settings, BLACKLIST_KEY, NULL); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS, + NULL); } static void @@ -278,7 +286,9 @@ g_ptr_array_add (new_list, NULL); gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_settings_set_strv (widget->settings, BLACKLIST_KEY, (const gchar * const *) new_list_ptr); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS, + (const gchar * const *) new_list_ptr); g_strfreev (new_list_ptr); } @@ -307,8 +317,7 @@ g_list_free_full (widget->initial_extension_ids, (GDestroyNotify) g_free); - g_signal_handler_disconnect (widget->settings, widget->bl_handler); - g_clear_object (&widget->settings); + g_signal_handler_disconnect (nemo_plugin_preferences, widget->bl_handler); G_OBJECT_CLASS (nemo_extension_config_widget_parent_class)->finalize (object); } @@ -328,8 +337,8 @@ self->current_extensions = NULL; self->initial_extension_ids = NULL; - self->settings = g_settings_new ("org.nemo.plugins"); - self->bl_handler = g_signal_connect (self->settings, "changed::" BLACKLIST_KEY, + self->bl_handler = g_signal_connect (nemo_plugin_preferences, + "changed::" NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS, G_CALLBACK (on_settings_changed), self); GtkWidget *label = nemo_config_base_widget_get_label (NEMO_CONFIG_BASE_WIDGET (self)); @@ -360,7 +369,8 @@ g_signal_connect (NEMO_CONFIG_BASE_WIDGET (self)->listbox, "row-activated", G_CALLBACK (on_row_activated), self); - gchar **init_settings = g_settings_get_strv (self->settings, BLACKLIST_KEY); + gchar **init_settings = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_EXTENSIONS); int i; for (i = 0; i < g_strv_length (init_settings); i++) { self->initial_extension_ids = g_list_append (self->initial_extension_ids, g_strdup (init_settings[i])); diff -Nru nemo-2.6.7/src/nemo-extension-config-widget.h nemo-2.8.6/src/nemo-extension-config-widget.h --- nemo-2.6.7/src/nemo-extension-config-widget.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-extension-config-widget.h 2015-11-27 10:00:22.000000000 +0000 @@ -33,7 +33,6 @@ GList *current_extensions; GList *initial_extension_ids; - GSettings *settings; gulong bl_handler; }; diff -Nru nemo-2.6.7/src/nemo-file-management-properties.c nemo-2.8.6/src/nemo-file-management-properties.c --- nemo-2.6.7/src/nemo-file-management-properties.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-file-management-properties.c 2015-11-27 10:00:22.000000000 +0000 @@ -53,6 +53,7 @@ #define NEMO_FILE_MANAGEMENT_PROPERTIES_SIZE_PREFIXES_WIDGET "size_prefixes_combobox" /* bool preferences */ +#define NEMO_FILE_MANAGEMENT_QUICK_RENAMES_WITH_PAUSE_IN_BETWEEN "quick_renames_with_pause_in_between" #define NEMO_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET "sort_folders_first_checkbutton" #define NEMO_FILE_MANAGEMENT_PROPERTIES_COMPACT_LAYOUT_WIDGET "compact_layout_checkbutton" #define NEMO_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET "labels_beside_icons_checkbutton" @@ -99,7 +100,7 @@ #define NEMO_FILE_MANAGEMENT_PROPERTIES_TOOLTIP_ACCESS_DATE_WIDGET "tt_show_created_date_checkbutton" #define NEMO_FILE_MANAGEMENT_PROPERTIES_TOOLTIP_FULL_PATH_WIDGET "tt_show_full_path_checkbutton" -#define NEMO_FILE_MANAGEMENT_PROPERTIES_NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS_WIDGET "context_menus_show_all_actions_checkbutton" +#define NEMO_FILE_MANAGEMENT_PROPERTIES_NEMO_PREFERENCES_SKIP_FILE_OP_QUEUE_WIDGET "skip_file_op_queue_checkbutton" /* int enums */ #define NEMO_FILE_MANAGEMENT_PROPERTIES_THUMBNAIL_LIMIT_WIDGET "preview_image_size_combobox" @@ -737,6 +738,29 @@ } +/* When single click radio button is selected, checkbox for quick renames should get unselected and disable to avoid annoying features */ +static void +setup_quick_renames (GtkBuilder *builder) +{ + gboolean enabled = FALSE; + enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (W (click_behavior_components[1]))); + if(enabled==FALSE){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(W (NEMO_FILE_MANAGEMENT_QUICK_RENAMES_WITH_PAUSE_IN_BETWEEN)), FALSE); + } + gtk_widget_set_sensitive (GTK_WIDGET (W (NEMO_FILE_MANAGEMENT_QUICK_RENAMES_WITH_PAUSE_IN_BETWEEN)), enabled); +} + +static void +connect_quick_renames (GtkBuilder *builder) +{ + GtkRadioButton *w; + w=GTK_RADIO_BUTTON(W(click_behavior_components[0])); + g_signal_connect_swapped (w, "toggled", G_CALLBACK (setup_quick_renames), builder); + + w=GTK_RADIO_BUTTON(W(click_behavior_components[1])); + g_signal_connect_swapped (w, "toggled", G_CALLBACK (setup_quick_renames), builder); +} + static void nemo_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow *window) { @@ -808,13 +832,13 @@ bind_builder_bool (builder, nemo_preferences, NEMO_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET, NEMO_PREFERENCES_SORT_DIRECTORIES_FIRST); + bind_builder_bool(builder, nemo_preferences, + NEMO_FILE_MANAGEMENT_QUICK_RENAMES_WITH_PAUSE_IN_BETWEEN, + NEMO_PREFERENCES_CLICK_TO_RENAME); bind_builder_bool_inverted (builder, nemo_preferences, NEMO_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_BROWSER_WIDGET, NEMO_PREFERENCES_ALWAYS_USE_BROWSER); bind_builder_bool (builder, nemo_preferences, - NEMO_FILE_MANAGEMENT_PROPERTIES_NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS_WIDGET, - NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS); - bind_builder_bool (builder, nemo_preferences, NEMO_FILE_MANAGEMENT_PROPERTIES_TRASH_CONFIRM_WIDGET, NEMO_PREFERENCES_CONFIRM_TRASH); bind_builder_bool (builder, nemo_preferences, @@ -955,9 +979,17 @@ NEMO_FILE_MANAGEMENT_PROPERTIES_TOOLTIP_FULL_PATH_WIDGET, NEMO_PREFERENCES_TOOLTIP_FULL_PATH); + bind_builder_bool (builder, nemo_preferences, + NEMO_FILE_MANAGEMENT_PROPERTIES_NEMO_PREFERENCES_SKIP_FILE_OP_QUEUE_WIDGET, + NEMO_PREFERENCES_NEVER_QUEUE_FILE_OPS); + setup_tooltip_items (builder); connect_tooltip_items (builder); + /* to make checkbox for quickrenames get disabled when single click is selected */ + setup_quick_renames(builder); + connect_quick_renames(builder); + nemo_file_management_properties_dialog_setup_icon_caption_page (builder); nemo_file_management_properties_dialog_setup_list_column_page (builder); diff -Nru nemo-2.6.7/src/nemo-file-management-properties.glade nemo-2.8.6/src/nemo-file-management-properties.glade --- nemo-2.6.7/src/nemo-file-management-properties.glade 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-file-management-properties.glade 2015-11-27 10:00:22.000000000 +0000 @@ -1031,6 +1031,23 @@ + + Click twice with a pause in between to rename items + True + True + False + True + 0 + True + + + False + False + 3 + 2 + + + Open each _folder in its own window True @@ -1044,7 +1061,7 @@ False False 3 - 2 + 3 @@ -1061,7 +1078,7 @@ False False 3 - 3 + 4 @@ -1078,7 +1095,24 @@ False False 3 - 4 + 5 + + + + + Disable file operation queueing + True + True + False + True + 0 + True + + + False + False + 3 + 6 @@ -1719,7 +1753,7 @@ False True - 0 + 2 @@ -1730,7 +1764,7 @@ False True - 1 + 3 @@ -1802,7 +1836,7 @@ False False - 2 + 4 @@ -1813,7 +1847,7 @@ False True - 3 + 5 @@ -1877,7 +1911,18 @@ False True - 4 + 6 + + + + + True + False + + + False + True + 7 @@ -1956,18 +2001,7 @@ False False - 4 - - - - - True - False - - - False - True - 5 + 8 @@ -1978,7 +2012,7 @@ False True - 7 + 9 @@ -2042,7 +2076,7 @@ False False - 8 + 10 @@ -2053,7 +2087,7 @@ False True - 9 + 11 @@ -2121,81 +2155,6 @@ - - - - False - False - 1 - - - - - False - True - 10 - - - - - True - False - - - False - True - 11 - - - - - True - False - 6 - vertical - 6 - - - True - False - 0 - <b>Context Menus</b> - True - - - False - False - 0 - - - - - True - False - 40 - - - True - False - vertical - 6 - - - Show all available actions in context menus (restart Nemo if you change this option) - True - True - False - True - 0 - True - - - False - False - 0 - - - diff -Nru nemo-2.6.7/src/nemo.gresource.xml nemo-2.8.6/src/nemo.gresource.xml --- nemo-2.6.7/src/nemo.gresource.xml 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo.gresource.xml 2015-11-27 10:00:22.000000000 +0000 @@ -5,7 +5,6 @@ nemo-file-management-properties.glade nemo-icon-view-ui.xml nemo-directory-view-ui.xml - nemo-directory-view-ui-light.xml nemo-desktop-icon-view-ui.xml nemo-list-view-ui.xml nemo-shell-ui.xml diff -Nru nemo-2.6.7/src/nemo-icon-view.c nemo-2.8.6/src/nemo-icon-view.c --- nemo-2.6.7/src/nemo-icon-view.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-icon-view.c 2015-11-27 10:00:22.000000000 +0000 @@ -177,6 +177,7 @@ NemoZoomLevel new_level, gboolean always_emit); static void nemo_icon_view_update_click_mode (NemoIconView *icon_view); +static void nemo_icon_view_update_click_to_rename_mode (NemoIconView *icon_view); static void nemo_icon_view_set_directory_tighter_layout (NemoIconView *icon_view, NemoFile *file, gboolean tighter_layout); @@ -2097,9 +2098,17 @@ static void nemo_icon_view_click_policy_changed (NemoView *directory_view) { - g_assert (NEMO_IS_ICON_VIEW (directory_view)); + g_assert (NEMO_IS_ICON_VIEW (directory_view)); - nemo_icon_view_update_click_mode (NEMO_ICON_VIEW (directory_view)); + nemo_icon_view_update_click_mode (NEMO_ICON_VIEW (directory_view)); +} + +static void +nemo_icon_view_click_to_rename_mode_changed (NemoView *directory_view) +{ + g_assert (NEMO_IS_ICON_VIEW (directory_view)); + + nemo_icon_view_update_click_to_rename_mode (NEMO_ICON_VIEW (directory_view)); } static void @@ -2302,6 +2311,22 @@ click_mode == NEMO_CLICK_POLICY_SINGLE); } +static void +nemo_icon_view_update_click_to_rename_mode (NemoIconView *icon_view) +{ + NemoIconContainer *icon_container; + gboolean enabled; + + icon_container = get_icon_container (icon_view); + g_assert (icon_container != NULL); + + enabled = g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_CLICK_TO_RENAME); + + nemo_icon_container_set_click_to_rename_enabled (icon_container, + enabled); +} + + static gboolean get_stored_layout_timestamp (NemoIconContainer *container, NemoIconData *icon_data, @@ -2455,6 +2480,7 @@ GTK_WIDGET (icon_container)); nemo_icon_view_update_click_mode (icon_view); + nemo_icon_view_update_click_to_rename_mode (icon_view); gtk_widget_show (GTK_WIDGET (icon_container)); @@ -2671,6 +2697,7 @@ nemo_view_class->zoom_to_level = nemo_icon_view_zoom_to_level; nemo_view_class->get_zoom_level = nemo_icon_view_get_zoom_level; nemo_view_class->click_policy_changed = nemo_icon_view_click_policy_changed; + nemo_view_class->click_to_rename_mode_changed = nemo_icon_view_click_to_rename_mode_changed; nemo_view_class->merge_menus = nemo_icon_view_merge_menus; nemo_view_class->unmerge_menus = nemo_icon_view_unmerge_menus; nemo_view_class->sort_directories_first_changed = nemo_icon_view_sort_directories_first_changed; diff -Nru nemo-2.6.7/src/nemo-interesting-folder-bar.c nemo-2.8.6/src/nemo-interesting-folder-bar.c --- nemo-2.6.7/src/nemo-interesting-folder-bar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-interesting-folder-bar.c 2015-11-27 10:00:22.000000000 +0000 @@ -29,6 +29,7 @@ #include #include #include +#include #define NEMO_INTERESTING_FOLDER_BAR_GET_PRIVATE(o)\ (G_TYPE_INSTANCE_GET_PRIVATE ((o), NEMO_TYPE_INTERESTING_FOLDER_BAR, NemoInterestingFolderBarPrivate)) @@ -209,7 +210,7 @@ gchar *path = NULL; GFile *tmp_loc = NULL; - path = g_build_filename (g_get_user_data_dir (), "nemo", "actions", NULL); + path = nemo_action_manager_get_user_directory_path (); tmp_loc = g_file_new_for_path (path); if (g_file_equal (location, tmp_loc)) { @@ -220,7 +221,7 @@ g_free (path); g_object_unref (tmp_loc); - path = g_build_filename (g_get_user_data_dir (), "nemo", "scripts", NULL); + path = nemo_get_scripts_directory_path (); tmp_loc = g_file_new_for_path (path); if (g_file_equal (location, tmp_loc)) @@ -231,4 +232,4 @@ g_object_unref (tmp_loc); return type == TYPE_NONE_FOLDER ? NULL : nemo_interesting_folder_bar_new (view, type); -} \ No newline at end of file +} diff -Nru nemo-2.6.7/src/nemo-list-view.c nemo-2.8.6/src/nemo-list-view.c --- nemo-2.6.7/src/nemo-list-view.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-list-view.c 2015-11-27 10:00:22.000000000 +0000 @@ -91,6 +91,7 @@ int drag_x; int drag_y; + gboolean rename_on_release; gboolean drag_started; gboolean ignore_button_release; gboolean row_selected_on_button_down; @@ -112,6 +113,8 @@ gboolean tooltip_flags; gboolean show_tooltips; + + gboolean click_to_rename; }; struct SelectionForeachData { @@ -150,6 +153,10 @@ GError *error, gpointer callback_data); +static void nemo_list_view_start_renaming_file (NemoView *view, + NemoFile *file, + gboolean select_all); + static void apply_columns_settings (NemoListView *list_view, char **column_order, char **visible_columns); @@ -197,6 +204,7 @@ "name", "size", "type", + "detailed_type", "date_modified", "date_accessed", "trashed_on", @@ -391,9 +399,17 @@ activate_selected_items_alternate (view, NULL, TRUE); } } + + if (view->details->rename_on_release) { + NemoFile *file = nemo_list_model_file_for_path (view->details->model, path); + nemo_list_view_start_renaming_file (NEMO_VIEW (view), file, FALSE); + nemo_file_unref (file); + view->details->rename_on_release = FALSE; + } + gtk_tree_path_free (path); } - + } static void @@ -758,6 +774,186 @@ } static gboolean +clicked_on_text_in_name_cell (NemoListView *view, GtkTreePath *path, GdkEventButton *event) +{ + gboolean ret = FALSE; + + NemoListViewDetails *details = view->details; + int x_col_offset, x_cell_offset, width, expander_size, horizontal_separator, expansion_offset; + + x_col_offset = gtk_tree_view_column_get_x_offset (details->file_name_column); + + gtk_tree_view_column_cell_get_position (details->file_name_column, + GTK_CELL_RENDERER (details->file_name_cell), + &x_cell_offset, &width); + + gtk_widget_style_get (GTK_WIDGET (details->tree_view), + "expander-size", &expander_size, + "horizontal-separator", &horizontal_separator, + NULL); + + expander_size += 4; + expansion_offset = ((horizontal_separator / 2) + gtk_tree_path_get_depth (path) * expander_size); + + ret = (event->x > (expansion_offset + x_col_offset + x_cell_offset) && + event->x < (x_col_offset + x_cell_offset + width)) && + !gtk_tree_view_is_blank_at_pos (GTK_TREE_VIEW (view->details->tree_view), + event->x, event->y, + NULL, NULL, NULL, NULL); + + return ret; +} + +static gboolean +clicked_within_double_click_interval (NemoListView *view) +{ + static gint64 last_click_time = 0; + static int click_count = 0; + + gint64 current_time; + gint interval; + + /* fetch system double-click time */ + g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (view))), + "gtk-double-click-time", &interval, + NULL); + + current_time = eel_get_system_time (); + if (current_time - last_click_time < interval * 1000) { + click_count++; + } else { + click_count = 0; + } + + /* Stash time for next compare */ + last_click_time = current_time; + + /* Only allow double click */ + if (click_count == 1) { + click_count = 0; + return TRUE; + } else { + return FALSE; + } +} + +static gboolean +clicked_within_slow_click_interval_on_text (NemoListView *view, GtkTreePath *path, GdkEventButton *event) +{ + static gint64 last_slow_click_time = 0; + static gint slow_click_count = 0; + gint64 current_time; + gint interval; + gint double_click_interval; + + /* fetch system double-click time */ + g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (view))), + "gtk-double-click-time", &double_click_interval, + NULL); + + /* slow click interval is always 2 seconds longer than the system + * double-click interval. */ + + interval = double_click_interval + 2000; + + current_time = eel_get_system_time (); + if (current_time - last_slow_click_time < interval * 1000) { + slow_click_count = 1; + } else { + slow_click_count = 0; + } + + /* Stash time for next compare */ + last_slow_click_time = current_time; + + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->details->tree_view)); + + GList *selected = gtk_tree_selection_get_selected_rows (selection, NULL); + gint selected_count = g_list_length (selected); + g_list_free (selected); + + if (selected_count != 1) + return FALSE; + + /* Only allow second click on text to trigger this */ + if (slow_click_count == 1 && view->details->double_click_path[1] && + gtk_tree_path_compare (view->details->double_click_path[0], view->details->double_click_path[1]) == 0 && + clicked_on_text_in_name_cell (view, path, event)) { + slow_click_count = 0; + + return TRUE; + } else { + return FALSE; + } +} + +static gboolean +handle_icon_double_click (NemoListView *view, GtkTreePath *path, GdkEventButton *event, gboolean on_expander) +{ + GtkWidgetClass *tree_view_class; + tree_view_class = GTK_WIDGET_GET_CLASS (view->details->tree_view); + + /* Ignore double click if we are in single click mode */ + if (get_click_policy () == NEMO_CLICK_POLICY_SINGLE) { + return FALSE; + } + + if (clicked_within_double_click_interval (view) && + view->details->double_click_path[1] && + gtk_tree_path_compare (view->details->double_click_path[0], view->details->double_click_path[1]) == 0 && + !on_expander) { + /* NOTE: Activation can actually destroy the view if we're switching */ + if (!button_event_modifies_selection (event)) { + if ((event->button == 1 || event->button == 3)) { + activate_selected_items (view); + } else if (event->button == 2) { + activate_selected_items_alternate (view, NULL, TRUE); + } + + return TRUE; + } else if (event->button == 1 && + (event->state & GDK_SHIFT_MASK) != 0) { + NemoFile *file; + file = nemo_list_model_file_for_path (view->details->model, path); + if (file != NULL) { + activate_selected_items_alternate (view, file, TRUE); + nemo_file_unref (file); + } + + return TRUE; + } + } + + return FALSE; +} + +static gboolean +handle_icon_slow_two_click (NemoListView *view, GtkTreePath *path, GdkEventButton *event) +{ + NemoListViewDetails *details; + NemoFile *file; + gboolean can_rename; + + details = view->details; + + if (!details->click_to_rename) + return FALSE; + + file = nemo_list_model_file_for_path (view->details->model, path); + can_rename = nemo_file_can_rename (file); + nemo_file_unref (file); + + if (!can_rename) + return FALSE; + + if (clicked_within_slow_click_interval_on_text (view, path, event) && !button_event_modifies_selection (event)) { + return TRUE; + } + + return FALSE; +} + +static gboolean button_press_callback (GtkWidget *widget, GdkEventButton *event, gpointer callback_data) { NemoListView *view; @@ -766,10 +962,7 @@ gboolean call_parent; GtkTreeSelection *selection; GtkWidgetClass *tree_view_class; - gint64 current_time; - static gint64 last_click_time = 0; - static int click_count = 0; - int double_click_time; + int expander_size, horizontal_separator; gboolean on_expander; gboolean blank_click; @@ -785,6 +978,10 @@ return FALSE; } + if (event->type == GDK_2BUTTON_PRESS) { + return TRUE; + } + if (event->window != gtk_tree_view_get_bin_window (tree_view)) { return FALSE; } @@ -800,26 +997,6 @@ tree_view, event->x, event->y); - g_object_get (G_OBJECT (gtk_widget_get_settings (widget)), - "gtk-double-click-time", &double_click_time, - NULL); - - /* Determine click count */ - current_time = eel_get_system_time (); - if (current_time - last_click_time < double_click_time * 1000) { - click_count++; - } else { - click_count = 0; - } - - /* Stash time for next compare */ - last_click_time = current_time; - - /* Ignore double click if we are in single click mode */ - if (get_click_policy () == NEMO_CLICK_POLICY_SINGLE && click_count >= 2) { - return TRUE; - } - view->details->ignore_button_release = FALSE; call_parent = TRUE; @@ -846,33 +1023,17 @@ view->details->double_click_path[1] = view->details->double_click_path[0]; view->details->double_click_path[0] = gtk_tree_path_copy (path); } - if (event->type == GDK_2BUTTON_PRESS) { + + if (handle_icon_double_click (view, path, event, on_expander)) { /* Double clicking does not trigger a D&D action. */ view->details->drag_button = 0; - if (view->details->double_click_path[1] && - gtk_tree_path_compare (view->details->double_click_path[0], view->details->double_click_path[1]) == 0 && - !on_expander) { - /* NOTE: Activation can actually destroy the view if we're switching */ - if (!button_event_modifies_selection (event)) { - if ((event->button == 1 || event->button == 3)) { - activate_selected_items (view); - } else if (event->button == 2) { - activate_selected_items_alternate (view, NULL, TRUE); - } - } else if (event->button == 1 && - (event->state & GDK_SHIFT_MASK) != 0) { - NemoFile *file; - file = nemo_list_model_file_for_path (view->details->model, path); - if (file != NULL) { - activate_selected_items_alternate (view, file, TRUE); - nemo_file_unref (file); - } - } - } else { - tree_view_class->button_press_event (widget, event); - } + } else { - + /* queue up renaming if we've clicked within the slow-click timeframe. Don't actually + do it, however, until there's a button release (this allows dragging to occur on + single items, without triggering rename) */ + view->details->rename_on_release = handle_icon_slow_two_click (view, path, event); + /* We're going to filter out some situations where * we can't let the default code run because all * but one row would be would be deselected. We don't @@ -1363,8 +1524,7 @@ gpointer user_data) { NemoListView *view = user_data; - - view->details->editable_widget = NULL; + g_clear_object (&view->details->editable_widget); nemo_view_set_is_renaming (NEMO_VIEW (view), FALSE); nemo_view_unfreeze_updates (NEMO_VIEW (view)); @@ -1399,8 +1559,7 @@ cell_renderer_editing_canceled (GtkCellRendererText *cell, NemoListView *view) { - view->details->editable_widget = NULL; - + view->details->editable_widget = NULL; nemo_view_set_is_renaming (NEMO_VIEW (view), FALSE); nemo_view_unfreeze_updates (NEMO_VIEW (view)); } @@ -3203,6 +3362,19 @@ } static void +nemo_list_view_click_to_rename_mode_changed (NemoView *directory_view) +{ + NemoListView *view; + + g_assert (NEMO_IS_LIST_VIEW (directory_view)); + + view = NEMO_LIST_VIEW (directory_view); + + view->details->click_to_rename = g_settings_get_boolean (nemo_preferences, + NEMO_PREFERENCES_CLICK_TO_RENAME); +} + +static void nemo_list_view_click_policy_changed (NemoView *directory_view) { GdkWindow *win; @@ -3554,6 +3726,7 @@ nemo_view_class->get_view_id = nemo_list_view_get_id; nemo_view_class->get_first_visible_file = nemo_list_view_get_first_visible_file; nemo_view_class->scroll_to_file = list_view_scroll_to_file; + nemo_view_class->click_to_rename_mode_changed = nemo_list_view_click_to_rename_mode_changed; } static void @@ -3612,6 +3785,7 @@ tooltip_prefs_changed_callback (list_view); nemo_list_view_click_policy_changed (NEMO_VIEW (list_view)); + nemo_list_view_click_to_rename_mode_changed (NEMO_VIEW (list_view)); nemo_list_view_sort_directories_first_changed (NEMO_VIEW (list_view)); diff -Nru nemo-2.6.7/src/nemo-mime-actions.c nemo-2.8.6/src/nemo-mime-actions.c --- nemo-2.6.7/src/nemo-mime-actions.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-mime-actions.c 2015-11-27 10:00:22.000000000 +0000 @@ -1536,8 +1536,7 @@ uri = nemo_file_get_activation_uri (file); f = g_file_new_for_uri (uri); - nemo_window_slot_open_location (parameters->slot, - f, flags, NULL); + nemo_window_slot_open_location (parameters->slot, f, flags); g_object_unref (f); g_free (uri); } diff -Nru nemo-2.6.7/src/nemo-navigation-action.c nemo-2.8.6/src/nemo-navigation-action.c --- nemo-2.6.7/src/nemo-navigation-action.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-navigation-action.c 2015-11-27 10:00:22.000000000 +0000 @@ -57,22 +57,6 @@ PROP_WINDOW }; -static gboolean -should_open_in_new_tab (void) -{ - /* FIXME this is duplicated */ - GdkEvent *event; - - event = gtk_get_current_event (); - if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) { - return event->button.button == 2; - } - - gdk_event_free (event); - - return FALSE; -} - static void activate_back_or_forward_menu_item (GtkMenuItem *menu_item, NemoWindow *window, @@ -84,7 +68,7 @@ index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "user_data")); - nemo_window_back_or_forward (window, back, index, should_open_in_new_tab ()); + nemo_window_back_or_forward (window, back, index, nemo_event_get_window_open_flags ()); } static void @@ -237,14 +221,10 @@ connect_proxy (GtkAction *action, GtkWidget *proxy) { - GtkWidget *button; - - if (GTK_IS_BUTTON (proxy)) { - button = GTK_BUTTON (proxy); - - g_signal_connect (button, "button-press-event", + if (GTK_IS_BUTTON (proxy)) { + g_signal_connect (proxy, "button-press-event", G_CALLBACK (tool_button_press_cb), action); - g_signal_connect (button, "button-release-event", + g_signal_connect (proxy, "button-release-event", G_CALLBACK (tool_button_release_cb), action); } @@ -255,17 +235,13 @@ disconnect_proxy (GtkAction *action, GtkWidget *proxy) { - GtkWidget *button; - if (GTK_IS_BUTTON (proxy)) { - button = GTK_BUTTON (proxy); - /* remove any possible timeout going on */ unschedule_menu_popup_timeout (NEMO_NAVIGATION_ACTION (action)); - g_signal_handlers_disconnect_by_func (button, + g_signal_handlers_disconnect_by_func (proxy, G_CALLBACK (tool_button_press_cb), action); - g_signal_handlers_disconnect_by_func (button, + g_signal_handlers_disconnect_by_func (proxy, G_CALLBACK (tool_button_release_cb), action); } diff -Nru nemo-2.6.7/src/nemo-pathbar.c nemo-2.8.6/src/nemo-pathbar.c --- nemo-2.6.7/src/nemo-pathbar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-pathbar.c 2015-11-27 10:00:22.000000000 +0000 @@ -68,8 +68,6 @@ #define NEMO_PATH_BAR_ICON_SIZE 16 #define NEMO_PATH_BAR_BUTTON_MAX_WIDTH 250 -typedef struct _ButtonData ButtonData; - /* * Content of pathbar->button_list: * <- next previous -> @@ -80,8 +78,7 @@ * scrolled_root_button */ -struct _ButtonData -{ +typedef struct { GtkWidget *button; ButtonType type; char *dir_name; @@ -102,6 +99,46 @@ GtkWidget *alignment; guint ignore_changes : 1; guint fake_root : 1; +} ButtonData; + +struct _NemoPathBarDetails { + GtkContainer parent; + + GdkWindow *event_window; + + GFile *root_path; + GFile *home_path; + GFile *desktop_path; + + /** XDG Dirs */ + GFile *xdg_documents_path; + GFile *xdg_download_path; + GFile *xdg_music_path; + GFile *xdg_pictures_path; + GFile *xdg_public_path; + GFile *xdg_templates_path; + GFile *xdg_videos_path; + + GFile *current_path; + gpointer current_button_data; + + GList *button_list; + GList *scrolled_root_button; + GList *fake_root; + GtkWidget *up_slider_button; + GtkWidget *down_slider_button; + guint settings_signal_id; + gint icon_size; + gint16 slider_width; + gint16 spacing; + gint16 button_offset; + guint timer; + guint slider_visible : 1; + guint need_timer : 1; + guint ignore_click : 1; + + unsigned int drag_slider_timeout; + gboolean drag_slider_timeout_for_up_button; }; G_DEFINE_TYPE (NemoPathBar, nemo_path_bar, @@ -152,7 +189,7 @@ GList *list; GFile *path = NULL; - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { ButtonData *button_data; button_data = BUTTON_DATA (list->data); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button_data->button))) { @@ -174,11 +211,11 @@ path_bar = NEMO_PATH_BAR (user_data); - g_object_unref (path_bar->desktop_path); - g_object_unref (path_bar->home_path); - path_bar->desktop_path = nemo_get_desktop_location (); - path_bar->home_path = g_file_new_for_path (g_get_home_dir ()); - desktop_is_home = g_file_equal (path_bar->home_path, path_bar->desktop_path); + g_object_unref (path_bar->priv->desktop_path); + g_object_unref (path_bar->priv->home_path); + path_bar->priv->desktop_path = nemo_get_desktop_location (); + path_bar->priv->home_path = g_file_new_for_path (g_get_home_dir ()); + desktop_is_home = g_file_equal (path_bar->priv->home_path, path_bar->priv->desktop_path); update_button_types (path_bar); } @@ -192,7 +229,7 @@ GList *list; file = g_file_new_for_uri ("trash:///"); - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { ButtonData *button_data; button_data = BUTTON_DATA (list->data); if (g_file_equal (file, button_data->path)) { @@ -217,10 +254,10 @@ path_bar = NEMO_PATH_BAR (user_data); - path_bar->drag_slider_timeout = 0; + path_bar->priv->drag_slider_timeout = 0; if (gtk_widget_get_visible (GTK_WIDGET (path_bar))) { - if (path_bar->drag_slider_timeout_for_up_button) { + if (path_bar->priv->drag_slider_timeout_for_up_button) { nemo_path_bar_scroll_up (path_bar); } else { nemo_path_bar_scroll_down (path_bar); @@ -244,17 +281,17 @@ path_bar = NEMO_PATH_BAR (user_data); - if (path_bar->drag_slider_timeout == 0) { + if (path_bar->priv->drag_slider_timeout == 0) { settings = gtk_widget_get_settings (widget); g_object_get (settings, "gtk-timeout-expand", &timeout, NULL); - path_bar->drag_slider_timeout = + path_bar->priv->drag_slider_timeout = g_timeout_add (timeout, slider_timeout, path_bar); - path_bar->drag_slider_timeout_for_up_button = - widget == path_bar->up_slider_button; + path_bar->priv->drag_slider_timeout_for_up_button = + widget == path_bar->priv->up_slider_button; } } @@ -268,9 +305,9 @@ path_bar = NEMO_PATH_BAR (user_data); - if (path_bar->drag_slider_timeout != 0) { - g_source_remove (path_bar->drag_slider_timeout); - path_bar->drag_slider_timeout = 0; + if (path_bar->priv->drag_slider_timeout != 0) { + g_source_remove (path_bar->priv->drag_slider_timeout); + path_bar->priv->drag_slider_timeout = 0; } } @@ -298,60 +335,62 @@ { char *p; + path_bar->priv = G_TYPE_INSTANCE_GET_PRIVATE (path_bar, NEMO_TYPE_PATH_BAR, NemoPathBarDetails); + gtk_widget_set_has_window (GTK_WIDGET (path_bar), FALSE); gtk_widget_set_redraw_on_allocate (GTK_WIDGET (path_bar), FALSE); - path_bar->up_slider_button = get_slider_button (path_bar, GTK_ARROW_LEFT); - path_bar->down_slider_button = get_slider_button (path_bar, GTK_ARROW_RIGHT); - path_bar->icon_size = NEMO_PATH_BAR_ICON_SIZE; + path_bar->priv->up_slider_button = get_slider_button (path_bar, GTK_ARROW_LEFT); + path_bar->priv->down_slider_button = get_slider_button (path_bar, GTK_ARROW_RIGHT); + path_bar->priv->icon_size = NEMO_PATH_BAR_ICON_SIZE; p = nemo_get_desktop_directory (); - path_bar->desktop_path = g_file_new_for_path (p); + path_bar->priv->desktop_path = g_file_new_for_path (p); g_free (p); - path_bar->home_path = g_file_new_for_path (g_get_home_dir ()); - path_bar->root_path = g_file_new_for_path ("/"); - path_bar->xdg_documents_path = get_xdg_dir (G_USER_DIRECTORY_DOCUMENTS); - path_bar->xdg_download_path = get_xdg_dir (G_USER_DIRECTORY_DOWNLOAD); - path_bar->xdg_music_path = get_xdg_dir (G_USER_DIRECTORY_MUSIC); - path_bar->xdg_pictures_path = get_xdg_dir (G_USER_DIRECTORY_PICTURES); - path_bar->xdg_public_path = get_xdg_dir (G_USER_DIRECTORY_PUBLIC_SHARE); - path_bar->xdg_templates_path = get_xdg_dir (G_USER_DIRECTORY_TEMPLATES); - path_bar->xdg_videos_path = get_xdg_dir (G_USER_DIRECTORY_VIDEOS); + path_bar->priv->home_path = g_file_new_for_path (g_get_home_dir ()); + path_bar->priv->root_path = g_file_new_for_path ("/"); + path_bar->priv->xdg_documents_path = get_xdg_dir (G_USER_DIRECTORY_DOCUMENTS); + path_bar->priv->xdg_download_path = get_xdg_dir (G_USER_DIRECTORY_DOWNLOAD); + path_bar->priv->xdg_music_path = get_xdg_dir (G_USER_DIRECTORY_MUSIC); + path_bar->priv->xdg_pictures_path = get_xdg_dir (G_USER_DIRECTORY_PICTURES); + path_bar->priv->xdg_public_path = get_xdg_dir (G_USER_DIRECTORY_PUBLIC_SHARE); + path_bar->priv->xdg_templates_path = get_xdg_dir (G_USER_DIRECTORY_TEMPLATES); + path_bar->priv->xdg_videos_path = get_xdg_dir (G_USER_DIRECTORY_VIDEOS); - desktop_is_home = g_file_equal (path_bar->home_path, path_bar->desktop_path); + desktop_is_home = g_file_equal (path_bar->priv->home_path, path_bar->priv->desktop_path); g_signal_connect_swapped (nemo_preferences, "changed::" NEMO_PREFERENCES_DESKTOP_IS_HOME_DIR, G_CALLBACK(desktop_location_changed_callback), path_bar); - g_signal_connect_swapped (path_bar->up_slider_button, "clicked", G_CALLBACK (nemo_path_bar_scroll_up), path_bar); - g_signal_connect_swapped (path_bar->down_slider_button, "clicked", G_CALLBACK (nemo_path_bar_scroll_down), path_bar); + g_signal_connect_swapped (path_bar->priv->up_slider_button, "clicked", G_CALLBACK (nemo_path_bar_scroll_up), path_bar); + g_signal_connect_swapped (path_bar->priv->down_slider_button, "clicked", G_CALLBACK (nemo_path_bar_scroll_down), path_bar); - g_signal_connect (path_bar->up_slider_button, "button_press_event", G_CALLBACK (nemo_path_bar_slider_button_press), path_bar); - g_signal_connect (path_bar->up_slider_button, "button_release_event", G_CALLBACK (nemo_path_bar_slider_button_release), path_bar); - g_signal_connect (path_bar->down_slider_button, "button_press_event", G_CALLBACK (nemo_path_bar_slider_button_press), path_bar); - g_signal_connect (path_bar->down_slider_button, "button_release_event", G_CALLBACK (nemo_path_bar_slider_button_release), path_bar); + g_signal_connect (path_bar->priv->up_slider_button, "button_press_event", G_CALLBACK (nemo_path_bar_slider_button_press), path_bar); + g_signal_connect (path_bar->priv->up_slider_button, "button_release_event", G_CALLBACK (nemo_path_bar_slider_button_release), path_bar); + g_signal_connect (path_bar->priv->down_slider_button, "button_press_event", G_CALLBACK (nemo_path_bar_slider_button_press), path_bar); + g_signal_connect (path_bar->priv->down_slider_button, "button_release_event", G_CALLBACK (nemo_path_bar_slider_button_release), path_bar); - gtk_drag_dest_set (GTK_WIDGET (path_bar->up_slider_button), + gtk_drag_dest_set (GTK_WIDGET (path_bar->priv->up_slider_button), 0, NULL, 0, 0); - gtk_drag_dest_set_track_motion (GTK_WIDGET (path_bar->up_slider_button), TRUE); - g_signal_connect (path_bar->up_slider_button, + gtk_drag_dest_set_track_motion (GTK_WIDGET (path_bar->priv->up_slider_button), TRUE); + g_signal_connect (path_bar->priv->up_slider_button, "drag-motion", G_CALLBACK (nemo_path_bar_slider_drag_motion), path_bar); - g_signal_connect (path_bar->up_slider_button, + g_signal_connect (path_bar->priv->up_slider_button, "drag-leave", G_CALLBACK (nemo_path_bar_slider_drag_leave), path_bar); - gtk_drag_dest_set (GTK_WIDGET (path_bar->down_slider_button), + gtk_drag_dest_set (GTK_WIDGET (path_bar->priv->down_slider_button), 0, NULL, 0, 0); - gtk_drag_dest_set_track_motion (GTK_WIDGET (path_bar->up_slider_button), TRUE); - g_signal_connect (path_bar->down_slider_button, + gtk_drag_dest_set_track_motion (GTK_WIDGET (path_bar->priv->up_slider_button), TRUE); + g_signal_connect (path_bar->priv->down_slider_button, "drag-motion", G_CALLBACK (nemo_path_bar_slider_drag_motion), path_bar); - g_signal_connect (path_bar->down_slider_button, + g_signal_connect (path_bar->priv->down_slider_button, "drag-leave", G_CALLBACK (nemo_path_bar_slider_drag_leave), path_bar); @@ -376,22 +415,19 @@ nemo_path_bar_stop_scrolling (path_bar); - if (path_bar->drag_slider_timeout != 0) { - g_source_remove (path_bar->drag_slider_timeout); - path_bar->drag_slider_timeout = 0; - } - - g_list_free (path_bar->button_list); - g_clear_object (&path_bar->root_path); - g_clear_object (&path_bar->home_path); - g_clear_object (&path_bar->desktop_path); - g_clear_object (&path_bar->xdg_documents_path); - g_clear_object (&path_bar->xdg_download_path); - g_clear_object (&path_bar->xdg_music_path); - g_clear_object (&path_bar->xdg_pictures_path); - g_clear_object (&path_bar->xdg_public_path); - g_clear_object (&path_bar->xdg_templates_path); - g_clear_object (&path_bar->xdg_videos_path); + if (path_bar->priv->drag_slider_timeout != 0) { + g_source_remove (path_bar->priv->drag_slider_timeout); + path_bar->priv->drag_slider_timeout = 0; + } + + g_list_free (path_bar->priv->button_list); + g_clear_object (&path_bar->priv->xdg_documents_path); + g_clear_object (&path_bar->priv->xdg_download_path); + g_clear_object (&path_bar->priv->xdg_music_path); + g_clear_object (&path_bar->priv->xdg_pictures_path); + g_clear_object (&path_bar->priv->xdg_public_path); + g_clear_object (&path_bar->priv->xdg_templates_path); + g_clear_object (&path_bar->priv->xdg_videos_path); g_signal_handlers_disconnect_by_func (nemo_trash_monitor_get (), trash_state_changed_cb, path_bar); @@ -407,13 +443,13 @@ remove_settings_signal (NemoPathBar *path_bar, GdkScreen *screen) { - if (path_bar->settings_signal_id) { - GtkSettings *settings; + if (path_bar->priv->settings_signal_id) { + GtkSettings *settings; - settings = gtk_settings_get_for_screen (screen); - g_signal_handler_disconnect (settings, - path_bar->settings_signal_id); - path_bar->settings_signal_id = 0; + settings = gtk_settings_get_for_screen (screen); + g_signal_handler_disconnect (settings, + path_bar->priv->settings_signal_id); + path_bar->priv->settings_signal_id = 0; } } @@ -447,7 +483,7 @@ *minimum = *natural = 0; height = 0; - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { button_data = BUTTON_DATA (list->data); gtk_widget_get_preferred_width (button_data->button, &child_min, &child_nat); gtk_widget_get_preferred_height (button_data->button, &child_height, NULL); @@ -455,9 +491,9 @@ *minimum = MAX (*minimum, child_min); *natural = MAX (*natural, child_nat); } - path_bar->slider_width = MIN (height * 2 / 3 + 5, height); - *minimum += path_bar->slider_width * 2; - *natural += path_bar->slider_width * 2; + path_bar->priv->slider_width = MIN (height * 2 / 3 + 5, height); + *minimum += path_bar->priv->slider_width * 2; + *natural += path_bar->priv->slider_width * 2; } static void @@ -474,10 +510,9 @@ *minimum = *natural = 0; - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { button_data = BUTTON_DATA (list->data); - - gtk_widget_get_preferred_height (button_data->button, &child_min, &child_nat); + gtk_widget_get_preferred_height (button_data->button, &child_min, &child_nat); *minimum = MAX (*minimum, child_min); *natural = MAX (*natural, child_nat); @@ -487,23 +522,23 @@ static void nemo_path_bar_update_slider_buttons (NemoPathBar *path_bar) { - if (path_bar->button_list) { + if (path_bar->priv->button_list) { GtkWidget *button; - button = BUTTON_DATA (path_bar->button_list->data)->button; + button = BUTTON_DATA (path_bar->priv->button_list->data)->button; if (gtk_widget_get_child_visible (button)) { - gtk_widget_set_sensitive (path_bar->down_slider_button, FALSE); + gtk_widget_set_sensitive (path_bar->priv->down_slider_button, FALSE); nemo_path_bar_stop_scrolling (path_bar); } else { - gtk_widget_set_sensitive (path_bar->down_slider_button, TRUE); + gtk_widget_set_sensitive (path_bar->priv->down_slider_button, TRUE); } - button = BUTTON_DATA (g_list_last (path_bar->button_list)->data)->button; + button = BUTTON_DATA (g_list_last (path_bar->priv->button_list)->data)->button; if (gtk_widget_get_child_visible (button)) { - gtk_widget_set_sensitive (path_bar->up_slider_button, FALSE); + gtk_widget_set_sensitive (path_bar->priv->up_slider_button, FALSE); nemo_path_bar_stop_scrolling (path_bar); } else { - gtk_widget_set_sensitive (path_bar->up_slider_button, TRUE); + gtk_widget_set_sensitive (path_bar->priv->up_slider_button, TRUE); } } } @@ -512,7 +547,7 @@ nemo_path_bar_unmap (GtkWidget *widget) { nemo_path_bar_stop_scrolling (NEMO_PATH_BAR (widget)); - gdk_window_hide (NEMO_PATH_BAR (widget)->event_window); + gdk_window_hide (NEMO_PATH_BAR (widget)->priv->event_window); GTK_WIDGET_CLASS (nemo_path_bar_parent_class)->unmap (widget); } @@ -520,7 +555,7 @@ static void nemo_path_bar_map (GtkWidget *widget) { - gdk_window_show (NEMO_PATH_BAR (widget)->event_window); + gdk_window_show (NEMO_PATH_BAR (widget)->priv->event_window); GTK_WIDGET_CLASS (nemo_path_bar_parent_class)->map (widget); } @@ -530,16 +565,16 @@ { GList *l; - if (path_bar->up_slider_button) { - gtk_style_context_invalidate (gtk_widget_get_style_context (path_bar->up_slider_button)); + if (path_bar->priv->up_slider_button) { + gtk_style_context_invalidate (gtk_widget_get_style_context (path_bar->priv->up_slider_button)); } - if (path_bar->down_slider_button) { - gtk_style_context_invalidate (gtk_widget_get_style_context (path_bar->down_slider_button)); + if (path_bar->priv->down_slider_button) { + gtk_style_context_invalidate (gtk_widget_get_style_context (path_bar->priv->down_slider_button)); } - for (l = path_bar->button_list; l; l = l->next) { + for (l = path_bar->priv->button_list; l; l = l->next) { ButtonData *data = l->data; - gtk_style_context_invalidate (gtk_widget_get_style_context (data->button)); + gtk_style_context_invalidate (gtk_widget_get_style_context (data->button)); } } @@ -572,29 +607,29 @@ gtk_widget_set_allocation (widget, allocation); if (gtk_widget_get_realized (widget)) { - gdk_window_move_resize (path_bar->event_window, + gdk_window_move_resize (path_bar->priv->event_window, allocation->x, allocation->y, allocation->width, allocation->height); } /* No path is set so we don't have to allocate anything. */ - if (path_bar->button_list == NULL) { + if (path_bar->priv->button_list == NULL) { return; } direction = gtk_widget_get_direction (widget); - gtk_widget_get_preferred_size (BUTTON_DATA (path_bar->button_list->data)->button, + gtk_widget_get_preferred_size (BUTTON_DATA (path_bar->priv->button_list->data)->button, NULL, &child_requisition); width = child_requisition.width; - for (list = path_bar->button_list->next; list; list = list->next) { + for (list = path_bar->priv->button_list->next; list; list = list->next) { child = BUTTON_DATA (list->data)->button; gtk_widget_get_preferred_size (child, NULL, &child_requisition); width += child_requisition.width; - if (list == path_bar->fake_root) { - width += path_bar->slider_width; + if (list == path_bar->priv->fake_root) { + width += path_bar->priv->slider_width; break; } } @@ -602,17 +637,17 @@ largest_width = allocation->width; if (width <= allocation->width) { - if (path_bar->fake_root) { - pathbar_root_button = path_bar->fake_root; + if (path_bar->priv->fake_root) { + pathbar_root_button = path_bar->priv->fake_root; } else { - pathbar_root_button = g_list_last (path_bar->button_list); + pathbar_root_button = g_list_last (path_bar->priv->button_list); } } else { gboolean reached_end; gint slider_space; reached_end = FALSE; need_sliders = TRUE; - slider_space = 2 * path_bar->slider_width; + slider_space = 2 * path_bar->priv->slider_width; largest_width -= slider_space; /* To see how much space we have, and how many buttons we can display. @@ -621,10 +656,10 @@ */ /* First assume, we can only display one button */ - if (path_bar->scrolled_root_button) { - pathbar_root_button = path_bar->scrolled_root_button; + if (path_bar->priv->scrolled_root_button) { + pathbar_root_button = path_bar->priv->scrolled_root_button; } else { - pathbar_root_button = path_bar->button_list; + pathbar_root_button = path_bar->priv->button_list; } /* Count down the path chain towards the end. */ @@ -636,7 +671,7 @@ /* Count down the path chain towards the end. */ list = pathbar_root_button->prev; while (list && !reached_end) { - if (list == path_bar->fake_root) { + if (list == path_bar->priv->fake_root) { break; } child = BUTTON_DATA (list->data)->button; @@ -670,7 +705,7 @@ /* Finally, we walk up, seeing how many of the previous buttons we can add*/ while (pathbar_root_button->next && ! reached_end) { - if (pathbar_root_button == path_bar->fake_root) { + if (pathbar_root_button == path_bar->priv->fake_root) { break; } child = BUTTON_DATA (pathbar_root_button->next->data)->button; @@ -711,15 +746,15 @@ if (direction == GTK_TEXT_DIR_RTL) { child_allocation.x = allocation->x + allocation->width; - if (need_sliders || path_bar->fake_root) { - child_allocation.x -= path_bar->slider_width; - up_slider_offset = allocation->width - path_bar->slider_width; + if (need_sliders || path_bar->priv->fake_root) { + child_allocation.x -= (path_bar->priv->slider_width); + up_slider_offset = allocation->width - path_bar->priv->slider_width; } } else { child_allocation.x = allocation->x; - if (need_sliders || path_bar->fake_root) { + if (need_sliders || path_bar->priv->fake_root) { up_slider_offset = 0; - child_allocation.x += path_bar->slider_width; + child_allocation.x += path_bar->priv->slider_width; } } @@ -735,12 +770,12 @@ } /* Check to see if we've don't have any more space to allocate buttons */ if (need_sliders && direction == GTK_TEXT_DIR_RTL) { - if (child_allocation.x - path_bar->slider_width < allocation->x) { + if (child_allocation.x - path_bar->priv->slider_width < allocation->x) { break; } } else { if (need_sliders && direction == GTK_TEXT_DIR_LTR) { - if (child_allocation.x + child_allocation.width + path_bar->slider_width > allocation->x + allocation->width) { + if (child_allocation.x + child_allocation.width + path_bar->priv->slider_width > allocation->x + allocation->width) { break; } } @@ -751,7 +786,7 @@ gtk_widget_size_allocate (child, &child_allocation); if (direction == GTK_TEXT_DIR_RTL) { - down_slider_offset = child_allocation.x - allocation->x - path_bar->slider_width; + down_slider_offset = child_allocation.x - allocation->x - path_bar->priv->slider_width; } else { down_slider_offset += child_allocation.width; child_allocation.x += child_allocation.width; @@ -766,7 +801,7 @@ } if (BUTTON_DATA (pathbar_root_button->data)->fake_root) { - path_bar->fake_root = pathbar_root_button; + path_bar->priv->fake_root = pathbar_root_button; } for (list = pathbar_root_button->next; list; list = list->next) { @@ -774,41 +809,41 @@ needs_reorder |= gtk_widget_get_child_visible (child) == TRUE; gtk_widget_set_child_visible (child, FALSE); if (BUTTON_DATA (list->data)->fake_root) { - path_bar->fake_root = list; + path_bar->priv->fake_root = list; } } - if (need_sliders || path_bar->fake_root) { - child_allocation.width = path_bar->slider_width; + if (need_sliders || path_bar->priv->fake_root) { + child_allocation.width = path_bar->priv->slider_width; child_allocation.x = up_slider_offset + allocation->x; - gtk_widget_size_allocate (path_bar->up_slider_button, &child_allocation); + gtk_widget_size_allocate (path_bar->priv->up_slider_button, &child_allocation); - needs_reorder |= gtk_widget_get_child_visible (path_bar->up_slider_button) == FALSE; - gtk_widget_set_child_visible (path_bar->up_slider_button, TRUE); - gtk_widget_show_all (path_bar->up_slider_button); + needs_reorder |= gtk_widget_get_child_visible (path_bar->priv->up_slider_button) == FALSE; + gtk_widget_set_child_visible (path_bar->priv->up_slider_button, TRUE); + gtk_widget_show_all (path_bar->priv->up_slider_button); if (direction == GTK_TEXT_DIR_LTR) { - down_slider_offset += path_bar->slider_width; + down_slider_offset += path_bar->priv->slider_width; } } else { - needs_reorder |= gtk_widget_get_child_visible (path_bar->up_slider_button) == TRUE; - gtk_widget_set_child_visible (path_bar->up_slider_button, FALSE); + needs_reorder |= gtk_widget_get_child_visible (path_bar->priv->up_slider_button) == TRUE; + gtk_widget_set_child_visible (path_bar->priv->up_slider_button, FALSE); } if (need_sliders) { - child_allocation.width = path_bar->slider_width; + child_allocation.width = path_bar->priv->slider_width; child_allocation.x = down_slider_offset + allocation->x; - gtk_widget_size_allocate (path_bar->down_slider_button, &child_allocation); + gtk_widget_size_allocate (path_bar->priv->down_slider_button, &child_allocation); - needs_reorder |= gtk_widget_get_child_visible (path_bar->up_slider_button) == FALSE; - gtk_widget_set_child_visible (path_bar->down_slider_button, TRUE); - gtk_widget_show_all (path_bar->down_slider_button); + needs_reorder |= gtk_widget_get_child_visible (path_bar->priv->up_slider_button) == FALSE; + gtk_widget_set_child_visible (path_bar->priv->down_slider_button, TRUE); + gtk_widget_show_all (path_bar->priv->down_slider_button); nemo_path_bar_update_slider_buttons (path_bar); } else { - needs_reorder |= gtk_widget_get_child_visible (path_bar->up_slider_button) == TRUE; - gtk_widget_set_child_visible (path_bar->down_slider_button, FALSE); - /* Reset Scrolling to have the left most folder in focus when resizing again */ - path_bar->scrolled_root_button = NULL; + needs_reorder |= gtk_widget_get_child_visible (path_bar->priv->up_slider_button) == TRUE; + gtk_widget_set_child_visible (path_bar->priv->down_slider_button, FALSE); + /* Reset Scrolling to have the left most folder in focus when resizing again */ + path_bar->priv->scrolled_root_button = NULL; } if (needs_reorder) { @@ -894,9 +929,9 @@ GDK_BUTTON_RELEASE_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y; - path_bar->event_window = gdk_window_new (gtk_widget_get_parent_window (widget), + path_bar->priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); - gdk_window_set_user_data (path_bar->event_window, widget); + gdk_window_set_user_data (path_bar->priv->event_window, widget); } static void @@ -906,9 +941,9 @@ path_bar = NEMO_PATH_BAR (widget); - gdk_window_set_user_data (path_bar->event_window, NULL); - gdk_window_destroy (path_bar->event_window); - path_bar->event_window = NULL; + gdk_window_set_user_data (path_bar->priv->event_window, NULL); + gdk_window_destroy (path_bar->priv->event_window); + path_bar->priv->event_window = NULL; GTK_WIDGET_CLASS (nemo_path_bar_parent_class)->unrealize (widget); } @@ -940,23 +975,23 @@ path_bar = NEMO_PATH_BAR (container); - if (widget == path_bar->up_slider_button) { + if (widget == path_bar->priv->up_slider_button) { nemo_path_bar_remove_1 (container, widget); - path_bar->up_slider_button = NULL; + path_bar->priv->up_slider_button = NULL; return; } - if (widget == path_bar->down_slider_button) { + if (widget == path_bar->priv->down_slider_button) { nemo_path_bar_remove_1 (container, widget); - path_bar->down_slider_button = NULL; + path_bar->priv->down_slider_button = NULL; return; } - children = path_bar->button_list; + children = path_bar->priv->button_list; while (children) { if (widget == BUTTON_DATA (children->data)->button) { nemo_path_bar_remove_1 (container, widget); - path_bar->button_list = g_list_remove_link (path_bar->button_list, children); + path_bar->priv->button_list = g_list_remove_link (path_bar->priv->button_list, children); g_list_free_1 (children); return; } @@ -976,7 +1011,7 @@ g_return_if_fail (callback != NULL); path_bar = NEMO_PATH_BAR (container); - children = path_bar->button_list; + children = path_bar->priv->button_list; while (children) { GtkWidget *child; child = BUTTON_DATA (children->data)->button; @@ -984,12 +1019,12 @@ (* callback) (child, callback_data); } - if (path_bar->up_slider_button) { - (* callback) (path_bar->up_slider_button, callback_data); + if (path_bar->priv->up_slider_button) { + (* callback) (path_bar->priv->up_slider_button, callback_data); } - if (path_bar->down_slider_button) { - (* callback) (path_bar->down_slider_button, callback_data); + if (path_bar->priv->down_slider_button) { + (* callback) (path_bar->priv->down_slider_button, callback_data); } } @@ -1033,12 +1068,12 @@ visible_children = NULL; - if (gtk_widget_get_visible (path_bar->down_slider_button) && - gtk_widget_get_child_visible (path_bar->down_slider_button)) { - visible_children = g_list_prepend (visible_children, path_bar->down_slider_button); + if (gtk_widget_get_visible (path_bar->priv->down_slider_button) && + gtk_widget_get_child_visible (path_bar->priv->down_slider_button)) { + visible_children = g_list_prepend (visible_children, path_bar->priv->down_slider_button); } - for (l = path_bar->button_list; l; l = l->next) { + for (l = path_bar->priv->button_list; l; l = l->next) { ButtonData *data = l->data; if (gtk_widget_get_visible (data->button) && @@ -1046,9 +1081,9 @@ visible_children = g_list_prepend (visible_children, data->button); } - if (gtk_widget_get_visible (path_bar->up_slider_button) && - gtk_widget_get_child_visible (path_bar->up_slider_button)) { - visible_children = g_list_prepend (visible_children, path_bar->up_slider_button); + if (gtk_widget_get_visible (path_bar->priv->up_slider_button) && + gtk_widget_get_child_visible (path_bar->priv->up_slider_button)) { + visible_children = g_list_prepend (visible_children, path_bar->priv->up_slider_button); } if (gtk_widget_get_direction (GTK_WIDGET (path_bar)) == GTK_TEXT_DIR_RTL) { @@ -1140,6 +1175,7 @@ G_TYPE_FILE); gtk_container_class_handle_border_width (container_class); + g_type_class_add_private (path_bar_class, sizeof (NemoPathBarDetails)); } static void @@ -1157,8 +1193,8 @@ down_button = NULL; up_button = NULL; - if (path_bar->ignore_click) { - path_bar->ignore_click = FALSE; + if (path_bar->priv->ignore_click) { + path_bar->priv->ignore_click = FALSE; return; } @@ -1168,21 +1204,21 @@ /* We find the button at the 'down' end, the non visible subfolder of * a visible folder, that we have to make visible */ - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { if (list->next && gtk_widget_get_child_visible (BUTTON_DATA (list->next->data)->button)) { down_button = list; break; } } - if (down_button == NULL || down_button == path_bar->button_list) { + if (down_button == NULL || down_button == path_bar->priv->button_list) { /* No Button visible or we scroll back to curren folder reset scrolling */ - path_bar->scrolled_root_button = NULL; + path_bar->priv->scrolled_root_button = NULL; return; } /* Find the last visible button on the 'up' end */ - for (list = g_list_last (path_bar->button_list); list; list = list->prev) { + for (list = g_list_last (path_bar->priv->button_list); list; list = list->prev) { if (gtk_widget_get_child_visible (BUTTON_DATA (list->data)->button)) { up_button = list; break; @@ -1191,7 +1227,7 @@ gtk_widget_get_allocation (BUTTON_DATA (down_button->data)->button, &down_button_allocation); gtk_widget_get_allocation (GTK_WIDGET (path_bar), &allocation); - gtk_widget_get_allocation (path_bar->down_slider_button, &slider_allocation); + gtk_widget_get_allocation (path_bar->priv->down_slider_button, &slider_allocation); space_needed = down_button_allocation.width; if (direction == GTK_TEXT_DIR_RTL) { @@ -1208,7 +1244,7 @@ gtk_widget_get_allocation (BUTTON_DATA (up_button->data)->button, &up_button_allocation); space_available += up_button_allocation.width; up_button = up_button->prev; - path_bar->scrolled_root_button = up_button; + path_bar->priv->scrolled_root_button = up_button; } } @@ -1217,20 +1253,20 @@ { GList *list; - if (path_bar->ignore_click) { - path_bar->ignore_click = FALSE; + if (path_bar->priv->ignore_click) { + path_bar->priv->ignore_click = FALSE; return; } gtk_widget_queue_resize (GTK_WIDGET (path_bar)); /* scroll in parent folder direction */ - for (list = g_list_last (path_bar->button_list); list; list = list->prev) { + for (list = g_list_last (path_bar->priv->button_list); list; list = list->prev) { if (list->prev && gtk_widget_get_child_visible (BUTTON_DATA (list->prev->data)->button)) { - if (list->prev == path_bar->fake_root) { - path_bar->fake_root = NULL; + if (list->prev == path_bar->priv->fake_root) { + path_bar->priv->fake_root = NULL; } - path_bar->scrolled_root_button = list; + path_bar->priv->scrolled_root_button = list; return; } } @@ -1241,19 +1277,19 @@ { gboolean retval = FALSE; - if (path_bar->timer) { - if (gtk_widget_has_focus (path_bar->up_slider_button)) { + if (path_bar->priv->timer) { + if (gtk_widget_has_focus (path_bar->priv->up_slider_button)) { nemo_path_bar_scroll_up (path_bar); - } else if (gtk_widget_has_focus (path_bar->down_slider_button)) { + } else if (gtk_widget_has_focus (path_bar->priv->down_slider_button)) { nemo_path_bar_scroll_down (path_bar); } - if (path_bar->need_timer) { - path_bar->need_timer = FALSE; - g_source_remove (path_bar->timer); - - path_bar->timer = g_timeout_add (SCROLL_TIMEOUT, - (GSourceFunc)nemo_path_bar_scroll_timeout, - path_bar); + if (path_bar->priv->need_timer) { + path_bar->priv->need_timer = FALSE; + g_source_remove (path_bar->priv->timer); + + path_bar->priv->timer = g_timeout_add (SCROLL_TIMEOUT, + (GSourceFunc)nemo_path_bar_scroll_timeout, + path_bar); } else { retval = TRUE; @@ -1266,10 +1302,10 @@ static void nemo_path_bar_stop_scrolling (NemoPathBar *path_bar) { - if (path_bar->timer) { - g_source_remove (path_bar->timer); - path_bar->timer = 0; - path_bar->need_timer = FALSE; + if (path_bar->priv->timer) { + g_source_remove (path_bar->priv->timer); + path_bar->priv->timer = 0; + path_bar->priv->need_timer = FALSE; } } @@ -1286,17 +1322,17 @@ return FALSE; } - path_bar->ignore_click = FALSE; + path_bar->priv->ignore_click = FALSE; - if (widget == path_bar->up_slider_button) { + if (widget == path_bar->priv->up_slider_button) { nemo_path_bar_scroll_up (path_bar); - } else if (widget == path_bar->down_slider_button) { + } else if (widget == path_bar->priv->down_slider_button) { nemo_path_bar_scroll_down (path_bar); } - if (!path_bar->timer) { - path_bar->need_timer = TRUE; - path_bar->timer = g_timeout_add (INITIAL_SCROLL_TIMEOUT, + if (!path_bar->priv->timer) { + path_bar->priv->need_timer = TRUE; + path_bar->priv->timer = g_timeout_add (INITIAL_SCROLL_TIMEOUT, (GSourceFunc)nemo_path_bar_scroll_timeout, path_bar); } @@ -1313,7 +1349,7 @@ return FALSE; } - path_bar->ignore_click = TRUE; + path_bar->priv->ignore_click = TRUE; nemo_path_bar_stop_scrolling (path_bar); return FALSE; @@ -1326,7 +1362,7 @@ { GList *list; - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { ButtonData *button_data; button_data = BUTTON_DATA (list->data); if (button_data->type != NORMAL_BUTTON || button_data->is_base_dir) { @@ -1336,13 +1372,6 @@ } } -static void -change_icon_theme (NemoPathBar *path_bar) -{ - path_bar->icon_size = NEMO_PATH_BAR_ICON_SIZE; - reload_icons (path_bar); -} - /* Callback used when a GtkSettings value changes */ static void settings_notify_cb (GObject *object, @@ -1353,8 +1382,8 @@ name = g_param_spec_get_name (pspec); - if (! strcmp (name, "gtk-icon-theme-name") || ! strcmp (name, "gtk-icon-sizes")) { - change_icon_theme (path_bar); + if (! strcmp (name, "gtk-icon-theme-name") || ! strcmp (name, "gtk-icon-sizes")) { + reload_icons (path_bar); } } @@ -1363,25 +1392,25 @@ { GtkSettings *settings; - if (path_bar->settings_signal_id) { + if (path_bar->priv->settings_signal_id) { return; } settings = gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (path_bar))); - path_bar->settings_signal_id = g_signal_connect (settings, "notify", G_CALLBACK (settings_notify_cb), path_bar); + path_bar->priv->settings_signal_id = g_signal_connect (settings, "notify", G_CALLBACK (settings_notify_cb), path_bar); - change_icon_theme (path_bar); + reload_icons (path_bar); } /* Public functions and their helpers */ void nemo_path_bar_clear_buttons (NemoPathBar *path_bar) { - while (path_bar->button_list != NULL) { - gtk_container_remove (GTK_CONTAINER (path_bar), BUTTON_DATA (path_bar->button_list->data)->button); + while (path_bar->priv->button_list != NULL) { + gtk_container_remove (GTK_CONTAINER (path_bar), BUTTON_DATA (path_bar->priv->button_list->data)->button); } - path_bar->scrolled_root_button = NULL; - path_bar->fake_root = NULL; + path_bar->priv->scrolled_root_button = NULL; + path_bar->priv->fake_root = NULL; } static void @@ -1399,7 +1428,7 @@ path_bar = NEMO_PATH_BAR (gtk_widget_get_parent (button)); - button_list = g_list_find (path_bar->button_list, button_data); + button_list = g_list_find (path_bar->priv->button_list, button_data); g_assert (button_list != NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); @@ -1652,36 +1681,36 @@ NemoPathBar *path_bar, GFile *location) { - if (path_bar->root_path != NULL && g_file_equal (location, path_bar->root_path)) { + if (nemo_is_root_directory (location)) { button_data->type = ROOT_BUTTON; - } else if (path_bar->home_path != NULL && g_file_equal (location, path_bar->home_path)) { + } else if (nemo_is_home_directory (location)) { button_data->type = HOME_BUTTON; button_data->fake_root = TRUE; - } else if (path_bar->desktop_path != NULL && g_file_equal (location, path_bar->desktop_path)) { + } else if (nemo_is_desktop_directory (location)) { if (!desktop_is_home) { button_data->type = DESKTOP_BUTTON; } else { button_data->type = NORMAL_BUTTON; } - } else if (path_bar->xdg_documents_path != NULL && g_file_equal (location, path_bar->xdg_documents_path)) { + } else if (path_bar->priv->xdg_documents_path != NULL && g_file_equal (location, path_bar->priv->xdg_documents_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_DOCUMENTS); - } else if (path_bar->xdg_download_path != NULL && g_file_equal (location, path_bar->xdg_download_path)) { + } else if (path_bar->priv->xdg_download_path != NULL && g_file_equal (location, path_bar->priv->xdg_download_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_DOWNLOAD); - } else if (path_bar->xdg_music_path != NULL && g_file_equal (location, path_bar->xdg_music_path)) { + } else if (path_bar->priv->xdg_music_path != NULL && g_file_equal (location, path_bar->priv->xdg_music_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_MUSIC); - } else if (path_bar->xdg_pictures_path != NULL && g_file_equal (location, path_bar->xdg_pictures_path)) { + } else if (path_bar->priv->xdg_pictures_path != NULL && g_file_equal (location, path_bar->priv->xdg_pictures_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_PICTURES); - } else if (path_bar->xdg_templates_path != NULL && g_file_equal (location, path_bar->xdg_templates_path)) { + } else if (path_bar->priv->xdg_templates_path != NULL && g_file_equal (location, path_bar->priv->xdg_templates_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_TEMPLATES); - } else if (path_bar->xdg_videos_path != NULL && g_file_equal (location, path_bar->xdg_videos_path)) { + } else if (path_bar->priv->xdg_videos_path != NULL && g_file_equal (location, path_bar->priv->xdg_videos_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_VIDEOS); - } else if (path_bar->xdg_public_path != NULL && g_file_equal (location, path_bar->xdg_public_path)) { + } else if (path_bar->priv->xdg_public_path != NULL && g_file_equal (location, path_bar->priv->xdg_public_path)) { button_data->type = XDG_BUTTON; button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_PUBLIC_SHARE); } else if (setup_file_path_mounted_mount (location, button_data, @@ -1764,10 +1793,10 @@ return; } - g_assert (path_bar->current_path != NULL); - g_assert (path_bar->current_button_data != NULL); + g_assert (path_bar->priv->current_path != NULL); + g_assert (path_bar->priv->current_button_data != NULL); - current_button_data = path_bar->current_button_data; + current_button_data = path_bar->priv->current_button_data; location = nemo_file_get_location (file); if (!g_file_equal (button_data->path, location)) { @@ -1792,13 +1821,13 @@ * If it was not below the currently displayed location, update the path bar */ child = g_file_has_prefix (button_data->path, - path_bar->current_path); + path_bar->priv->current_path); if (child) { /* moved file inside current path hierarchy */ g_object_unref (location); location = g_file_get_parent (button_data->path); - current_location = g_object_ref (path_bar->current_path); + current_location = g_object_ref (path_bar->priv->current_path); } else { /* moved current path, or file outside current path hierarchy. * Update path bar to new locations. @@ -1822,13 +1851,13 @@ if (g_file_has_prefix (location, current_location)) { /* remove this and the following buttons */ - position = g_list_position (path_bar->button_list, - g_list_find (path_bar->button_list, button_data)); + position = g_list_position (path_bar->priv->button_list, + g_list_find (path_bar->priv->button_list, button_data)); if (position != -1) { for (idx = 0; idx <= position; idx++) { gtk_container_remove (GTK_CONTAINER (path_bar), - BUTTON_DATA (path_bar->button_list->data)->button); + BUTTON_DATA (path_bar->priv->button_list->data)->button); } } } @@ -1956,7 +1985,7 @@ *current_button_data = NULL; } - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { ButtonData *button_data; button_data = list->data; @@ -1968,7 +1997,7 @@ } break; } - if (list == path_bar->fake_root) { + if (list == path_bar->priv->fake_root) { need_new_fake_root = TRUE; } } @@ -1976,26 +2005,26 @@ if (current_path) { if (need_new_fake_root) { - path_bar->fake_root = NULL; + path_bar->priv->fake_root = NULL; for (list = current_path; list; list = list->next) { ButtonData *button_data; button_data = list->data; if (list->prev != NULL && button_data->fake_root) { - path_bar->fake_root = list; + path_bar->priv->fake_root = list; break; } } } - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { nemo_path_bar_update_button_state (BUTTON_DATA (list->data), (list == current_path) ? TRUE : FALSE, gtk_widget_get_scale_factor (GTK_WIDGET (path_bar))); } if (!gtk_widget_get_child_visible (BUTTON_DATA (current_path->data)->button)) { - path_bar->scrolled_root_button = current_path; + path_bar->priv->scrolled_root_button = current_path; gtk_widget_queue_resize (GTK_WIDGET (path_bar)); } return TRUE; @@ -2049,10 +2078,10 @@ } nemo_path_bar_clear_buttons (path_bar); - path_bar->button_list = g_list_reverse (new_buttons); - path_bar->fake_root = fake_root; + path_bar->priv->button_list = g_list_reverse (new_buttons); + path_bar->priv->fake_root = fake_root; - for (l = path_bar->button_list; l; l = l->next) { + for (l = path_bar->priv->button_list; l; l = l->next) { GtkWidget *button; button = BUTTON_DATA (l->data)->button; gtk_container_add (GTK_CONTAINER (path_bar), button); @@ -2062,12 +2091,12 @@ child_ordering_changed (path_bar); - if (path_bar->current_path != NULL) { - g_object_unref (path_bar->current_path); + if (path_bar->priv->current_path != NULL) { + g_object_unref (path_bar->priv->current_path); } - path_bar->current_path = g_object_ref (file_path); - path_bar->current_button_data = current_button_data; + path_bar->priv->current_path = g_object_ref (file_path); + path_bar->priv->current_button_data = current_button_data; g_signal_emit (path_bar, path_bar_signals [PATH_SET], 0, file_path); @@ -2085,12 +2114,12 @@ /* Check whether the new path is already present in the pathbar as buttons. * This could be a parent directory or a previous selected subdirectory. */ if (nemo_path_bar_check_parent_path (path_bar, file_path, &button_data)) { - if (path_bar->current_path != NULL) { - g_object_unref (path_bar->current_path); + if (path_bar->priv->current_path != NULL) { + g_object_unref (path_bar->priv->current_path); } - path_bar->current_path = g_object_ref (file_path); - path_bar->current_button_data = button_data; + path_bar->priv->current_path = g_object_ref (file_path); + path_bar->priv->current_button_data = button_data; return TRUE; } @@ -2107,7 +2136,7 @@ g_return_val_if_fail (NEMO_IS_PATH_BAR (path_bar), NULL); g_return_val_if_fail (GTK_IS_BUTTON (button), NULL); - for (list = path_bar->button_list; list; list = list->next) { + for (list = path_bar->priv->button_list; list; list = list->next) { ButtonData *button_data; button_data = BUTTON_DATA (list->data); if (button_data->button == button) { diff -Nru nemo-2.6.7/src/nemo-pathbar.h nemo-2.8.6/src/nemo-pathbar.h --- nemo-2.6.7/src/nemo-pathbar.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-pathbar.h 2015-11-27 10:00:22.000000000 +0000 @@ -26,7 +26,7 @@ typedef struct _NemoPathBar NemoPathBar; typedef struct _NemoPathBarClass NemoPathBarClass; - +typedef struct _NemoPathBarDetails NemoPathBarDetails; #define NEMO_TYPE_PATH_BAR (nemo_path_bar_get_type ()) #define NEMO_PATH_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_PATH_BAR, NemoPathBar)) @@ -38,42 +38,8 @@ struct _NemoPathBar { GtkContainer parent; - - GdkWindow *event_window; - - GFile *root_path; - GFile *home_path; - GFile *desktop_path; - - /** XDG Dirs */ - GFile *xdg_documents_path; - GFile *xdg_download_path; - GFile *xdg_music_path; - GFile *xdg_pictures_path; - GFile *xdg_public_path; - GFile *xdg_templates_path; - GFile *xdg_videos_path; - - GFile *current_path; - gpointer current_button_data; - - GList *button_list; - GList *scrolled_root_button; - GList *fake_root; - GtkWidget *up_slider_button; - GtkWidget *down_slider_button; - guint settings_signal_id; - gint icon_size; - gint16 slider_width; - gint16 spacing; - gint16 button_offset; - guint timer; - guint slider_visible : 1; - guint need_timer : 1; - guint ignore_click : 1; - - unsigned int drag_slider_timeout; - gboolean drag_slider_timeout_for_up_button; + + NemoPathBarDetails *priv; }; struct _NemoPathBarClass diff -Nru nemo-2.6.7/src/nemo-places-sidebar.c nemo-2.8.6/src/nemo-places-sidebar.c --- nemo-2.6.7/src/nemo-places-sidebar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-places-sidebar.c 2015-11-27 10:00:22.000000000 +0000 @@ -144,6 +144,8 @@ guint popup_menu_action_index; + guint update_places_on_idle_id; + } NemoPlacesSidebar; typedef struct { @@ -229,6 +231,8 @@ static void update_places (NemoPlacesSidebar *sidebar); +static void update_places_on_idle (NemoPlacesSidebar *sidebar); + /* Identifiers for target types */ enum { GTK_TREE_MODEL_ROW, @@ -711,7 +715,6 @@ char *tooltip; gchar *tooltip_info; GList *network_mounts, *network_volumes; - NemoFile *file; gint full; DEBUG ("Updating places sidebar"); @@ -781,20 +784,21 @@ /* add bookmarks */ bookmark_count = nemo_bookmark_list_length (sidebar->bookmarks); /* in certain situations (i.e. removed a bookmark), the breakpoint is smaller than - * the number of bookmarks - make sure to fix this before iterating through a list of them + * the number of bookmarks - make sure to fix this before iterating through a list of them. + * We don't overwrite the stored breakpoint because the bookmark list could simply be reloading, + * and we want the original number still when we update places again. */ - if (sidebar->bookmark_breakpoint < 0 || - sidebar->bookmark_breakpoint > bookmark_count) { - sidebar->bookmark_breakpoint = bookmark_count; + gint temp_breakpoint = sidebar->bookmark_breakpoint; + + if (temp_breakpoint < 0 || + temp_breakpoint > bookmark_count) { + temp_breakpoint = bookmark_count; } - for (bookmark_index = 0; bookmark_index < sidebar->bookmark_breakpoint; ++bookmark_index) { + for (bookmark_index = 0; bookmark_index < temp_breakpoint; ++bookmark_index) { bookmark = nemo_bookmark_list_item_at (sidebar->bookmarks, bookmark_index); root = nemo_bookmark_get_location (bookmark); - file = nemo_file_get (root); - - nemo_file_unref (file); bookmark_name = nemo_bookmark_get_name (bookmark); icon = nemo_bookmark_get_icon (bookmark); @@ -862,9 +866,6 @@ bookmark = nemo_bookmark_list_item_at (sidebar->bookmarks, bookmark_index); root = nemo_bookmark_get_location (bookmark); - file = nemo_file_get (root); - - nemo_file_unref (file); bookmark_name = nemo_bookmark_get_name (bookmark); icon = nemo_bookmark_get_icon (bookmark); @@ -1184,7 +1185,7 @@ GMount *mount, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1192,7 +1193,7 @@ GMount *mount, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1200,7 +1201,7 @@ GMount *mount, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1208,7 +1209,7 @@ GVolume *volume, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1216,7 +1217,7 @@ GVolume *volume, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1224,7 +1225,7 @@ GVolume *volume, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1232,7 +1233,7 @@ GDrive *drive, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1240,7 +1241,7 @@ GDrive *drive, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static void @@ -1248,7 +1249,7 @@ GDrive *drive, NemoPlacesSidebar *sidebar) { - update_places (sidebar); + update_places_on_idle (sidebar); } static gboolean @@ -1502,7 +1503,7 @@ GtkTreeIter iter; PlaceType place_type; SectionType section_type; - gchar *drop_target_uri; + gchar *drop_target_uri = NULL; if (!gtk_tree_view_get_dest_row_at_pos (tree_view, x, y, @@ -1519,9 +1520,7 @@ -1); if (!cat_is_expanded (sidebar, section_type) && place_type == PLACES_HEADING) { if (sidebar->expand_timeout_source > 0) { - gtk_tree_path_free (*path); - *path = NULL; - return FALSE; + goto fail; } CategoryExpandPayload *payload; GtkTreeViewColumn *col; @@ -1538,37 +1537,30 @@ (GSourceFunc) maybe_expand_category, payload, (GDestroyNotify) g_free); - gtk_tree_path_free (*path); - *path = NULL; - return FALSE; + goto fail; } else if (place_type == PLACES_HEADING) { if (section_type == SECTION_BOOKMARKS && nemo_bookmark_list_length (sidebar->bookmarks) == sidebar->bookmark_breakpoint) { *pos = GTK_TREE_VIEW_DROP_AFTER; + g_free (drop_target_uri); return TRUE; } else { - gtk_tree_path_free (*path); - *path = NULL; - return FALSE; + goto fail; } } if (section_type != SECTION_XDG_BOOKMARKS && section_type != SECTION_BOOKMARKS && sidebar->drag_data_received && - sidebar->drag_data_info == GTK_TREE_MODEL_ROW) { + sidebar->drag_data_info == GTK_TREE_MODEL_ROW && + g_strcmp0 (drop_target_uri, sidebar->top_bookend_uri) != 0) { /* don't allow dropping bookmarks into non-bookmark areas */ - gtk_tree_path_free (*path); - *path = NULL; - - return FALSE; + goto fail; } if (g_strcmp0 (drop_target_uri, "recent:///") == 0) { - gtk_tree_path_free (*path); - *path = NULL; - return FALSE; + goto fail; } GdkRectangle rect; @@ -1589,6 +1581,12 @@ } return TRUE; + +fail: + g_free (drop_target_uri); + gtk_tree_path_free (*path); + *path = NULL; + return FALSE; } static gboolean @@ -1751,7 +1749,8 @@ static void bookmarks_drop_uris (NemoPlacesSidebar *sidebar, GtkSelectionData *selection_data, - int position) + int position, + SectionType section_type) { NemoBookmark *bookmark; NemoFile *file; @@ -1780,8 +1779,11 @@ bookmark = nemo_bookmark_new (location, NULL, NULL); if (!nemo_bookmark_list_contains (sidebar->bookmarks, bookmark)) { - if (position < sidebar->bookmark_breakpoint) + if (position < sidebar->bookmark_breakpoint || + (position == sidebar->bookmark_breakpoint && (section_type == SECTION_XDG_BOOKMARKS || + section_type == SECTION_COMPUTER))) { increment_bookmark_breakpoint (sidebar); + } nemo_bookmark_list_insert_item (sidebar->bookmarks, bookmark, position++); } @@ -1851,10 +1853,10 @@ SectionType new_type) { if (old_type != new_type) { - if (new_type == SECTION_XDG_BOOKMARKS) - increment_bookmark_breakpoint (sidebar); - else if (new_type == SECTION_BOOKMARKS) + if (old_type == SECTION_XDG_BOOKMARKS && new_type != SECTION_COMPUTER) decrement_bookmark_breakpoint (sidebar); + else if (old_type == SECTION_BOOKMARKS) + increment_bookmark_breakpoint (sidebar); } } @@ -1984,7 +1986,7 @@ switch (info) { case TEXT_URI_LIST: - bookmarks_drop_uris (sidebar, selection_data, position); + bookmarks_drop_uris (sidebar, selection_data, position, section_type); success = TRUE; break; case GTK_TREE_MODEL_ROW: @@ -2332,7 +2334,7 @@ if (sidebar->go_to_after_mount_slot != NULL) { if ((sidebar->go_to_after_mount_flags & NEMO_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) { nemo_window_slot_open_location (sidebar->go_to_after_mount_slot, location, - sidebar->go_to_after_mount_flags, NULL); + sidebar->go_to_after_mount_flags); } else { NemoWindow *new, *cur; @@ -2347,8 +2349,11 @@ g_object_unref (G_OBJECT (mount)); } - - eel_remove_weak_pointer (&(sidebar->go_to_after_mount_slot)); + if (sidebar->go_to_after_mount_slot) { + g_object_remove_weak_pointer (G_OBJECT (sidebar->go_to_after_mount_slot), + (gpointer *) &sidebar->go_to_after_mount_slot); + sidebar->go_to_after_mount_slot = NULL; + } } static void @@ -2398,8 +2403,7 @@ /* Navigate to the clicked location */ if ((flags & NEMO_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) { slot = nemo_window_get_active_slot (sidebar->window); - nemo_window_slot_open_location (slot, location, - flags, NULL); + nemo_window_slot_open_location (slot, location, flags); } else { NemoWindow *cur, *new; @@ -2428,7 +2432,8 @@ slot = nemo_window_get_active_slot (sidebar->window); sidebar->go_to_after_mount_slot = slot; - eel_add_weak_pointer (&(sidebar->go_to_after_mount_slot)); + g_object_add_weak_pointer (G_OBJECT (sidebar->go_to_after_mount_slot), + (gpointer *) &sidebar->go_to_after_mount_slot); sidebar->go_to_after_mount_flags = flags; @@ -3975,6 +3980,8 @@ sidebar->volume_monitor = g_volume_monitor_get (); + sidebar->update_places_on_idle_id = 0; + sidebar->my_computer_expanded = g_settings_get_boolean (nemo_window_state, NEMO_WINDOW_STATE_MY_COMPUTER_EXPANDED); sidebar->bookmarks_expanded = g_settings_get_boolean (nemo_window_state, @@ -4238,11 +4245,20 @@ sidebar->bookmarks_changed_id = 0; } + if (sidebar->update_places_on_idle_id != 0) { + g_source_remove (sidebar->update_places_on_idle_id); + sidebar->update_places_on_idle_id = 0; + } + g_clear_object (&sidebar->store); g_clear_object (&sidebar->action_manager); - eel_remove_weak_pointer (&(sidebar->go_to_after_mount_slot)); + if (sidebar->go_to_after_mount_slot) { + g_object_remove_weak_pointer (G_OBJECT (sidebar->go_to_after_mount_slot), + (gpointer *) &sidebar->go_to_after_mount_slot); + sidebar->go_to_after_mount_slot = NULL; + } g_signal_handlers_disconnect_by_func (nemo_window_state, breakpoint_changed_cb, @@ -4302,6 +4318,29 @@ widget_class->focus = nemo_places_sidebar_focus; } +static gboolean +update_places_on_idle_callback (NemoPlacesSidebar *sidebar) +{ + sidebar->update_places_on_idle_id = 0; + + update_places (sidebar); + + return FALSE; +} + +static void +update_places_on_idle (NemoPlacesSidebar *sidebar) +{ + if (sidebar->update_places_on_idle_id != 0) { + g_source_remove (sidebar->update_places_on_idle_id); + sidebar->update_places_on_idle_id = 0; + } + + sidebar->update_places_on_idle_id = g_idle_add_full (G_PRIORITY_LOW, + (GSourceFunc) update_places_on_idle_callback, + sidebar, NULL); +} + static void nemo_places_sidebar_set_parent_window (NemoPlacesSidebar *sidebar, NemoWindow *window) @@ -4329,7 +4368,7 @@ sidebar->bookmarks_changed_id = g_signal_connect_swapped (sidebar->bookmarks, "changed", - G_CALLBACK (update_places), + G_CALLBACK (update_places_on_idle), sidebar); g_signal_connect_object (window, "loading_uri", diff -Nru nemo-2.6.7/src/nemo-progress-ui-handler.c nemo-2.8.6/src/nemo-progress-ui-handler.c --- nemo-2.6.7/src/nemo-progress-ui-handler.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-progress-ui-handler.c 2015-11-27 10:00:22.000000000 +0000 @@ -359,6 +359,8 @@ } else { progress_ui_handler_add_to_window (self, info); progress_ui_handler_update_status_icon (self); + if (gtk_widget_get_visible (GTK_WIDGET (self->priv->progress_window))) + gtk_window_present (GTK_WINDOW (self->priv->progress_window)); } } diff -Nru nemo-2.6.7/src/nemo-query-editor.c nemo-2.8.6/src/nemo-query-editor.c --- nemo-2.6.7/src/nemo-query-editor.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-query-editor.c 2015-11-27 10:00:22.000000000 +0000 @@ -23,7 +23,7 @@ #include #include "nemo-query-editor.h" -#include "nemo-window-slot.h" +#include "nemo-file-utilities.h" #include #include @@ -34,7 +34,6 @@ #include typedef enum { - NEMO_QUERY_EDITOR_ROW_LOCATION, NEMO_QUERY_EDITOR_ROW_TYPE, NEMO_QUERY_EDITOR_ROW_LAST @@ -67,14 +66,15 @@ gboolean change_frozen; guint typing_timeout_id; gboolean is_visible; - GtkWidget *invisible_vbox; - GtkWidget *visible_vbox; + GtkWidget *vbox; + GtkWidget *search_bar_revealer; + + GtkWidget *search_current_button; + GtkWidget *search_all_button; + char *current_uri; GList *rows; char *last_set_query_text; - - NemoSearchBar *bar; - NemoWindowSlot *slot; }; enum { @@ -93,12 +93,6 @@ static NemoQueryEditorRow * nemo_query_editor_add_row (NemoQueryEditor *editor, NemoQueryEditorRowType type); -static GtkWidget *location_row_create_widgets (NemoQueryEditorRow *row); -static void location_row_add_to_query (NemoQueryEditorRow *row, - NemoQuery *query); -static void location_row_free_data (NemoQueryEditorRow *row); -static void location_add_rows_from_query (NemoQueryEditor *editor, - NemoQuery *query); static GtkWidget *type_row_create_widgets (NemoQueryEditorRow *row); static void type_row_add_to_query (NemoQueryEditorRow *row, NemoQuery *query); @@ -109,12 +103,6 @@ static NemoQueryEditorRowOps row_type[] = { - { N_("Location"), - location_row_create_widgets, - location_row_add_to_query, - location_row_free_data, - location_add_rows_from_query - }, { N_("File Type"), type_row_create_widgets, type_row_add_to_query, @@ -132,23 +120,10 @@ editor = NEMO_QUERY_EDITOR (object); - if (editor->details->typing_timeout_id) { + if (editor->details->typing_timeout_id > 0) { g_source_remove (editor->details->typing_timeout_id); editor->details->typing_timeout_id = 0; } - - if (editor->details->bar != NULL) { - g_signal_handlers_disconnect_by_func (editor->details->entry, - entry_activate_cb, - editor); - g_signal_handlers_disconnect_by_func (editor->details->entry, - entry_changed_cb, - editor); - - nemo_search_bar_return_entry (editor->details->bar); - eel_remove_weak_pointer (&editor->details->bar); - } - G_OBJECT_CLASS (nemo_query_editor_parent_class)->dispose (object); } @@ -160,9 +135,6 @@ context = gtk_widget_get_style_context (widget); - gtk_style_context_save (context); - gtk_style_context_add_class (context, GTK_STYLE_CLASS_INFO); - gtk_render_background (context, cr, 0, 0, gtk_widget_get_allocated_width (widget), gtk_widget_get_allocated_height (widget)); @@ -171,8 +143,6 @@ gtk_widget_get_allocated_width (widget), gtk_widget_get_allocated_height (widget)); - gtk_style_context_restore (context); - GTK_WIDGET_CLASS (nemo_query_editor_parent_class)->draw (widget, cr); return FALSE; @@ -215,10 +185,19 @@ g_type_class_add_private (class, sizeof (NemoQueryEditorDetails)); } +GFile * +nemo_query_editor_get_location (NemoQueryEditor *editor) +{ + GFile *file = NULL; + if (editor->details->current_uri != NULL) + file = g_file_new_for_uri (editor->details->current_uri); + return file; +} + static void entry_activate_cb (GtkWidget *entry, NemoQueryEditor *editor) { - if (editor->details->typing_timeout_id) { + if (editor->details->typing_timeout_id > 0) { g_source_remove (editor->details->typing_timeout_id); editor->details->typing_timeout_id = 0; } @@ -232,11 +211,10 @@ NemoQueryEditor *editor; editor = NEMO_QUERY_EDITOR (user_data); + editor->details->typing_timeout_id = 0; nemo_query_editor_changed (editor); - editor->details->typing_timeout_id = 0; - return FALSE; } @@ -249,7 +227,7 @@ return; } - if (editor->details->typing_timeout_id) { + if (editor->details->typing_timeout_id > 0) { g_source_remove (editor->details->typing_timeout_id); } @@ -259,88 +237,6 @@ editor); } -static void -edit_clicked (GtkButton *button, NemoQueryEditor *editor) -{ - nemo_query_editor_set_visible (editor, TRUE); - nemo_query_editor_grab_focus (editor); -} - -/* Location */ - -static GtkWidget * -location_row_create_widgets (NemoQueryEditorRow *row) -{ - GtkWidget *chooser; - - chooser = gtk_file_chooser_button_new (_("Select folder to search in"), - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), - g_get_home_dir ()); - gtk_widget_show (chooser); - - g_signal_connect_swapped (chooser, "current-folder-changed", - G_CALLBACK (nemo_query_editor_changed), - row->editor); - - gtk_box_pack_start (GTK_BOX (row->hbox), chooser, FALSE, FALSE, 0); - - return chooser; -} - -static void -location_row_add_to_query (NemoQueryEditorRow *row, - NemoQuery *query) -{ - char *folder, *uri; - - folder = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (row->type_widget)); - if (folder == NULL) { - /* I don't know why, but i got NULL here on initial search in browser mode - even with the location set to the homedir in create_widgets... */ - folder = g_strdup (g_get_home_dir ()); - } - - uri = g_filename_to_uri (folder, NULL, NULL); - g_free (folder); - - nemo_query_set_location (query, uri); - g_free (uri); -} - -static void -location_row_free_data (NemoQueryEditorRow *row) -{ -} - -static void -location_add_rows_from_query (NemoQueryEditor *editor, - NemoQuery *query) -{ - NemoQueryEditorRow *row; - char *uri, *folder; - - uri = nemo_query_get_location (query); - - if (uri == NULL) { - return; - } - folder = g_filename_from_uri (uri, NULL, NULL); - g_free (uri); - if (folder == NULL) { - return; - } - - row = nemo_query_editor_add_row (editor, - NEMO_QUERY_EDITOR_ROW_LOCATION); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (row->type_widget), - folder); - - g_free (folder); -} - - /* Type */ static gboolean @@ -807,7 +703,6 @@ row = nemo_query_editor_add_row (editor, NEMO_QUERY_EDITOR_ROW_TYPE); - model = gtk_combo_box_get_model (GTK_COMBO_BOX (row->type_widget)); type_add_custom_type (row, mime_type, desc, &iter); gtk_combo_box_set_active_iter (GTK_COMBO_BOX (row->type_widget), @@ -850,7 +745,7 @@ NemoQueryEditor *editor; editor = row->editor; - gtk_container_remove (GTK_CONTAINER (editor->details->visible_vbox), + gtk_container_remove (GTK_CONTAINER (editor->details->vbox), row->hbox); editor->details->rows = g_list_remove (editor->details->rows, row); @@ -908,7 +803,7 @@ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); row->hbox = hbox; gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (editor->details->vbox), hbox, FALSE, FALSE, 0); combo = gtk_combo_box_text_new (); row->combo = combo; @@ -946,12 +841,6 @@ } static void -go_search_cb (GtkButton *clicked_button, NemoQueryEditor *editor) -{ - nemo_query_editor_changed_force (editor, TRUE); -} - -static void add_new_row_cb (GtkButton *clicked_button, NemoQueryEditor *editor) { nemo_query_editor_add_row (editor, get_next_free_type (editor)); @@ -961,58 +850,44 @@ static void nemo_query_editor_init (NemoQueryEditor *editor) { - GtkWidget *hbox, *label, *button; - char *label_markup; - editor->details = G_TYPE_INSTANCE_GET_PRIVATE (editor, NEMO_TYPE_QUERY_EDITOR, NemoQueryEditorDetails); - editor->details->is_visible = TRUE; + editor->details->is_visible = FALSE; + editor->details->search_bar_revealer = gtk_revealer_new (); + + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (editor)), + GTK_STYLE_CLASS_TOOLBAR); + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (editor)), + GTK_STYLE_CLASS_PRIMARY_TOOLBAR); gtk_orientable_set_orientation (GTK_ORIENTABLE (editor), GTK_ORIENTATION_VERTICAL); - editor->details->invisible_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (editor->details->invisible_vbox), 6); - gtk_box_pack_start (GTK_BOX (editor), editor->details->invisible_vbox, - FALSE, FALSE, 0); - editor->details->visible_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (editor->details->visible_vbox), 6); - gtk_box_pack_start (GTK_BOX (editor), editor->details->visible_vbox, + editor->details->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_container_add (GTK_CONTAINER (editor->details->search_bar_revealer), editor->details->vbox); + gtk_widget_show_all (editor->details->search_bar_revealer); + gtk_widget_set_no_show_all (editor->details->vbox, TRUE); + gtk_container_set_border_width (GTK_CONTAINER (editor->details->vbox), 6); + gtk_box_pack_start (GTK_BOX (editor), editor->details->search_bar_revealer, FALSE, FALSE, 0); - /* Only show visible vbox */ - gtk_widget_show (editor->details->visible_vbox); - - /* Create invisible part: */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (editor->details->invisible_vbox), - hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - label = gtk_label_new (""); - label_markup = g_strconcat ("", _("Search Folder"), "", NULL); - gtk_label_set_markup (GTK_LABEL (label), label_markup); - g_free (label_markup); - - gtk_style_context_add_class (gtk_widget_get_style_context (label), - "nemo-cluebar-label"); - - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - button = gtk_button_new_with_label (_("Edit")); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "clicked", - G_CALLBACK (edit_clicked), editor); - - gtk_widget_set_tooltip_text (button, - _("Edit the saved search")); } void nemo_query_editor_set_default_query (NemoQueryEditor *editor) { - nemo_query_editor_add_row (editor, NEMO_QUERY_EDITOR_ROW_LOCATION); + nemo_query_editor_changed (editor); +} + +static void +on_all_button_toggled (GtkToggleButton *button, + NemoQueryEditor *editor) +{ + nemo_query_editor_changed (editor); +} + +static void +on_current_button_toggled (GtkToggleButton *button, + NemoQueryEditor *editor) +{ nemo_query_editor_changed (editor); } @@ -1037,46 +912,45 @@ gtk_widget_set_tooltip_text (button, _("Add a new criterion to this search")); - if (use_go) { - button = gtk_button_new_with_label (_("Go")); - } else { - button = gtk_button_new_with_label (_("Reload")); - } - gtk_widget_show (button); - - gtk_widget_set_tooltip_text (button, - _("Perform or update the search")); - - g_signal_connect (button, "clicked", - G_CALLBACK (go_search_cb), editor); - - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); + editor->details->search_current_button = gtk_radio_button_new_with_label (NULL, _("Current")); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (editor->details->search_current_button), FALSE); + gtk_widget_show (editor->details->search_current_button); + editor->details->search_all_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (editor->details->search_current_button), + _("All Files")); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (editor->details->search_all_button), FALSE); + gtk_widget_show (editor->details->search_all_button); + g_signal_connect (editor->details->search_all_button, "toggled", + G_CALLBACK (on_all_button_toggled), editor); + g_signal_connect (editor->details->search_current_button, "toggled", + G_CALLBACK (on_current_button_toggled), editor); + gtk_box_pack_start (GTK_BOX (hbox), editor->details->search_current_button, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), editor->details->search_all_button, FALSE, FALSE, 0); } static void -setup_internal_entry (NemoQueryEditor *editor) +setup_widgets (NemoQueryEditor *editor) { - GtkWidget *hbox, *label; - char *label_markup; - + GtkWidget *hbox; + /* Create visible part: */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0); - - label = gtk_label_new (""); - label_markup = g_strconcat ("", _("_Search for:"), "", NULL); - gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), label_markup); - g_free (label_markup); - gtk_widget_show (label); - - gtk_style_context_add_class (gtk_widget_get_style_context (label), - "nemo-cluebar-label"); - - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (editor->details->vbox), hbox, FALSE, FALSE, 0); - editor->details->entry = gtk_entry_new (); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), editor->details->entry); +#if GTK_CHECK_VERSION(3,6,0) + editor->details->entry = gtk_search_entry_new (); +#else + GtkWidget *label = gtk_label_new (""); + char *label_markup = g_strconcat ("", _("_Search for:"), "", NULL); + gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), label_markup); + g_free (label_markup); + gtk_widget_show (label); + + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + editor->details->entry = gtk_entry_new (); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), editor->details->entry); +#endif gtk_box_pack_start (GTK_BOX (hbox), editor->details->entry, TRUE, TRUE, 0); g_signal_connect (editor->details->entry, "activate", @@ -1088,49 +962,15 @@ finish_first_line (editor, hbox, TRUE); } -static void -setup_external_entry (NemoQueryEditor *editor, GtkWidget *entry) -{ - GtkWidget *hbox, *label; - gchar *label_markup; - - /* Create visible part: */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0); - - label_markup = g_strconcat ("", _("Search results"), "", NULL); - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), label_markup); - gtk_widget_show (label); - - gtk_style_context_add_class (gtk_widget_get_style_context (label), - "nemo-cluebar-label"); - - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - editor->details->entry = entry; - g_signal_connect (editor->details->entry, "activate", - G_CALLBACK (entry_activate_cb), editor); - g_signal_connect (editor->details->entry, "changed", - G_CALLBACK (entry_changed_cb), editor); - - finish_first_line (editor, hbox, FALSE); - - g_free (label_markup); -} - void nemo_query_editor_set_visible (NemoQueryEditor *editor, gboolean visible) { editor->details->is_visible = visible; if (visible) { - gtk_widget_show (editor->details->visible_vbox); - gtk_widget_hide (editor->details->invisible_vbox); + gtk_revealer_set_reveal_child (GTK_REVEALER (editor->details->search_bar_revealer), TRUE); } else { - gtk_widget_hide (editor->details->visible_vbox); - gtk_widget_show (editor->details->invisible_vbox); + gtk_revealer_set_reveal_child (GTK_REVEALER (editor->details->search_bar_revealer), FALSE); } } @@ -1164,7 +1004,7 @@ static void nemo_query_editor_changed (NemoQueryEditor *editor) { - nemo_query_editor_changed_force (editor, FALSE); + nemo_query_editor_changed_force (editor, TRUE); } void @@ -1175,6 +1015,23 @@ } } +static void +add_location_to_query (NemoQueryEditor *editor, + NemoQuery *query) +{ + char *uri; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->details->search_all_button))) { + uri = nemo_get_home_directory_uri (); + } else { + uri = g_strdup (editor->details->current_uri); + } + + nemo_query_set_location (query, uri); + g_free (uri); +} + + NemoQuery * nemo_query_editor_get_query (NemoQueryEditor *editor) { @@ -1197,6 +1054,8 @@ query = nemo_query_new (); nemo_query_set_text (query, query_text); + add_location_to_query (editor, query); + for (l = editor->details->rows; l != NULL; l = l->next) { row = l->data; @@ -1219,83 +1078,47 @@ } GtkWidget * -nemo_query_editor_new (gboolean start_hidden) +nemo_query_editor_new (void) { GtkWidget *editor; editor = g_object_new (NEMO_TYPE_QUERY_EDITOR, NULL); - nemo_query_editor_set_visible (NEMO_QUERY_EDITOR (editor), - !start_hidden); - - setup_internal_entry (NEMO_QUERY_EDITOR (editor)); + setup_widgets (NEMO_QUERY_EDITOR (editor)); return editor; } static void -detach_from_external_entry (NemoQueryEditor *editor) +update_location (NemoQueryEditor *editor, + NemoQuery *query) { - if (editor->details->bar != NULL) { - nemo_search_bar_return_entry (editor->details->bar); - g_signal_handlers_block_by_func (editor->details->entry, - entry_activate_cb, - editor); - g_signal_handlers_block_by_func (editor->details->entry, - entry_changed_cb, - editor); - } -} + char *uri; + NemoFile *file; -static void -attach_to_external_entry (NemoQueryEditor *editor) -{ - if (editor->details->bar != NULL) { - nemo_search_bar_borrow_entry (editor->details->bar); - g_signal_handlers_unblock_by_func (editor->details->entry, - entry_activate_cb, - editor); - g_signal_handlers_unblock_by_func (editor->details->entry, - entry_changed_cb, - editor); - - editor->details->change_frozen = TRUE; - gtk_entry_set_text (GTK_ENTRY (editor->details->entry), - editor->details->last_set_query_text); - editor->details->change_frozen = FALSE; + uri = nemo_query_get_location (query); + if (uri == NULL) { + return; } -} - -GtkWidget* -nemo_query_editor_new_with_bar (gboolean start_hidden, - gboolean start_attached, - NemoSearchBar *bar, - NemoWindowSlot *slot) -{ - GtkWidget *entry; - NemoQueryEditor *editor; - - editor = NEMO_QUERY_EDITOR (g_object_new (NEMO_TYPE_QUERY_EDITOR, NULL)); - nemo_query_editor_set_visible (editor, !start_hidden); - - editor->details->bar = bar; - eel_add_weak_pointer (&editor->details->bar); - - editor->details->slot = slot; + g_free (editor->details->current_uri); + editor->details->current_uri = uri; + file = nemo_file_get_by_uri (uri); + + if (file != NULL) { + char *name; + if (nemo_file_is_home (file)) { + name = g_strdup (_("Home")); + } else { + char *filename; + filename = nemo_file_get_display_name (file); + name = g_strdup_printf ("\342\200\234%s\342\200\235", filename); + g_free (filename); + } + gtk_button_set_label (GTK_BUTTON (editor->details->search_current_button), + name); + g_free (name); - entry = nemo_search_bar_borrow_entry (bar); - setup_external_entry (editor, entry); - if (!start_attached) { - detach_from_external_entry (editor); + nemo_file_unref (file); } - - g_signal_connect_object (slot, "active", - G_CALLBACK (attach_to_external_entry), - editor, G_CONNECT_SWAPPED); - g_signal_connect_object (slot, "inactive", - G_CALLBACK (detach_from_external_entry), - editor, G_CONNECT_SWAPPED); - - return GTK_WIDGET (editor); } void @@ -1318,6 +1141,8 @@ editor->details->change_frozen = TRUE; gtk_entry_set_text (GTK_ENTRY (editor->details->entry), text); + update_location (editor, query); + for (type = 0; type < NEMO_QUERY_EDITOR_ROW_LAST; type++) { row_type[type].add_rows_from_query (editor, query); } diff -Nru nemo-2.6.7/src/nemo-query-editor.h nemo-2.8.6/src/nemo-query-editor.h --- nemo-2.6.7/src/nemo-query-editor.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-query-editor.h 2015-11-27 10:00:22.000000000 +0000 @@ -28,8 +28,6 @@ #include -#include "nemo-search-bar.h" - #define NEMO_TYPE_QUERY_EDITOR nemo_query_editor_get_type() #define NEMO_QUERY_EDITOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_QUERY_EDITOR, NemoQueryEditor)) @@ -61,11 +59,7 @@ #include "nemo-window-slot.h" GType nemo_query_editor_get_type (void); -GtkWidget* nemo_query_editor_new (gboolean start_hidden); -GtkWidget* nemo_query_editor_new_with_bar (gboolean start_hidden, - gboolean start_attached, - NemoSearchBar *bar, - NemoWindowSlot *slot); +GtkWidget* nemo_query_editor_new (void); void nemo_query_editor_set_default_query (NemoQueryEditor *editor); void nemo_query_editor_grab_focus (NemoQueryEditor *editor); @@ -74,6 +68,7 @@ NemoQuery *nemo_query_editor_get_query (NemoQueryEditor *editor); void nemo_query_editor_set_query (NemoQueryEditor *editor, NemoQuery *query); +GFile * nemo_query_editor_get_location (NemoQueryEditor *editor); void nemo_query_editor_set_visible (NemoQueryEditor *editor, gboolean visible); diff -Nru nemo-2.6.7/src/nemo-script-config-widget.c nemo-2.8.6/src/nemo-script-config-widget.c --- nemo-2.6.7/src/nemo-script-config-widget.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-script-config-widget.c 2015-11-27 10:00:22.000000000 +0000 @@ -9,12 +9,13 @@ #include "nemo-application.h" #include "nemo-view.h" #include "nemo-file.h" +#include "nemo-global-preferences.h" +#include #include G_DEFINE_TYPE (NemoScriptConfigWidget, nemo_script_config_widget, NEMO_TYPE_CONFIG_BASE_WIDGET); -#define BLACKLIST_KEY "disabled-scripts" typedef struct { NemoScriptConfigWidget *widget; @@ -56,7 +57,8 @@ { gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - gchar **blacklist = g_settings_get_strv (proxy->widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS); GPtrArray *new_list = g_ptr_array_new (); @@ -80,9 +82,11 @@ gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_signal_handler_block (proxy->widget->settings, proxy->widget->bl_handler); - g_settings_set_strv (proxy->widget->settings, BLACKLIST_KEY, (const gchar * const *) new_list_ptr); - g_signal_handler_unblock (proxy->widget->settings, proxy->widget->bl_handler); + g_signal_handler_block (nemo_plugin_preferences, proxy->widget->bl_handler); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS, + (const gchar * const *) new_list_ptr); + g_signal_handler_unblock (nemo_plugin_preferences, proxy->widget->bl_handler); g_strfreev (blacklist); g_strfreev (new_list_ptr); @@ -133,11 +137,7 @@ gchar *path = NULL; - path = g_build_filename ("/", "usr", "share", "nemo", "scripts", NULL); - populate_from_directory (widget, path); - g_clear_pointer (&path, g_free); - - path = g_build_filename (g_get_user_data_dir (), "nemo", "scripts", NULL); + path = nemo_get_scripts_directory_path (); populate_from_directory (widget, path); g_clear_pointer (&path, g_free); @@ -158,7 +158,8 @@ gtk_widget_set_sensitive (GTK_WIDGET (NEMO_CONFIG_BASE_WIDGET (widget)->listbox), FALSE); } else { GList *l; - gchar **blacklist = g_settings_get_strv (widget->settings, BLACKLIST_KEY); + gchar **blacklist = g_settings_get_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS); for (l = widget->scripts; l != NULL; l=l->next) { ScriptProxy *proxy = l->data; @@ -210,7 +211,9 @@ static void on_enable_clicked (GtkWidget *button, NemoScriptConfigWidget *widget) { - g_settings_set_strv (widget->settings, BLACKLIST_KEY, NULL); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS, + NULL); } static void @@ -226,7 +229,9 @@ g_ptr_array_add (new_list, NULL); gchar **new_list_ptr = (char **) g_ptr_array_free (new_list, FALSE); - g_settings_set_strv (widget->settings, BLACKLIST_KEY, (const gchar * const *) new_list_ptr); + g_settings_set_strv (nemo_plugin_preferences, + NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS, + (const gchar * const *) new_list_ptr); g_strfreev (new_list_ptr); } @@ -235,7 +240,7 @@ on_open_folder_clicked (GtkWidget *button, NemoScriptConfigWidget *widget) { gchar *path = NULL; - path = g_build_filename (g_get_user_data_dir (), "nemo", "scripts", NULL); + path = nemo_get_scripts_directory_path (); GFile *location = g_file_new_for_path (path); nemo_application_open_location (nemo_application_get_singleton (), @@ -311,8 +316,7 @@ g_list_free (widget->dir_monitors); - g_signal_handler_disconnect (widget->settings, widget->bl_handler); - g_clear_object (&widget->settings); + g_signal_handler_disconnect (nemo_plugin_preferences, widget->bl_handler); G_OBJECT_CLASS (nemo_script_config_widget_parent_class)->finalize (object); } @@ -331,8 +335,8 @@ { self->scripts = NULL; - self->settings = g_settings_new ("org.nemo.plugins"); - self->bl_handler = g_signal_connect (self->settings, "changed::" BLACKLIST_KEY, + self->bl_handler = g_signal_connect (nemo_plugin_preferences, + "changed::" NEMO_PLUGIN_PREFERENCES_DISABLED_SCRIPTS, G_CALLBACK (on_settings_changed), self); GtkWidget *label = nemo_config_base_widget_get_label (NEMO_CONFIG_BASE_WIDGET (self)); diff -Nru nemo-2.6.7/src/nemo-script-config-widget.h nemo-2.8.6/src/nemo-script-config-widget.h --- nemo-2.6.7/src/nemo-script-config-widget.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-script-config-widget.h 2015-11-27 10:00:22.000000000 +0000 @@ -31,7 +31,6 @@ NemoConfigBaseWidget parent; GList *scripts; - GSettings *settings; GList *dir_monitors; gulong bl_handler; diff -Nru nemo-2.6.7/src/nemo-search-bar.c nemo-2.8.6/src/nemo-search-bar.c --- nemo-2.6.7/src/nemo-search-bar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-search-bar.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* - * Copyright (C) 2005 Novell, Inc. - * - * Nemo is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * Nemo is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; see the file COPYING. If not, - * write to the Free Software Foundation, Inc., 51 Franklin Street - Suite 500, - * Boston, MA 02110-1335, USA. - * - * Author: Anders Carlsson - * - */ - -#include -#include "nemo-search-bar.h" - -#include - -#include -#include -#include - -struct NemoSearchBarDetails { - GtkWidget *entry; - gboolean entry_borrowed; -}; - -enum { - ACTIVATE, - CANCEL, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -G_DEFINE_TYPE (NemoSearchBar, nemo_search_bar, GTK_TYPE_BOX); - -static gboolean -nemo_search_bar_draw (GtkWidget *widget, - cairo_t *cr) -{ - GtkStyleContext *context; - - context = gtk_widget_get_style_context (widget); - - gtk_style_context_save (context); - gtk_style_context_add_class (context, GTK_STYLE_CLASS_INFO); - - gtk_render_background (context, cr, 0, 0, - gtk_widget_get_allocated_width (widget), - gtk_widget_get_allocated_height (widget)); - - gtk_render_frame (context, cr, 0, 0, - gtk_widget_get_allocated_width (widget), - gtk_widget_get_allocated_height (widget)); - - gtk_style_context_restore (context); - - GTK_WIDGET_CLASS (nemo_search_bar_parent_class)->draw (widget, cr); - - return FALSE; -} - -static void -nemo_search_bar_class_init (NemoSearchBarClass *class) -{ - GtkBindingSet *binding_set; - GtkWidgetClass *wclass; - - wclass = GTK_WIDGET_CLASS (class); - wclass->draw = nemo_search_bar_draw; - - signals[ACTIVATE] = - g_signal_new ("activate", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (NemoSearchBarClass, activate), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signals[CANCEL] = - g_signal_new ("cancel", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (NemoSearchBarClass, cancel), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - binding_set = gtk_binding_set_by_class (class); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0); - - g_type_class_add_private (class, sizeof (NemoSearchBarDetails)); -} - -static gboolean -entry_has_text (NemoSearchBar *bar) -{ - const char *text; - - text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry)); - - return text != NULL && text[0] != '\0'; -} - -static void -entry_icon_release_cb (GtkEntry *entry, - GtkEntryIconPosition position, - GdkEvent *event, - NemoSearchBar *bar) -{ - g_signal_emit_by_name (entry, "activate", 0); -} - -static void -entry_activate_cb (GtkWidget *entry, NemoSearchBar *bar) -{ - if (entry_has_text (bar) && !bar->details->entry_borrowed) { - g_signal_emit (bar, signals[ACTIVATE], 0); - } -} - -static void -nemo_search_bar_init (NemoSearchBar *bar) -{ - GtkWidget *label; - GtkWidget *align; - - bar->details = - G_TYPE_INSTANCE_GET_PRIVATE (bar, NEMO_TYPE_SEARCH_BAR, - NemoSearchBarDetails); - - gtk_widget_set_redraw_on_allocate (GTK_WIDGET (bar), TRUE); - - label = gtk_label_new (_("Search:")); - gtk_style_context_add_class (gtk_widget_get_style_context (label), - "nemo-cluebar-label"); - gtk_widget_show (label); - - gtk_box_pack_start (GTK_BOX (bar), label, FALSE, FALSE, 0); - - g_object_set (label, - "margin-left", 6, - NULL); - - align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); - gtk_alignment_set_padding (GTK_ALIGNMENT (align), - 6, 6, 0, 6); - gtk_box_pack_start (GTK_BOX (bar), align, TRUE, TRUE, 0); - gtk_widget_show (align); - - bar->details->entry = gtk_entry_new (); - gtk_entry_set_icon_from_icon_name (GTK_ENTRY (bar->details->entry), - GTK_ENTRY_ICON_SECONDARY, - "edit-find"); - gtk_container_add (GTK_CONTAINER (align), bar->details->entry); - - g_signal_connect (bar->details->entry, "activate", - G_CALLBACK (entry_activate_cb), bar); - g_signal_connect (bar->details->entry, "icon-release", - G_CALLBACK (entry_icon_release_cb), bar); - - gtk_widget_show (bar->details->entry); -} - -GtkWidget * -nemo_search_bar_get_entry (NemoSearchBar *bar) -{ - return bar->details->entry; -} - -GtkWidget * -nemo_search_bar_borrow_entry (NemoSearchBar *bar) -{ - GtkBindingSet *binding_set; - - bar->details->entry_borrowed = TRUE; - - binding_set = gtk_binding_set_by_class (G_OBJECT_GET_CLASS (bar)); - gtk_binding_entry_remove (binding_set, GDK_KEY_Escape, 0); - return bar->details->entry; -} - -void -nemo_search_bar_return_entry (NemoSearchBar *bar) -{ - GtkBindingSet *binding_set; - - bar->details->entry_borrowed = FALSE; - - binding_set = gtk_binding_set_by_class (G_OBJECT_GET_CLASS (bar)); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0); -} - -GtkWidget * -nemo_search_bar_new (void) -{ - GtkWidget *bar; - - bar = g_object_new (NEMO_TYPE_SEARCH_BAR, - "orientation", GTK_ORIENTATION_HORIZONTAL, - "spacing", 6, - NULL); - - return bar; -} - -NemoQuery * -nemo_search_bar_get_query (NemoSearchBar *bar) -{ - const char *query_text; - NemoQuery *query; - - query_text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry)); - - /* Empty string is a NULL query */ - if (query_text && query_text[0] == '\0') { - return NULL; - } - - query = nemo_query_new (); - nemo_query_set_text (query, query_text); - - return query; -} - -void -nemo_search_bar_grab_focus (NemoSearchBar *bar) -{ - gtk_widget_grab_focus (bar->details->entry); -} - -void -nemo_search_bar_clear (NemoSearchBar *bar) -{ - gtk_entry_set_text (GTK_ENTRY (bar->details->entry), ""); -} diff -Nru nemo-2.6.7/src/nemo-search-bar.h nemo-2.8.6/src/nemo-search-bar.h --- nemo-2.6.7/src/nemo-search-bar.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-search-bar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* - * Copyright (C) 2005 Novell, Inc. - * - * Nemo is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * Nemo is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; see the file COPYING. If not, - * write to the Free Software Foundation, Inc., 51 Franklin Street - Suite 500, - * Boston, MA 02110-1335, USA. - * - * Author: Anders Carlsson - * - */ - -#ifndef NEMO_SEARCH_BAR_H -#define NEMO_SEARCH_BAR_H - -#include -#include - -#define NEMO_TYPE_SEARCH_BAR nemo_search_bar_get_type() -#define NEMO_SEARCH_BAR(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_SEARCH_BAR, NemoSearchBar)) -#define NEMO_SEARCH_BAR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), NEMO_TYPE_SEARCH_BAR, NemoSearchBarClass)) -#define NEMO_IS_SEARCH_BAR(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NEMO_TYPE_SEARCH_BAR)) -#define NEMO_IS_SEARCH_BAR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), NEMO_TYPE_SEARCH_BAR)) -#define NEMO_SEARCH_BAR_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), NEMO_TYPE_SEARCH_BAR, NemoSearchBarClass)) - -typedef struct NemoSearchBarDetails NemoSearchBarDetails; - -typedef struct NemoSearchBar { - GtkBox parent; - NemoSearchBarDetails *details; -} NemoSearchBar; - -typedef struct { - GtkBoxClass parent_class; - - void (* activate) (NemoSearchBar *bar); - void (* cancel) (NemoSearchBar *bar); -} NemoSearchBarClass; - -GType nemo_search_bar_get_type (void); -GtkWidget* nemo_search_bar_new (void); - -GtkWidget * nemo_search_bar_get_entry (NemoSearchBar *bar); -GtkWidget * nemo_search_bar_borrow_entry (NemoSearchBar *bar); -void nemo_search_bar_return_entry (NemoSearchBar *bar); -void nemo_search_bar_grab_focus (NemoSearchBar *bar); -NemoQuery *nemo_search_bar_get_query (NemoSearchBar *bar); -void nemo_search_bar_clear (NemoSearchBar *bar); - -#endif /* NEMO_SEARCH_BAR_H */ diff -Nru nemo-2.6.7/src/nemo-toolbar.c nemo-2.8.6/src/nemo-toolbar.c --- nemo-2.6.7/src/nemo-toolbar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-toolbar.c 2015-11-27 10:00:22.000000000 +0000 @@ -63,21 +63,17 @@ GtkWidget *path_bar; GtkWidget *location_bar; - GtkWidget *search_bar; - GtkWidget *search_bar_revealer; GtkWidget *root_bar; GtkWidget *stack; gboolean show_main_bar; gboolean show_location_entry; - gboolean show_search_bar; gboolean show_root_bar; }; enum { PROP_ACTION_GROUP = 1, PROP_SHOW_LOCATION_ENTRY, - PROP_SHOW_SEARCH_BAR, PROP_SHOW_MAIN_BAR, NUM_PROPERTIES }; @@ -118,9 +114,6 @@ gtk_stack_set_visible_child_name (GTK_STACK (self->priv->stack), "path_bar"); } - gtk_revealer_set_reveal_child (GTK_REVEALER (self->priv->search_bar_revealer), - self->priv->show_search_bar); - gtk_widget_set_visible (self->priv->root_bar, self->priv->show_root_bar); @@ -432,15 +425,6 @@ gtk_widget_show_all (GTK_WIDGET (self->priv->view_box)); gtk_widget_set_margin_left (GTK_WIDGET (self->priv->view_box), 6); - /* search bar */ - self->priv->search_bar = nemo_search_bar_new (); - self->priv->search_bar_revealer = gtk_revealer_new (); - gtk_container_add (GTK_CONTAINER (self->priv->search_bar_revealer), - GTK_WIDGET (self->priv->search_bar)); - gtk_widget_show_all (self->priv->search_bar_revealer); - - gtk_box_pack_start (GTK_BOX (self), self->priv->search_bar_revealer, TRUE, TRUE, 0); - /* nemo patch */ g_signal_connect_swapped (nemo_preferences, "changed::" NEMO_PREFERENCES_SHOW_PREVIOUS_ICON_TOOLBAR, @@ -505,9 +489,6 @@ case PROP_SHOW_LOCATION_ENTRY: g_value_set_boolean (value, self->priv->show_location_entry); break; - case PROP_SHOW_SEARCH_BAR: - g_value_set_boolean (value, self->priv->show_search_bar); - break; case PROP_SHOW_MAIN_BAR: g_value_set_boolean (value, self->priv->show_main_bar); break; @@ -532,9 +513,6 @@ case PROP_SHOW_LOCATION_ENTRY: nemo_toolbar_set_show_location_entry (self, g_value_get_boolean (value)); break; - case PROP_SHOW_SEARCH_BAR: - nemo_toolbar_set_show_search_bar (self, g_value_get_boolean (value)); - break; case PROP_SHOW_MAIN_BAR: nemo_toolbar_set_show_main_bar (self, g_value_get_boolean (value)); break; @@ -549,7 +527,6 @@ { NemoToolbar *self = NEMO_TOOLBAR (obj); - g_clear_object (&self->priv->ui_manager); g_clear_object (&self->priv->action_group); g_signal_handlers_disconnect_by_func (nemo_preferences, @@ -582,18 +559,13 @@ "Whether to show the location entry instead of the pathbar", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - properties[PROP_SHOW_SEARCH_BAR] = - g_param_spec_boolean ("show-search-bar", - "Whether to show the search bar", - "Whether to show the search bar beside the toolbar", - FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_SHOW_MAIN_BAR] = g_param_spec_boolean ("show-main-bar", "Whether to show the main bar", "Whether to show the main toolbar", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_type_class_add_private (klass, sizeof (NemoToolbarClass)); g_object_class_install_properties (oclass, NUM_PROPERTIES, properties); } @@ -619,12 +591,6 @@ return self->priv->location_bar; } -GtkWidget * -nemo_toolbar_get_search_bar (NemoToolbar *self) -{ - return self->priv->search_bar; -} - gboolean nemo_toolbar_get_show_location_entry (NemoToolbar *self) { @@ -654,15 +620,3 @@ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_LOCATION_ENTRY]); } } - -void -nemo_toolbar_set_show_search_bar (NemoToolbar *self, - gboolean show_search_bar) -{ - if (show_search_bar != self->priv->show_search_bar) { - self->priv->show_search_bar = show_search_bar; - toolbar_update_appearance (self); - - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_SEARCH_BAR]); - } -} diff -Nru nemo-2.6.7/src/nemo-toolbar.h nemo-2.8.6/src/nemo-toolbar.h --- nemo-2.6.7/src/nemo-toolbar.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-toolbar.h 2015-11-27 10:00:22.000000000 +0000 @@ -67,13 +67,10 @@ gboolean nemo_toolbar_get_show_location_entry (NemoToolbar *self); GtkWidget *nemo_toolbar_get_path_bar (NemoToolbar *self); GtkWidget *nemo_toolbar_get_location_bar (NemoToolbar *self); -GtkWidget *nemo_toolbar_get_search_bar (NemoToolbar *self); void nemo_toolbar_set_show_main_bar (NemoToolbar *self, gboolean show_main_bar); void nemo_toolbar_set_show_location_entry (NemoToolbar *self, gboolean show_location_entry); -void nemo_toolbar_set_show_search_bar (NemoToolbar *self, - gboolean show_search_bar); #endif /* __NEMO_TOOLBAR_H__ */ diff -Nru nemo-2.6.7/src/nemo-tree-sidebar.c nemo-2.8.6/src/nemo-tree-sidebar.c --- nemo-2.6.7/src/nemo-tree-sidebar.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-tree-sidebar.c 2015-11-27 10:00:22.000000000 +0000 @@ -386,10 +386,8 @@ location = g_file_new_for_uri (uri); nemo_window_slot_open_location - (slot, - location, - view->details->activation_flags, - NULL); + (slot, location, + view->details->activation_flags); g_object_unref (location); } else { DEBUG ("Tree sidebar, launching application for %s", file_uri); @@ -412,10 +410,8 @@ location = g_file_new_for_uri (uri); nemo_window_slot_open_location - (slot, - location, - view->details->activation_flags, - NULL); + (slot, location, + view->details->activation_flags); g_object_unref (location); } } diff -Nru nemo-2.6.7/src/nemo-view.c nemo-2.8.6/src/nemo-view.c --- nemo-2.6.7/src/nemo-view.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-view.c 2015-11-27 10:00:22.000000000 +0000 @@ -60,6 +60,7 @@ #include #include +#include #include #include #include @@ -192,6 +193,12 @@ GtkActionGroup *dir_action_group; guint dir_merge_id; + GtkWidget *expander_menu_widget; + GtkWidget *menu_widget_ref; + GtkWidget *expander_label_widget; + guint menu_expander_click_handler_id; + gchar *expander_tooltip_text; + gboolean supports_zooming; GList *scripts_directory_list; @@ -1071,7 +1078,7 @@ static gboolean selection_contains_one_item_in_menu_callback (NemoView *view, GList *selection) { - if (eel_g_list_exactly_one_item (selection)) { + if (g_list_length (selection) == 1) { return TRUE; } @@ -1983,7 +1990,12 @@ fail: g_hash_table_destroy (data->added_locations); - eel_remove_weak_pointer (&data->directory_view); + + if (data->directory_view != NULL) { + g_object_remove_weak_pointer (G_OBJECT (data->directory_view), + (gpointer *) &data->directory_view); + } + g_free (data); } @@ -1997,7 +2009,8 @@ data->directory_view = directory_view; data->added_locations = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal, g_object_unref, NULL); - eel_add_weak_pointer (&data->directory_view); + g_object_add_weak_pointer (G_OBJECT (data->directory_view), + (gpointer *) &data->directory_view); return data; } @@ -2239,6 +2252,16 @@ } static void +click_to_rename_changed_callback (gpointer callback_data) +{ + NemoView *view; + + view = NEMO_VIEW (callback_data); + + NEMO_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->click_to_rename_mode_changed (view); +} + +static void nemo_to_menu_preferences_changed_callback (NemoView *view) { view->details->showing_bookmarks_in_to_menus = g_settings_get_boolean (nemo_preferences, @@ -2312,10 +2335,7 @@ return TRUE; } - scripts_directory_path = g_build_filename (g_get_user_data_dir (), - "nemo", - "scripts", - NULL); + scripts_directory_path = nemo_get_scripts_directory_path (); if (g_mkdir_with_parents (scripts_directory_path, 0755) == 0) { scripts_directory_uri = g_filename_to_uri (scripts_directory_path, NULL, NULL); @@ -2666,6 +2686,12 @@ /* Default to true; desktop-icon-view sets to false */ view->details->show_foreign_files = TRUE; + view->details->expander_menu_widget = NULL; + view->details->menu_widget_ref = NULL; + view->details->expander_label_widget = NULL; + view->details->menu_expander_click_handler_id = 0; + view->details->expander_tooltip_text = NULL; + view->details->non_ready_files = g_hash_table_new_full (file_and_directory_hash, file_and_directory_equal, @@ -2729,6 +2755,10 @@ "changed::" NEMO_PREFERENCES_CLICK_POLICY, G_CALLBACK(click_policy_changed_callback), view); + g_signal_connect_swapped (nemo_preferences, + "changed::" NEMO_PREFERENCES_CLICK_TO_RENAME, + G_CALLBACK(click_to_rename_changed_callback), + view); g_signal_connect_swapped (nemo_preferences, "changed::" NEMO_PREFERENCES_SORT_DIRECTORIES_FIRST, G_CALLBACK(sort_directories_first_changed_callback), view); @@ -2841,6 +2871,15 @@ view = NEMO_VIEW (object); + if (view->details->expander_menu_widget != NULL) { + gtk_widget_destroy (view->details->expander_menu_widget); + } + + if (view->details->menu_expander_click_handler_id > 0) { + g_signal_handler_disconnect (view->details->menu_widget_ref, view->details->menu_expander_click_handler_id); + view->details->menu_expander_click_handler_id = 0; + } + disconnect_model_handlers (view); if (view->details->bookmarks_changed_id != 0) { @@ -2923,6 +2962,8 @@ schedule_update_menus_callback, view); g_signal_handlers_disconnect_by_func (nemo_preferences, click_policy_changed_callback, view); + g_signal_handlers_disconnect_by_func (nemo_preferences, + click_to_rename_changed_callback, view); g_signal_handlers_disconnect_by_func (nemo_preferences, sort_directories_first_changed_callback, view); g_signal_handlers_disconnect_by_func (nemo_window_state, @@ -3341,7 +3382,11 @@ { g_assert (data != NULL); - eel_remove_weak_pointer (&data->directory_view); + if (data->directory_view != NULL) { + g_object_remove_weak_pointer (G_OBJECT (data->directory_view), + (gpointer *) &data->directory_view); + } + nemo_file_list_free (data->added_files); g_free (data); } @@ -3369,7 +3414,8 @@ copy_move_done_data = g_new0 (CopyMoveDoneData, 1); copy_move_done_data->directory_view = directory_view; - eel_add_weak_pointer (©_move_done_data->directory_view); + g_object_add_weak_pointer (G_OBJECT (copy_move_done_data->directory_view), + (gpointer *) ©_move_done_data->directory_view); /* We need to run after the default handler adds the folder we want to * operate on. The ADD_FILE signal is registered as G_SIGNAL_RUN_LAST, so we @@ -3905,7 +3951,7 @@ g_object_ref (G_OBJECT (view)); - now = eel_get_system_time(); + now = g_get_monotonic_time (); time_delta = now - view->details->last_queued; if (time_delta < UPDATE_INTERVAL_RESET*1000) { @@ -3930,7 +3976,7 @@ schedule_changes (NemoView *view) { /* Remember when the change was queued */ - view->details->last_queued = eel_get_system_time(); + view->details->last_queued = g_get_monotonic_time (); /* No need to schedule if there are already changes pending or during loading */ if (view->details->changes_timeout_id != 0 || @@ -5104,6 +5150,9 @@ for (index = 0; index < bookmark_count; ++index) { bookmark = nemo_bookmark_list_item_at (view->details->bookmarks, index); + /* Unlike the sidebar or the bookmarks menu, we are using bookmarks as + file operation targets, not locations to open. As such, we should + never show unmounted/invalid locations in the move-to/copy-to menu */ if (!nemo_bookmark_uri_get_exists (bookmark)) { continue; } @@ -6590,6 +6639,163 @@ g_free (templates_directory_uri); } +static void ensure_expander_attached (NemoView *view, GtkWidget *menu_item); + +static void +on_expander_destroyed (GtkWidget *widget, NemoView *view) +{ + view->details->expander_menu_widget = NULL; +} + +static void +on_menu_destroyed (GtkWidget *widget, NemoView *view) +{ + view->details->menu_widget_ref = NULL; + view->details->expander_label_widget = NULL; +} + +static gboolean +pointer_in_expander_widget (GtkWidget *widget, gint x, gint y) +{ + GtkAllocation alloc; + + gtk_widget_get_allocation (widget, &alloc); + + return ((x >= alloc.x) && + (x <= alloc.x + alloc.width) && + (y >= alloc.y) && + (y <= alloc.y + alloc.height)); +} + +static gboolean +on_query_menu_tooltip (GtkWidget *widget, + gint x, + gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gpointer user_data) +{ + NemoView *view = NEMO_VIEW (user_data); + + if (view->details->expander_menu_widget != NULL && + pointer_in_expander_widget (view->details->expander_menu_widget, x, y)) { + gtk_tooltip_set_text (tooltip, view->details->expander_tooltip_text); + return TRUE; + } + + gtk_tooltip_set_text (tooltip, NULL); + return FALSE; +} + +static GtkWidget * +get_expander_widget_and_tooltip (NemoView *view, gchar **tooltip) +{ + if (view->details->expander_menu_widget != NULL) + gtk_widget_destroy (view->details->expander_menu_widget); + + gboolean complex_mode = g_settings_get_boolean (nemo_preferences, + NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS); + + GtkWidget *widget = gtk_image_new_from_icon_name (complex_mode ? "collapse-menu-symbolic" : "expand-menu-symbolic", + GTK_ICON_SIZE_MENU); + + *tooltip = complex_mode ? _("Show less actions") : _("Show more actions"); + + g_signal_connect (widget, "destroy", G_CALLBACK (on_expander_destroyed), view); + + return widget; +} + +static void +attach_expander (NemoView *view, GtkWidget *widget, GtkWidget *expander) +{ + GtkWidget *parent = gtk_widget_get_parent (widget); + GtkWidget *hbox = NULL; + + if (!GTK_IS_LABEL (widget) && !GTK_IS_BOX (widget)) + return; + + if (GTK_IS_LABEL (widget)) { + g_object_ref (widget); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + + gtk_container_remove (GTK_CONTAINER (parent), widget); + gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (parent), hbox); + + view->details->expander_label_widget = widget; + + g_object_unref (widget); + } + + if (GTK_IS_BOX (widget)) { + hbox = widget; + } + + gtk_box_pack_end (GTK_BOX (hbox), expander, FALSE, FALSE, 0); +} + +static gboolean +on_menu_button_released (GtkWidget *widget, GdkEvent *event, NemoView *view) +{ + if (event->button.button != GDK_BUTTON_PRIMARY) + return FALSE; + + gint ev_x = (gint) event->button.x; + gint ev_y = (gint) event->button.y; + + if (pointer_in_expander_widget (view->details->expander_menu_widget, ev_x, ev_y)) { + g_settings_set_boolean (nemo_preferences, + NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS, + !g_settings_get_boolean (nemo_preferences, + NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS)); + ensure_expander_attached (view, widget); + schedule_update_menus (view); + return TRUE; + } + + return FALSE; +} + +static void +ensure_expander_attached (NemoView *view, GtkWidget *menu_item) +{ + gchar *tooltip = NULL; + + GtkWidget *expander = get_expander_widget_and_tooltip (view, &tooltip); + + view->details->expander_menu_widget = expander; + + g_clear_pointer (&view->details->expander_tooltip_text, g_free); + view->details->expander_tooltip_text = g_strdup (tooltip); + + GtkWidget *child = gtk_bin_get_child (GTK_BIN (menu_item)); + + attach_expander (view, child, expander); + + gtk_widget_show_all (menu_item); + + if (view->details->menu_expander_click_handler_id == 0) { + view->details->menu_expander_click_handler_id = g_signal_connect (menu_item, + "button-release-event", + G_CALLBACK (on_menu_button_released), + view); + } + + if (view->details->menu_widget_ref == NULL) { + view->details->menu_widget_ref = menu_item; + g_signal_connect (menu_item, "destroy", G_CALLBACK (on_menu_destroyed), view); + } + + gtk_widget_set_has_tooltip (menu_item, TRUE); + + g_signal_handlers_disconnect_matched (menu_item, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, on_query_menu_tooltip, NULL); + + g_signal_connect (menu_item, "query-tooltip", G_CALLBACK (on_query_menu_tooltip), view); +} + static GtkMenu * create_popup_menu (NemoView *view, const char *popup_path) { @@ -7084,7 +7290,7 @@ l = g_list_append (l, nemo_file_get_existing (location)); nemo_view_set_selection (view, l); } else { - nemo_window_slot_go_to (view->details->slot, location, FALSE); + nemo_window_slot_open_location (view->details->slot, location, 0); } g_free (uri); @@ -7799,7 +8005,7 @@ selection = nemo_view_get_selection (view); - if (!eel_g_list_exactly_one_item (selection)) { + if (g_list_length (selection) != 1) { nemo_file_list_free (selection); return; } @@ -8435,12 +8641,7 @@ gtk_ui_manager_insert_action_group (ui_manager, action_group, -1); g_object_unref (action_group); /* owned by ui manager */ - if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS)) { - view->details->dir_merge_id = gtk_ui_manager_add_ui_from_resource (ui_manager, "/org/nemo/nemo-directory-view-ui.xml", NULL); - } - else { - view->details->dir_merge_id = gtk_ui_manager_add_ui_from_resource (ui_manager, "/org/nemo/nemo-directory-view-ui-light.xml", NULL); - } + view->details->dir_merge_id = gtk_ui_manager_add_ui_from_resource (ui_manager, "/org/nemo/nemo-directory-view-ui.xml", NULL); view->details->scripts_invalid = TRUE; view->details->templates_invalid = TRUE; @@ -8649,11 +8850,11 @@ if (nemo_file_is_nemo_link (file)) { uri = nemo_file_get_activation_uri (file); if (uri != NULL && - (eel_istr_has_prefix (uri, "ftp:") || - eel_istr_has_prefix (uri, "ssh:") || - eel_istr_has_prefix (uri, "sftp:") || - eel_istr_has_prefix (uri, "dav:") || - eel_istr_has_prefix (uri, "davs:"))) { + (g_str_has_prefix (uri, "ftp:") || + g_str_has_prefix (uri, "ssh:") || + g_str_has_prefix (uri, "sftp:") || + g_str_has_prefix (uri, "dav:") || + g_str_has_prefix (uri, "davs:"))) { *show_connect = TRUE; } g_free (uri); @@ -9398,6 +9599,34 @@ return FALSE; } +const gchar *complex_item_paths[] = { + "/selection/File Clipboard Actions/Duplicate", + "/selection/File Actions/Create Link", + "/selection/File Actions/CopyToMenu", + "/selection/File Actions/MoveToMenu", + }; + +static void +update_complex_popup_items (NemoView *view) +{ + GtkWidget *item; + GtkAction *action; + gint i; + + gboolean complex_mode = g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_CONTEXT_MENUS_SHOW_ALL_ACTIONS); + + for (i = 0; i < G_N_ELEMENTS (complex_item_paths); i++) { + item = gtk_ui_manager_get_widget (nemo_window_get_ui_manager (view->details->window), + complex_item_paths[i]); + + action = gtk_ui_manager_get_action (nemo_window_get_ui_manager (view->details->window), + complex_item_paths[i]); + + if (item != NULL) + gtk_widget_set_visible (item, complex_mode && gtk_action_get_visible (action)); + } +} + static void real_update_menus (NemoView *view) { @@ -9449,7 +9678,7 @@ can_duplicate_files = can_create_files && can_copy_files; can_link_files = can_create_files && can_copy_files; - + action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_RENAME); /* rename sensitivity depending on selection */ @@ -9531,6 +9760,11 @@ label_with_underscore ? label_with_underscore : _("_Open"), NULL); + if (view->details->expander_label_widget) { + gtk_label_set_text_with_mnemonic (GTK_LABEL (view->details->expander_label_widget), + label_with_underscore ? label_with_underscore : _("_Open")); + } + menuitem = gtk_ui_manager_get_widget ( nemo_window_get_ui_manager (view->details->window), NEMO_VIEW_MENU_PATH_OPEN); @@ -9543,6 +9777,8 @@ nemo_window_get_ui_manager (view->details->window), NEMO_VIEW_POPUP_PATH_OPEN); + ensure_expander_attached (view, menuitem); + /* Only force displaying the icon if it is an application icon */ gtk_image_menu_item_set_always_show_image ( GTK_IMAGE_MENU_ITEM (menuitem), app_icon != NULL); @@ -9776,7 +10012,8 @@ /* move to next pane: works if file is cuttable, and next pane is writable */ action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_MOVE_TO_NEXT_PANE); - gtk_action_set_visible (action, can_delete_files && next_pane_is_writable && !selection_contains_recent); + gtk_action_set_visible (action, can_delete_files && + next_pane_is_writable && !selection_contains_recent); show_desktop_target = g_settings_get_boolean (nemo_desktop_preferences, NEMO_PREFERENCES_SHOW_DESKTOP) && @@ -9785,6 +10022,7 @@ action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_COPY_TO_HOME); gtk_action_set_sensitive (action, can_copy_files); + action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_COPY_TO_DESKTOP); gtk_action_set_sensitive (action, can_copy_files); @@ -9802,6 +10040,7 @@ action = gtk_action_group_get_action (view->details->dir_action_group, "CopyToMenu"); gtk_action_set_sensitive (action, can_copy_files); + action = gtk_action_group_get_action (view->details->dir_action_group, "MoveToMenu"); gtk_action_set_sensitive (action, can_delete_files); @@ -9820,6 +10059,8 @@ selection_count == 1 && (selection_contains_recent || showing_search)); + update_complex_popup_items (view); + nemo_file_list_free (selection); } diff -Nru nemo-2.6.7/src/nemo-view.h nemo-2.8.6/src/nemo-view.h --- nemo-2.6.7/src/nemo-view.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-view.h 2015-11-27 10:00:22.000000000 +0000 @@ -284,7 +284,8 @@ * Icon and list views respond by synchronizing to the new preference * values and forcing an update if appropriate. */ - void (* click_policy_changed) (NemoView *view); + void (* click_policy_changed) (NemoView *view); + void (* click_to_rename_mode_changed) (NemoView *view); void (* sort_directories_first_changed) (NemoView *view); /* Get the id string for this view. Its a constant string, not memory managed */ diff -Nru nemo-2.6.7/src/nemo-window-bookmarks.c nemo-2.8.6/src/nemo-window-bookmarks.c --- nemo-2.6.7/src/nemo-window-bookmarks.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-bookmarks.c 2015-11-27 10:00:22.000000000 +0000 @@ -263,22 +263,16 @@ static void activate_bookmark_in_menu_item (GtkAction *action, gpointer user_data) { - NemoWindowSlot *slot; - BookmarkHolder *holder; - GFile *location; - - holder = (BookmarkHolder *)user_data; - - if (!nemo_bookmark_uri_get_exists (holder->bookmark)) { - holder->failed_callback (holder->window, holder->bookmark); - } else { - location = nemo_bookmark_get_location (holder->bookmark); - slot = nemo_window_get_active_slot (holder->window); - nemo_window_slot_go_to (slot, - location, - nemo_event_should_open_in_new_tab ()); - g_object_unref (location); - } + NemoWindowSlot *slot; + BookmarkHolder *holder; + GFile *location; + + holder = (BookmarkHolder *)user_data; + + location = nemo_bookmark_get_location (holder->bookmark); + slot = nemo_window_get_active_slot (holder->window); + nemo_window_slot_open_location (slot, location, nemo_event_get_window_open_flags ()); + g_object_unref (location); } void @@ -383,10 +377,6 @@ for (index = 0; index < bookmark_count; ++index) { bookmark = nemo_bookmark_list_item_at (bookmarks, index); - if (!nemo_bookmark_uri_get_exists (bookmark)) { - continue; - } - nemo_menus_append_bookmark_to_menu (NEMO_WINDOW (window), bookmark, diff -Nru nemo-2.6.7/src/nemo-window.c nemo-2.8.6/src/nemo-window.c --- nemo-2.6.7/src/nemo-window.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window.c 2015-11-27 10:00:22.000000000 +0000 @@ -38,7 +38,6 @@ #include "nemo-mime-actions.h" #include "nemo-notebook.h" #include "nemo-places-sidebar.h" -#include "nemo-search-bar.h" #include "nemo-tree-sidebar.h" #include "nemo-view-factory.h" #include "nemo-window-manage-views.h" @@ -116,6 +115,8 @@ PROMPT_FOR_LOCATION, LOADING_URI, HIDDEN_FILES_MODE_CHANGED, + SLOT_ADDED, + SLOT_REMOVED, LAST_SIGNAL }; @@ -171,21 +172,12 @@ } void -nemo_window_sync_status (NemoWindow *window) -{ - NemoWindowSlot *slot; - - slot = nemo_window_get_active_slot (window); - nemo_window_push_status (window, slot->status_text); -} - -void nemo_window_go_to (NemoWindow *window, GFile *location) { g_return_if_fail (NEMO_IS_WINDOW (window)); - nemo_window_slot_go_to (nemo_window_get_active_slot (window), - location, FALSE); + nemo_window_slot_open_location (nemo_window_get_active_slot (window), + location, 0); } void @@ -196,17 +188,26 @@ { g_return_if_fail (NEMO_IS_WINDOW (window)); - nemo_window_slot_go_to_full (nemo_window_get_active_slot (window), - location, FALSE, callback, user_data); + nemo_window_slot_open_location_full (nemo_window_get_active_slot (window), + location, 0, NULL, callback, user_data); } -static gboolean -nemo_window_go_up_signal (NemoWindow *window, gboolean close_behind) +static void +nemo_window_go_up_signal (NemoWindow *window) { - nemo_window_slot_go_up (nemo_window_get_active_slot (window), - close_behind, FALSE); + nemo_window_slot_go_up (nemo_window_get_active_slot (window), 0); +} - return TRUE; +void +nemo_window_slot_removed (NemoWindow *window, NemoWindowSlot *slot) +{ + g_signal_emit (window, signals[SLOT_REMOVED], 0, slot); +} + +void +nemo_window_slot_added (NemoWindow *window, NemoWindowSlot *slot) +{ + g_signal_emit (window, signals[SLOT_ADDED], 0, slot); } void @@ -239,7 +240,7 @@ new_slot = nemo_window_pane_open_slot (current_slot->pane, flags); nemo_window_set_active_slot (window, new_slot); - nemo_window_slot_go_to (new_slot, location, FALSE); + nemo_window_slot_open_location (new_slot, location, 0); g_object_unref (location); } } @@ -265,20 +266,24 @@ nemo_window_sync_allow_stop (NemoWindow *window, NemoWindowSlot *slot) { - GtkAction *action; + GtkAction *stop_action; + GtkAction *reload_action; gboolean allow_stop, slot_is_active; NemoNotebook *notebook; - action = gtk_action_group_get_action (nemo_window_get_main_action_group (window), - NEMO_ACTION_STOP); - allow_stop = gtk_action_get_sensitive (action); + stop_action = gtk_action_group_get_action (nemo_window_get_main_action_group (window), + NEMO_ACTION_STOP); + reload_action = gtk_action_group_get_action (nemo_window_get_main_action_group (window), + NEMO_ACTION_RELOAD); + allow_stop = gtk_action_get_sensitive (stop_action); slot_is_active = (slot == nemo_window_get_active_slot (window)); if (!slot_is_active || allow_stop != slot->allow_stop) { if (slot_is_active) { - gtk_action_set_sensitive (action, slot->allow_stop); + gtk_action_set_visible (stop_action, slot->allow_stop); + gtk_action_set_visible (reload_action, !slot->allow_stop); } if (gtk_widget_get_realized (GTK_WIDGET (window))) { @@ -553,6 +558,7 @@ G_OBJECT_CLASS (nemo_window_parent_class)->constructed (self); + grid = gtk_grid_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL); gtk_widget_show (grid); @@ -1097,6 +1103,7 @@ NemoWindow *window; NemoWindowSlot *active_slot; NemoView *view; + GtkWidget *focus_widget; int i; window = NEMO_WINDOW (widget); @@ -1115,6 +1122,17 @@ } } + focus_widget = gtk_window_get_focus (GTK_WINDOW (window)); + if (view != NULL && focus_widget != NULL && + GTK_IS_EDITABLE (focus_widget)) { + /* if we have input focus on a GtkEditable (e.g. a GtkEntry), forward + * the event to it before activating accelerator bindings too. + */ + if (gtk_window_propagate_key_event (GTK_WINDOW (window), event)) { + return TRUE; + } + } + for (i = 0; i < G_N_ELEMENTS (extra_window_keybindings); i++) { if (extra_window_keybindings[i].keyval == event->keyval) { const GList *action_groups; @@ -1886,6 +1904,14 @@ return extra_pane->active_slot; } +GList * +nemo_window_get_panes (NemoWindow *window) +{ + g_assert (NEMO_IS_WINDOW (window)); + + return window->details->panes; +} + static void window_set_search_action_text (NemoWindow *window, gboolean setting) @@ -1963,16 +1989,12 @@ return FALSE; } -static void -nemo_window_go_back (NemoWindow *window) -{ - nemo_window_back_or_forward (window, TRUE, 0, FALSE); -} - -static void -nemo_window_go_forward (NemoWindow *window) +static gboolean +nemo_window_delete_event (GtkWidget *widget, + GdkEventAny *event) { - nemo_window_back_or_forward (window, FALSE, 0, FALSE); + nemo_window_close (NEMO_WINDOW (widget)); + return FALSE; } static gboolean @@ -1985,10 +2007,10 @@ window = NEMO_WINDOW (widget); if (mouse_extra_buttons && (event->button == mouse_back_button)) { - nemo_window_go_back (window); + nemo_window_back_or_forward (window, TRUE, 0, 0); handled = TRUE; } else if (mouse_extra_buttons && (event->button == mouse_forward_button)) { - nemo_window_go_forward (window); + nemo_window_back_or_forward (window, FALSE, 0, 0); handled = TRUE; } else if (GTK_WIDGET_CLASS (nemo_window_parent_class)->button_press_event) { handled = GTK_WIDGET_CLASS (nemo_window_parent_class)->button_press_event (widget, event); @@ -2040,6 +2062,8 @@ static void nemo_window_init (NemoWindow *window) { + GtkWindowGroup *window_group; + window->details = G_TYPE_INSTANCE_GET_PRIVATE (window, NEMO_TYPE_WINDOW, NemoWindowDetails); window->details->panes = NULL; @@ -2061,6 +2085,10 @@ window->details->ignore_meta_sort_direction = SORT_NULL; window->details->ignore_meta_tighter_layout = TIGHTER_NULL; + window_group = gtk_window_group_new (); + gtk_window_group_add_window (window_group, GTK_WINDOW (window)); + g_object_unref (window_group); + /* Set initial window title */ gtk_window_set_title (GTK_WINDOW (window), _("Nemo")); } @@ -2106,6 +2134,7 @@ wclass->key_release_event = nemo_window_key_release_event; wclass->window_state_event = nemo_window_state_event; wclass->button_press_event = nemo_window_button_press_event; + wclass->delete_event = nemo_window_delete_event; class->get_icon = real_get_icon; class->close = real_window_close; @@ -2133,13 +2162,13 @@ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); signals[GO_UP] = - g_signal_new ("go_up", + g_signal_new ("go-up", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (NemoWindowClass, go_up), - g_signal_accumulator_true_handled, NULL, + NULL, NULL, g_cclosure_marshal_generic, - G_TYPE_BOOLEAN, 1, G_TYPE_BOOLEAN); + G_TYPE_NONE, 0); signals[RELOAD] = g_signal_new ("reload", G_TYPE_FROM_CLASS (class), @@ -2173,11 +2202,26 @@ g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); + signals[SLOT_ADDED] = + g_signal_new ("slot-added", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, NEMO_TYPE_WINDOW_SLOT); + signals[SLOT_REMOVED] = + g_signal_new ("slot-removed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, NEMO_TYPE_WINDOW_SLOT); binding_set = gtk_binding_set_by_class (class); gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, - "go_up", 1, - G_TYPE_BOOLEAN, FALSE); + "go-up", 0); gtk_binding_entry_add_signal (binding_set, GDK_KEY_F5, 0, "reload", 0); gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, 0, @@ -2213,6 +2257,14 @@ g_type_class_add_private (oclass, sizeof (NemoWindowDetails)); } +NemoWindow * +nemo_window_new (GdkScreen *screen) +{ + return g_object_new (NEMO_TYPE_WINDOW, + "screen", screen, + NULL); +} + void nemo_window_split_view_on (NemoWindow *window) { @@ -2236,7 +2288,7 @@ location = g_file_new_for_path (g_get_home_dir ()); } - nemo_window_slot_go_to (slot, location, FALSE); + nemo_window_slot_open_location (slot, location, 0); g_object_unref (location); window_set_search_action_text (window, FALSE); @@ -2456,3 +2508,25 @@ { window->details->ignore_meta_tighter_layout = tighter; } + +NemoWindowOpenFlags +nemo_event_get_window_open_flags (void) +{ + NemoWindowOpenFlags flags = 0; + GdkEvent *event; + + event = gtk_get_current_event (); + + if (event == NULL) { + return flags; + } + + if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) && + (event->button.button == 2)) { + flags |= NEMO_WINDOW_OPEN_FLAG_NEW_TAB; + } + + gdk_event_free (event); + + return flags; +} diff -Nru nemo-2.6.7/src/nemo-window.h nemo-2.8.6/src/nemo-window.h --- nemo-2.6.7/src/nemo-window.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window.h 2015-11-27 10:00:22.000000000 +0000 @@ -97,9 +97,8 @@ void (* close) (NemoWindow *window); /* Signals used only for keybindings */ - gboolean (* go_up) (NemoWindow *window, - gboolean close); - void (* reload) (NemoWindow *window); + void (* go_up) (NemoWindow *window); + void (* reload) (NemoWindow *window); } NemoWindowClass; struct NemoWindow { @@ -109,6 +108,7 @@ }; GType nemo_window_get_type (void); +NemoWindow * nemo_window_new (GdkScreen *screen); void nemo_window_close (NemoWindow *window); void nemo_window_connect_content_view (NemoWindow *window, @@ -142,15 +142,21 @@ void nemo_window_view_visible (NemoWindow *window, NemoView *view); NemoWindowSlot * nemo_window_get_active_slot (NemoWindow *window); +GList * nemo_window_get_panes (NemoWindow *window); +NemoWindowSlot * nemo_window_get_active_slot (NemoWindow *window); void nemo_window_push_status (NemoWindow *window, const char *text); +GtkWidget * nemo_window_ensure_location_bar (NemoWindow *window); +void nemo_window_sync_location_widgets (NemoWindow *window); +void nemo_window_sync_search_widgets (NemoWindow *window); +void nemo_window_grab_focus (NemoWindow *window); void nemo_window_hide_sidebar (NemoWindow *window); void nemo_window_show_sidebar (NemoWindow *window); void nemo_window_back_or_forward (NemoWindow *window, gboolean back, guint distance, - gboolean new_tab); + NemoWindowOpenFlags flags); void nemo_window_split_view_on (NemoWindow *window); void nemo_window_split_view_off (NemoWindow *window); gboolean nemo_window_split_view_showing (NemoWindow *window); @@ -184,4 +190,9 @@ gint nemo_window_get_ignore_meta_tighter_layout (NemoWindow *window); void nemo_window_set_ignore_meta_tighter_layout (NemoWindow *window, gint tighter); +NemoWindowOpenFlags nemo_event_get_window_open_flags (void); + +void nemo_window_slot_added (NemoWindow *window, NemoWindowSlot *slot); +void nemo_window_slot_removed (NemoWindow *window, NemoWindowSlot *slot); + #endif diff -Nru nemo-2.6.7/src/nemo-window-manage-views.c nemo-2.8.6/src/nemo-window-manage-views.c --- nemo-2.6.7/src/nemo-window-manage-views.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-manage-views.c 2015-11-27 10:00:22.000000000 +0000 @@ -32,7 +32,6 @@ #include "nemo-application.h" #include "nemo-floating-bar.h" #include "nemo-location-bar.h" -#include "nemo-search-bar.h" #include "nemo-pathbar.h" #include "nemo-window-private.h" #include "nemo-window-slot.h" @@ -126,9 +125,6 @@ slot->last_location_bookmark = slot->current_location_bookmark; slot->current_location_bookmark = (location == NULL) ? NULL : nemo_bookmark_new (location, NULL, NULL); - if (slot->current_location_bookmark != NULL) { - nemo_bookmark_set_visited (slot->current_location_bookmark, TRUE); - } } } @@ -325,7 +321,7 @@ nemo_path_bar_clear_buttons (NEMO_PATH_BAR (slot->pane->path_bar)); } - nemo_window_slot_go_to (slot, go_to_file, FALSE); + nemo_window_slot_open_location (slot, go_to_file, 0); g_object_unref (go_to_file); } else { nemo_window_slot_go_home (slot, FALSE); @@ -918,7 +914,7 @@ root = g_file_new_for_path ("/"); /* the last fallback is to go to a known place that can't be deleted! */ - nemo_window_slot_go_to (slot, location, FALSE); + nemo_window_slot_open_location (slot, location, 0); g_object_unref (root); } } else { @@ -1106,6 +1102,23 @@ g_free (uri); } +static void +nemo_window_slot_emit_location_change (NemoWindowSlot *slot, + GFile *from, + GFile *to) +{ + char *from_uri = NULL; + char *to_uri = NULL; + + if (from != NULL) + from_uri = g_file_get_uri (from); + if (to != NULL) + to_uri = g_file_get_uri (to); + g_signal_emit_by_name (slot, "location-changed", from_uri, to_uri); + g_free (to_uri); + g_free (from_uri); +} + /* reports location change to window's "loading-uri" clients, i.e. * sidebar panels [used when switching tabs]. It will emit the pending * location, or the existing location if none is pending. @@ -1378,12 +1391,6 @@ g_free (data); } -static void -set_visited (NemoBookmark *bookmark) -{ - nemo_bookmark_set_visited (bookmark, TRUE); -} - /* Handle the changes for the NemoWindow itself. */ static void update_for_new_location (NemoWindowSlot *slot) @@ -1394,8 +1401,6 @@ NemoDirectory *directory; gboolean location_really_changed; FindMountData *data; - NemoBookmarkList *bm_list = nemo_bookmark_list_get_default (); - GList *matching_bookmarks; window = nemo_window_slot_get_window (slot); new_location = slot->pending_location; @@ -1403,19 +1408,14 @@ set_displayed_location (slot, new_location); - gchar *uri = g_file_get_uri (new_location); - matching_bookmarks = nemo_bookmark_list_get_for_uri (bm_list, uri); - g_free (uri); - - g_list_foreach (matching_bookmarks, (GFunc) set_visited, NULL); - g_list_free (matching_bookmarks); - update_history (slot, slot->location_change_type, new_location); location_really_changed = slot->location == NULL || !g_file_equal (slot->location, new_location); - + + nemo_window_slot_emit_location_change (slot, slot->location, new_location); + /* Set the new location. */ g_clear_object (&slot->location); slot->location = new_location; @@ -1450,8 +1450,6 @@ directory = nemo_directory_get (slot->location); - nemo_window_slot_update_query_editor (slot); - if (nemo_directory_is_in_trash (directory)) { nemo_window_slot_show_trash_bar (slot); } @@ -1805,7 +1803,7 @@ nemo_window_back_or_forward (NemoWindow *window, gboolean back, guint distance, - gboolean new_tab) + NemoWindowOpenFlags flags) { NemoWindowSlot *slot; GList *list; @@ -1831,10 +1829,8 @@ bookmark = g_list_nth_data (list, distance); location = nemo_bookmark_get_location (bookmark); - if (new_tab) { - nemo_window_slot_open_location_full (slot, location, - NEMO_WINDOW_OPEN_FLAG_NEW_TAB, - NULL, NULL, NULL); + if (flags != 0) { + nemo_window_slot_open_location (slot, location, flags); } else { char *scroll_pos; diff -Nru nemo-2.6.7/src/nemo-window-menus.c nemo-2.8.6/src/nemo-window-menus.c --- nemo-2.6.7/src/nemo-window-menus.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-menus.c 2015-11-27 10:00:22.000000000 +0000 @@ -40,7 +40,6 @@ #include "nemo-window-bookmarks.h" #include "nemo-window-private.h" #include "nemo-desktop-window.h" -#include "nemo-search-bar.h" #include "nemo-location-bar.h" #include "nemo-icon-view.h" #include "nemo-list-view.h" @@ -73,7 +72,6 @@ #define NETWORK_URI "network:" #define COMPUTER_URI "computer:" -#define BURN_CD_URI "burn:" static void action_close_window_slot_callback (GtkAction *action, @@ -135,8 +133,8 @@ window = NEMO_WINDOW (user_data); slot = nemo_window_get_active_slot (window); - nemo_window_slot_go_home (slot, - nemo_event_should_open_in_new_tab ()); + nemo_window_slot_go_home (slot, + nemo_event_get_window_open_flags ()); } static void @@ -151,9 +149,8 @@ slot = nemo_window_get_active_slot (window); computer = g_file_new_for_uri (COMPUTER_URI); - nemo_window_slot_go_to (slot, - computer, - nemo_event_should_open_in_new_tab ()); + nemo_window_slot_open_location (slot, computer, + nemo_event_get_window_open_flags ()); g_object_unref (computer); } @@ -169,9 +166,8 @@ slot = nemo_window_get_active_slot (window); network = g_file_new_for_uri (NETWORK_URI); - nemo_window_slot_go_to (slot, - network, - nemo_event_should_open_in_new_tab ()); + nemo_window_slot_open_location (slot, network, + nemo_event_get_window_open_flags ()); g_object_unref (network); } @@ -190,9 +186,8 @@ path = nemo_get_templates_directory (); location = g_file_new_for_path (path); g_free (path); - nemo_window_slot_go_to (slot, - location, - nemo_event_should_open_in_new_tab ()); + nemo_window_slot_open_location (slot, location, + nemo_event_get_window_open_flags ()); g_object_unref (location); } @@ -208,9 +203,8 @@ slot = nemo_window_get_active_slot (window); trash = g_file_new_for_uri ("trash:///"); - nemo_window_slot_go_to (slot, - trash, - nemo_event_should_open_in_new_tab ()); + nemo_window_slot_open_location (slot, trash, + nemo_event_get_window_open_flags ()); g_object_unref (trash); } @@ -341,7 +335,7 @@ NemoWindowSlot *slot; slot = nemo_window_get_active_slot (window); - nemo_window_slot_go_up (slot, FALSE, nemo_event_should_open_in_new_tab ()); + nemo_window_slot_go_up (slot, nemo_event_get_window_open_flags ()); } static void @@ -486,7 +480,7 @@ gpointer user_data) { nemo_window_back_or_forward (NEMO_WINDOW (user_data), - TRUE, 0, nemo_event_should_open_in_new_tab ()); + TRUE, 0, nemo_event_get_window_open_flags ()); } static void @@ -494,7 +488,7 @@ gpointer user_data) { nemo_window_back_or_forward (NEMO_WINDOW (user_data), - FALSE, 0, nemo_event_should_open_in_new_tab ()); + FALSE, 0, nemo_event_get_window_open_flags ()); } static void @@ -520,7 +514,8 @@ } location = nemo_window_slot_get_location (next_pane->active_slot); if (location) { - nemo_window_slot_go_to (nemo_window_get_active_slot (window), location, FALSE); + nemo_window_slot_open_location (nemo_window_get_active_slot (window), + location, 0); g_object_unref (location); } } @@ -768,7 +763,7 @@ application, gtk_window_get_screen (GTK_WINDOW (current_window))); - nemo_window_slot_open_location (nemo_window_get_active_slot (new_window), loc, 0, NULL); + nemo_window_slot_open_location (nemo_window_get_active_slot (new_window), loc, 0); g_object_unref (loc); g_free (uri); } diff -Nru nemo-2.6.7/src/nemo-window-pane.c nemo-2.8.6/src/nemo-window-pane.c --- nemo-2.6.7/src/nemo-window-pane.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-pane.c 2015-11-27 10:00:22.000000000 +0000 @@ -68,10 +68,8 @@ { gboolean res = FALSE; - if ((gtk_widget_get_ancestor (widget, NEMO_TYPE_LOCATION_BAR) != NULL && - pane->temporary_navigation_bar) || - (gtk_widget_get_ancestor (widget, NEMO_TYPE_SEARCH_BAR) != NULL && - pane->temporary_search_bar)) + if (gtk_widget_get_ancestor (widget, NEMO_TYPE_LOCATION_BAR) != NULL && + pane->temporary_navigation_bar) res = TRUE; return res; @@ -183,42 +181,6 @@ } static void -search_bar_activate_callback (NemoSearchBar *bar, - NemoWindowPane *pane) -{ - char *uri, *current_uri; - NemoDirectory *directory; - NemoSearchDirectory *search_directory; - NemoQuery *query; - GFile *location; - - uri = nemo_search_directory_generate_new_uri (); - location = g_file_new_for_uri (uri); - - directory = nemo_directory_get (location); - g_assert (NEMO_IS_SEARCH_DIRECTORY (directory)); - - search_directory = NEMO_SEARCH_DIRECTORY (directory); - query = nemo_search_bar_get_query (NEMO_SEARCH_BAR (pane->search_bar)); - - if (query != NULL) { - current_uri = nemo_window_slot_get_location_uri (pane->active_slot); - - nemo_query_set_location (query, current_uri); - nemo_search_directory_set_query (search_directory, query); - - g_free (current_uri); - g_object_unref (query); - } - - nemo_window_slot_go_to (pane->active_slot, location, FALSE); - - nemo_directory_unref (directory); - g_object_unref (location); - g_free (uri); -} - -static void nemo_window_pane_hide_temporary_bars (NemoWindowPane *pane) { NemoWindowSlot *slot; @@ -236,7 +198,6 @@ */ if (NEMO_IS_SEARCH_DIRECTORY (directory)) { nemo_toolbar_set_show_main_bar (NEMO_TOOLBAR (pane->tool_bar), FALSE); - nemo_toolbar_set_show_search_bar (NEMO_TOOLBAR (pane->tool_bar), TRUE); } else { gtk_widget_hide (pane->tool_bar); } @@ -246,18 +207,6 @@ } static void -search_bar_cancel_callback (GtkWidget *widget, - NemoWindowPane *pane) -{ - GtkAction *search; - - search = gtk_action_group_get_action (pane->action_group, - NEMO_ACTION_SEARCH); - - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (search), FALSE); -} - -static void location_entry_changed_cb (NemoToolbar *toolbar, gboolean val, gpointer data) { NemoWindowPane *pane = NEMO_WINDOW_PANE (data); @@ -279,52 +228,19 @@ } static void -nemo_window_pane_ensure_search_bar (NemoWindowPane *pane) -{ - remember_focus_widget (pane); - - nemo_toolbar_set_show_search_bar (NEMO_TOOLBAR (pane->tool_bar), TRUE); - - if (!g_settings_get_boolean (nemo_window_state, - NEMO_WINDOW_STATE_START_WITH_TOOLBAR)) { - nemo_toolbar_set_show_main_bar (NEMO_TOOLBAR (pane->tool_bar), FALSE); - gtk_widget_show (pane->tool_bar); - nemo_search_bar_clear (NEMO_SEARCH_BAR (pane->search_bar)); - - pane->temporary_search_bar = TRUE; - } - - nemo_search_bar_grab_focus (NEMO_SEARCH_BAR (pane->search_bar)); -} - -static void -nemo_window_pane_hide_search_bar (NemoWindowPane *pane) -{ - nemo_toolbar_set_show_search_bar (NEMO_TOOLBAR (pane->tool_bar), FALSE); - restore_focus_widget (pane); - - if (pane->temporary_search_bar) { - pane->temporary_search_bar = FALSE; - - gtk_widget_hide (pane->tool_bar); - } -} - -static void navigation_bar_location_changed_callback (GtkWidget *widget, - const char *uri, - NemoWindowPane *pane) + const gchar *uri, + NemoWindowPane *pane) { - GFile *location; + GFile *location; - nemo_window_pane_hide_search_bar (pane); - nemo_window_pane_hide_temporary_bars (pane); + nemo_window_pane_hide_temporary_bars (pane); - restore_focus_widget (pane); + restore_focus_widget (pane); - location = g_file_new_for_uri (uri); - nemo_window_slot_go_to (pane->active_slot, location, FALSE); - g_object_unref (location); + location = g_file_new_for_uri (uri); + nemo_window_slot_open_location (pane->active_slot, location, 0); + g_object_unref (location); } static gboolean @@ -352,9 +268,9 @@ /* check whether we already visited the target location */ i = bookmark_list_get_uri_index (slot->back_list, location); if (i >= 0) { - nemo_window_back_or_forward (pane->window, TRUE, i, FALSE); + nemo_window_back_or_forward (pane->window, TRUE, i, 0); } else { - nemo_window_slot_go_to (pane->active_slot, location, FALSE); + nemo_window_slot_open_location (pane->active_slot, location, 0); } } @@ -422,8 +338,7 @@ if (flags != 0) { slot = nemo_window_get_active_slot (pane->window); - nemo_window_slot_open_location (slot, location, - flags, NULL); + nemo_window_slot_open_location (slot, location, flags); g_object_unref (location); return TRUE; } @@ -815,31 +730,21 @@ { NemoWindowPane *pane = user_data; NemoWindow *window = pane->window; + NemoWindowSlot *slot; + + slot = pane->active_slot; if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) { - nemo_window_pane_ensure_search_bar (pane); + remember_focus_widget (pane); + nemo_window_slot_set_query_editor_visible (slot, TRUE); } else { - NemoWindowSlot *slot; GFile *location = NULL; - slot = pane->active_slot; - nemo_window_pane_hide_search_bar (pane); + restore_focus_widget (pane); /* Use the location bar as the return location */ if (slot->query_editor != NULL) { - NemoQuery *query; - char *uri; - - query = nemo_query_editor_get_query (slot->query_editor); - if (query != NULL) { - uri = nemo_query_get_location (query); - if (uri != NULL) { - location = g_file_new_for_uri (uri); - g_free (uri); - } - g_object_unref (query); - } - + location = nemo_query_editor_get_location (slot->query_editor); /* Last try: use the home directory as the return location */ if (location == NULL) { location = g_file_new_for_path (g_get_home_dir ()); @@ -848,6 +753,8 @@ nemo_window_go_to (window, location); g_object_unref (location); } + + nemo_window_slot_set_query_editor_visible (slot, FALSE); } } @@ -948,7 +855,9 @@ pane->action_group = action_group; - setup_search_action (pane); + if (!NEMO_IS_DESKTOP_WINDOW (window)) + setup_search_action (pane); + g_signal_connect (pane->action_group, "pre-activate", G_CALLBACK (toolbar_action_group_activated_callback), pane); @@ -993,16 +902,6 @@ g_signal_connect_object (nemo_location_bar_get_entry (NEMO_LOCATION_BAR (pane->location_bar)), "focus-in-event", G_CALLBACK (toolbar_focus_in_callback), pane, 0); - /* connect to the search bar signals */ - pane->search_bar = nemo_toolbar_get_search_bar (NEMO_TOOLBAR (pane->tool_bar)); - - g_signal_connect_object (pane->search_bar, "activate", - G_CALLBACK (search_bar_activate_callback), pane, 0); - g_signal_connect_object (pane->search_bar, "cancel", - G_CALLBACK (search_bar_cancel_callback), pane, 0); - g_signal_connect_object (nemo_search_bar_get_entry (NEMO_SEARCH_BAR (pane->search_bar)), "focus-in-event", - G_CALLBACK (toolbar_focus_in_callback), pane, 0); - /* initialize the notebook */ pane->notebook = g_object_new (NEMO_TYPE_NOTEBOOK, NULL); gtk_box_pack_start (GTK_BOX (pane), pane->notebook, @@ -1179,7 +1078,8 @@ } static void -toggle_toolbar_search_button (NemoWindowPane *pane) +toggle_toolbar_search_button (NemoWindowPane *pane, + gboolean active) { GtkActionGroup *group; GtkAction *action; @@ -1187,11 +1087,7 @@ group = pane->action_group; action = gtk_action_group_get_action (group, NEMO_ACTION_SEARCH); - g_signal_handlers_block_by_func (action, - action_show_hide_search_callback, pane); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); - g_signal_handlers_unblock_by_func (action, - action_show_hide_search_callback, pane); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active); } void @@ -1210,14 +1106,9 @@ } if (search_directory != NULL) { - if (!nemo_search_directory_is_saved_search (search_directory)) { - nemo_toolbar_set_show_search_bar (NEMO_TOOLBAR (pane->tool_bar), TRUE); - pane->temporary_search_bar = FALSE; - } else { - toggle_toolbar_search_button (pane); - } + toggle_toolbar_search_button (pane, TRUE); } else { - search_bar_cancel_callback (pane->search_bar, pane); + toggle_toolbar_search_button (pane, FALSE); } nemo_directory_unref (directory); diff -Nru nemo-2.6.7/src/nemo-window-slot.c nemo-2.8.6/src/nemo-window-slot.c --- nemo-2.6.7/src/nemo-window-slot.c 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-slot.c 2015-11-27 10:00:22.000000000 +0000 @@ -21,8 +21,12 @@ Author: Christian Neumair */ + +#include "config.h" + #include "nemo-window-slot.h" +#include "nemo-actions.h" #include "nemo-desktop-window.h" #include "nemo-floating-bar.h" #include "nemo-window-private.h" @@ -42,83 +46,171 @@ ACTIVE, INACTIVE, CHANGED_PANE, + LOCATION_CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; static void -query_editor_changed_callback (NemoSearchBar *bar, - NemoQuery *query, - gboolean reload, - NemoWindowSlot *slot) +sync_search_directory (NemoWindowSlot *slot) { NemoDirectory *directory; + NemoQuery *query; g_assert (NEMO_IS_FILE (slot->viewed_file)); directory = nemo_directory_get_for_file (slot->viewed_file); g_assert (NEMO_IS_SEARCH_DIRECTORY (directory)); + query = nemo_query_editor_get_query (slot->query_editor); nemo_search_directory_set_query (NEMO_SEARCH_DIRECTORY (directory), query); - if (reload) { - nemo_window_slot_reload (slot); + g_object_unref (query); + nemo_window_slot_reload (slot); + + nemo_directory_unref (directory); +} + +static void +sync_search_location_cb (NemoWindow *window, + GError *error, + gpointer user_data) +{ + NemoWindowSlot *slot = user_data; + + sync_search_directory (slot); +} + +static void +create_new_search (NemoWindowSlot *slot) +{ + char *uri; + NemoDirectory *directory; + GFile *location; + + uri = nemo_search_directory_generate_new_uri (); + location = g_file_new_for_uri (uri); + + directory = nemo_directory_get (location); + g_assert (NEMO_IS_SEARCH_DIRECTORY (directory)); + + nemo_window_slot_open_location_full (slot, location, 0, NULL, sync_search_location_cb, slot); + + nemo_directory_unref (directory); + g_object_unref (location); + g_free (uri); +} + +static void +query_editor_cancel_callback (NemoQueryEditor *editor, + NemoWindowSlot *slot) +{ + GtkAction *search; + + search = gtk_action_group_get_action (slot->pane->toolbar_action_group, + NEMO_ACTION_SEARCH); + + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (search), FALSE); +} + +static void +query_editor_changed_callback (NemoQueryEditor *editor, + NemoQuery *query, + gboolean reload, + NemoWindowSlot *slot) +{ + NemoDirectory *directory; + + g_assert (NEMO_IS_FILE (slot->viewed_file)); + + directory = nemo_directory_get_for_file (slot->viewed_file); + if (!NEMO_IS_SEARCH_DIRECTORY (directory)) { + /* this is the first change from the query editor. we + ask for a location change to the search directory, + indicate the directory needs to be sync'd with the + current query. */ + create_new_search (slot); + } else { + sync_search_directory (slot); } nemo_directory_unref (directory); } static void -real_update_query_editor (NemoWindowSlot *slot) +update_query_editor (NemoWindowSlot *slot) { NemoDirectory *directory; NemoSearchDirectory *search_directory; NemoQuery *query; - GtkWidget *query_editor; - gboolean slot_is_active; - NemoWindow *window; - - window = nemo_window_slot_get_window (slot); - query_editor = NULL; - slot_is_active = (slot == nemo_window_get_active_slot (window)); directory = nemo_directory_get (slot->location); + + query = NULL; + if (NEMO_IS_SEARCH_DIRECTORY (directory)) { search_directory = NEMO_SEARCH_DIRECTORY (directory); + query = nemo_search_directory_get_query (search_directory); + } - if (nemo_search_directory_is_saved_search (search_directory)) { - query_editor = nemo_query_editor_new (TRUE); - nemo_window_pane_sync_search_widgets (slot->pane); - } else { - query_editor = nemo_query_editor_new_with_bar (FALSE, - slot_is_active, - NEMO_SEARCH_BAR (slot->pane->search_bar), - slot); - } + if (query == NULL) { + char *uri; + uri = g_file_get_uri (slot->location); + query = nemo_query_new (); + nemo_query_set_location (query, uri); + g_free (uri); + } + nemo_query_editor_set_query (slot->query_editor, + query); + g_object_unref (query); + + nemo_directory_unref (directory); +} + +static void +ensure_query_editor (NemoWindowSlot *slot) +{ + GtkWidget *query_editor; + + if (slot->query_editor != NULL) { + return; } + query_editor = nemo_query_editor_new (); slot->query_editor = NEMO_QUERY_EDITOR (query_editor); - if (query_editor != NULL) { - g_signal_connect_object (query_editor, "changed", - G_CALLBACK (query_editor_changed_callback), slot, 0); - - query = nemo_search_directory_get_query (search_directory); - if (query != NULL) { - nemo_query_editor_set_query (NEMO_QUERY_EDITOR (query_editor), - query); - g_object_unref (query); - } else { - nemo_query_editor_set_default_query (NEMO_QUERY_EDITOR (query_editor)); - } + nemo_window_slot_add_extra_location_widget (slot, query_editor); + gtk_widget_show (query_editor); + nemo_query_editor_grab_focus (slot->query_editor); - nemo_window_slot_add_extra_location_widget (slot, query_editor); - gtk_widget_show (query_editor); - nemo_query_editor_grab_focus (NEMO_QUERY_EDITOR (query_editor)); - } + update_query_editor (slot); - nemo_directory_unref (directory); + g_signal_connect_object (slot->query_editor, "changed", + G_CALLBACK (query_editor_changed_callback), slot, 0); + g_signal_connect_object (slot->query_editor, "cancel", + G_CALLBACK (query_editor_cancel_callback), slot, 0); + + g_object_add_weak_pointer (G_OBJECT (slot->query_editor), + (gpointer *) &slot->query_editor); +} + +void +nemo_window_slot_set_query_editor_visible (NemoWindowSlot *slot, + gboolean visible) +{ + if (visible) { + ensure_query_editor (slot); + nemo_query_editor_set_visible (slot->query_editor, TRUE); + nemo_query_editor_grab_focus (slot->query_editor); + } else { + if (slot->query_editor != NULL) { + nemo_query_editor_set_visible (slot->query_editor, FALSE); + gtk_widget_destroy (GTK_WIDGET (slot->query_editor)); +// slot->query_editor = NULL; +// g_assert (slot->query_editor == NULL); + } + } } static void @@ -137,7 +229,7 @@ gtk_notebook_set_current_page (GTK_NOTEBOOK (pane->notebook), page_num); /* sync window to new slot */ - nemo_window_sync_status (window); + nemo_window_push_status (window, slot->status_text); nemo_window_sync_allow_stop (window, slot); nemo_window_sync_title (window, slot); nemo_window_sync_zoom_widgets (window); @@ -309,6 +401,17 @@ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + signals[LOCATION_CHANGED] = + g_signal_new ("location-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_generic, + G_TYPE_NONE, 2, + G_TYPE_STRING, + G_TYPE_STRING); } GFile * @@ -581,48 +684,32 @@ window = nemo_window_slot_get_window (slot); if (slot == nemo_window_get_active_slot (window)) { - nemo_window_sync_status (window); + nemo_window_push_status (window, slot->status_text); } } -/* nemo_window_slot_update_query_editor: - * - * Update the query editor. - * Called when the location has changed. - * - * @slot: The NemoWindowSlot in question. - */ -void -nemo_window_slot_update_query_editor (NemoWindowSlot *slot) -{ - if (slot->query_editor != NULL) { - gtk_widget_destroy (GTK_WIDGET (slot->query_editor)); - g_assert (slot->query_editor == NULL); - } - - real_update_query_editor (slot); - - eel_add_weak_pointer (&slot->query_editor); -} - static void -remove_all (GtkWidget *widget, - gpointer data) +remove_all_extra_location_widgets (GtkWidget *widget, + gpointer data) { - GtkContainer *container; - container = GTK_CONTAINER (data); + NemoWindowSlot *slot = data; + NemoDirectory *directory; - gtk_container_remove (container, widget); + directory = nemo_directory_get (slot->location); + if (!NEMO_IS_SEARCH_DIRECTORY (directory) + || (widget != GTK_WIDGET (slot->query_editor))) { + gtk_container_remove (GTK_CONTAINER (slot->extra_location_widgets), widget); + } + + nemo_directory_unref (directory); } void nemo_window_slot_remove_extra_location_widgets (NemoWindowSlot *slot) { - gtk_container_foreach (GTK_CONTAINER (slot->extra_location_widgets), - remove_all, - slot->extra_location_widgets); - gtk_widget_hide (slot->extra_location_widgets); - slot->cache_bar = NULL; + gtk_container_foreach (GTK_CONTAINER (slot->extra_location_widgets), + remove_all_extra_location_widgets, + slot); } void @@ -638,7 +725,6 @@ char * nemo_window_slot_get_current_uri (NemoWindowSlot *slot) { - if (slot->pending_location != NULL) { return g_file_get_uri (slot->pending_location); } @@ -665,32 +751,22 @@ void nemo_window_slot_go_home (NemoWindowSlot *slot, - gboolean new_tab) + NemoWindowOpenFlags flags) { GFile *home; - NemoWindowOpenFlags flags; g_return_if_fail (NEMO_IS_WINDOW_SLOT (slot)); - if (new_tab) { - flags = NEMO_WINDOW_OPEN_FLAG_NEW_TAB; - } else { - flags = 0; - } - home = g_file_new_for_path (g_get_home_dir ()); - nemo_window_slot_open_location_full (slot, home, - flags, NULL, NULL, NULL); + nemo_window_slot_open_location (slot, home, flags); g_object_unref (home); } void nemo_window_slot_go_up (NemoWindowSlot *slot, - gboolean close_behind, - gboolean new_tab) + NemoWindowOpenFlags flags) { GFile *parent; - NemoWindowOpenFlags flags; if (slot->location == NULL) { return; @@ -701,18 +777,7 @@ return; } - flags = 0; - if (close_behind) { - flags |= NEMO_WINDOW_OPEN_FLAG_CLOSE_BEHIND; - } - if (new_tab) { - flags |= NEMO_WINDOW_OPEN_FLAG_NEW_TAB; - } - - nemo_window_slot_open_location (slot, parent, - flags, - NULL); - + nemo_window_slot_open_location (slot, parent, flags); g_object_unref (parent); } diff -Nru nemo-2.6.7/src/nemo-window-slot.h nemo-2.8.6/src/nemo-window-slot.h --- nemo-2.6.7/src/nemo-window-slot.h 2015-06-22 21:36:38.000000000 +0000 +++ nemo-2.8.6/src/nemo-window-slot.h 2015-11-27 10:00:22.000000000 +0000 @@ -52,12 +52,8 @@ void (* changed_pane) (NemoWindowSlot *slot); }; -/* Each NemoWindowSlot corresponds to - * a location in the window for displaying - * a NemoView. - * - * For navigation windows, this would be a - * tab, while spatial windows only have one slot. +/* Each NemoWindowSlot corresponds to a location in the window + * for displaying a NemoView, i.e. a tab. */ struct NemoWindowSlot { GtkBox parent; @@ -126,13 +122,18 @@ void nemo_window_slot_update_title (NemoWindowSlot *slot); void nemo_window_slot_update_icon (NemoWindowSlot *slot); -void nemo_window_slot_update_query_editor (NemoWindowSlot *slot); +void nemo_window_slot_set_query_editor_visible (NemoWindowSlot *slot, + gboolean visible); GFile * nemo_window_slot_get_location (NemoWindowSlot *slot); char * nemo_window_slot_get_location_uri (NemoWindowSlot *slot); void nemo_window_slot_reload (NemoWindowSlot *slot); +/* convenience wrapper without selection and callback/user_data */ +#define nemo_window_slot_open_location(slot, location, flags)\ + nemo_window_slot_open_location_full(slot, location, flags, NULL, NULL, NULL) + void nemo_window_slot_open_location_full (NemoWindowSlot *slot, GFile *location, NemoWindowOpenFlags flags, @@ -140,20 +141,6 @@ NemoWindowGoToCallback callback, gpointer user_data); -/* convenience wrapper without callback/user_data */ -#define nemo_window_slot_open_location(slot, location, flags, new_selection)\ - nemo_window_slot_open_location_full(slot, location, flags, new_selection, NULL, NULL) - -/* these are wrappers that always open according to current mode */ -#define nemo_window_slot_go_to(slot, location, new_tab) \ - nemo_window_slot_open_location(slot, location, \ - (new_tab ? NEMO_WINDOW_OPEN_FLAG_NEW_TAB : 0), \ - NULL) -#define nemo_window_slot_go_to_full(slot, location, new_tab, callback, user_data) \ - nemo_window_slot_open_location_full(slot, location, \ - (new_tab ? NEMO_WINDOW_OPEN_FLAG_NEW_TAB : 0), \ - NULL, callback, user_data) - void nemo_window_slot_stop_loading (NemoWindowSlot *slot); void nemo_window_slot_set_content_view (NemoWindowSlot *slot, @@ -163,10 +150,9 @@ const char *iid); void nemo_window_slot_go_home (NemoWindowSlot *slot, - gboolean new_tab); + NemoWindowOpenFlags flags); void nemo_window_slot_go_up (NemoWindowSlot *slot, - gboolean close_behind, - gboolean new_tab); + NemoWindowOpenFlags flags); void nemo_window_slot_set_content_view_widget (NemoWindowSlot *slot, NemoView *content_view);