[nautilus] view-item: Add drag-accept property for DnD
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] view-item: Add drag-accept property for DnD
- Date: Thu, 30 Jun 2022 17:41:23 +0000 (UTC)
commit a611f33227fa5a47c662c0885758210e739bda2d
Author: Corey Berla <corey berla me>
Date: Thu Jun 16 08:31:28 2022 -0700
view-item: Add drag-accept property for DnD
Set drag-accept to TRUE when a drag has entered an item.
Set flag NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT when the DnD
has entered an item so that the icon will be update (i.e.
the folder will show the "open folder" icon)
src/nautilus-grid-cell.c | 15 +++++++++++++++
src/nautilus-name-cell.c | 15 +++++++++++++++
src/nautilus-view-item.c | 27 +++++++++++++++++++++++++++
src/nautilus-view-item.h | 2 ++
4 files changed, 59 insertions(+)
---
diff --git a/src/nautilus-grid-cell.c b/src/nautilus-grid-cell.c
index 426a2c2a8..28fc43622 100644
--- a/src/nautilus-grid-cell.c
+++ b/src/nautilus-grid-cell.c
@@ -31,6 +31,7 @@ update_icon (NautilusGridCell *self)
{
NautilusViewItem *item;
NautilusFileIconFlags flags;
+ gboolean drag_accept;
g_autoptr (GdkPaintable) icon_paintable = NULL;
GtkStyleContext *style_context;
NautilusFile *file;
@@ -46,6 +47,12 @@ update_icon (NautilusGridCell *self)
NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
+ g_object_get (item, "drag-accept", &drag_accept, NULL);
+ if (drag_accept)
+ {
+ flags |= NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT;
+ }
+
icon_paintable = nautilus_file_get_icon_paintable (file, icon_size, 1, flags);
gtk_picture_set_paintable (GTK_PICTURE (self->icon), icon_paintable);
@@ -127,6 +134,12 @@ on_item_size_changed (NautilusGridCell *self)
update_captions (self);
}
+static void
+on_item_drag_accept_changed (NautilusGridCell *self)
+{
+ update_icon (self);
+}
+
static void
on_item_is_cut_changed (NautilusGridCell *self)
{
@@ -181,6 +194,8 @@ nautilus_grid_cell_init (NautilusGridCell *self)
self->item_signal_group = g_signal_group_new (NAUTILUS_TYPE_VIEW_ITEM);
g_signal_group_connect_swapped (self->item_signal_group, "notify::icon-size",
(GCallback) on_item_size_changed, self);
+ g_signal_group_connect_swapped (self->item_signal_group, "notify::drag-accept",
+ (GCallback) on_item_drag_accept_changed, self);
g_signal_group_connect_swapped (self->item_signal_group, "notify::is-cut",
(GCallback) on_item_is_cut_changed, self);
g_signal_group_connect_swapped (self->item_signal_group, "file-changed",
diff --git a/src/nautilus-name-cell.c b/src/nautilus-name-cell.c
index daa6308a7..9a269ac68 100644
--- a/src/nautilus-name-cell.c
+++ b/src/nautilus-name-cell.c
@@ -133,6 +133,7 @@ static void
update_icon (NautilusNameCell *self)
{
NautilusFileIconFlags flags;
+ gboolean drag_accept;
g_autoptr (GdkPaintable) icon_paintable = NULL;
GtkStyleContext *style_context;
NautilusViewItem *item;
@@ -152,6 +153,12 @@ update_icon (NautilusNameCell *self)
NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
+ g_object_get (item, "drag-accept", &drag_accept, NULL);
+ if (drag_accept)
+ {
+ flags |= NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT;
+ }
+
icon_paintable = nautilus_file_get_icon_paintable (file, icon_size, 1, flags);
gtk_picture_set_paintable (GTK_PICTURE (self->icon), icon_paintable);
@@ -198,6 +205,12 @@ on_item_size_changed (NautilusNameCell *self)
update_icon (self);
}
+static void
+on_item_drag_accept_changed (NautilusNameCell *self)
+{
+ update_icon (self);
+}
+
static void
on_item_is_cut_changed (NautilusNameCell *self)
{
@@ -225,6 +238,8 @@ nautilus_name_cell_init (NautilusNameCell *self)
self->item_signal_group = g_signal_group_new (NAUTILUS_TYPE_VIEW_ITEM);
g_signal_group_connect_swapped (self->item_signal_group, "notify::icon-size",
(GCallback) on_item_size_changed, self);
+ g_signal_group_connect_swapped (self->item_signal_group, "notify::drag-accept",
+ (GCallback) on_item_drag_accept_changed, self);
g_signal_group_connect_swapped (self->item_signal_group, "notify::is-cut",
(GCallback) on_item_is_cut_changed, self);
g_signal_group_connect_swapped (self->item_signal_group, "file-changed",
diff --git a/src/nautilus-view-item.c b/src/nautilus-view-item.c
index 560cfec42..84423fa2d 100644
--- a/src/nautilus-view-item.c
+++ b/src/nautilus-view-item.c
@@ -11,6 +11,7 @@ struct _NautilusViewItem
GObject parent_instance;
guint icon_size;
gboolean is_cut;
+ gboolean drag_accept;
NautilusFile *file;
GtkWidget *item_ui;
};
@@ -23,6 +24,7 @@ enum
PROP_FILE,
PROP_ICON_SIZE,
PROP_IS_CUT,
+ PROP_DRAG_ACCEPT,
PROP_ITEM_UI,
N_PROPS
};
@@ -85,6 +87,12 @@ nautilus_view_item_get_property (GObject *object,
}
break;
+ case PROP_DRAG_ACCEPT:
+ {
+ g_value_set_boolean (value, self->drag_accept);
+ }
+ break;
+
case PROP_ITEM_UI:
{
g_value_set_object (value, self->item_ui);
@@ -126,6 +134,12 @@ nautilus_view_item_set_property (GObject *object,
}
break;
+ case PROP_DRAG_ACCEPT:
+ {
+ self->drag_accept = g_value_get_boolean (value);
+ }
+ break;
+
case PROP_ITEM_UI:
{
g_set_object (&self->item_ui, g_value_get_object (value));
@@ -164,6 +178,10 @@ nautilus_view_item_class_init (NautilusViewItemClass *klass)
"", "",
FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ properties[PROP_DRAG_ACCEPT] = g_param_spec_boolean ("drag-accept",
+ "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
properties[PROP_FILE] = g_param_spec_object ("file",
"", "",
NAUTILUS_TYPE_FILE,
@@ -219,6 +237,15 @@ nautilus_view_item_set_cut (NautilusViewItem *self,
g_object_set (self, "is-cut", is_cut, NULL);
}
+void
+nautilus_view_item_set_drag_accept (NautilusViewItem *self,
+ gboolean drag_accept)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_object_set (self, "drag-accept", drag_accept, NULL);
+}
+
NautilusFile *
nautilus_view_item_get_file (NautilusViewItem *self)
{
diff --git a/src/nautilus-view-item.h b/src/nautilus-view-item.h
index 5e620520a..9bdaff158 100644
--- a/src/nautilus-view-item.h
+++ b/src/nautilus-view-item.h
@@ -26,6 +26,8 @@ void nautilus_view_item_set_icon_size (NautilusViewItem *self,
guint nautilus_view_item_get_icon_size (NautilusViewItem *self);
void nautilus_view_item_set_cut (NautilusViewItem *self,
gboolean is_cut);
+void nautilus_view_item_set_drag_accept (NautilusViewItem *self,
+ gboolean drag_accept);
NautilusFile * nautilus_view_item_get_file (NautilusViewItem *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]