summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2011-10-19 14:52:09 -0400
committerCosimo Cecchi <cosimoc@gnome.org>2011-10-19 14:57:27 -0400
commitf97443c766e58fed9eef8eb257ca5cf1bcf06be2 (patch)
tree699c85d2a0cc2ced4feda12d8107f0d7b9b21298
parent6c67e5534e2e757ba2522045bc5a81c0b9dde19a (diff)
downloadnautilus-f97443c766e58fed9eef8eb257ca5cf1bcf06be2.tar.gz
places-sidebar: don't call gtk_tree_model_get() with an invalid path
If we click on an empty area of the sidebar, we shouldn't pop up any menu at all anyway, which is what this commit changes. Previously, we would have tried to get a GtkTreePath for the currently selected point and an iter for that (invalid) path, which would lead to gtk_tree_model_get() segfaulting on an invalid iter. https://bugzilla.gnome.org/show_bug.cgi?id=662218
-rw-r--r--src/nautilus-places-sidebar.c53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 6149d6f0d..f50c811e9 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -1873,15 +1873,15 @@ open_shortcut_from_menu (NautilusPlacesSidebar *sidebar,
NautilusWindowOpenFlags flags)
{
GtkTreeModel *model;
- GtkTreePath *path;
GtkTreeIter iter;
+ GtkTreePath *path = NULL;
model = gtk_tree_view_get_model (sidebar->tree_view);
gtk_tree_view_get_cursor (sidebar->tree_view, &path, NULL);
- gtk_tree_model_get_iter (model, &iter, path);
-
- open_selected_bookmark (sidebar, model, &iter, flags);
+ if (path != NULL && gtk_tree_model_get_iter (model, &iter, path)) {
+ open_selected_bookmark (sidebar, model, &iter, flags);
+ }
gtk_tree_path_free (path);
}
@@ -2878,35 +2878,32 @@ static gboolean
bookmarks_button_press_event_cb (GtkWidget *widget,
GdkEventButton *event,
NautilusPlacesSidebar *sidebar)
+
{
+ GtkTreeModel *model;
+ GtkTreeView *tree_view;
+ GtkTreeIter iter;
+ GtkTreePath *path = NULL;
+ gboolean retval = FALSE;
+
if (event->type != GDK_BUTTON_PRESS) {
/* ignore multiple clicks */
return TRUE;
}
+ tree_view = GTK_TREE_VIEW (widget);
+ model = gtk_tree_view_get_model (tree_view);
+ gtk_tree_view_get_path_at_pos (tree_view, (int) event->x, (int) event->y,
+ &path, NULL, NULL, NULL);
+
+ if (path == NULL || !gtk_tree_model_get_iter (model, &iter, path)) {
+ return FALSE;
+ }
+
if (event->button == 3) {
bookmarks_popup_menu (sidebar, event);
} else if (event->button == 2) {
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- GtkTreeView *tree_view;
NautilusWindowOpenFlags flags = 0;
- gboolean res;
-
- tree_view = GTK_TREE_VIEW (widget);
- g_assert (tree_view == sidebar->tree_view);
-
- model = gtk_tree_view_get_model (tree_view);
-
- res = gtk_tree_view_get_path_at_pos (tree_view, (int) event->x, (int) event->y,
- &path, NULL, NULL, NULL);
-
- if (!res) {
- return FALSE;
- }
-
- gtk_tree_model_get_iter (model, &iter, path);
if (g_settings_get_boolean (nautilus_preferences,
NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
@@ -2918,14 +2915,12 @@ bookmarks_button_press_event_cb (GtkWidget *widget,
}
open_selected_bookmark (sidebar, model, &iter, flags);
-
- if (path != NULL) {
- gtk_tree_path_free (path);
- return TRUE;
- }
+ retval = TRUE;
}
- return FALSE;
+ gtk_tree_path_free (path);
+
+ return retval;
}