[nautilus/wip/antoniof/gtk4-preparation-popovers: 80/83] window: Handle tab clicks here
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/antoniof/gtk4-preparation-popovers: 80/83] window: Handle tab clicks here
- Date: Wed, 29 Dec 2021 13:25:03 +0000 (UTC)
commit 6c0655b470945f0615c041292d61e08477ca63d9
Author: António Fernandes <antoniof gnome org>
Date: Sun Dec 19 14:40:07 2021 +0000
window: Handle tab clicks here
We have 2 gestures for handling clicks on the notebook: one in the
notebook.c file, the other in window.c file.
The notebook one needs to emit a signal which the window listens to
anyway. So, it's simpler to handle everything in a single gesture
in the window class.
src/nautilus-notebook.c | 82 ++++++++-----------------------------------------
src/nautilus-notebook.h | 7 +++--
src/nautilus-window.c | 51 ++++++++++++++++++++----------
3 files changed, 51 insertions(+), 89 deletions(-)
---
diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
index 7a7212945..6fed6e693 100644
--- a/src/nautilus-notebook.c
+++ b/src/nautilus-notebook.c
@@ -54,8 +54,6 @@ static guint signals[LAST_SIGNAL];
struct _NautilusNotebook
{
GtkNotebook parent_instance;
-
- GtkGesture *multi_press_gesture;
};
G_DEFINE_TYPE (NautilusNotebook, nautilus_notebook, GTK_TYPE_NOTEBOOK);
@@ -63,12 +61,6 @@ G_DEFINE_TYPE (NautilusNotebook, nautilus_notebook, GTK_TYPE_NOTEBOOK);
static void
nautilus_notebook_dispose (GObject *object)
{
- NautilusNotebook *notebook;
-
- notebook = NAUTILUS_NOTEBOOK (object);
-
- g_clear_object (¬ebook->multi_press_gesture);
-
G_OBJECT_CLASS (nautilus_notebook_parent_class)->dispose (object);
}
@@ -133,55 +125,6 @@ find_tab_num_at_pos (NautilusNotebook *notebook,
return AFTER_ALL_TABS;
}
-static void
-button_press_cb (GtkGestureMultiPress *gesture,
- gint n_press,
- gdouble x,
- gdouble y,
- gpointer user_data)
-{
- guint button;
- GdkEventSequence *sequence;
- const GdkEvent *event;
- GtkWidget *widget;
- NautilusNotebook *notebook;
- int tab_clicked;
- GdkModifierType state;
-
- button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
- sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
- event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
- widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
- notebook = NAUTILUS_NOTEBOOK (widget);
- tab_clicked = find_tab_num_at_pos (notebook, x, y);
-
- gdk_event_get_state (event, &state);
-
- if (n_press != 1)
- {
- return;
- }
-
- if (tab_clicked == -1)
- {
- return;
- }
-
- if (button == GDK_BUTTON_SECONDARY &&
- (state & gtk_accelerator_get_default_mod_mask ()) == 0)
- {
- /* switch to the page the mouse is over, but don't consume the event */
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), tab_clicked);
- }
- else if (button == GDK_BUTTON_MIDDLE)
- {
- GtkWidget *slot;
-
- slot = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), tab_clicked);
- g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, slot);
- }
-}
-
static void
on_page_removed (GtkNotebook *notebook,
GtkWidget *child,
@@ -200,14 +143,6 @@ nautilus_notebook_init (NautilusNotebook *notebook)
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
g_signal_connect (notebook, "page-removed", G_CALLBACK (on_page_removed), NULL);
-
- notebook->multi_press_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (notebook));
-
- gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (notebook->multi_press_gesture),
- GTK_PHASE_CAPTURE);
- gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (notebook->multi_press_gesture), 0);
-
- g_signal_connect (notebook->multi_press_gesture, "pressed", G_CALLBACK (button_press_cb), NULL);
}
gboolean
@@ -236,11 +171,20 @@ nautilus_notebook_contains_slot (NautilusNotebook *notebook,
}
gboolean
-nautilus_notebook_content_area_hit (NautilusNotebook *notebook,
- gint x,
- gint y)
+nautilus_notebook_get_tab_clicked (NautilusNotebook *notebook,
+ gint x,
+ gint y,
+ gint *position)
{
- return find_tab_num_at_pos (notebook, x, y) == -1;
+ gint tab_num;
+
+ tab_num = find_tab_num_at_pos (notebook, x, y);
+
+ if (position != NULL)
+ {
+ *position = tab_num;
+ }
+ return tab_num != -1;
}
void
diff --git a/src/nautilus-notebook.h b/src/nautilus-notebook.h
index 1590e111b..ad227d183 100644
--- a/src/nautilus-notebook.h
+++ b/src/nautilus-notebook.h
@@ -54,8 +54,9 @@ void nautilus_notebook_next_page (NautilusNotebook *notebook);
gboolean nautilus_notebook_contains_slot (NautilusNotebook *notebook,
NautilusWindowSlot *slot);
-gboolean nautilus_notebook_content_area_hit (NautilusNotebook *notebook,
- gint x,
- gint y);
+gboolean nautilus_notebook_get_tab_clicked (NautilusNotebook *notebook,
+ gint x,
+ gint y,
+ gint *position);
G_END_DECLS
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 1ab3ec36d..52cc02ad4 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1787,15 +1787,46 @@ notebook_button_press_cb (GtkGestureMultiPress *gesture,
gpointer user_data)
{
NautilusWindow *window;
+ GtkNotebook *notebook;
+ gint tab_clicked;
+ guint button;
+ GdkEventSequence *sequence;
+ const GdkEvent *event;
+ GdkModifierType state;
+
+ if (n_press != 1)
+ {
+ return;
+ }
window = NAUTILUS_WINDOW (user_data);
+ notebook = GTK_NOTEBOOK (window->notebook);
- if (nautilus_notebook_content_area_hit (NAUTILUS_NOTEBOOK (window->notebook), x, y))
+ if (n_press != 1 ||
+ !nautilus_notebook_get_tab_clicked (NAUTILUS_NOTEBOOK (window->notebook), x, y, &tab_clicked))
{
return;
}
- notebook_popup_menu_show (window, x, y);
+ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+ sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
+ event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
+ gdk_event_get_state (event, &state);
+
+ if (button == GDK_BUTTON_SECONDARY &&
+ (state & gtk_accelerator_get_default_mod_mask ()) == 0)
+ {
+ /* switch to the page before opening the menu */
+ gtk_notebook_set_current_page (notebook, tab_clicked);
+ notebook_popup_menu_show (window, x, y);
+ }
+ else if (button == GDK_BUTTON_MIDDLE)
+ {
+ GtkWidget *slot;
+
+ slot = gtk_notebook_get_nth_page (notebook, tab_clicked);
+ nautilus_window_slot_close (window, NAUTILUS_WINDOW_SLOT (slot));
+ }
}
static gboolean
@@ -2678,21 +2709,7 @@ nautilus_window_init (NautilusWindow *window)
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (window->notebook_multi_press_gesture),
GTK_PHASE_CAPTURE);
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (window->notebook_multi_press_gesture),
- GDK_BUTTON_SECONDARY);
-
- window->key_capture_controller = gtk_event_controller_key_new (GTK_WIDGET (window));
- gtk_event_controller_set_propagation_phase (window->key_capture_controller,
- GTK_PHASE_CAPTURE);
- g_signal_connect (window->key_capture_controller,
- "key-pressed", G_CALLBACK (nautilus_window_key_capture),
- NULL);
-
- window->key_bubble_controller = gtk_event_controller_key_new (GTK_WIDGET (window));
- gtk_event_controller_set_propagation_phase (window->key_bubble_controller,
- GTK_PHASE_BUBBLE);
- g_signal_connect (window->key_bubble_controller,
- "key-pressed", G_CALLBACK (nautilus_window_key_bubble),
- NULL);
+ 0);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]