rpms/nautilus/devel nautilus-2.28.1-dynamic-search.patch, NONE, 1.1 nautilus-2.28.1-tracker-0.7-failed-connection.patch, NONE, 1.1 nautilus-2.28.2-infopanel-selection-crash.patch, NONE, 1.1 .cvsignore, 1.101, 1.102 nautilus.spec, 1.290, 1.291 sources, 1.106, 1.107

Tomas Bzatek tbzatek at fedoraproject.org
Mon Nov 2 16:33:13 UTC 2009


Author: tbzatek

Update of /cvs/extras/rpms/nautilus/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv2995

Modified Files:
	.cvsignore nautilus.spec sources 
Added Files:
	nautilus-2.28.1-dynamic-search.patch 
	nautilus-2.28.1-tracker-0.7-failed-connection.patch 
	nautilus-2.28.2-infopanel-selection-crash.patch 
Log Message:
Sync with F12


nautilus-2.28.1-dynamic-search.patch:
 configure.in                                         |   62 --------
 libnautilus-private/Makefile.am                      |   20 --
 libnautilus-private/nautilus-search-engine-beagle.c  |  132 +++++++++++++++++
 libnautilus-private/nautilus-search-engine-tracker.c |  142 +++++++++++++++----
 libnautilus-private/nautilus-search-engine.c         |    5 
 5 files changed, 248 insertions(+), 113 deletions(-)

--- NEW FILE nautilus-2.28.1-dynamic-search.patch ---
>From 62ec35a733aee0a7ce7a820027e8507183ac212d Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek at redhat.com>
Date: Wed, 21 Oct 2009 15:23:26 +0200
Subject: [PATCH] Load beagle/tracker at runtime

Dynamically load beagle and tracker client libraries on demand if available.
This allows more flexibility for packagers and users.

See bug 589345 for details.
---
 configure.in                                       |   62 ---------
 libnautilus-private/Makefile.am                    |   20 +---
 .../nautilus-search-engine-beagle.c                |  132 ++++++++++++++++++-
 .../nautilus-search-engine-tracker.c               |  142 ++++++++++++++++----
 libnautilus-private/nautilus-search-engine.c       |    4 -
 5 files changed, 248 insertions(+), 112 deletions(-)

diff --git a/configure.in b/configure.in
index 45f0b26..866e8f3 100644
--- a/configure.in
+++ b/configure.in
@@ -195,66 +195,6 @@ if test "x$enable_xmp" != "xno"; then
 fi
 
 dnl ==========================================================================
-dnl search implementations
-dnl ****************************
-
-AM_CONDITIONAL(HAVE_TRACKER, false)
-
-dnl libtracker checking
-			    			  
-AC_ARG_ENABLE(tracker, 
-	AC_HELP_STRING([--disable-tracker], 
-			[build without tracker support]))
-msg_tracker=no
-if test "x$enable_tracker" != "xno"; then
-	PKG_CHECK_MODULES(TRACKER, tracker-client-0.7, [
-	                  AM_CONDITIONAL(HAVE_TRACKER, true)
-			  AC_DEFINE(HAVE_TRACKER, 1, [Define to enable tracker support])
-			  AC_DEFINE(HAVE_TRACKER_0_7, 1, [Define to enable tracker support])
-			  ]
-                          msg_tracker=yes,
-	                  [
-	                  PKG_CHECK_MODULES(TRACKER, tracker >= tracker_minver, [
-	                                    AM_CONDITIONAL(HAVE_TRACKER, true)
-			                    AC_DEFINE(HAVE_TRACKER, 1, [Define to enable tracker support])
-			                    ]
-		                            msg_tracker=yes,
-	                                   [AM_CONDITIONAL(HAVE_TRACKER, false)])
-	                  ])
-        AC_SUBST(TRACKER_CFLAGS)
-	AC_SUBST(TRACKER_LIBS)
-fi
-
-dnl ==========================================================================
-
-
-AM_CONDITIONAL(HAVE_BEAGLE, false)
-
-dnl libbeagle checking
-
-AC_ARG_ENABLE(beagle, 
-	AC_HELP_STRING([--disable-beagle], 
-			[build without beagle support]))
-msg_beagle=no
-if test "x$enable_beagle" != "xno"; then
-	BEAGLE_PKGCONFIG=
-	if $PKG_CONFIG --exists libbeagle-1.0; then
-		BEAGLE_PKGCONFIG=libbeagle-1.0
-	else
-		BEAGLE_PKGCONFIG=libbeagle-0.0
-	fi
-
-	PKG_CHECK_MODULES(BEAGLE, $BEAGLE_PKGCONFIG >= beagle_minver, [
-		  	  AM_CONDITIONAL(HAVE_BEAGLE, true)
-			  AC_DEFINE(HAVE_BEAGLE, 1, [Define to enable beagle support])
-			  ]
-                          msg_beagle=yes,
-	          	  [AM_CONDITIONAL(HAVE_BEAGLE, false)])
-        AC_SUBST(BEAGLE_CFLAGS)
-	AC_SUBST(BEAGLE_LIBS)
-fi
-
-dnl ==========================================================================
 
 dnl ****************************
 dnl *** Check for libselinux ***
