diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 98cd47f1d8..f66b7c05d8 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -108,6 +108,26 @@ #define DO_NOT_COMPILE 0 +/* These are used when a destination-side DnD operation is taking place. + * Normally, when a file is being hovered directly over a bookmark, + * we'll be in DROP_STATE_NORMAL. + * + * But when a file is being hovered between bookmarks, this means the user + * may want to create a new bookmark for that file between those bookmarks. + * In that case, the drop state will be *not* DROP_STATE_NORMAL. + * + * When the drop state is FADING_OUT, it means that the user is hovering + * directly over an existing bookmark and an immediate drop will cause the + * file being dragged to be dropped on the bookmark, instead of causing + * a new bookmark to be created. + */ +typedef enum { + DROP_STATE_NORMAL, + DROP_STATE_NEW_BOOKMARK_FADING_IN, + DROP_STATE_NEW_BOOKMARK_ARMED, + DROP_STATE_NEW_BOOKMARK_FADING_OUT +} DropState; + struct _GtkPlacesSidebar { GtkScrolledWindow parent; @@ -143,6 +163,9 @@ struct _GtkPlacesSidebar { GtkPlacesOpenFlags open_flags; + DropState drop_state; + int new_bookmark_index; + guint show_desktop : 1; }; @@ -3588,6 +3611,9 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) sidebar->hostnamed_cancellable, hostname_proxy_new_cb, g_object_ref (sidebar)); + + sidebar->drop_state = DROP_STATE_NORMAL; + sidebar->new_bookmark_index = -1; } static void