Marco Trevisan (Treviño) has proposed merging
~3v1n0/ubuntu/+source/nautilus:ubuntu/bionic-fix-recursive-engines into
~ubuntu-desktop/ubuntu/+source/nautilus:ubuntu/bionic.
Commit message:
* New upstream release: 3.26.3.1
* debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch,
debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch,
debian/patches/0018-search-engine-add-locate-based-search-engine.patch:
- Follow nautilus settings to search only in current folder (LP: #1767027).
This doesn't apply to gnome-shell search provider for indexed searches.
*
debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch:
- Updated to respect upstream requested changes
*
debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch:
- don't crash if selecting a volume that is not mounted (LP: #1764779)
Requested reviews:
Ubuntu Desktop (ubuntu-desktop)
Related bugs:
Bug #1764779 in nautilus (Ubuntu): "Nautilus crashed open Windows-partition"
https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1764779
Bug #1767027 in nautilus (Ubuntu): "Search current folder only in nautilus
doesn't work (Ubuntu 18.04)"
https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1767027
For more details, see:
https://code.launchpad.net/~3v1n0/ubuntu/+source/nautilus/+git/nautilus/+merge/349800
--
Your team Ubuntu Desktop is requested to review the proposed merge of
~3v1n0/ubuntu/+source/nautilus:ubuntu/bionic-fix-recursive-engines into
~ubuntu-desktop/ubuntu/+source/nautilus:ubuntu/bionic.
diff --git a/NEWS b/NEWS
index 94f1bf4..c78d1d1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,6 @@
+Major changes in 3.26.3.1:
+* Revert accidental backports of behavioral and visual changes
+
Major changes in 3.26.3:
* Don’t strip extension from folders in compress dialog (Rahul Verma)
* Fix items not being focused when selected in list view (António Fernandes)
diff --git a/debian/changelog b/debian/changelog
index 30d5e5b..5ec2f23 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,24 @@
+nautilus (1:3.26.3.1~ubuntu18.04.1) UNRELEASED; urgency=medium
+
+ [ Sebastien Bacher ]
+ * debian/patches/git_middle_tab.patch:
+ - don't close the view when middle clicking on an item in the
+ "other locations" (lp: #1765776)
+
+ [ Marco Trevisan (Treviño) ]
+ * New upstream release: 3.26.3.1
+ * debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch,
+ debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch,
+ debian/patches/0018-search-engine-add-locate-based-search-engine.patch:
+ - Follow nautilus settings to search only in current folder (LP: #1767027).
+ This doesn't apply to gnome-shell search provider for indexed searches.
+ * debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch:
+ - Updated to respect upstream requested changes
+ * debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch:
+ - don't crash if selecting a volume that is not mounted (LP: #1764779)
+
+ -- Sebastien Bacher <[email protected]> Mon, 30 Apr 2018 16:12:53 +0200
+
nautilus (1:3.26.3-0ubuntu4) bionic; urgency=medium
* debian/patches/server_list_segfault.patch,
diff --git a/debian/control.in b/debian/control.in
index 0d5ed26..19b2ec4 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -33,7 +33,10 @@ Build-Depends: debhelper (>= 10.3),
libunity-dev (>= 5.0.0),
libzeitgeist-2.0-dev,
Homepage: https://wiki.gnome.org/action/show/Apps/Nautilus
-Vcs-Bzr: http://code.launchpad.net/~ubuntu-desktop/nautilus/ubuntu
+XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/nautilus
+XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/nautilus.git
+Vcs-Browser: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/nautilus
+Vcs-Git: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/nautilus -b ubuntu/bionic
Standards-Version: 3.9.8
Package: nautilus
diff --git a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
index 1a4ee1c..0ec13f1 100644
--- a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
+++ b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
@@ -7,19 +7,19 @@ Using GtkRecent items as search engine source in nautilus
---
src/meson.build | 2 +
src/nautilus-file.h | 1 +
- src/nautilus-search-engine-recent.c | 385 ++++++++++++++++++++++++++++++++++++
- src/nautilus-search-engine-recent.h | 36 ++++
- src/nautilus-search-engine.c | 11 ++
- 5 files changed, 435 insertions(+)
+ src/nautilus-search-engine-recent.c | 427 ++++++++++++++++++++++++++++++++++++
+ src/nautilus-search-engine-recent.h | 36 +++
+ src/nautilus-search-engine.c | 11 +
+ 5 files changed, 477 insertions(+)
create mode 100644 src/nautilus-search-engine-recent.c
create mode 100644 src/nautilus-search-engine-recent.h
diff --git a/src/meson.build b/src/meson.build
-index a771d12..0ea9165 100644
+index 73aafe9..213b35f 100644
--- a/src/meson.build
+++ b/src/meson.build
-@@ -228,6 +228,8 @@ libnautilus_sources = [
- 'nautilus-search-engine.h',
+@@ -229,6 +229,8 @@ libnautilus_sources = [
+ 'nautilus-search-engine-private.h',
'nautilus-search-engine-model.c',
'nautilus-search-engine-model.h',
+ 'nautilus-search-engine-recent.c',
@@ -28,7 +28,7 @@ index a771d12..0ea9165 100644
'nautilus-search-engine-simple.h',
'nautilus-search-hit.c',
diff --git a/src/nautilus-file.h b/src/nautilus-file.h
-index 3a83bd4..fd72d7a 100644
+index af8c003..20ec6f3 100644
--- a/src/nautilus-file.h
+++ b/src/nautilus-file.h
@@ -49,6 +49,7 @@ typedef struct NautilusFile NautilusFile;
@@ -41,10 +41,10 @@ index 3a83bd4..fd72d7a 100644
NAUTILUS_FILE_SORT_NONE,
diff --git a/src/nautilus-search-engine-recent.c b/src/nautilus-search-engine-recent.c
new file mode 100644
-index 0000000..f052e8f
+index 0000000..bbd0d82
--- /dev/null
+++ b/src/nautilus-search-engine-recent.c
-@@ -0,0 +1,385 @@
+@@ -0,0 +1,427 @@
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
@@ -69,6 +69,7 @@ index 0000000..f052e8f
+#include "nautilus-search-hit.h"
+#include "nautilus-search-provider.h"
+#include "nautilus-search-engine-recent.h"
++#include "nautilus-search-engine-private.h"
+#include "nautilus-ui-utilities.h"
+#define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+#include "nautilus-debug.h"
@@ -161,6 +162,51 @@ index 0000000..f052e8f
+ return FALSE;
+}
+
++static gboolean
++is_file_valid_recursive (NautilusSearchEngineRecent *self,
++ GFile *file,
++ GError **error)
++{
++ g_autofree gchar *path = NULL;
++ g_autoptr (GFileInfo) file_info = NULL;
++
++ file_info = g_file_query_info (file, FILE_ATTRIBS,
++ G_FILE_QUERY_INFO_NONE,
++ self->cancellable, error);
++ if (*error != NULL)
++ {
++ return FALSE;
++ }
++
++ if (!g_file_info_get_attribute_boolean (file_info,
++ G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
++ {
++ return FALSE;
++ }
++
++ path = g_file_get_path (file);
++
++ if (!nautilus_query_get_show_hidden_files (self->query))
++ {
++ if (!g_file_info_get_is_hidden (file_info) &&
++ !g_file_info_get_is_backup (file_info))
++ {
++ g_autoptr (GFile) parent = g_file_get_parent (file);
++
++ if (parent)
++ {
++ return is_file_valid_recursive (self, parent, error);
++ }
++ }
++ else
++ {
++ return FALSE;
++ }
++ }
++
++ return TRUE;
++}
++
+static gpointer
+recent_thread_func (gpointer user_data)
+{
@@ -199,44 +245,24 @@ index 0000000..f052e8f
+
+ if (gtk_recent_info_is_local (info))
+ {
-+ g_autofree gchar *path = NULL;
-+ g_autoptr (GFileInfo) file_info = NULL;
+ g_autoptr (GError) error = NULL;
+
-+ file_info = g_file_query_info (file, FILE_ATTRIBS,
-+ G_FILE_QUERY_INFO_NONE,
-+ self->cancellable, &error);
-+ if (error != NULL)
++ if (!is_file_valid_recursive (self, file, &error))
+ {
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ break;
+ }
+
-+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
++ if (error != NULL &&
++ !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
+ {
-+ g_debug("Impossible to read locate file info: %s",
++ g_debug("Impossible to read recent file info: %s",
+ error->message);
+ }
+
+ continue;
+ }
-+
-+ if (!g_file_info_get_attribute_boolean (file_info,
-+ G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
-+ {
-+ continue;
-+ }
-+
-+ path = g_file_get_path (file);
-+
-+ if (!nautilus_query_get_show_hidden_files (self->query) &&
-+ (g_file_info_get_is_hidden (file_info) ||
-+ g_file_info_get_is_backup (file_info) ||
-+ g_strrstr (path, G_DIR_SEPARATOR_S ".") != NULL))
-+ {
-+ continue;
-+ }
+ }
+
+ if (g_cancellable_is_cancelled (self->cancellable))
@@ -333,6 +359,7 @@ index 0000000..f052e8f
+nautilus_search_engine_recent_start (NautilusSearchProvider *provider)
+{
+ NautilusSearchEngineRecent *self = NAUTILUS_SEARCH_ENGINE_RECENT (provider);
++ g_autoptr (GFile) location = NULL;
+ GThread *thread;
+
+ g_return_if_fail (self->query);
@@ -340,6 +367,21 @@ index 0000000..f052e8f
+
+ g_object_ref (self);
+ g_object_ref (self->query);
++
++ location = nautilus_query_get_location (self->query);
++
++ if (!is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++ nautilus_query_get_recursive (self->query),
++ location))
++ {
++ SearchHitsData *search_hits;
++ search_hits = g_new0 (SearchHitsData, 1);
++ search_hits->recent = self;
++
++ g_idle_add (search_thread_add_hits_idle, search_hits);
++ return;
++ }
++
+ self->cancellable = g_cancellable_new ();
+
+ thread = g_thread_new ("nautilus-search-recent", recent_thread_func, self);
@@ -473,18 +515,18 @@ index 0000000..bcd73b9
+
+#endif /* __NAUTILUS_SEARCH_ENGINE_RECENT_H__ */
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index 209bd4f..aef91b7 100644
+index a545160..68b6a4d 100644
--- a/src/nautilus-search-engine.c
+++ b/src/nautilus-search-engine.c
-@@ -24,6 +24,7 @@
- #include <glib/gi18n.h>
- #include "nautilus-search-provider.h"
+@@ -21,6 +21,7 @@
+
+ #include <config.h>
#include "nautilus-search-engine.h"
+#include "nautilus-search-engine-recent.h"
#include "nautilus-search-engine-simple.h"
- #include "nautilus-search-engine-model.h"
- #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
-@@ -33,6 +34,7 @@
+ #include "nautilus-search-engine-private.h"
+
+@@ -35,6 +36,7 @@
typedef struct
{
NautilusSearchEngineTracker *tracker;
@@ -492,7 +534,7 @@ index 209bd4f..aef91b7 100644
NautilusSearchEngineSimple *simple;
NautilusSearchEngineModel *model;
-@@ -74,6 +76,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
+@@ -76,6 +78,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
priv = nautilus_search_engine_get_instance_private (engine);
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
@@ -500,7 +542,7 @@ index 209bd4f..aef91b7 100644
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
}
-@@ -98,6 +101,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
+@@ -100,6 +103,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
priv->providers_running++;
@@ -510,7 +552,7 @@ index 209bd4f..aef91b7 100644
if (nautilus_search_engine_model_get_model (priv->model))
{
nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->model));
-@@ -159,6 +165,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
+@@ -161,6 +167,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
DEBUG ("Search engine stop");
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
@@ -518,7 +560,7 @@ index 209bd4f..aef91b7 100644
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
-@@ -334,6 +341,7 @@ nautilus_search_engine_finalize (GObject *object)
+@@ -336,6 +343,7 @@ nautilus_search_engine_finalize (GObject *object)
g_hash_table_destroy (priv->uris);
g_clear_object (&priv->tracker);
@@ -526,7 +568,7 @@ index 209bd4f..aef91b7 100644
g_clear_object (&priv->model);
g_clear_object (&priv->simple);
-@@ -395,6 +403,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
+@@ -397,6 +405,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
priv->simple = nautilus_search_engine_simple_new ();
connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->simple));
diff --git a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
index 99abe37..d0125f5 100644
--- a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
+++ b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
@@ -1,5 +1,5 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]>
-Date: Wed, 11 Apr 2018 18:51:34 -0400
+Date: Thu, 12 Apr 2018 00:51:34 +0200
Subject: recent: add function to update manager on file rename or move
When files have been moved or renamed nautilus should inform
@@ -7,10 +7,10 @@ recent manager about this change for the files that
are listed there.
---
src/nautilus-directory.c | 8 +++
- src/nautilus-file.c | 25 +++++-----
- src/nautilus-recent.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++
+ src/nautilus-file.c | 25 +++++----
+ src/nautilus-recent.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++
src/nautilus-recent.h | 8 ++-
- 4 files changed, 152 insertions(+), 15 deletions(-)
+ 4 files changed, 158 insertions(+), 15 deletions(-)
diff --git a/src/nautilus-directory.c b/src/nautilus-directory.c
index ad3bb03..f1a3bf8 100644
@@ -49,7 +49,7 @@ index ad3bb03..f1a3bf8 100644
/* Now send out the changed and added signals for existing file objects. */
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
-index 2135801..15e5d05 100644
+index e862c13..21846d0 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -34,6 +34,7 @@
@@ -128,17 +128,18 @@ index 2135801..15e5d05 100644
static void
diff --git a/src/nautilus-recent.c b/src/nautilus-recent.c
-index ab50fef..c69a3a7 100644
+index ab50fef..6676465 100644
--- a/src/nautilus-recent.c
+++ b/src/nautilus-recent.c
-@@ -1,5 +1,6 @@
+@@ -1,5 +1,7 @@
/*
* Copyright (C) 2002 James Willcox
+ * Copyright (C) 2018 Canonical Ltd
++ * Copyright (C) 2018 Marco Trevisan
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
-@@ -17,6 +18,7 @@
+@@ -17,6 +19,7 @@
#include "config.h"
#include "nautilus-recent.h"
@@ -146,16 +147,16 @@ index ab50fef..c69a3a7 100644
#include <eel/eel-vfs-extensions.h>
-@@ -85,3 +87,127 @@ nautilus_recent_add_file (NautilusFile *file,
+@@ -85,3 +88,132 @@ nautilus_recent_add_file (NautilusFile *file,
g_free (uri);
}
+
+void
-+nautilus_recent_update_file_moved (const gchar *old_uri,
-+ const gchar *new_uri,
-+ const gchar *old_display_name,
-+ const gchar *new_display_name)
++nautilus_recent_update_file_moved (const gchar *old_uri,
++ const gchar *new_uri,
++ const gchar *old_display_name,
++ const gchar *new_display_name)
+{
+ GtkRecentManager *recent_manager = nautilus_recent_get_manager ();
+ g_autoptr (NautilusFile) file = NULL;
@@ -191,9 +192,11 @@ index ab50fef..c69a3a7 100644
+
+ if (nautilus_file_is_directory (file))
+ {
++ g_autoptr (GFile) location = NULL;
+ GList *recent_items;
+ GList *l;
+
++ location = g_file_new_for_uri (old_uri);
+ recent_items = gtk_recent_manager_get_items (recent_manager);
+
+ for (l = recent_items; l; l = l->next)
@@ -203,9 +206,12 @@ index ab50fef..c69a3a7 100644
+
+ if (g_str_has_prefix (item_uri, old_uri))
+ {
-+ const gchar *relative_path = item_uri + strlen (old_uri);
++ g_autoptr (GFile) item_file = NULL;
++ g_autofree gchar *relative_path = NULL;
+ g_autofree gchar *new_item_uri = NULL;
+
++ item_file = g_file_new_for_uri (item_uri);
++ relative_path = g_file_get_relative_path (location, item_file);
+ new_item_uri = g_build_filename (new_uri, relative_path, NULL);
+
+ gtk_recent_manager_move_item (recent_manager,
diff --git a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
index 5140963..c0d37b9 100644
--- a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
+++ b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
@@ -7,19 +7,19 @@ command line and parsing output to provide more and
quicker results to the shell and nautilus
---
src/meson.build | 2 +
- src/nautilus-search-engine-locate.c | 597 ++++++++++++++++++++++++++++++++++++
+ src/nautilus-search-engine-locate.c | 601 ++++++++++++++++++++++++++++++++++++
src/nautilus-search-engine-locate.h | 37 +++
src/nautilus-search-engine.c | 11 +
- 4 files changed, 647 insertions(+)
+ 4 files changed, 651 insertions(+)
create mode 100644 src/nautilus-search-engine-locate.c
create mode 100644 src/nautilus-search-engine-locate.h
diff --git a/src/meson.build b/src/meson.build
-index 0ea9165..06e6633 100644
+index 213b35f..a0bf109 100644
--- a/src/meson.build
+++ b/src/meson.build
-@@ -228,6 +228,8 @@ libnautilus_sources = [
- 'nautilus-search-engine.h',
+@@ -229,6 +229,8 @@ libnautilus_sources = [
+ 'nautilus-search-engine-private.h',
'nautilus-search-engine-model.c',
'nautilus-search-engine-model.h',
+ 'nautilus-search-engine-locate.c',
@@ -29,10 +29,10 @@ index 0ea9165..06e6633 100644
'nautilus-search-engine-simple.c',
diff --git a/src/nautilus-search-engine-locate.c b/src/nautilus-search-engine-locate.c
new file mode 100644
-index 0000000..16f9f21
+index 0000000..d152a23
--- /dev/null
+++ b/src/nautilus-search-engine-locate.c
-@@ -0,0 +1,597 @@
+@@ -0,0 +1,601 @@
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
@@ -57,6 +57,7 @@ index 0000000..16f9f21
+#include "nautilus-search-hit.h"
+#include "nautilus-search-provider.h"
+#include "nautilus-search-engine-locate.h"
++#include "nautilus-search-engine-private.h"
+#include "nautilus-ui-utilities.h"
+#define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+#include "nautilus-debug.h"
@@ -452,7 +453,12 @@ index 0000000..16f9f21
+ sdata = g_new0 (LocateSearchData, 1);
+ sdata->locate = g_object_ref (self);
+
-+ if (!(self->locate_features & LOCATE_INSTALLED))
++ query_location = nautilus_query_get_location (self->query);
++
++ if (!(self->locate_features & LOCATE_INSTALLED) ||
++ !is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++ nautilus_query_get_recursive (self->query),
++ query_location))
+ {
+ g_idle_add ((GSourceFunc) submit_results, sdata);
+ return;
@@ -493,8 +499,6 @@ index 0000000..16f9f21
+ return;
+ }
+
-+ query_location = nautilus_query_get_location (self->query);
-+
+ sdata->query = g_object_ref (self->query);
+ sdata->date_range = nautilus_query_get_date_range (self->query);
+ sdata->mime_types = nautilus_query_get_mime_types (self->query);
@@ -674,18 +678,18 @@ index 0000000..ac5e3fc
+
+#endif /* __NAUTILUS_SEARCH_ENGINE_LOCATE_H__ */
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index aef91b7..bf0e85d 100644
+index 68b6a4d..84a88fa 100644
--- a/src/nautilus-search-engine.c
+++ b/src/nautilus-search-engine.c
-@@ -25,6 +25,7 @@
- #include "nautilus-search-provider.h"
+@@ -22,6 +22,7 @@
+ #include <config.h>
#include "nautilus-search-engine.h"
#include "nautilus-search-engine-recent.h"
+#include "nautilus-search-engine-locate.h"
#include "nautilus-search-engine-simple.h"
- #include "nautilus-search-engine-model.h"
- #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
-@@ -35,6 +36,7 @@ typedef struct
+ #include "nautilus-search-engine-private.h"
+
+@@ -37,6 +38,7 @@ typedef struct
{
NautilusSearchEngineTracker *tracker;
NautilusSearchEngineRecent *recent;
@@ -693,7 +697,7 @@ index aef91b7..bf0e85d 100644
NautilusSearchEngineSimple *simple;
NautilusSearchEngineModel *model;
-@@ -77,6 +79,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
+@@ -79,6 +81,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->recent), query);
@@ -701,7 +705,7 @@ index aef91b7..bf0e85d 100644
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
}
-@@ -104,6 +107,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
+@@ -106,6 +109,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
priv->providers_running++;
nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->recent));
@@ -711,7 +715,7 @@ index aef91b7..bf0e85d 100644
if (nautilus_search_engine_model_get_model (priv->model))
{
nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->model));
-@@ -166,6 +172,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
+@@ -168,6 +174,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->recent));
@@ -719,7 +723,7 @@ index aef91b7..bf0e85d 100644
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
-@@ -342,6 +349,7 @@ nautilus_search_engine_finalize (GObject *object)
+@@ -344,6 +351,7 @@ nautilus_search_engine_finalize (GObject *object)
g_clear_object (&priv->tracker);
g_clear_object (&priv->recent);
@@ -727,7 +731,7 @@ index aef91b7..bf0e85d 100644
g_clear_object (&priv->model);
g_clear_object (&priv->simple);
-@@ -406,6 +414,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
+@@ -408,6 +416,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
priv->recent = nautilus_search_engine_recent_new ();
connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->recent));
diff --git a/debian/patches/git_middle_tab.patch b/debian/patches/git_middle_tab.patch
new file mode 100644
index 0000000..28d7bce
--- /dev/null
+++ b/debian/patches/git_middle_tab.patch
@@ -0,0 +1,78 @@
+Subject: [PATCH] notebook: Fix tab lookup by coordinates
+
+The current code only checks one coordinate, depending on the tab
+orientation.
+
+Fixes https://gitlab.gnome.org/GNOME/nautilus/issues/342
+
+
+(cherry picked from commit 7ca2197ae3f0df527e27cf58188b1f83216e3cdb)
+---
+ src/nautilus-notebook.c | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
+index f2b3fbd..6e1db52 100644
+--- a/src/nautilus-notebook.c
++++ b/src/nautilus-notebook.c
+@@ -88,14 +88,11 @@ find_tab_num_at_pos (NautilusNotebook *notebook,
+ gint abs_x,
+ gint abs_y)
+ {
+- GtkPositionType tab_pos;
+ int page_num = 0;
+ GtkNotebook *nb = GTK_NOTEBOOK (notebook);
+ GtkWidget *page;
+ GtkAllocation allocation;
+
+- tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook));
+-
+ while ((page = gtk_notebook_get_nth_page (nb, page_num)))
+ {
+ GtkWidget *tab;
+@@ -118,15 +115,7 @@ find_tab_num_at_pos (NautilusNotebook *notebook,
+ max_x = x_root + allocation.x + allocation.width;
+ max_y = y_root + allocation.y + allocation.height;
+
+- if (((tab_pos == GTK_POS_TOP)
+- || (tab_pos == GTK_POS_BOTTOM))
+- && (abs_x <= max_x))
+- {
+- return page_num;
+- }
+- else if (((tab_pos == GTK_POS_LEFT)
+- || (tab_pos == GTK_POS_RIGHT))
+- && (abs_y <= max_y))
++ if (abs_x <= max_x && abs_y <= max_y)
+ {
+ return page_num;
+ }
+@@ -154,7 +143,7 @@ button_press_cb (NautilusNotebook *notebook,
+ /* consume event, so that we don't pop up the context menu when
+ * the mouse if not over a tab label
+ */
+- return TRUE;
++ return GDK_EVENT_STOP;
+ }
+
+ /* switch to the page the mouse is over, but don't consume the event */
+@@ -165,11 +154,16 @@ button_press_cb (NautilusNotebook *notebook,
+ {
+ GtkWidget *slot;
+
++ if (tab_clicked == -1)
++ {
++ return GDK_EVENT_PROPAGATE;
++ }
++
+ slot = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), tab_clicked);
+ g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, slot);
+ }
+
+- return FALSE;
++ return GDK_EVENT_PROPAGATE;
+ }
+
+ static void
+--
+
diff --git a/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch b/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
new file mode 100644
index 0000000..37081f7
--- /dev/null
+++ b/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
@@ -0,0 +1,45 @@
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]>
+Date: Tue, 17 Jul 2018 04:23:58 +0200
+Subject: nautilusgtkplacesview: show error if volume is not mounted
+
+Fixes crash as location would be NULL afterwards.
+
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1764779
+Forwarded: not-needed
+---
+ src/gtk/nautilusgtkplacesview.c | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/src/gtk/nautilusgtkplacesview.c b/src/gtk/nautilusgtkplacesview.c
+index 041849f..e13c313 100644
+--- a/src/gtk/nautilusgtkplacesview.c
++++ b/src/gtk/nautilusgtkplacesview.c
+@@ -1330,13 +1330,23 @@ volume_mount_ready_cb (GObject *source_volume,
+ GFile *root;
+
+ mount = g_volume_get_mount (volume);
+- root = g_mount_get_default_location (mount);
+
+- if (priv->should_open_location)
+- emit_open_location (NAUTILUS_GTK_PLACES_VIEW (user_data), root, priv->open_flags);
++ if (G_IS_MOUNT (mount))
++ {
++ root = g_mount_get_default_location (mount);
+
+- g_object_unref (mount);
+- g_object_unref (root);
++ if (priv->should_open_location)
++ emit_open_location (NAUTILUS_GTK_PLACES_VIEW (user_data), root, priv->open_flags);
++
++ g_object_unref (mount);
++ g_object_unref (root);
++ }
++ else
++ {
++ emit_show_error_message (NAUTILUS_GTK_PLACES_VIEW(user_data),
++ _("Unable to access location"),
++ _("volume not mounted"));
++ }
+ }
+
+ update_places (view);
diff --git a/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
new file mode 100644
index 0000000..c1ee4a7
--- /dev/null
+++ b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
@@ -0,0 +1,977 @@
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]>
+Date: Tue, 17 Jul 2018 02:35:20 +0200
+Subject: query: add recursive flags and use it in search-engines
+
+Forwarded: yes, https://gitlab.gnome.org/GNOME/nautilus/merge_requests/249
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1767027
+---
+ src/meson.build | 1 +
+ src/nautilus-application.c | 11 ++----
+ src/nautilus-application.h | 3 +-
+ src/nautilus-directory-async.c | 5 ++-
+ src/nautilus-file-private.h | 3 +-
+ src/nautilus-file.c | 28 ++++++++++++++
+ src/nautilus-file.h | 2 +
+ src/nautilus-query-editor.c | 61 +++++++++++++++++-------------
+ src/nautilus-query.c | 28 +++++++-------
+ src/nautilus-query.h | 14 +++++--
+ src/nautilus-search-directory.c | 6 ---
+ src/nautilus-search-engine-private.h | 34 +++++++++++++++++
+ src/nautilus-search-engine-simple.c | 72 ++++++++----------------------------
+ src/nautilus-search-engine-tracker.c | 16 ++++----
+ src/nautilus-search-engine.c | 36 ++++++++++++++----
+ src/nautilus-search-engine.h | 2 -
+ src/nautilus-shell-search-provider.c | 40 +++++++++++---------
+ src/nautilus-window-slot.c | 19 ++++------
+ src/nautilus-window-slot.h | 2 +-
+ src/nautilus-window.c | 4 +-
+ src/nautilus-window.h | 2 +-
+ 21 files changed, 222 insertions(+), 167 deletions(-)
+ create mode 100644 src/nautilus-search-engine-private.h
+
+diff --git a/src/meson.build b/src/meson.build
+index a771d12..73aafe9 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -226,6 +226,7 @@ libnautilus_sources = [
+ 'nautilus-search-provider.h',
+ 'nautilus-search-engine.c',
+ 'nautilus-search-engine.h',
++ 'nautilus-search-engine-private.h',
+ 'nautilus-search-engine-model.c',
+ 'nautilus-search-engine-model.h',
+ 'nautilus-search-engine-simple.c',
+diff --git a/src/nautilus-application.c b/src/nautilus-application.c
+index 6293a89..13753a5 100644
+--- a/src/nautilus-application.c
++++ b/src/nautilus-application.c
+@@ -1621,15 +1621,12 @@ nautilus_application_new (void)
+
+ void
+ nautilus_application_search (NautilusApplication *self,
+- const gchar *uri,
+- const gchar *text)
++ NautilusQuery *query)
+ {
++ g_autoptr (GFile) location = NULL;
+ NautilusWindow *window;
+- GFile *location;
+
+- location = g_file_new_for_uri (uri);
++ location = nautilus_query_get_location (query);
+ window = open_window (self, location);
+- nautilus_window_search (window, text);
+-
+- g_object_unref (location);
++ nautilus_window_search (window, query);
+ }
+diff --git a/src/nautilus-application.h b/src/nautilus-application.h
+index 9cb32c8..47adcc4 100644
+--- a/src/nautilus-application.h
++++ b/src/nautilus-application.h
+@@ -86,8 +86,7 @@ GtkWidget * nautilus_application_connect_server (NautilusApplication *applicatio
+ NautilusWindow *window);
+
+ void nautilus_application_search (NautilusApplication *application,
+- const gchar *uri,
+- const gchar *text);
++ NautilusQuery *query);
+ void nautilus_application_startup_common (NautilusApplication *application);
+
+ void nautilus_application_update_dbus_opened_locations (NautilusApplication *app);
+diff --git a/src/nautilus-directory-async.c b/src/nautilus-directory-async.c
+index 05a87e3..b519e20 100644
+--- a/src/nautilus-directory-async.c
++++ b/src/nautilus-directory-async.c
+@@ -4383,6 +4383,8 @@ got_filesystem_info (FilesystemInfoState *state,
+ file->details->filesystem_readonly =
+ g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY);
+ filesystem_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE);
++ file->details->filesystem_remote =
++ g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE);
+ if (g_strcmp0 (eel_ref_str_peek (file->details->filesystem_type), filesystem_type) != 0)
+ {
+ eel_ref_str_unref (file->details->filesystem_type);
+@@ -4465,7 +4467,8 @@ filesystem_info_start (NautilusDirectory *directory,
+ g_file_query_filesystem_info_async (location,
+ G_FILE_ATTRIBUTE_FILESYSTEM_READONLY ","
+ G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW ","
+- G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
++ G_FILE_ATTRIBUTE_FILESYSTEM_TYPE ","
++ G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE,
+ G_PRIORITY_DEFAULT,
+ state->cancellable,
+ query_filesystem_info_callback,
+diff --git a/src/nautilus-file-private.h b/src/nautilus-file-private.h
+index adcfacf..1566589 100644
+--- a/src/nautilus-file-private.h
++++ b/src/nautilus-file-private.h
+@@ -202,7 +202,8 @@ struct NautilusFileDetails
+ eel_boolean_bit filesystem_readonly : 1;
+ eel_boolean_bit filesystem_use_preview : 2; /* GFilesystemPreviewType */
+ eel_boolean_bit filesystem_info_is_up_to_date : 1;
+- eel_ref_str filesystem_type;
++ eel_boolean_bit filesystem_remote : 1;
++ eel_ref_str filesystem_type;
+
+ time_t trash_time; /* 0 is unknown */
+ time_t recency; /* 0 is unknown */
+diff --git a/src/nautilus-file.c b/src/nautilus-file.c
+index 2135801..6a28229 100644
+--- a/src/nautilus-file.c
++++ b/src/nautilus-file.c
+@@ -4960,6 +4960,29 @@ nautilus_file_get_filesystem_type (NautilusFile *file)
+ return filesystem_type;
+ }
+
++gboolean
++nautilus_file_get_filesystem_remote (NautilusFile *file)
++{
++ NautilusFile *parent;
++
++ g_assert (NAUTILUS_IS_FILE (file));
++
++ if (nautilus_file_is_directory (file))
++ {
++ return file->details->filesystem_remote;
++ }
++ else
++ {
++ parent = nautilus_file_get_parent (file);
++ if (parent != NULL)
++ {
++ return parent->details->filesystem_remote;
++ }
++ }
++
++ return FALSE;
++}
++
+ gboolean
+ nautilus_file_should_show_thumbnail (NautilusFile *file)
+ {
+@@ -8361,6 +8384,11 @@ nautilus_file_is_remote (NautilusFile *file)
+
+ g_assert (NAUTILUS_IS_FILE (file));
+
++ if (nautilus_file_get_filesystem_remote (file))
++ {
++ return TRUE;
++ }
++
+ filesystem_type = nautilus_file_get_filesystem_type (file);
+
+ return filesystem_type != NULL && g_strv_contains (remote_types, filesystem_type);
+diff --git a/src/nautilus-file.h b/src/nautilus-file.h
+index 3a83bd4..af8c003 100644
+--- a/src/nautilus-file.h
++++ b/src/nautilus-file.h
+@@ -251,6 +251,8 @@ char * nautilus_file_get_filesystem_id (Nautilu
+
+ char * nautilus_file_get_filesystem_type (NautilusFile *file);
+
++gboolean nautilus_file_get_filesystem_remote (NautilusFile *file);
++
+ NautilusFile * nautilus_file_get_trash_original_file (NautilusFile *file);
+
+ /* Permissions. */
+diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
+index 94b9c4d..f5260c9 100644
+--- a/src/nautilus-query-editor.c
++++ b/src/nautilus-query-editor.c
+@@ -80,33 +80,47 @@ static void nautilus_query_editor_changed (NautilusQueryEditor *editor);
+
+ G_DEFINE_TYPE_WITH_PRIVATE (NautilusQueryEditor, nautilus_query_editor, GTK_TYPE_SEARCH_BAR);
+
+-static gboolean
+-settings_search_is_recursive (NautilusQueryEditor *editor)
++static NautilusQueryRecursive
++settings_search_get_recursive (void)
++{
++ switch (g_settings_get_enum (nautilus_preferences, "recursive-search"))
++ {
++ case NAUTILUS_SPEED_TRADEOFF_ALWAYS:
++ return NAUTILUS_QUERY_RECURSIVE_ALWAYS;
++ case NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY:
++ return NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY;
++ case NAUTILUS_SPEED_TRADEOFF_NEVER:
++ return NAUTILUS_QUERY_RECURSIVE_NEVER;
++ }
++
++ return NAUTILUS_QUERY_RECURSIVE_ALWAYS;
++}
++
++static NautilusQueryRecursive
++settings_search_get_recursive_for_location (NautilusQueryEditor *editor)
+ {
+ NautilusQueryEditorPrivate *priv;
+- NautilusFile *file;
+- gboolean recursive;
++ NautilusQueryRecursive recursive;
+
+ priv = nautilus_query_editor_get_instance_private (editor);
++ recursive = settings_search_get_recursive ();
+
+- if (!priv->location)
++ if (priv->location == NULL)
+ {
+- return TRUE;
++ return recursive;
+ }
+
+- file = nautilus_file_get (priv->location);
+-
+- if (nautilus_file_is_remote (file))
++ if (recursive == NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY)
+ {
+- recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+- }
+- else
+- {
+- recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
+- g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+- }
++ NautilusFile *file = nautilus_file_get (priv->location);
+
+- nautilus_file_unref (file);
++ if (nautilus_file_is_remote (file))
++ {
++ recursive = NAUTILUS_QUERY_RECURSIVE_NEVER;
++ }
++
++ nautilus_file_unref (file);
++ }
+
+ return recursive;
+ }
+@@ -144,12 +158,12 @@ update_information_label (NautilusQueryEditor *editor)
+ fts_sensitive = FALSE;
+ }
+ else if (nautilus_file_is_remote (file) &&
+- !settings_search_is_recursive (editor))
++ settings_search_get_recursive_for_location (editor) == NAUTILUS_QUERY_RECURSIVE_NEVER)
+ {
+ label = _("Remote location — only searching the current folder");
+ fts_sensitive = FALSE;
+ }
+- else if (!settings_search_is_recursive (editor))
++ else if (settings_search_get_recursive_for_location (editor) == NAUTILUS_QUERY_RECURSIVE_NEVER)
+ {
+ label = _("Only searching the current folder");
+ }
+@@ -171,7 +185,7 @@ recursive_search_preferences_changed (GSettings *settings,
+ NautilusQueryEditor *editor)
+ {
+ NautilusQueryEditorPrivate *priv;
+- gboolean recursive;
++ NautilusQueryRecursive recursive;
+
+ priv = nautilus_query_editor_get_instance_private (editor);
+
+@@ -180,7 +194,7 @@ recursive_search_preferences_changed (GSettings *settings,
+ return;
+ }
+
+- recursive = settings_search_is_recursive (editor);
++ recursive = settings_search_get_recursive ();
+ if (recursive != nautilus_query_get_recursive (priv->query))
+ {
+ nautilus_query_set_recursive (priv->query, recursive);
+@@ -382,7 +396,6 @@ create_query (NautilusQueryEditor *editor)
+ NautilusQueryEditorPrivate *priv;
+ NautilusQuery *query;
+ NautilusFile *file;
+- gboolean recursive;
+ gboolean fts_enabled;
+
+ priv = nautilus_query_editor_get_instance_private (editor);
+@@ -396,11 +409,9 @@ create_query (NautilusQueryEditor *editor)
+
+ nautilus_query_set_search_content (query, fts_enabled);
+
+- recursive = settings_search_is_recursive (editor);
+-
+ nautilus_query_set_text (query, gtk_entry_get_text (GTK_ENTRY (priv->entry)));
+ nautilus_query_set_location (query, priv->location);
+- nautilus_query_set_recursive (query, recursive);
++ nautilus_query_set_recursive (query, settings_search_get_recursive ());
+
+ nautilus_query_editor_set_query (editor, query);
+
+diff --git a/src/nautilus-query.c b/src/nautilus-query.c
+index 59600d1..c3e4ef4 100644
+--- a/src/nautilus-query.c
++++ b/src/nautilus-query.c
+@@ -44,11 +44,11 @@ struct _NautilusQuery
+ GList *mime_types;
+ gboolean show_hidden;
+ GPtrArray *date_range;
++ NautilusQueryRecursive recursive;
+ NautilusQuerySearchType search_type;
+ NautilusQuerySearchContent search_content;
+
+ gboolean searching;
+- gboolean recursive;
+ char **prepared_words;
+ GMutex prepared_words_mutex;
+ };
+@@ -118,7 +118,7 @@ nautilus_query_get_property (GObject *object,
+
+ case PROP_RECURSIVE:
+ {
+- g_value_set_boolean (value, self->recursive);
++ g_value_set_enum (value, self->recursive);
+ }
+ break;
+
+@@ -181,7 +181,7 @@ nautilus_query_set_property (GObject *object,
+
+ case PROP_RECURSIVE:
+ {
+- nautilus_query_set_recursive (self, g_value_get_boolean (value));
++ nautilus_query_set_recursive (self, g_value_get_enum (value));
+ }
+ break;
+
+@@ -272,11 +272,12 @@ nautilus_query_class_init (NautilusQueryClass *class)
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_RECURSIVE,
+- g_param_spec_boolean ("recursive",
+- "Whether the query is being performed on subdirectories",
+- "Whether the query is being performed on subdirectories or not",
+- FALSE,
+- G_PARAM_READWRITE));
++ g_param_spec_enum ("recursive",
++ "Whether the query is being performed on subdirectories",
++ "Whether the query is being performed on subdirectories or not",
++ NAUTILUS_TYPE_QUERY_RECURSIVE,
++ NAUTILUS_QUERY_RECURSIVE_ALWAYS,
++ G_PARAM_READWRITE));
+
+ /**
+ * NautilusQuery::search-type:
+@@ -636,22 +637,21 @@ nautilus_query_set_searching (NautilusQuery *query,
+ }
+ }
+
+-gboolean
++NautilusQueryRecursive
+ nautilus_query_get_recursive (NautilusQuery *query)
+ {
+- g_return_val_if_fail (NAUTILUS_IS_QUERY (query), FALSE);
++ g_return_val_if_fail (NAUTILUS_IS_QUERY (query),
++ NAUTILUS_QUERY_RECURSIVE_ALWAYS);
+
+ return query->recursive;
+ }
+
+ void
+-nautilus_query_set_recursive (NautilusQuery *query,
+- gboolean recursive)
++nautilus_query_set_recursive (NautilusQuery *query,
++ NautilusQueryRecursive recursive)
+ {
+ g_return_if_fail (NAUTILUS_IS_QUERY (query));
+
+- recursive = !!recursive;
+-
+ if (query->recursive != recursive)
+ {
+ query->recursive = recursive;
+diff --git a/src/nautilus-query.h b/src/nautilus-query.h
+index 2264f50..0e04061 100644
+--- a/src/nautilus-query.h
++++ b/src/nautilus-query.h
+@@ -35,6 +35,13 @@ typedef enum {
+ NAUTILUS_QUERY_SEARCH_CONTENT_FULL_TEXT,
+ } NautilusQuerySearchContent;
+
++typedef enum {
++ NAUTILUS_QUERY_RECURSIVE_NEVER,
++ NAUTILUS_QUERY_RECURSIVE_ALWAYS,
++ NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY,
++ NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY,
++} NautilusQueryRecursive;
++
+ #define NAUTILUS_TYPE_QUERY (nautilus_query_get_type ())
+
+ G_DECLARE_FINAL_TYPE (NautilusQuery, nautilus_query, NAUTILUS, QUERY, GObject)
+@@ -67,10 +74,9 @@ GPtrArray* nautilus_query_get_date_range (NautilusQuery *query);
+ void nautilus_query_set_date_range (NautilusQuery *query,
+ GPtrArray *date_range);
+
+-gboolean nautilus_query_get_recursive (NautilusQuery *query);
+-
+-void nautilus_query_set_recursive (NautilusQuery *query,
+- gboolean recursive);
++NautilusQueryRecursive nautilus_query_get_recursive (NautilusQuery *query);
++void nautilus_query_set_recursive (NautilusQuery *query,
++ NautilusQueryRecursive recursive);
+
+ gboolean nautilus_query_get_searching (NautilusQuery *query);
+
+diff --git a/src/nautilus-search-directory.c b/src/nautilus-search-directory.c
+index ae710f3..d86fda2 100644
+--- a/src/nautilus-search-directory.c
++++ b/src/nautilus-search-directory.c
+@@ -176,8 +176,6 @@ static void
+ start_search (NautilusSearchDirectory *self)
+ {
+ NautilusSearchEngineModel *model_provider;
+- NautilusSearchEngineSimple *simple_provider;
+- gboolean recursive;
+
+ if (!self->query)
+ {
+@@ -205,10 +203,6 @@ start_search (NautilusSearchDirectory *self)
+ model_provider = nautilus_search_engine_get_model_provider (self->engine);
+ nautilus_search_engine_model_set_model (model_provider, self->base_model);
+
+- simple_provider = nautilus_search_engine_get_simple_provider (self->engine);
+- recursive = nautilus_query_get_recursive (self->query);
+- g_object_set (simple_provider, "recursive", recursive, NULL);
+-
+ reset_file_list (self);
+
+ nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (self->engine));
+diff --git a/src/nautilus-search-engine-private.h b/src/nautilus-search-engine-private.h
+new file mode 100644
+index 0000000..8e28ad7
+--- /dev/null
++++ b/src/nautilus-search-engine-private.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright (C) 2018 Canonical Ltd.
++ *
++ * Nautilus 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.
++ *
++ * Nautilus 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,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Author: Marco Trevisan <[email protected]>
++ *
++ */
++
++#ifndef NAUTILUS_SEARCH_ENGINE_PRIVATE_H
++#define NAUTILUS_SEARCH_ENGINE_PRIVATE_H
++
++#include "nautilus-query.h"
++
++typedef enum {
++ NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
++ NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++} NautilusSearchEngineType;
++
++gboolean is_recursive_search (NautilusSearchEngineType engine_type, NautilusQueryRecursive recursive, GFile *location);
++
++#endif /* NAUTILUS_SEARCH_ENGINE_PRIVATE_H */
+diff --git a/src/nautilus-search-engine-simple.c b/src/nautilus-search-engine-simple.c
+index 3ec9eb3..0c9ea81 100644
+--- a/src/nautilus-search-engine-simple.c
++++ b/src/nautilus-search-engine-simple.c
+@@ -20,9 +20,11 @@
+ */
+
+ #include <config.h>
++
+ #include "nautilus-search-hit.h"
+ #include "nautilus-search-provider.h"
+ #include "nautilus-search-engine-simple.h"
++#include "nautilus-search-engine-private.h"
+ #include "nautilus-ui-utilities.h"
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+ #include "nautilus-debug.h"
+@@ -35,7 +37,7 @@
+
+ enum
+ {
+- PROP_RECURSIVE = 1,
++ PROP_0,
+ PROP_RUNNING,
+ NUM_PROPERTIES
+ };
+@@ -52,7 +54,6 @@ typedef struct
+
+ GHashTable *visited;
+
+- gboolean recursive;
+ gint n_processed_files;
+ GList *hits;
+
+@@ -66,8 +67,6 @@ struct _NautilusSearchEngineSimple
+ NautilusQuery *query;
+
+ SearchThreadData *active_search;
+-
+- gboolean recursive;
+ };
+
+ static void nautilus_search_provider_init (NautilusSearchProviderInterface *iface);
+@@ -208,6 +207,9 @@ static void
+ visit_directory (GFile *dir,
+ SearchThreadData *data)
+ {
++ g_autoptr (GPtrArray) date_range = NULL;
++ NautilusQuerySearchType type;
++ NautilusQueryRecursive recursive;
+ GFileEnumerator *enumerator;
+ GFileInfo *info;
+ GFile *child;
+@@ -238,10 +240,12 @@ visit_directory (GFile *dir,
+ return;
+ }
+
++ type = nautilus_query_get_search_type (data->query);
++ recursive = nautilus_query_get_recursive (data->query);
++ date_range = nautilus_query_get_date_range (data->query);
++
+ while ((info = g_file_enumerator_next_file (enumerator, data->cancellable, NULL)) != NULL)
+ {
+- g_autoptr (GPtrArray) date_range = NULL;
+-
+ display_name = g_file_info_get_display_name (info);
+ if (display_name == NULL)
+ {
+@@ -276,15 +280,12 @@ visit_directory (GFile *dir,
+ mtime = g_file_info_get_attribute_uint64 (info, "time::modified");
+ atime = g_file_info_get_attribute_uint64 (info, "time::access");
+
+- date_range = nautilus_query_get_date_range (data->query);
+ if (found && date_range != NULL)
+ {
+- NautilusQuerySearchType type;
+ guint64 current_file_time;
+
+ initial_date = g_ptr_array_index (date_range, 0);
+ end_date = g_ptr_array_index (date_range, 1);
+- type = nautilus_query_get_search_type (data->query);
+
+ if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS)
+ {
+@@ -322,7 +323,10 @@ visit_directory (GFile *dir,
+ send_batch (data);
+ }
+
+- if (data->engine->recursive && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
++ if (recursive != NAUTILUS_QUERY_RECURSIVE_NEVER &&
++ g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY &&
++ is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
++ recursive, child))
+ {
+ id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILE);
+ visited = FALSE;
+@@ -438,9 +442,9 @@ nautilus_search_engine_simple_set_query (NautilusSearchProvider *provider,
+ {
+ NautilusSearchEngineSimple *simple = NAUTILUS_SEARCH_ENGINE_SIMPLE (provider);
+
+- g_object_ref (query);
+ g_clear_object (&simple->query);
+- simple->query = query;
++
++ simple->query = g_object_ref (query);
+ }
+
+ static gboolean
+@@ -453,30 +457,6 @@ nautilus_search_engine_simple_is_running (NautilusSearchProvider *provider)
+ return simple->active_search != NULL;
+ }
+
+-static void
+-nautilus_search_engine_simple_set_property (GObject *object,
+- guint arg_id,
+- const GValue *value,
+- GParamSpec *pspec)
+-{
+- NautilusSearchEngineSimple *engine = NAUTILUS_SEARCH_ENGINE_SIMPLE (object);
+-
+- switch (arg_id)
+- {
+- case PROP_RECURSIVE:
+- {
+- engine->recursive = g_value_get_boolean (value);
+- }
+- break;
+-
+- default:
+- {
+- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, arg_id, pspec);
+- }
+- break;
+- }
+-}
+-
+ static void
+ nautilus_search_engine_simple_get_property (GObject *object,
+ guint arg_id,
+@@ -492,12 +472,6 @@ nautilus_search_engine_simple_get_property (GObject *object,
+ g_value_set_boolean (value, nautilus_search_engine_simple_is_running (NAUTILUS_SEARCH_PROVIDER (engine)));
+ }
+ break;
+-
+- case PROP_RECURSIVE:
+- {
+- g_value_set_boolean (value, engine->recursive);
+- }
+- break;
+ }
+ }
+
+@@ -518,20 +492,6 @@ nautilus_search_engine_simple_class_init (NautilusSearchEngineSimpleClass *class
+ gobject_class = G_OBJECT_CLASS (class);
+ gobject_class->finalize = finalize;
+ gobject_class->get_property = nautilus_search_engine_simple_get_property;
+- gobject_class->set_property = nautilus_search_engine_simple_set_property;
+-
+- /**
+- * NautilusSearchEngineSimple::recursive:
+- *
+- * Whether the search is recursive or not.
+- */
+- g_object_class_install_property (gobject_class,
+- PROP_RECURSIVE,
+- g_param_spec_boolean ("recursive",
+- "recursive",
+- "recursive",
+- FALSE,
+- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NautilusSearchEngine::running:
+diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
+index 8218ea3..98f3c79 100644
+--- a/src/nautilus-search-engine-tracker.c
++++ b/src/nautilus-search-engine-tracker.c
+@@ -22,7 +22,7 @@
+ #include <config.h>
+ #include "nautilus-search-engine-tracker.h"
+
+-#include "nautilus-global-preferences.h"
++#include "nautilus-search-engine-private.h"
+ #include "nautilus-search-hit.h"
+ #include "nautilus-search-provider.h"
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+@@ -296,7 +296,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
+ GString *sparql;
+ GList *mimetypes, *l;
+ gint mime_count;
+- gboolean recursive;
+ GPtrArray *date_range;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+@@ -325,10 +324,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
+ return;
+ }
+
+- recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
+- g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+- tracker->recursive = recursive;
+-
+ tracker->fts_enabled = nautilus_query_get_search_content (tracker->query);
+
+ query_text = nautilus_query_get_text (tracker->query);
+@@ -476,16 +471,21 @@ static void
+ nautilus_search_engine_tracker_set_query (NautilusSearchProvider *provider,
+ NautilusQuery *query)
+ {
++ g_autoptr(GFile) location = NULL;
+ NautilusSearchEngineTracker *tracker;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
++ location = nautilus_query_get_location (query);
+
+ if (!tracker->available)
+ return;
+
+- g_object_ref (query);
+ g_clear_object (&tracker->query);
+- tracker->query = query;
++
++ tracker->query = g_object_ref (query);
++ tracker->recursive = is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++ nautilus_query_get_recursive (query),
++ location);
+ }
+
+ static gboolean
+diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
+index 209bd4f..a545160 100644
+--- a/src/nautilus-search-engine.c
++++ b/src/nautilus-search-engine.c
+@@ -20,12 +20,14 @@
+ */
+
+ #include <config.h>
+-
+-#include <glib/gi18n.h>
+-#include "nautilus-search-provider.h"
+ #include "nautilus-search-engine.h"
+ #include "nautilus-search-engine-simple.h"
++#include "nautilus-search-engine-private.h"
++
+ #include "nautilus-search-engine-model.h"
++#include "nautilus-search-provider.h"
++#include "nautilus-file.h"
++#include <glib/gi18n.h>
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+ #include "nautilus-debug.h"
+ #include "nautilus-search-engine-tracker.h"
+@@ -417,12 +419,30 @@ nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine)
+ return priv->model;
+ }
+
+-NautilusSearchEngineSimple *
+-nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine)
++gboolean
++is_recursive_search (NautilusSearchEngineType engine_type,
++ NautilusQueryRecursive recursive,
++ GFile *location)
+ {
+- NautilusSearchEnginePrivate *priv;
++ switch (recursive)
++ {
++ case NAUTILUS_QUERY_RECURSIVE_NEVER:
++ return FALSE;
+
+- priv = nautilus_search_engine_get_instance_private (engine);
++ case NAUTILUS_QUERY_RECURSIVE_ALWAYS:
++ return TRUE;
++
++ case NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY:
++ return engine_type == NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED;
++
++ case NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY:
++ {
++ NautilusFile *file = nautilus_file_get (location);
++ gboolean remote = !nautilus_file_is_remote (file);
++ nautilus_file_unref (file);
++ return remote;
++ }
++ }
+
+- return priv->simple;
++ return TRUE;
+ }
+diff --git a/src/nautilus-search-engine.h b/src/nautilus-search-engine.h
+index 0416e83..435908a 100644
+--- a/src/nautilus-search-engine.h
++++ b/src/nautilus-search-engine.h
+@@ -42,8 +42,6 @@ struct _NautilusSearchEngineClass
+ NautilusSearchEngine *nautilus_search_engine_new (void);
+ NautilusSearchEngineModel *
+ nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine);
+-NautilusSearchEngineSimple *
+- nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine);
+
+ G_END_DECLS
+
+diff --git a/src/nautilus-shell-search-provider.c b/src/nautilus-shell-search-provider.c
+index cdadc08..b95babf 100644
+--- a/src/nautilus-shell-search-provider.c
++++ b/src/nautilus-shell-search-provider.c
+@@ -426,15 +426,32 @@ search_add_volumes_and_bookmarks (PendingSearch *search)
+ g_object_unref (volume_monitor);
+ }
+
++static NautilusQuery*
++shell_query_new (gchar **terms)
++{
++ NautilusQuery *query;
++ g_autoptr (GFile) home = NULL;
++ g_autofree gchar *terms_joined = NULL;
++
++ terms_joined = g_strjoinv (" ", terms);
++ home = g_file_new_for_path (g_get_home_dir ());
++
++ query = nautilus_query_new ();
++ nautilus_query_set_show_hidden_files (query, FALSE);
++ nautilus_query_set_recursive (query, NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY);
++ nautilus_query_set_text (query, terms_joined);
++ nautilus_query_set_location (query, home);
++
++ return query;
++}
++
+ static void
+ execute_search (NautilusShellSearchProvider *self,
+ GDBusMethodInvocation *invocation,
+ gchar **terms)
+ {
+- gchar *terms_joined;
+ NautilusQuery *query;
+ PendingSearch *pending_search;
+- GFile *home;
+
+ cancel_current_search (self);
+
+@@ -446,13 +463,7 @@ execute_search (NautilusShellSearchProvider *self,
+ return;
+ }
+
+- terms_joined = g_strjoinv (" ", terms);
+- home = g_file_new_for_path (g_get_home_dir ());
+-
+- query = nautilus_query_new ();
+- nautilus_query_set_show_hidden_files (query, FALSE);
+- nautilus_query_set_text (query, terms_joined);
+- nautilus_query_set_location (query, home);
++ query = shell_query_new (terms);
+
+ pending_search = g_slice_new0 (PendingSearch);
+ pending_search->invocation = g_object_ref (invocation);
+@@ -479,9 +490,6 @@ execute_search (NautilusShellSearchProvider *self,
+ nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (pending_search->engine),
+ query);
+ nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (pending_search->engine));
+-
+- g_clear_object (&home);
+- g_free (terms_joined);
+ }
+
+ static gboolean
+@@ -713,13 +721,9 @@ handle_launch_search (NautilusShellSearchProvider2 *skeleton,
+ gpointer user_data)
+ {
+ GApplication *app = g_application_get_default ();
+- gchar *string = g_strjoinv (" ", terms);
+- gchar *uri = nautilus_get_home_directory_uri ();
++ g_autoptr (NautilusQuery) query = shell_query_new (terms);
+
+- nautilus_application_search (NAUTILUS_APPLICATION (app), uri, string);
+-
+- g_free (string);
+- g_free (uri);
++ nautilus_application_search (NAUTILUS_APPLICATION (app), query);
+
+ nautilus_shell_search_provider2_complete_launch_search (skeleton, invocation);
+ return TRUE;
+diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
+index a9911ee..6935de3 100644
+--- a/src/nautilus-window-slot.c
++++ b/src/nautilus-window-slot.c
+@@ -100,6 +100,7 @@ typedef struct
+
+ /* Query editor */
+ NautilusQueryEditor *query_editor;
++ NautilusQuery *pending_search_query;
+ gulong qe_changed_id;
+ gulong qe_cancel_id;
+ gulong qe_activated_id;
+@@ -110,7 +111,6 @@ typedef struct
+ * finish. Used for showing a spinner to provide feedback to the user. */
+ gboolean allow_stop;
+ gboolean needs_reload;
+- gchar *pending_search_text;
+
+ /* New location. */
+ GFile *pending_location;
+@@ -361,9 +361,9 @@ update_search_visible (NautilusWindowSlot *self)
+ g_object_unref (query);
+ }
+
+- if (priv->pending_search_text)
++ if (priv->pending_search_query)
+ {
+- nautilus_window_slot_search (self, g_strdup (priv->pending_search_text));
++ nautilus_window_slot_search (self, g_object_ref (priv->pending_search_query));
+ }
+ }
+
+@@ -589,17 +589,13 @@ nautilus_window_slot_get_search_visible (NautilusWindowSlot *self)
+
+ void
+ nautilus_window_slot_search (NautilusWindowSlot *self,
+- const gchar *text)
++ NautilusQuery *query)
+ {
+ NautilusWindowSlotPrivate *priv;
+ NautilusView *view;
+
+ priv = nautilus_window_slot_get_instance_private (self);
+- if (priv->pending_search_text)
+- {
+- g_free (priv->pending_search_text);
+- priv->pending_search_text = NULL;
+- }
++ g_clear_object (&priv->pending_search_query);
+
+ view = nautilus_window_slot_get_current_view (self);
+ /* We could call this when the location is still being checked in the
+@@ -608,11 +604,11 @@ nautilus_window_slot_search (NautilusWindowSlot *self,
+ if (view)
+ {
+ nautilus_window_slot_set_search_visible (self, TRUE);
+- nautilus_query_editor_set_text (priv->query_editor, text);
++ nautilus_query_editor_set_query (priv->query_editor, query);
+ }
+ else
+ {
+- priv->pending_search_text = g_strdup (text);
++ priv->pending_search_query = g_object_ref (query);
+ }
+ }
+
+@@ -2814,6 +2810,7 @@ nautilus_window_slot_dispose (GObject *object)
+ g_clear_object (&priv->current_location_bookmark);
+ g_clear_object (&priv->last_location_bookmark);
+ g_clear_object (&priv->slot_action_group);
++ g_clear_object (&priv->pending_search_query);
+
+ g_clear_pointer (&priv->find_mount_cancellable, g_cancellable_cancel);
+
+diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
+index 573357d..f67b6ab 100644
+--- a/src/nautilus-window-slot.h
++++ b/src/nautilus-window-slot.h
+@@ -112,7 +112,7 @@ void nautilus_window_slot_set_active (NautilusWindowSlot *
+ gboolean nautilus_window_slot_get_loading (NautilusWindowSlot *slot);
+
+ void nautilus_window_slot_search (NautilusWindowSlot *slot,
+- const gchar *text);
++ NautilusQuery *query);
+
+ gboolean nautilus_window_slot_handles_location (NautilusWindowSlot *self,
+ GFile *location);
+diff --git a/src/nautilus-window.c b/src/nautilus-window.c
+index a23d515..8eab985 100644
+--- a/src/nautilus-window.c
++++ b/src/nautilus-window.c
+@@ -3100,14 +3100,14 @@ nautilus_window_show_about_dialog (NautilusWindow *window)
+
+ void
+ nautilus_window_search (NautilusWindow *window,
+- const gchar *text)
++ NautilusQuery *query)
+ {
+ NautilusWindowSlot *active_slot;
+
+ active_slot = nautilus_window_get_active_slot (window);
+ if (active_slot)
+ {
+- nautilus_window_slot_search (active_slot, text);
++ nautilus_window_slot_search (active_slot, query);
+ }
+ else
+ {
+diff --git a/src/nautilus-window.h b/src/nautilus-window.h
+index 39b16e7..c1196d3 100644
+--- a/src/nautilus-window.h
++++ b/src/nautilus-window.h
+@@ -135,7 +135,7 @@ void nautilus_window_end_dnd (NautilusWindow *window,
+ GdkDragContext *context);
+
+ void nautilus_window_search (NautilusWindow *window,
+- const gchar *text);
++ NautilusQuery *query);
+
+ void nautilus_window_initialize_slot (NautilusWindow *window,
+ NautilusWindowSlot *slot,
diff --git a/debian/patches/series b/debian/patches/series
index d6c50a8..04196e1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -15,9 +15,12 @@ ubuntu_backspace_behaviour.patch
#Needs updating
#16_unity_new_documents.patch
0015-tracker-search-engine-don-t-start-it-if-not-availabl.patch
+query-add-recursive-flags-and-use-it-in-search-engines.patch
0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
0017-recent-add-function-to-update-manager-on-file-rename.patch
0018-search-engine-add-locate-based-search-engine.patch
appstream-compulsory.patch
server_list_segfault.patch
clear_pending_selection.patch
+git_middle_tab.patch
+nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
diff --git a/meson.build b/meson.build
index 18e645a..6256193 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project ('nautilus', 'c',
- version: '3.26.3',
+ version: '3.26.3.1',
meson_version: '>=0.40.0',
license: 'GPL3+')
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index fc765be..d6ac35a 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -5496,7 +5496,7 @@ nautilus_thumbnail_is_limited_by_zoom (int size,
zoom_level = size * scale;
- if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_STANDARD)
+ if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_SMALL)
{
return TRUE;
}
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 9b7b9b9..8784f63 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -2047,8 +2047,9 @@ static void
nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
gboolean with_selection)
{
- g_autoptr (NautilusDirectory) containing_directory = NULL;
+ NautilusDirectory *containing_directory;
NautilusFilesViewPrivate *priv;
+ GList *selection;
g_autofree char *uri = NULL;
g_autofree char *common_prefix = NULL;
@@ -2062,13 +2063,8 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
uri = nautilus_files_view_get_backing_uri (view);
containing_directory = nautilus_directory_get_by_uri (uri);
- if (with_selection)
- {
- GList *selection;
- selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
- common_prefix = nautilus_get_common_filename_prefix (selection, MIN_COMMON_FILENAME_PREFIX_LENGTH);
- nautilus_file_list_free (selection);
- }
+ selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
+ common_prefix = nautilus_get_common_filename_prefix (selection, MIN_COMMON_FILENAME_PREFIX_LENGTH);
priv->new_folder_controller =
nautilus_new_folder_dialog_controller_new (nautilus_files_view_get_containing_window (view),
@@ -2084,6 +2080,9 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
"cancelled",
(GCallback) new_folder_dialog_controller_on_cancelled,
view);
+
+ nautilus_file_list_free (selection);
+ nautilus_directory_unref (containing_directory);
}
typedef struct
diff --git a/src/nautilus-trash-monitor.c b/src/nautilus-trash-monitor.c
index 97f4874..1e156e1 100644
--- a/src/nautilus-trash-monitor.c
+++ b/src/nautilus-trash-monitor.c
@@ -29,7 +29,7 @@
#include <gio/gio.h>
#include <string.h>
-#define UPDATE_RATE_SECONDS 5
+#define UPDATE_RATE_SECONDS 1
struct NautilusTrashMonitorDetails
{
--
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop