Skip to content

Commit d1807d4

Browse files
committed
nemo-tree-sidebar.c: Fix states for pin/unpin and create-folder menu
items. - Don't allow pinning of items in the root tree level. - Correctly set visiblity/sensitivity of the create-folder menu item - disallow in non-writeable locations and in favorites (this is already forbidden elsewhere). - Fix incorrect jump when right-clicking a non-selected tree entry. Fixes #2759
1 parent f5124bc commit d1807d4

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

src/nemo-tree-sidebar.c

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,13 @@ struct FMTreeViewDetails {
9393
GtkWidget *popup_open_in_new_window;
9494
GtkWidget *popup_open_in_new_tab;
9595
GtkWidget *popup_create_folder;
96+
GtkWidget *popup_post_create_folder_separator;
9697
GtkWidget *popup_cut;
9798
GtkWidget *popup_copy;
9899
GtkWidget *popup_paste;
99100
GtkWidget *popup_rename;
100101
GtkWidget *popup_pin;
102+
GtkWidget *popup_post_pin_separator;
101103
GtkWidget *popup_unpin;
102104
GtkWidget *popup_trash;
103105
GtkWidget *popup_delete;
@@ -692,13 +694,14 @@ static gboolean
692694
button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
693695
FMTreeView *view)
694696
{
695-
GtkTreePath *path, *cursor_path;
697+
GtkTreePath *path;
696698
gboolean parent_file_is_writable;
697699
gboolean file_is_home_or_desktop;
698700
gboolean file_is_special_link;
699701
gboolean can_move_file_to_trash;
700702
gboolean can_delete_file;
701703
gboolean using_browser;
704+
gint is_toplevel;
702705

703706
using_browser = g_settings_get_boolean (nemo_preferences,
704707
NEMO_PREFERENCES_ALWAYS_USE_BROWSER);
@@ -722,12 +725,11 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
722725
gtk_tree_path_free (path);
723726
return FALSE;
724727
}
725-
gtk_tree_view_get_cursor (view->details->tree_widget, &cursor_path, NULL);
726-
727-
gtk_tree_path_free (path);
728728

729729
create_popup_menu (view);
730730

731+
is_toplevel = gtk_tree_path_get_depth (path) == 1;
732+
731733
if (using_browser) {
732734
gtk_widget_set_sensitive (view->details->popup_open_in_new_window,
733735
nemo_file_is_directory (view->details->popup_file));
@@ -738,6 +740,15 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
738740
gtk_widget_set_sensitive (view->details->popup_create_folder,
739741
nemo_file_is_directory (view->details->popup_file) &&
740742
nemo_file_can_write (view->details->popup_file));
743+
744+
if (nemo_file_is_in_favorites (view->details->popup_file)) {
745+
gtk_widget_hide (view->details->popup_create_folder);
746+
gtk_widget_hide (view->details->popup_post_create_folder_separator);
747+
} else {
748+
gtk_widget_show (view->details->popup_create_folder);
749+
gtk_widget_show (view->details->popup_post_create_folder_separator);
750+
}
751+
741752
gtk_widget_set_sensitive (view->details->popup_paste, FALSE);
742753
if (nemo_file_is_directory (view->details->popup_file) &&
743754
nemo_file_can_write (view->details->popup_file)) {
@@ -788,12 +799,20 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
788799
gtk_widget_hide (view->details->popup_unmount_separator);
789800
}
790801

791-
if (nemo_file_get_pinning (view->details->popup_file)) {
792-
gtk_widget_hide (view->details->popup_pin);
793-
gtk_widget_show (view->details->popup_unpin);
802+
if (!is_toplevel && !nemo_file_is_in_favorites (view->details->popup_file)) {
803+
if (nemo_file_get_pinning (view->details->popup_file)) {
804+
gtk_widget_hide (view->details->popup_pin);
805+
gtk_widget_show (view->details->popup_unpin);
806+
} else {
807+
gtk_widget_show (view->details->popup_pin);
808+
gtk_widget_hide (view->details->popup_unpin);
809+
}
810+
811+
gtk_widget_show (view->details->popup_post_pin_separator);
794812
} else {
795-
gtk_widget_show (view->details->popup_pin);
813+
gtk_widget_hide (view->details->popup_pin);
796814
gtk_widget_hide (view->details->popup_unpin);
815+
gtk_widget_hide (view->details->popup_post_pin_separator);
797816
}
798817

799818
gboolean actions_visible = FALSE;
@@ -829,8 +848,8 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
829848
NULL, NULL, NULL, NULL,
830849
event->button, event->time);
831850

832-
gtk_tree_view_set_cursor (view->details->tree_widget, cursor_path, NULL, FALSE);
833-
gtk_tree_path_free (cursor_path);
851+
gtk_tree_view_set_cursor (view->details->tree_widget, path, NULL, FALSE);
852+
gtk_tree_path_free (path);
834853

835854
return FALSE;
836855
} else if (event->button == 2 && event->type == GDK_BUTTON_PRESS) {
@@ -1356,7 +1375,7 @@ create_popup_menu (FMTreeView *view)
13561375
gtk_menu_shell_append (GTK_MENU_SHELL (popup), menu_item);
13571376
view->details->popup_create_folder = menu_item;
13581377

1359-
eel_gtk_menu_append_separator (GTK_MENU (popup));
1378+
view->details->popup_post_create_folder_separator = GTK_WIDGET (eel_gtk_menu_append_separator (GTK_MENU (popup)));
13601379

13611380
/* add the "cut folder" menu item */
13621381
menu_image = gtk_image_new_from_icon_name ("edit-cut-symbolic", GTK_ICON_SIZE_MENU);
@@ -1421,8 +1440,7 @@ create_popup_menu (FMTreeView *view)
14211440
gtk_menu_shell_append (GTK_MENU_SHELL (popup), menu_item);
14221441
view->details->popup_unpin = menu_item;
14231442

1424-
1425-
eel_gtk_menu_append_separator (GTK_MENU (popup));
1443+
view->details->popup_post_pin_separator = GTK_WIDGET (eel_gtk_menu_append_separator (GTK_MENU (popup)));
14261444

14271445
/* add the "move to trash" menu item */
14281446
menu_image = gtk_image_new_from_icon_name (NEMO_ICON_SYMBOLIC_TRASH_FULL,

0 commit comments

Comments
 (0)