@@ -93,11 +93,13 @@ struct FMTreeViewDetails {
93
93
GtkWidget * popup_open_in_new_window ;
94
94
GtkWidget * popup_open_in_new_tab ;
95
95
GtkWidget * popup_create_folder ;
96
+ GtkWidget * popup_post_create_folder_separator ;
96
97
GtkWidget * popup_cut ;
97
98
GtkWidget * popup_copy ;
98
99
GtkWidget * popup_paste ;
99
100
GtkWidget * popup_rename ;
100
101
GtkWidget * popup_pin ;
102
+ GtkWidget * popup_post_pin_separator ;
101
103
GtkWidget * popup_unpin ;
102
104
GtkWidget * popup_trash ;
103
105
GtkWidget * popup_delete ;
@@ -692,13 +694,14 @@ static gboolean
692
694
button_pressed_callback (GtkTreeView * treeview , GdkEventButton * event ,
693
695
FMTreeView * view )
694
696
{
695
- GtkTreePath * path , * cursor_path ;
697
+ GtkTreePath * path ;
696
698
gboolean parent_file_is_writable ;
697
699
gboolean file_is_home_or_desktop ;
698
700
gboolean file_is_special_link ;
699
701
gboolean can_move_file_to_trash ;
700
702
gboolean can_delete_file ;
701
703
gboolean using_browser ;
704
+ gint is_toplevel ;
702
705
703
706
using_browser = g_settings_get_boolean (nemo_preferences ,
704
707
NEMO_PREFERENCES_ALWAYS_USE_BROWSER );
@@ -722,12 +725,11 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
722
725
gtk_tree_path_free (path );
723
726
return FALSE;
724
727
}
725
- gtk_tree_view_get_cursor (view -> details -> tree_widget , & cursor_path , NULL );
726
-
727
- gtk_tree_path_free (path );
728
728
729
729
create_popup_menu (view );
730
730
731
+ is_toplevel = gtk_tree_path_get_depth (path ) == 1 ;
732
+
731
733
if (using_browser ) {
732
734
gtk_widget_set_sensitive (view -> details -> popup_open_in_new_window ,
733
735
nemo_file_is_directory (view -> details -> popup_file ));
@@ -738,6 +740,15 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
738
740
gtk_widget_set_sensitive (view -> details -> popup_create_folder ,
739
741
nemo_file_is_directory (view -> details -> popup_file ) &&
740
742
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
+
741
752
gtk_widget_set_sensitive (view -> details -> popup_paste , FALSE);
742
753
if (nemo_file_is_directory (view -> details -> popup_file ) &&
743
754
nemo_file_can_write (view -> details -> popup_file )) {
@@ -788,12 +799,20 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
788
799
gtk_widget_hide (view -> details -> popup_unmount_separator );
789
800
}
790
801
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 );
794
812
} else {
795
- gtk_widget_show (view -> details -> popup_pin );
813
+ gtk_widget_hide (view -> details -> popup_pin );
796
814
gtk_widget_hide (view -> details -> popup_unpin );
815
+ gtk_widget_hide (view -> details -> popup_post_pin_separator );
797
816
}
798
817
799
818
gboolean actions_visible = FALSE;
@@ -829,8 +848,8 @@ button_pressed_callback (GtkTreeView *treeview, GdkEventButton *event,
829
848
NULL , NULL , NULL , NULL ,
830
849
event -> button , event -> time );
831
850
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 );
834
853
835
854
return FALSE;
836
855
} else if (event -> button == 2 && event -> type == GDK_BUTTON_PRESS ) {
@@ -1356,7 +1375,7 @@ create_popup_menu (FMTreeView *view)
1356
1375
gtk_menu_shell_append (GTK_MENU_SHELL (popup ), menu_item );
1357
1376
view -> details -> popup_create_folder = menu_item ;
1358
1377
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 ) ));
1360
1379
1361
1380
/* add the "cut folder" menu item */
1362
1381
menu_image = gtk_image_new_from_icon_name ("edit-cut-symbolic" , GTK_ICON_SIZE_MENU );
@@ -1421,8 +1440,7 @@ create_popup_menu (FMTreeView *view)
1421
1440
gtk_menu_shell_append (GTK_MENU_SHELL (popup ), menu_item );
1422
1441
view -> details -> popup_unpin = menu_item ;
1423
1442
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 )));
1426
1444
1427
1445
/* add the "move to trash" menu item */
1428
1446
menu_image = gtk_image_new_from_icon_name (NEMO_ICON_SYMBOLIC_TRASH_FULL ,
0 commit comments