@@ -470,8 +410,6 @@ nautilus-$VERSION:
 	prefix:                 ${prefix}
 	source code location:	${srcdir}
 	compiler:		${CC}
-	tracker support:	$msg_tracker
-	beagle support:		$msg_beagle
 	xmp support:		$msg_xmp
 	PackageKit support:     $msg_packagekit
 
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index e831d43..0f817fc 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -154,6 +154,10 @@ libnautilus_private_la_SOURCES = \
 	nautilus-search-engine.h \
 	nautilus-search-engine-simple.c \
 	nautilus-search-engine-simple.h \
+	nautilus-search-engine-beagle.c \
+	nautilus-search-engine-beagle.h \
+	nautilus-search-engine-tracker.c \
+	nautilus-search-engine-tracker.h \
 	nautilus-sidebar-provider.c \
 	nautilus-sidebar-provider.h \
 	nautilus-sidebar.c \
@@ -195,22 +199,6 @@ libnautilus_private_la_SOURCES = \
 	nautilus-window-slot-info.h \
 	$(NULL)
 
-BEAGLE_SOURCES = \
-	nautilus-search-engine-beagle.c \
-	nautilus-search-engine-beagle.h
-
-if HAVE_BEAGLE
-libnautilus_private_la_SOURCES += $(BEAGLE_SOURCES)
-endif
-
-TRACKER_SOURCES = \
-	nautilus-search-engine-tracker.c \
-	nautilus-search-engine-tracker.h
-
-if HAVE_TRACKER
-libnautilus_private_la_SOURCES += $(TRACKER_SOURCES)
-endif
-
 $(lib_LTLIBRARIES): $(dependency_static_libs)
 
 nautilus-marshal.h: nautilus-marshal.list $(GLIB_GENMARSHAL)
diff --git a/libnautilus-private/nautilus-search-engine-beagle.c b/libnautilus-private/nautilus-search-engine-beagle.c
index 3ab6507..930923f 100644
--- a/libnautilus-private/nautilus-search-engine-beagle.c
+++ b/libnautilus-private/nautilus-search-engine-beagle.c
@@ -23,10 +23,20 @@
 
 #include <config.h>
 #include "nautilus-search-engine-beagle.h"
