[epiphany/wip/exalm/fullscreen: 8/12] fullscreen-box: Hide header bar when touch is used
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/exalm/fullscreen: 8/12] fullscreen-box: Hide header bar when touch is used
- Date: Wed, 24 Mar 2021 12:11:30 +0000 (UTC)
commit 0ea58ea28e64332e86f4d265bed726e90a46bb4c
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Mon Mar 22 20:04:19 2021 +0500
fullscreen-box: Hide header bar when touch is used
src/ephy-fullscreen-box.c | 46 +++++++++++++++++++++++++++++++++++++++-------
1 file changed, 39 insertions(+), 7 deletions(-)
---
diff --git a/src/ephy-fullscreen-box.c b/src/ephy-fullscreen-box.c
index c8e3fe9ce..2a37340fe 100644
--- a/src/ephy-fullscreen-box.c
+++ b/src/ephy-fullscreen-box.c
@@ -31,6 +31,7 @@ struct _EphyFullscreenBox {
HdyFlap *flap;
GtkEventController *controller;
+ GtkGesture *gesture;
gboolean fullscreen;
gboolean autohide;
@@ -39,6 +40,7 @@ struct _EphyFullscreenBox {
GtkWidget *last_focus;
gdouble last_y;
+ gboolean is_touch;
};
static void ephy_fullscreen_box_buildable_init (GtkBuildableIface *iface);
@@ -123,20 +125,27 @@ is_descendant_of (GtkWidget *widget,
return parent == target;
}
-static void
-update (EphyFullscreenBox *self,
- gboolean hide_immediately)
+static double
+get_titlebar_area_height (EphyFullscreenBox *self)
{
gdouble height;
- if (!self->autohide || !self->fullscreen)
- return;
-
height = gtk_widget_get_allocated_height (hdy_flap_get_flap (self->flap));
height *= hdy_flap_get_reveal_progress (self->flap);
height = MAX (height, SHOW_HEADERBAR_DISTANCE_PX);
- if (self->last_y <= height) {
+ return height;
+}
+
+static void
+update (EphyFullscreenBox *self,
+ gboolean hide_immediately)
+{
+ if (!self->autohide || !self->fullscreen)
+ return;
+
+ if (!self->is_touch &&
+ self->last_y <= get_titlebar_area_height (self)) {
show_ui (self);
return;
}
@@ -155,11 +164,26 @@ motion_cb (EphyFullscreenBox *self,
gdouble x,
gdouble y)
{
+ self->is_touch = FALSE;
self->last_y = y;
update (self, FALSE);
}
+static void
+press_cb (EphyFullscreenBox *self,
+ int n_press,
+ double x,
+ double y)
+{
+ gtk_gesture_set_state (self->gesture, GTK_EVENT_SEQUENCE_DENIED);
+
+ self->is_touch = TRUE;
+
+ if (y > get_titlebar_area_height (self))
+ update (self, TRUE);
+}
+
static void
set_focus_cb (EphyFullscreenBox *self,
GtkWidget *widget)
@@ -306,6 +330,7 @@ ephy_fullscreen_box_dispose (GObject *object)
EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (object);
g_clear_object (&self->controller);
+ g_clear_object (&self->gesture);
G_OBJECT_CLASS (ephy_fullscreen_box_parent_class)->dispose (object);
}
@@ -390,6 +415,13 @@ ephy_fullscreen_box_init (EphyFullscreenBox *self)
gtk_event_controller_set_propagation_phase (self->controller, GTK_PHASE_CAPTURE);
g_signal_connect_object (self->controller, "motion",
G_CALLBACK (motion_cb), self, G_CONNECT_SWAPPED);
+
+ self->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self));
+ gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->gesture),
+ GTK_PHASE_CAPTURE);
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->gesture), TRUE);
+ g_signal_connect_object (self->gesture, "pressed",
+ G_CALLBACK (press_cb), self, G_CONNECT_SWAPPED);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]