From 3456544cb754afb119ff5d1612d73861cad73150 Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Tue, 23 Jul 2024 11:33:29 +0200 Subject: [PATCH 1/3] list-base: Add virtual set_enable_rubberband() This avoids tapping into the internals of the list widgets only to do speculative downcasts to have operations specific to each list widget, making the operation more straightforward. Signed-off-by: Adrien Plazas --- src/nautilus-grid-view.c | 10 ++++++++++ src/nautilus-list-base.c | 10 +--------- src/nautilus-list-base.h | 2 ++ src/nautilus-list-view.c | 10 ++++++++++ src/nautilus-network-view.c | 10 ++++++++++ 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/nautilus-grid-view.c b/src/nautilus-grid-view.c index b98b2fbd03..fc97384f20 100644 --- a/src/nautilus-grid-view.c +++ b/src/nautilus-grid-view.c @@ -361,6 +361,15 @@ real_get_sort_state (NautilusListBase *list_base) self->reversed)); } +static void +real_set_enable_rubberband (NautilusListBase *list_base, + gboolean enabled) +{ + NautilusGridView *self = NAUTILUS_GRID_VIEW (list_base); + + gtk_grid_view_set_enable_rubberband (self->view_ui, enabled); +} + static void real_set_sort_state (NautilusListBase *list_base, GVariant *value) @@ -541,6 +550,7 @@ nautilus_grid_view_class_init (NautilusGridViewClass *klass) list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->preview_selection_event = real_preview_selection_event; list_base_view_class->scroll_to = real_scroll_to; + list_base_view_class->set_enable_rubberband = real_set_enable_rubberband; list_base_view_class->set_sort_state = real_set_sort_state; list_base_view_class->set_zoom_level = real_set_zoom_level; list_base_view_class->setup_directory = nautilus_grid_view_setup_directory; diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c index f3234df3cd..bde215dd83 100644 --- a/src/nautilus-list-base.c +++ b/src/nautilus-list-base.c @@ -219,15 +219,7 @@ rubberband_set_state (NautilusListBase *self, return; } - GtkWidget *view = nautilus_list_base_get_view_ui (self); - if (GTK_IS_GRID_VIEW (view)) - { - gtk_grid_view_set_enable_rubberband (GTK_GRID_VIEW (view), enabled); - } - else if (GTK_IS_COLUMN_VIEW (view)) - { - gtk_column_view_set_enable_rubberband (GTK_COLUMN_VIEW (view), enabled); - } + NAUTILUS_LIST_BASE_CLASS (G_OBJECT_GET_CLASS (self))->set_enable_rubberband (self, enabled); } /** diff --git a/src/nautilus-list-base.h b/src/nautilus-list-base.h index 0b196a3097..596a70ba42 100644 --- a/src/nautilus-list-base.h +++ b/src/nautilus-list-base.h @@ -32,6 +32,8 @@ struct _NautilusListBaseClass guint position, GtkListScrollFlags flags, GtkScrollInfo *scroll); + void (*set_enable_rubberband) (NautilusListBase *self, + gboolean enabled); void (*set_sort_state) (NautilusListBase *self, GVariant *sort_state); void (*set_zoom_level) (NautilusListBase *self, diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index ac5b8b4f10..00d957f4b8 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -486,6 +486,15 @@ real_get_sort_state (NautilusListBase *list_base) return g_variant_take_ref (g_variant_new ("(sb)", sort_text, reversed)); } +static void +real_set_enable_rubberband (NautilusListBase *list_base, + gboolean enabled) +{ + NautilusListView *self = NAUTILUS_LIST_VIEW (list_base); + + gtk_column_view_set_enable_rubberband (self->view_ui, enabled); +} + static void real_set_sort_state (NautilusListBase *list_base, GVariant *value) @@ -1238,6 +1247,7 @@ nautilus_list_view_class_init (NautilusListViewClass *klass) list_base_view_class->get_view_ui = real_get_view_ui; list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->scroll_to = real_scroll_to; + list_base_view_class->set_enable_rubberband = real_set_enable_rubberband; list_base_view_class->set_sort_state = real_set_sort_state; list_base_view_class->set_zoom_level = real_set_zoom_level; list_base_view_class->setup_directory = nautilus_list_view_setup_directory; diff --git a/src/nautilus-network-view.c b/src/nautilus-network-view.c index ce96ae1893..4d15e79278 100644 --- a/src/nautilus-network-view.c +++ b/src/nautilus-network-view.c @@ -174,6 +174,15 @@ real_get_sort_state (NautilusListBase *list_base) return g_variant_take_ref (g_variant_new ("(sb)", "invalid", FALSE)); } +static void +real_set_enable_rubberband (NautilusListBase *list_base, + gboolean enabled) +{ + NautilusNetworkView *self = NAUTILUS_NETWORK_VIEW (list_base); + + gtk_list_view_set_enable_rubberband (self->view_ui, enabled); +} + static void real_set_sort_state (NautilusListBase *list_base, GVariant *value) @@ -373,6 +382,7 @@ nautilus_network_view_class_init (NautilusNetworkViewClass *klass) list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->popup_background_context_menu = real_popup_background_context_menu; list_base_view_class->scroll_to = real_scroll_to; + list_base_view_class->set_enable_rubberband = real_set_enable_rubberband; list_base_view_class->set_sort_state = real_set_sort_state; list_base_view_class->set_zoom_level = real_set_zoom_level; } -- GitLab From 2af84dfe9ffdc6c882eed6b6a34c0dacf5938072 Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Tue, 23 Jul 2024 15:38:02 +0200 Subject: [PATCH 2/3] list-base: Always use the top-left corner for drag This drops the custom dragging hotspot for the grid view, as it doesn't align well with the clicked area, is inconsistent with the list and network views, and doesn't make much sense when dragging multiple files. This also avoids tapping into the internals of the list widgets only to do speculative downcasts to have operations specific to each list widget. Signed-off-by: Adrien Plazas --- src/nautilus-list-base.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c index bde215dd83..491d6317d4 100644 --- a/src/nautilus-list-base.c +++ b/src/nautilus-list-base.c @@ -420,7 +420,6 @@ on_item_drag_prepare (GtkDragSource *source, NautilusViewCell *cell = user_data; NautilusListBase *self = nautilus_view_cell_get_view (cell); NautilusListBasePrivate *priv = nautilus_list_base_get_instance_private (self); - GtkWidget *view_ui; g_autoptr (GtkBitset) selection = NULL; g_autolist (NautilusFile) selected_files = NULL; g_autoslist (GFile) file_list = NULL; @@ -468,19 +467,7 @@ on_item_drag_prepare (GtkDragSource *source, scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self)); paintable = get_paintable_for_drag_selection (selected_files, scale_factor); - view_ui = nautilus_list_base_get_view_ui (self); - if (GTK_IS_GRID_VIEW (view_ui)) - { - x = x * NAUTILUS_DRAG_SURFACE_ICON_SIZE / nautilus_list_base_get_icon_size (self); - y = y * NAUTILUS_DRAG_SURFACE_ICON_SIZE / nautilus_list_base_get_icon_size (self); - } - else - { - x = 0; - y = 0; - } - - gtk_drag_source_set_icon (source, paintable, x, y); + gtk_drag_source_set_icon (source, paintable, 0, 0); return gdk_content_provider_new_typed (GDK_TYPE_FILE_LIST, file_list); } -- GitLab From 315a140cae94253c6d58c73e6cb78b3de5613867 Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Tue, 23 Jul 2024 18:01:32 +0200 Subject: [PATCH 3/3] list-base: Drop unused get_view_ui() Signed-off-by: Adrien Plazas --- src/nautilus-grid-view.c | 9 --------- src/nautilus-list-base.c | 6 ------ src/nautilus-list-base.h | 1 - src/nautilus-list-view.c | 9 --------- src/nautilus-network-view.c | 9 --------- 5 files changed, 34 deletions(-) diff --git a/src/nautilus-grid-view.c b/src/nautilus-grid-view.c index fc97384f20..19fb033b2e 100644 --- a/src/nautilus-grid-view.c +++ b/src/nautilus-grid-view.c @@ -324,14 +324,6 @@ real_get_icon_size (NautilusListBase *list_base_view) return get_icon_size_for_zoom_level (self->zoom_level); } -static GtkWidget * -real_get_view_ui (NautilusListBase *list_base_view) -{ - NautilusGridView *self = NAUTILUS_GRID_VIEW (list_base_view); - - return GTK_WIDGET (self->view_ui); -} - static int real_get_zoom_level (NautilusListBase *list_base_view) { @@ -546,7 +538,6 @@ nautilus_grid_view_class_init (NautilusGridViewClass *klass) list_base_view_class->get_icon_size = real_get_icon_size; list_base_view_class->get_sort_state = real_get_sort_state; list_base_view_class->get_view_info = real_get_view_info; - list_base_view_class->get_view_ui = real_get_view_ui; list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->preview_selection_event = real_preview_selection_event; list_base_view_class->scroll_to = real_scroll_to; diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c index 491d6317d4..ebcf78b9bd 100644 --- a/src/nautilus-list-base.c +++ b/src/nautilus-list-base.c @@ -118,12 +118,6 @@ nautilus_list_base_get_sort_state (NautilusListBase *self) return NAUTILUS_LIST_BASE_CLASS (G_OBJECT_GET_CLASS (self))->get_sort_state (self); } -static GtkWidget * -nautilus_list_base_get_view_ui (NautilusListBase *self) -{ - return NAUTILUS_LIST_BASE_CLASS (G_OBJECT_GET_CLASS (self))->get_view_ui (self); -} - void nautilus_list_base_set_model (NautilusListBase *self, NautilusViewModel *model) diff --git a/src/nautilus-list-base.h b/src/nautilus-list-base.h index 596a70ba42..c8a6022d3d 100644 --- a/src/nautilus-list-base.h +++ b/src/nautilus-list-base.h @@ -26,7 +26,6 @@ struct _NautilusListBaseClass NautilusViewInfo (*get_view_info) (NautilusListBase *self); guint (*get_icon_size) (NautilusListBase *self); GVariant *(*get_sort_state) (NautilusListBase *self); - GtkWidget *(*get_view_ui) (NautilusListBase *self); int (*get_zoom_level) (NautilusListBase *self); void (*scroll_to) (NautilusListBase *self, guint position, diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index 00d957f4b8..04f792fa9b 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -136,14 +136,6 @@ real_get_icon_size (NautilusListBase *list_base_view) return get_icon_size_for_zoom_level (self->zoom_level); } -static GtkWidget * -real_get_view_ui (NautilusListBase *list_base_view) -{ - NautilusListView *self = NAUTILUS_LIST_VIEW (list_base_view); - - return GTK_WIDGET (self->view_ui); -} - static int real_get_zoom_level (NautilusListBase *list_base_view) { @@ -1244,7 +1236,6 @@ nautilus_list_view_class_init (NautilusListViewClass *klass) list_base_view_class->get_icon_size = real_get_icon_size; list_base_view_class->get_sort_state = real_get_sort_state; list_base_view_class->get_view_info = real_get_view_info; - list_base_view_class->get_view_ui = real_get_view_ui; list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->scroll_to = real_scroll_to; list_base_view_class->set_enable_rubberband = real_set_enable_rubberband; diff --git a/src/nautilus-network-view.c b/src/nautilus-network-view.c index 4d15e79278..7dfcb144de 100644 --- a/src/nautilus-network-view.c +++ b/src/nautilus-network-view.c @@ -143,14 +143,6 @@ real_get_icon_size (NautilusListBase *list_base_view) return NAUTILUS_LIST_ICON_SIZE_SMALL; } -static GtkWidget * -real_get_view_ui (NautilusListBase *list_base_view) -{ - NautilusNetworkView *self = NAUTILUS_NETWORK_VIEW (list_base_view); - - return GTK_WIDGET (self->view_ui); -} - static int real_get_zoom_level (NautilusListBase *list_base_view) { @@ -378,7 +370,6 @@ nautilus_network_view_class_init (NautilusNetworkViewClass *klass) list_base_view_class->get_icon_size = real_get_icon_size; list_base_view_class->get_sort_state = real_get_sort_state; list_base_view_class->get_view_info = real_get_view_info; - list_base_view_class->get_view_ui = real_get_view_ui; list_base_view_class->get_zoom_level = real_get_zoom_level; list_base_view_class->popup_background_context_menu = real_popup_background_context_menu; list_base_view_class->scroll_to = real_scroll_to; -- GitLab