summaryrefslogtreecommitdiff
path: root/src/nautilus-list-view.c
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniojpfernandes@gmail.com>2022-01-09 01:25:39 +0000
committerAntónio Fernandes <antoniojpfernandes@gmail.com>2022-01-09 01:25:39 +0000
commite358c2343c47aa26d568254a12f06a8431b2da42 (patch)
tree592e1ec16487dc510d699c2f5215c67b4ef16060 /src/nautilus-list-view.c
parent041719803013e0a6c9e9b06bf3a35a9cbe2bf81b (diff)
downloadnautilus-e358c2343c47aa26d568254a12f06a8431b2da42.tar.gz
general: Switch to GTK4
The new major version of the toolkit is a requirement to fix old issues and enable future enhancements. Update symbols and adapt logic to API changes. Update and simplify UI definitions. Update local copy of places sidebar and places view. Replace dependencies with their GTK4-compatible successors. Make a minimum changes required to build and run, with known regressions to be fixed in future commits. For a detailed breakup of the changes, see the 36 commits-deep log leading to d5763facb1e5045251171ed1273dca0859f3542f. This is the main part of https://gitlab.gnome.org/GNOME/nautilus/-/issues/276
Diffstat (limited to 'src/nautilus-list-view.c')
-rw-r--r--src/nautilus-list-view.c126
1 files changed, 57 insertions, 69 deletions
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 74c8e6f4d..5c6d66771 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -54,7 +54,6 @@
#include "nautilus-ui-utilities.h"
#include "nautilus-view.h"
#include "nautilus-tracker-utilities.h"
-#include "nautilus-gtk4-helpers.h"
struct SelectionForeachData
{
@@ -230,11 +229,11 @@ activate_selected_items_alternate (NautilusListView *view,
}
static gboolean
-button_event_modifies_selection (const GdkEvent *event)
+button_event_modifies_selection (GdkEvent *event)
{
GdkModifierType state;
- gdk_event_get_state (event, &state);
+ state = gdk_event_get_modifier_state (event);
return (state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
}
@@ -279,11 +278,11 @@ on_event_controller_motion_motion (GtkEventControllerMotion *controller,
{
if (view->details->hover_path != NULL)
{
- gdk_window_set_cursor (gtk_widget_get_window (widget), hand_cursor);
+ gtk_widget_set_cursor (widget, hand_cursor);
}
else
{
- gdk_window_set_cursor (gtk_widget_get_window (widget), NULL);
+ gtk_widget_set_cursor (widget, NULL);
}
}
@@ -344,7 +343,7 @@ on_event_controller_motion_enter (GtkEventControllerMotion *controller,
if (view->details->hover_path != NULL)
{
- gdk_window_set_cursor (gtk_widget_get_window (widget), hand_cursor);
+ gtk_widget_set_cursor (widget, hand_cursor);
}
}
@@ -449,11 +448,11 @@ on_star_cell_renderer_clicked (GtkTreePath *path,
}
static void
-on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
- gint n_press,
- gdouble x,
- gdouble y,
- gpointer callback_data)
+on_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer callback_data)
{
NautilusListView *view;
GtkWidget *widget;
@@ -465,7 +464,7 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
gint bin_x;
gint bin_y;
GdkEventSequence *sequence;
- const GdkEvent *event;
+ GdkEvent *event;
gboolean on_expander, show_expanders;
gboolean is_simple_click, path_selected;
NautilusFile *file;
@@ -620,7 +619,7 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
g_autoptr (GtkTreePath) cursor = NULL;
GList *selected_rows = NULL;
- gdk_event_get_state (event, &state);
+ state = gdk_event_get_modifier_state (event);
/* We cannot easily match the expected behavior of Shift+click, so we
* must fall back to GtkTreeView's default event handling.
@@ -714,16 +713,16 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
}
static void
-on_tree_view_multi_press_gesture_released (GtkGestureMultiPress *gesture,
- gint n_press,
- gdouble x,
- gdouble y,
- gpointer callback_data)
+on_tree_view_click_gesture_released (GtkGestureClick *gesture,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer callback_data)
{
NautilusListView *view;
guint button;
GdkEventSequence *sequence;
- const GdkEvent *event;
+ GdkEvent *event;
GtkTreeView *tree_view;
GtkTreeSelection *selection;
gint x_in_bin;
@@ -771,7 +770,7 @@ on_tree_view_multi_press_gesture_released (GtkGestureMultiPress *gesture,
return;
}
- gdk_event_get_state (event, &state);
+ state = gdk_event_get_modifier_state (event);
if ((button == GDK_BUTTON_PRIMARY || button == GDK_BUTTON_MIDDLE)
&& ((state & GDK_CONTROL_MASK) != 0 ||
@@ -1468,7 +1467,7 @@ popup_column_header_menu (NautilusListView *list_view,
G_CALLBACK (column_header_menu_use_default),
list_view);
- gtk_widget_show_all (menu);
+ gtk_widget_show (menu);
gtk_popover_set_pointing_to (popover, &(GdkRectangle){x, y, 0, 0});
gtk_popover_popup (popover);
@@ -1956,7 +1955,7 @@ on_tree_view_drag_gesture_drag_update (GtkGestureDrag *gesture,
{
#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION
GdkEventSequence *sequence;
- const GdkEvent *event;
+ GdkEvent *event;
NautilusListView *list_view;
sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
@@ -1990,7 +1989,6 @@ create_and_set_up_tree_view (NautilusListView *view)
GList *l;
gchar **default_column_order, **default_visible_columns;
GtkWidget *content_widget;
- GtkGesture *gesture;
GtkEventController *controller;
content_widget = nautilus_files_view_get_content_widget (NAUTILUS_FILES_VIEW (view));
@@ -2040,33 +2038,29 @@ create_and_set_up_tree_view (NautilusListView *view)
"changed",
G_CALLBACK (list_selection_changed_callback), view, 0);
- gesture = gtk_gesture_drag_new (GTK_WIDGET (view->details->tree_view));
- view->details->tree_view_drag_gesture = gesture;
-
- gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
- GTK_PHASE_CAPTURE);
- gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0);
+ controller = GTK_EVENT_CONTROLLER (gtk_gesture_drag_new ());
+ gtk_widget_add_controller (GTK_WIDGET (view->details->tree_view), controller);
+ gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
+ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (controller), 0);
- g_signal_connect (gesture, "drag-begin",
+ g_signal_connect (controller, "drag-begin",
G_CALLBACK (on_tree_view_drag_gesture_drag_begin), view);
- g_signal_connect (gesture, "drag-update",
+ g_signal_connect (controller, "drag-update",
G_CALLBACK (on_tree_view_drag_gesture_drag_update), view);
- gesture = gtk_gesture_multi_press_new (GTK_WIDGET (view->details->tree_view));
- view->details->tree_view_multi_press_gesture = gesture;
+ controller = GTK_EVENT_CONTROLLER (gtk_gesture_click_new ());
+ gtk_widget_add_controller (GTK_WIDGET (view->details->tree_view), controller);
- gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
- GTK_PHASE_CAPTURE);
- gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0);
-
- g_signal_connect (gesture, "pressed",
- G_CALLBACK (on_tree_view_multi_press_gesture_pressed), view);
- g_signal_connect (gesture, "released",
- G_CALLBACK (on_tree_view_multi_press_gesture_released), view);
+ gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
+ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (controller), 0);
- controller = gtk_event_controller_motion_new (GTK_WIDGET (view->details->tree_view));
- view->details->motion_controller = controller;
+ g_signal_connect (controller, "pressed",
+ G_CALLBACK (on_tree_view_click_gesture_pressed), view);
+ g_signal_connect (controller, "released",
+ G_CALLBACK (on_tree_view_click_gesture_released), view);
+ controller = gtk_event_controller_motion_new ();
+ gtk_widget_add_controller (GTK_WIDGET (view->details->tree_view), controller);
gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
g_signal_connect (controller, "enter",
@@ -2076,8 +2070,8 @@ create_and_set_up_tree_view (NautilusListView *view)
g_signal_connect (controller, "motion",
G_CALLBACK (on_event_controller_motion_motion), view);
- controller = gtk_event_controller_key_new (GTK_WIDGET (view->details->tree_view));
- view->details->key_controller = controller;
+ controller = gtk_event_controller_key_new ();
+ gtk_widget_add_controller (GTK_WIDGET (view->details->tree_view), controller);
gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_BUBBLE);
@@ -2114,16 +2108,12 @@ create_and_set_up_tree_view (NautilusListView *view)
g_signal_connect_object (view->details->model, "get-icon-scale",
G_CALLBACK (get_icon_scale_callback), view, 0);
- gesture = gtk_gesture_long_press_new (GTK_WIDGET (content_widget));
- view->details->long_press_gesture = gesture;
-
- gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
- GTK_PHASE_CAPTURE);
- gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), TRUE);
- g_signal_connect (gesture,
- "pressed",
- (GCallback) on_longpress_gesture_pressed_event,
- view);
+ controller = GTK_EVENT_CONTROLLER (gtk_gesture_long_press_new ());
+ gtk_widget_add_controller (GTK_WIDGET (content_widget), controller);
+ gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (controller), TRUE);
+ g_signal_connect (controller, "pressed",
+ (GCallback) on_longpress_gesture_pressed_event, view);
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (view->details->tree_view), GTK_SELECTION_MULTIPLE);
@@ -2191,7 +2181,7 @@ create_and_set_up_tree_view (NautilusListView *view)
gtk_tree_view_column_pack_start (view->details->file_name_column, cell, FALSE);
gtk_tree_view_column_set_attributes (view->details->file_name_column,
cell,
- "pixbuf", nautilus_list_model_get_column_id_from_zoom_level (view->details->zoom_level),
+ "texture", nautilus_list_model_get_column_id_from_zoom_level (view->details->zoom_level),
NULL);
cell = gtk_cell_renderer_text_new ();
@@ -3286,7 +3276,7 @@ create_column_editor (NautilusListView *view)
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_window_set_transient_for (GTK_WINDOW (window),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))));
+ GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (view))));
file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (view));
name = nautilus_file_get_display_name (file);
@@ -3364,7 +3354,7 @@ nautilus_list_view_set_zoom_level (NautilusListView *view,
column = nautilus_list_model_get_column_id_from_zoom_level (new_level);
gtk_tree_view_column_set_attributes (view->details->file_name_column,
GTK_CELL_RENDERER (view->details->pixbuf_cell),
- "pixbuf", column,
+ "texture", column,
NULL);
set_up_pixbuf_size (view);
}
@@ -3439,7 +3429,6 @@ nautilus_list_view_is_zoom_level_default (NautilusFilesView *view)
static void
nautilus_list_view_click_policy_changed (NautilusFilesView *directory_view)
{
- GdkWindow *win;
GdkDisplay *display;
NautilusListView *view;
GtkTreeIter iter;
@@ -3467,8 +3456,7 @@ nautilus_list_view_click_policy_changed (NautilusFilesView *directory_view)
tree = view->details->tree_view;
if (gtk_widget_get_realized (GTK_WIDGET (tree)))
{
- win = gtk_widget_get_window (GTK_WIDGET (tree));
- gdk_window_set_cursor (win, NULL);
+ gtk_widget_set_cursor (GTK_WIDGET (tree), NULL);
if (display != NULL)
{
@@ -3482,7 +3470,7 @@ nautilus_list_view_click_policy_changed (NautilusFilesView *directory_view)
{
if (hand_cursor == NULL)
{
- hand_cursor = gdk_cursor_new_from_name (display, "pointer");
+ hand_cursor = gdk_cursor_new_from_name ("pointer", NULL);
}
}
}
@@ -3577,11 +3565,7 @@ nautilus_list_view_dispose (GObject *object)
default_column_order_changed_callback,
list_view);
- g_clear_object (&list_view->details->tree_view_drag_gesture);
- g_clear_object (&list_view->details->tree_view_multi_press_gesture);
- g_clear_object (&list_view->details->motion_controller);
- g_clear_object (&list_view->details->key_controller);
- g_clear_object (&list_view->details->long_press_gesture);
+ g_clear_pointer (&list_view->details->columns_popover, gtk_widget_unparent);
G_OBJECT_CLASS (nautilus_list_view_parent_class)->dispose (object);
}
@@ -3615,7 +3599,7 @@ nautilus_list_view_finalize (GObject *object)
if (list_view->details->column_editor != NULL)
{
- gtk_widget_destroy (list_view->details->column_editor);
+ gtk_window_destroy (GTK_WINDOW (list_view->details->column_editor));
}
g_regex_unref (list_view->details->regex);
@@ -4008,7 +3992,11 @@ nautilus_list_view_init (NautilusListView *list_view)
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (list_view)),
"nautilus-list-view");
- list_view->details->columns_popover = gtk_popover_new (GTK_WIDGET (list_view));
+ list_view->details->columns_popover = gtk_popover_new ();
+ gtk_widget_set_parent (list_view->details->columns_popover,
+ GTK_WIDGET (list_view));
+ g_signal_connect (list_view->details->columns_popover, "destroy", G_CALLBACK (gtk_widget_unparent), NULL);
+
list_view->details->columns_popover_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_widget_set_margin_top (list_view->details->columns_popover_box, 6);
gtk_widget_set_margin_bottom (list_view->details->columns_popover_box, 6);