diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2011-10-19 14:52:09 -0400 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2011-10-19 14:57:27 -0400 |
commit | f97443c766e58fed9eef8eb257ca5cf1bcf06be2 (patch) | |
tree | 699c85d2a0cc2ced4feda12d8107f0d7b9b21298 | |
parent | 6c67e5534e2e757ba2522045bc5a81c0b9dde19a (diff) | |
download | nautilus-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.c | 53 |
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; } |