-#include <beagle/beagle.h>
 
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-glib-extensions.h>
+#include <gmodule.h>
+
+typedef struct _BeagleHit BeagleHit;
+typedef struct _BeagleQuery BeagleQuery;
+typedef struct _BeagleClient BeagleClient;
+typedef struct _BeagleRequest BeagleRequest;
+typedef struct _BeagleFinishedResponse BeagleFinishedResponse;
+typedef struct _BeagleHitsAddedResponse BeagleHitsAddedResponse;
+typedef struct _BeagleQueryPartProperty BeagleQueryPartProperty;
+typedef struct _BeagleQueryPart BeagleQueryPart;
+typedef struct _BeagleHitsSubtractedResponse BeagleHitsSubtractedResponse;
 
 struct NautilusSearchEngineBeagleDetails {
 	BeagleClient *client;
@@ -37,6 +47,121 @@ struct NautilusSearchEngineBeagleDetails {
 	gboolean query_finished;
 };
 
+/* We dlopen() all the following from libbeagle at runtime */
+#define BEAGLE_HIT(x) ((BeagleHit *)(x))
+#define BEAGLE_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), beagle_request_get_type(), BeagleRequest))
+#define BEAGLE_QUERY_PART(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), beagle_query_part_get_type(), BeagleQueryPart))
+
+typedef enum {
+	BEAGLE_QUERY_PART_LOGIC_REQUIRED   = 1,
+	BEAGLE_QUERY_PART_LOGIC_PROHIBITED = 2
+} BeagleQueryPartLogic;
+
+typedef enum {
+	BEAGLE_PROPERTY_TYPE_UNKNOWN = 0,
+	BEAGLE_PROPERTY_TYPE_TEXT    = 1,
+	BEAGLE_PROPERTY_TYPE_KEYWORD = 2,
+	BEAGLE_PROPERTY_TYPE_DATE    = 3,
+	BEAGLE_PROPERTY_TYPE_LAST    = 4
+} BeaglePropertyType;
+
+/* *static* wrapper function pointers */
+static gboolean (*beagle_client_send_request_async) (BeagleClient  *client,
+                                                    BeagleRequest  *request,
+                                                    GError        **err) = NULL;
+static G_CONST_RETURN char *(*beagle_hit_get_uri) (BeagleHit *hit) = NULL;
+static GSList *(*beagle_hits_added_response_get_hits) (BeagleHitsAddedResponse *response) = NULL;
+static BeagleQuery *(*beagle_query_new) (void) = NULL;
+static void (*beagle_query_add_text) (BeagleQuery     *query,
+				      const char      *str) = NULL;
+static BeagleQueryPartProperty *(*beagle_query_part_property_new) (void) = NULL;
+static void (*beagle_query_part_set_logic) (BeagleQueryPart      *part,
+					    BeagleQueryPartLogic  logic) = NULL;
+static void (*beagle_query_part_property_set_key) (BeagleQueryPartProperty *part,
+						   const char              *key) = NULL;
+static void (*beagle_query_part_property_set_value) (BeagleQueryPartProperty *part,
+						     const char *             value) = NULL;
+static void (*beagle_query_part_property_set_property_type) (BeagleQueryPartProperty *part,
+							     BeaglePropertyType       prop_type) = NULL;
+static void (*beagle_query_add_part) (BeagleQuery     *query,
+				      BeagleQueryPart *part) = NULL;
+static GType (*beagle_request_get_type) (void) = NULL;
+static GType (*beagle_query_part_get_type) (void) = NULL;
+static gboolean (*beagle_util_daemon_is_running) (void) = NULL;
+static BeagleClient *(*beagle_client_new_real) (const char *client_name) = NULL;
+static void (*beagle_query_set_max_hits) (BeagleQuery *query,
+					  int max_hits) = NULL;
+static GSList *(*beagle_hits_subtracted_response_get_uris) (BeagleHitsSubtractedResponse *response) = NULL;
+
+static struct BeagleDlMapping
+{
+  const char *fn_name;
+  gpointer *fn_ptr_ref;
+} beagle_dl_mapping[] =
+{
+#define MAP(a) { #a, (gpointer *)&a }
+  MAP (beagle_client_send_request_async),
+  MAP (beagle_hit_get_uri),
+  MAP (beagle_hits_added_response_get_hits),
+  MAP (beagle_query_new),
+  MAP (beagle_query_add_text),
+  MAP (beagle_query_part_property_new),
+  MAP (beagle_query_part_set_logic),
+  MAP (beagle_query_part_property_set_key),
+  MAP (beagle_query_part_property_set_value),
+  MAP (beagle_query_part_property_set_property_type),
+  MAP (beagle_query_add_part),
+  MAP (beagle_request_get_type),
+  MAP (beagle_query_part_get_type),
+  MAP (beagle_util_daemon_is_running),
+  MAP (beagle_query_set_max_hits),
+  MAP (beagle_hits_subtracted_response_get_uris),
+#undef MAP
+  { "beagle_client_new", (gpointer *)&beagle_client_new_real },
+};
+
+static void 
+open_libbeagle (void)
+{
+  static gboolean done = FALSE;
+
+  if (!done)
+    {
+      int i;
+      GModule *beagle;
+      
+      done = TRUE;
+ 
+      beagle = g_module_open ("libbeagle.so.1", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+      if (!beagle)
+	return;
+      
+      for (i = 0; i < G_N_ELEMENTS (beagle_dl_mapping); i++)
+	{
+	  if (!g_module_symbol (beagle, beagle_dl_mapping[i].fn_name,
+				beagle_dl_mapping[i].fn_ptr_ref))
+	    {
+	      g_warning ("Missing symbol '%s' in libbeagle\n",
+			 beagle_dl_mapping[i].fn_name);
+	      g_module_close (beagle);
+
+	      for (i = 0; i < G_N_ELEMENTS (beagle_dl_mapping); i++)
+		beagle_dl_mapping[i].fn_ptr_ref = NULL;
+
+	      return;
+	    }
+	}
+    }
+}
+
+static BeagleClient *
+beagle_client_new (const char *client_name)
+{
+  if (beagle_client_new_real)
+    return beagle_client_new_real (client_name);
+
+  return NULL;
+}
 
 static void  nautilus_search_engine_beagle_class_init       (NautilusSearchEngineBeagleClass *class);
 static void  nautilus_search_engine_beagle_init             (NautilusSearchEngineBeagle      *engine);
@@ -276,8 +401,11 @@ nautilus_search_engine_beagle_new (void)
 {
 	NautilusSearchEngineBeagle *engine;
 	BeagleClient *client;
+
+	open_libbeagle ();
 	
-	if (!beagle_util_daemon_is_running ()) {
+	if (beagle_util_daemon_is_running == NULL ||
+	    !beagle_util_daemon_is_running ()) {
 		/* check whether daemon is running as beagle_client_new
 		 * doesn't fail when a stale socket file exists */
 		return NULL;
diff --git a/libnautilus-private/nautilus-search-engine-tracker.c b/libnautilus-private/nautilus-search-engine-tracker.c
index eec8d74..ff1e2d3 100644
--- a/libnautilus-private/nautilus-search-engine-tracker.c
+++ b/libnautilus-private/nautilus-search-engine-tracker.c
@@ -25,13 +25,103 @@
 #include "nautilus-search-engine-tracker.h"
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-glib-extensions.h>
+#include <gmodule.h>
+
+
+typedef struct _TrackerClient TrackerClient;
+
+typedef void (*TrackerArrayReply) (char **result, GError *error, gpointer user_data);
+
+static TrackerClient *	(*tracker_connect)		(gboolean enable_warnings) = NULL;
+static TrackerClient *	(*tracker_connect_07)		(gboolean enable_warnings,
+							 gint     timeout) = NULL;
+static void		(*tracker_disconnect)		(TrackerClient *client) = NULL;
+static void		(*tracker_cancel_last_call)	(TrackerClient *client) = NULL;
+static int		(*tracker_get_version)		(TrackerClient *client, GError **error) = NULL;
+
+
+static void (*tracker_search_metadata_by_text_async) (TrackerClient *client,
+						      const char *query,
+						      TrackerArrayReply callback,
+						      gpointer user_data) = NULL;
+static void (*tracker_search_metadata_by_text_and_mime_async) (TrackerClient *client,
+							       const char *query,
+							       const char **mimes,
+							       TrackerArrayReply callback,
+							       gpointer user_data) = NULL;
+static void (*tracker_search_metadata_by_text_and_location_async) (TrackerClient *client,
+								   const char *query,
+								   const char *location,
+								   TrackerArrayReply callback,
+								   gpointer user_data) = NULL;
+static void (*tracker_search_metadata_by_text_and_mime_and_location_async) (TrackerClient *client,
+									    const char *query,
+									    const char **mimes,
+									    const char *location,
+									    TrackerArrayReply callback,
+									    gpointer user_data) = NULL;
+
+static struct TrackerDlMapping {
+	const char	*fn_name;
+	gpointer	*fn_ptr_ref;
+	gboolean	 mandatory;
+} tracker_dl_mapping[] =
+{
+#define MAP(a, b) { #a, (gpointer *)&a, b }
+	MAP (tracker_connect, TRUE),
+	MAP (tracker_disconnect, TRUE),
+	MAP (tracker_cancel_last_call, TRUE),
+	MAP (tracker_search_metadata_by_text_async, TRUE),
+	MAP (tracker_search_metadata_by_text_and_mime_async, TRUE),
+	MAP (tracker_search_metadata_by_text_and_location_async, TRUE),
+	MAP (tracker_search_metadata_by_text_and_mime_and_location_async, TRUE),
+	MAP (tracker_get_version, FALSE)
+#undef MAP
+};
+
+static gboolean tracker_07;
 
-#ifdef HAVE_TRACKER_0_7
-#include <libtracker-client/tracker.h>
-#else
-#include <tracker.h>
-#endif
+static void
+open_libtracker (void)
+{
+	static gboolean done = FALSE;
+
+	if (! done) {
+		int i;
+		GModule *tracker;
+
+		done = TRUE;
+		tracker_07 = TRUE;
+		tracker_connect_07 = NULL;
+
+		tracker = g_module_open ("libtracker-client-0.7.so.0", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+		if (! tracker) {
+			tracker = g_module_open ("libtrackerclient.so.0", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+			tracker_07 = FALSE;
+		}
+		if (! tracker)
+			return;
+
+		for (i = 0; i < G_N_ELEMENTS (tracker_dl_mapping); i++) {
+			if (! g_module_symbol (tracker, tracker_dl_mapping[i].fn_name,
+			                       tracker_dl_mapping[i].fn_ptr_ref) &&
+			      tracker_dl_mapping[i].mandatory) {
+				g_warning ("Missing symbol '%s' in libtracker\n",
+					    tracker_dl_mapping[i].fn_name);
+				g_module_close (tracker);
+
+				for (i = 0; i < G_N_ELEMENTS (tracker_dl_mapping); i++)
+					tracker_dl_mapping[i].fn_ptr_ref = NULL;
+
+				return;
+			}
+		}
 
+		if (tracker_07) {
+			tracker_connect_07 = (gpointer)tracker_connect;
+		}
+	}
+}
 
 
 struct NautilusSearchEngineTrackerDetails {
@@ -96,11 +186,7 @@ search_callback (char **results, GError *error, gpointer user_data)
 		
 		char *uri;
 
-#ifdef HAVE_TRACKER_0_7
-		uri = g_strdup ((char *)*results_p);
-#else
-		uri = g_filename_to_uri ((char *)*results_p, NULL, NULL);
-#endif
+		uri = tracker_07 ? g_strdup ((char *)*results_p) : g_filename_to_uri ((char *)*results_p, NULL, NULL);
 		if (uri) {
 			hit_uris = g_list_prepend (hit_uris, (char *)uri);
 		}
@@ -139,11 +225,7 @@ nautilus_search_engine_tracker_start (NautilusSearchEngine *engine)
 	location_uri = nautilus_query_get_location (tracker->details->query);
 
 	if (location_uri) {
-#ifdef HAVE_TRACKER_0_7
-		location = g_strdup (location_uri);
-#else
-		location = g_filename_from_uri (location_uri, NULL, NULL);
-#endif
+		location = tracker_07 ? g_strdup (location_uri) : g_filename_from_uri (location_uri, NULL, NULL);
 		g_free (location_uri);
 	} else {
 		location = NULL;
@@ -271,27 +353,31 @@ nautilus_search_engine_tracker_new (void)
 	NautilusSearchEngineTracker *engine;
 	TrackerClient *tracker_client;
 
-#ifdef HAVE_TRACKER_0_7
-	tracker_client = tracker_connect (FALSE, -1);
-#else
-	tracker_client = tracker_connect (FALSE);
-#endif
+	open_libtracker ();
+
+	if (! tracker_connect)
+		return NULL;
+
+	if (tracker_07)
+		tracker_client = tracker_connect_07 (FALSE, -1);
+	else
+		tracker_client = tracker_connect (FALSE);
 
 	if (!tracker_client) {
 		return NULL;
 	}
 
-#ifndef HAVE_TRACKER_0_7
-	GError *err = NULL;
+	if (! tracker_07) {
+		GError *err = NULL;
 
-	tracker_get_version (tracker_client, &err);
+		tracker_get_version (tracker_client, &err);
 
-	if (err != NULL) {
-		g_error_free (err);
-		tracker_disconnect (tracker_client);
-		return NULL;
+		if (err != NULL) {
+			g_error_free (err);
+			tracker_disconnect (tracker_client);
+			return NULL;
+		}
 	}
-#endif
 
 	engine = g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER, NULL);
 
diff --git a/libnautilus-private/nautilus-search-engine.c b/libnautilus-private/nautilus-search-engine.c
index 2030d95..d225237 100644
--- a/libnautilus-private/nautilus-search-engine.c
+++ b/libnautilus-private/nautilus-search-engine.c
@@ -126,19 +126,15 @@ nautilus_search_engine_new (void)
 {
 	NautilusSearchEngine *engine;
 	
-#ifdef HAVE_BEAGLE
 	engine = nautilus_search_engine_beagle_new ();
 	if (engine) {
 		return engine;
 	}
-#endif
 	
-#ifdef HAVE_TRACKER
 	engine = nautilus_search_engine_tracker_new ();
 	if (engine) {
 		return engine;
 	}
-#endif
 
 	engine = nautilus_search_engine_simple_new ();
 	return engine;
-- 
1.6.5.rc2


nautilus-2.28.1-tracker-0.7-failed-connection.patch:
 nautilus-search-engine-tracker.c |   20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

--- NEW FILE nautilus-2.28.1-tracker-0.7-failed-connection.patch ---
>From 2a1c0cca80bb8a910c0026e0eab1f16c6e4c845b Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek at redhat.com>
Date: Tue, 20 Oct 2009 17:01:55 +0200
Subject: [PATCH] Handle failed connection to tracker daemon 0.7 series

Also, consolidate string memory management, to be consistent and clear
on a first sight.

Related to changes in bug 596082.
---
 .../nautilus-search-engine-tracker.c               |   19 ++++++++-----------
 1 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/libnautilus-private/nautilus-search-engine-tracker.c b/libnautilus-private/nautilus-search-engine-tracker.c
index 3d2b465..eec8d74 100644
--- a/libnautilus-private/nautilus-search-engine-tracker.c
+++ b/libnautilus-private/nautilus-search-engine-tracker.c
@@ -97,7 +97,7 @@ search_callback (char **results, GError *error, gpointer user_data)
 		char *uri;
 
 #ifdef HAVE_TRACKER_0_7
-		uri = *results_p;
+		uri = g_strdup ((char *)*results_p);
 #else
 		uri = g_filename_to_uri ((char *)*results_p, NULL, NULL);
 #endif
@@ -109,12 +109,7 @@ search_callback (char **results, GError *error, gpointer user_data)
 	nautilus_search_engine_hits_added (NAUTILUS_SEARCH_ENGINE (tracker), hit_uris);
 	nautilus_search_engine_finished (NAUTILUS_SEARCH_ENGINE (tracker));
 	g_strfreev  (results);
-#ifdef HAVE_TRACKER_0_7
-	g_list_free (hit_uris);
-#else
 	eel_g_list_free_deep (hit_uris);
-#endif
-
 }
 
 
@@ -145,11 +140,11 @@ nautilus_search_engine_tracker_start (NautilusSearchEngine *engine)
 
 	if (location_uri) {
 #ifdef HAVE_TRACKER_0_7
-		location = location_uri;
+		location = g_strdup (location_uri);
 #else
 		location = g_filename_from_uri (location_uri, NULL, NULL);
-		g_free (location_uri);
 #endif
+		g_free (location_uri);
 	} else {
 		location = NULL;
 	}
@@ -279,14 +274,16 @@ nautilus_search_engine_tracker_new (void)
 #ifdef HAVE_TRACKER_0_7
 	tracker_client = tracker_connect (FALSE, -1);
 #else
-	GError *err = NULL;
-
-	tracker_client =  tracker_connect (FALSE);
+	tracker_client = tracker_connect (FALSE);
+#endif
 
 	if (!tracker_client) {
 		return NULL;
 	}
 
+#ifndef HAVE_TRACKER_0_7
+	GError *err = NULL;
+
 	tracker_get_version (tracker_client, &err);
 
 	if (err != NULL) {
-- 
1.6.5.rc2


nautilus-2.28.2-infopanel-selection-crash.patch:
 nautilus-information-panel.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- NEW FILE nautilus-2.28.2-infopanel-selection-crash.patch ---
>From b10717e1634128f08009c11f0a570888ee314350 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek at redhat.com>
Date: Mon, 2 Nov 2009 17:10:47 +0100
Subject: [PATCH] Fall back to display parent folder info when selection is invalid

See bug 590591.
---
 src/nautilus-information-panel.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index ce162ef..03e398b 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -1114,15 +1114,20 @@ selection_changed_callback (NautilusWindowInfo *window,
 	selection = nautilus_window_info_get_selection (window);
 	selection_count = g_list_length (selection);
 
+	file = NULL;
+
 	if (selection_count == 1) {
 		selection = nautilus_window_info_get_selection (window);
 		selected = selection->data;
 
-		/* this should never fail here, as we're displaying the file */
+		/* FIXME: in some cases we're unable to get a NautilusFile
+		          for the selected file. See bug 590591 for details. */
 		file = nautilus_file_get_existing (selected);
+	}
+
+	if (file) {
 		uri = nautilus_file_get_uri (file);
 		name = nautilus_file_get_display_name (file);
-
 		nautilus_file_unref (file);
 	} else {
 		uri = nautilus_window_info_get_current_location (window);
-- 
1.6.5.1



Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/nautilus/devel/.cvsignore,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -p -r1.101 -r1.102
--- .cvsignore	21 Sep 2009 15:22:59 -0000	1.101
+++ .cvsignore	2 Nov 2009 16:33:11 -0000	1.102
@@ -1 +1 @@
-nautilus-2.28.0.tar.bz2
+nautilus-2.28.1.tar.bz2


Index: nautilus.spec
===================================================================
RCS file: /cvs/extras/rpms/nautilus/devel/nautilus.spec,v
retrieving revision 1.290
retrieving revision 1.291
diff -u -p -r1.290 -r1.291
--- nautilus.spec	24 Sep 2009 14:13:31 -0000	1.290
+++ nautilus.spec	2 Nov 2009 16:33:12 -0000	1.291
@@ -14,8 +14,8 @@
 
 Name:		nautilus
 Summary:        File manager for GNOME
-Version: 	2.28.0
-Release:	3%{?dist}
+Version: 	2.28.1
+Release:	2%{?dist}
 License: 	GPLv2+
 Group:          User Interface/Desktops
 Source: 	http://download.gnome.org/sources/%{name}/2.28/%{name}-%{version}.tar.bz2
@@ -25,7 +25,7 @@ BuildRoot:	%{_tmppath}/%{name}-%{version
 Requires:	gamin
 Requires:       filesystem >= 2.1.1-1
 Requires:       redhat-menus >= %{redhat_menus_version}
-Requires:       gvfs >= 1.0.3
+Requires:       gvfs >= 1.4.0
 Requires:       gnome-icon-theme >= %{gnome_icon_theme_version}
 Requires:       libexif >= %{libexif_version}
 %ifnarch s390 s390x
@@ -72,10 +72,12 @@ Obsoletes:      gnome-volume-manager < 2
 # Some changes to default config
 Patch1:         nautilus-config.patch
 
-Patch5:		nautilus-2.23.5-selinux.patch
+Patch4:		nautilus-2.23.5-selinux.patch
 
-# Why is this not upstream ?
-Patch6:         nautilus-2.23.5-dynamic-search.patch
+# from upstream
+Patch5:		nautilus-2.28.1-tracker-0.7-failed-connection.patch
+# https://bugzilla.gnome.org/show_bug.cgi?id=589345
+Patch6:		nautilus-2.28.1-dynamic-search.patch
 
 Patch7:		rtl-fix.patch
 #Patch8:	nautilus-2.22.1-hide-white-screen.patch
@@ -88,8 +90,12 @@ Patch17:	nautilus-filetype-symlink-fix.p
 # Need to file upstream and investigate a real fix
 Patch18:	nautilus-2.28.0-revert-bg-fade-break.patch
 
-# from upstream
-Patch19:	nautilus-2.28.0-lacks-mount-do-not-use-activation-uri.patch
+# nautilus crashed with SIGSEGV in nautilus_file_peek_display_name()
+# https://bugzilla.gnome.org/show_bug.cgi?id=590591
+# https://bugzilla.redhat.com/show_bug.cgi?id=531826
+# TODO: push upstream once confirmed as fixed
+Patch19:	nautilus-2.28.2-infopanel-selection-crash.patch
+
 
 %description
 Nautilus is the file manager and graphical shell for the GNOME desktop
@@ -121,14 +127,15 @@ for developing nautilus extensions.
 %setup -q -n %{name}-%{version}
 
 %patch1 -p1 -b .config
-%patch5 -p1 -b .selinux
+%patch4 -p1 -b .selinux
+%patch5 -p1 -b .tracker-0.7
 %patch6 -p1 -b .dynamic-search
 %patch7 -p1 -b .rtl-fix
 # %patch8 -p1 -b .hide-white-screen
 %patch10 -p1 -b .gvfs-desktop-key
 %patch17 -p0 -b .symlink
 %patch18 -p1 -b .revert-bg-fade-break
-%patch19 -p1 -b .mount-do-not-use-activation-uri
+%patch19 -p1 -b .infopanel-crash
 
 %build
 
@@ -264,6 +271,12 @@ fi
 
 
 %changelog
+* Mon Nov  2 2009 Tomas Bzatek <tbzatek at redhat.com> - 2.28.1-2
+- Don't crash in infopanel on invalid selection (#531826)
+
+* Wed Oct 21 2009 Tomas Bzatek <tbzatek at redhat.com> - 2.28.1-1
+- Update to 2.28.1
+
 * Thu Sep 24 2009 Matthias Clasen <mclasen at redhat.com> - 2.28.0-3
 - Avoid lingering menuitems (#518570)
 


Index: sources
===================================================================
RCS file: /cvs/extras/rpms/nautilus/devel/sources,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -p -r1.106 -r1.107
--- sources	21 Sep 2009 15:22:59 -0000	1.106
+++ sources	2 Nov 2009 16:33:12 -0000	1.107
@@ -1 +1 @@
-14d9464043848eddd0bd0d35bbe63415  nautilus-2.28.0.tar.bz2
+e759af11a0844828e2b484ff42ee0498  nautilus-2.28.1.tar.bz2




More information about the fedora-extras-commits mailing list