From cae98f98018bced815ec5d3ae53caa7d7327545e Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Mon, 2 Nov 2009 16:33:12 +0000 Subject: [PATCH] Sync with F12 --- .cvsignore | 2 +- nautilus-2.28.1-dynamic-search.patch | 507 ++++++++++++++++++ ...2.28.1-tracker-0.7-failed-connection.patch | 76 +++ ...lus-2.28.2-infopanel-selection-crash.patch | 40 ++ nautilus.spec | 33 +- sources | 2 +- 6 files changed, 648 insertions(+), 12 deletions(-) create mode 100644 nautilus-2.28.1-dynamic-search.patch create mode 100644 nautilus-2.28.1-tracker-0.7-failed-connection.patch create mode 100644 nautilus-2.28.2-infopanel-selection-crash.patch diff --git a/.cvsignore b/.cvsignore index c39e700..035a5e0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -nautilus-2.28.0.tar.bz2 +nautilus-2.28.1.tar.bz2 diff --git a/nautilus-2.28.1-dynamic-search.patch b/nautilus-2.28.1-dynamic-search.patch new file mode 100644 index 0000000..d2b4385 --- /dev/null +++ b/nautilus-2.28.1-dynamic-search.patch @@ -0,0 +1,507 @@ +From 62ec35a733aee0a7ce7a820027e8507183ac212d Mon Sep 17 00:00:00 2001 +From: Tomas Bzatek +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 + #include "nautilus-search-engine-beagle.h" +-#include + + #include + #include ++#include ++ ++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 + #include ++#include ++ ++ ++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 +-#else +-#include +-#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 + diff --git a/nautilus-2.28.1-tracker-0.7-failed-connection.patch b/nautilus-2.28.1-tracker-0.7-failed-connection.patch new file mode 100644 index 0000000..df92041 --- /dev/null +++ b/nautilus-2.28.1-tracker-0.7-failed-connection.patch @@ -0,0 +1,76 @@ +From 2a1c0cca80bb8a910c0026e0eab1f16c6e4c845b Mon Sep 17 00:00:00 2001 +From: Tomas Bzatek +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 + diff --git a/nautilus-2.28.2-infopanel-selection-crash.patch b/nautilus-2.28.2-infopanel-selection-crash.patch new file mode 100644 index 0000000..7dd7b11 --- /dev/null +++ b/nautilus-2.28.2-infopanel-selection-crash.patch @@ -0,0 +1,40 @@ +From b10717e1634128f08009c11f0a570888ee314350 Mon Sep 17 00:00:00 2001 +From: Tomas Bzatek +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 + diff --git a/nautilus.spec b/nautilus.spec index 4cf9450..38d75e9 100644 --- a/nautilus.spec +++ b/nautilus.spec @@ -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}-%{release}-root-%(%{__id_u} -n) 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.24.0-2.fc10 # 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.patch # 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 - 2.28.1-2 +- Don't crash in infopanel on invalid selection (#531826) + +* Wed Oct 21 2009 Tomas Bzatek - 2.28.1-1 +- Update to 2.28.1 + * Thu Sep 24 2009 Matthias Clasen - 2.28.0-3 - Avoid lingering menuitems (#518570) diff --git a/sources b/sources index 90ef0ad..9617282 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -14d9464043848eddd0bd0d35bbe63415 nautilus-2.28.0.tar.bz2 +e759af11a0844828e2b484ff42ee0498 nautilus-2.28.1.tar.bz2