|
 |
a9add1 |
From ab20ea1d78697aa88dd84b8be4ac385cf295ea20 Mon Sep 17 00:00:00 2001
|
|
 |
a9add1 |
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
 |
a9add1 |
Date: Tue, 8 Dec 2015 15:52:47 +0000
|
|
 |
a9add1 |
Subject: [PATCH] Resolves: rhbz#1289398 unable to use scroll wheel under
|
|
 |
a9add1 |
wayland
|
|
 |
a9add1 |
|
|
 |
a9add1 |
because we only get smooth scroll events, so implement that as
|
|
 |
a9add1 |
best we can.
|
|
 |
a9add1 |
|
|
 |
a9add1 |
(cherry picked from commit c5c1f8f710760d40ca1004c5fdd69f8fa2c87496)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
Change-Id: I7701949cf7c9ffdc9d062f75b23db7c6add3c6a9
|
|
 |
a9add1 |
---
|
|
 |
a9add1 |
vcl/inc/unx/gtk/gtkframe.hxx | 1 +
|
|
 |
a9add1 |
vcl/unx/gtk/window/gtksalframe.cxx | 70 +++++++++++++++++++++++++++-----------
|
|
 |
a9add1 |
2 files changed, 52 insertions(+), 19 deletions(-)
|
|
 |
a9add1 |
|
|
 |
a9add1 |
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
a9add1 |
index 3531c41..4594249 100644
|
|
 |
a9add1 |
--- a/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
a9add1 |
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
|
|
 |
a9add1 |
@@ -211,6 +211,7 @@ class GtkSalFrame : public SalFrame, public X11WindowProvider
|
|
 |
a9add1 |
Rectangle m_aRestorePosSize;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
#if GTK_CHECK_VERSION(3,0,0)
|
|
 |
a9add1 |
+ guint32 m_nLastScrollEventTime;
|
|
 |
a9add1 |
cairo_region_t* m_pRegion;
|
|
 |
a9add1 |
#else
|
|
 |
a9add1 |
GdkRegion* m_pRegion;
|
|
 |
a9add1 |
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
|
|
 |
a9add1 |
index 614974a..616f73f 100644
|
|
 |
a9add1 |
--- a/vcl/unx/gtk/window/gtksalframe.cxx
|
|
 |
a9add1 |
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
|
|
 |
a9add1 |
@@ -1129,6 +1129,9 @@ void GtkSalFrame::InitCommon()
|
|
 |
a9add1 |
m_bSpanMonitorsWhenFullscreen = false;
|
|
 |
a9add1 |
m_nState = GDK_WINDOW_STATE_WITHDRAWN;
|
|
 |
a9add1 |
m_nVisibility = GDK_VISIBILITY_FULLY_OBSCURED;
|
|
 |
a9add1 |
+#if GTK_CHECK_VERSION(3,0,0)
|
|
 |
a9add1 |
+ m_nLastScrollEventTime = GDK_CURRENT_TIME;
|
|
 |
a9add1 |
+#endif
|
|
 |
a9add1 |
m_bSendModChangeOnRelease = false;
|
|
 |
a9add1 |
m_pIMHandler = NULL;
|
|
 |
a9add1 |
m_hBackgroundPixmap = None;
|
|
 |
a9add1 |
@@ -3542,30 +3545,59 @@ gboolean GtkSalFrame::signalScroll( GtkWidget*, GdkEvent* pEvent, gpointer frame
|
|
 |
a9add1 |
GdkEventScroll* pSEvent = reinterpret_cast<GdkEventScroll*>(pEvent);
|
|
 |
a9add1 |
|
|
 |
a9add1 |
#if GTK_CHECK_VERSION(3,0,0)
|
|
 |
a9add1 |
- //TODO: do something less feeble here
|
|
 |
a9add1 |
- if (pSEvent->direction == GDK_SCROLL_SMOOTH)
|
|
 |
a9add1 |
+ // gnome#726878 check for duplicate legacy scroll event
|
|
 |
a9add1 |
+ if (pSEvent->direction != GDK_SCROLL_SMOOTH &&
|
|
 |
a9add1 |
+ pThis->m_nLastScrollEventTime == pSEvent->time)
|
|
 |
a9add1 |
+ {
|
|
 |
a9add1 |
return true;
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
#endif
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- static sal_uLong nLines = 0;
|
|
 |
a9add1 |
- if( ! nLines )
|
|
 |
a9add1 |
+ SalWheelMouseEvent aEvent;
|
|
 |
a9add1 |
+
|
|
 |
a9add1 |
+ aEvent.mnTime = pSEvent->time;
|
|
 |
a9add1 |
+ aEvent.mnX = (sal_uLong)pSEvent->x;
|
|
 |
a9add1 |
+ aEvent.mnY = (sal_uLong)pSEvent->y;
|
|
 |
a9add1 |
+ aEvent.mnCode = GetMouseModCode( pSEvent->state );
|
|
 |
a9add1 |
+ aEvent.mnScrollLines = 3;
|
|
 |
a9add1 |
+
|
|
 |
a9add1 |
+ switch (pSEvent->direction)
|
|
 |
a9add1 |
{
|
|
 |
a9add1 |
- char* pEnv = getenv( "SAL_WHEELLINES" );
|
|
 |
a9add1 |
- nLines = pEnv ? atoi( pEnv ) : 3;
|
|
 |
a9add1 |
- if( nLines > 10 )
|
|
 |
a9add1 |
- nLines = SAL_WHEELMOUSE_EVENT_PAGESCROLL;
|
|
 |
a9add1 |
- }
|
|
 |
a9add1 |
+#if GTK_CHECK_VERSION(3,0,0)
|
|
 |
a9add1 |
+ case GDK_SCROLL_SMOOTH:
|
|
 |
a9add1 |
+ {
|
|
 |
a9add1 |
+ double delta_x, delta_y;
|
|
 |
a9add1 |
+ gdk_event_get_scroll_deltas(pEvent, &delta_x, &delta_y);
|
|
 |
a9add1 |
+ //pick the bigger one I guess
|
|
 |
a9add1 |
+ aEvent.mbHorz = fabs(delta_x) > fabs(delta_y);
|
|
 |
a9add1 |
+ if (aEvent.mbHorz)
|
|
 |
a9add1 |
+ aEvent.mnDelta = -delta_x;
|
|
 |
a9add1 |
+ else
|
|
 |
a9add1 |
+ aEvent.mnDelta = -delta_y;
|
|
 |
a9add1 |
+ aEvent.mnScrollLines = 1;
|
|
 |
a9add1 |
+ pThis->m_nLastScrollEventTime = pSEvent->time;
|
|
 |
a9add1 |
+ break;
|
|
 |
a9add1 |
+ }
|
|
 |
a9add1 |
+#endif
|
|
 |
a9add1 |
+ case GDK_SCROLL_UP:
|
|
 |
a9add1 |
+ aEvent.mnDelta = 120;
|
|
 |
a9add1 |
+ aEvent.mbHorz = false;
|
|
 |
a9add1 |
+ break;
|
|
 |
a9add1 |
+ case GDK_SCROLL_DOWN:
|
|
 |
a9add1 |
+ aEvent.mnDelta = -120;
|
|
 |
a9add1 |
+ aEvent.mbHorz = false;
|
|
 |
a9add1 |
+ break;
|
|
 |
a9add1 |
+ case GDK_SCROLL_LEFT:
|
|
 |
a9add1 |
+ aEvent.mbHorz = true;
|
|
 |
a9add1 |
+ aEvent.mnDelta = 120;
|
|
 |
a9add1 |
+ break;
|
|
 |
a9add1 |
+ case GDK_SCROLL_RIGHT:
|
|
 |
a9add1 |
+ aEvent.mnDelta = -120;
|
|
 |
a9add1 |
+ aEvent.mbHorz = true;
|
|
 |
a9add1 |
+ break;
|
|
 |
a9add1 |
+ };
|
|
 |
a9add1 |
|
|
 |
a9add1 |
- bool bNeg = (pSEvent->direction == GDK_SCROLL_DOWN || pSEvent->direction == GDK_SCROLL_RIGHT );
|
|
 |
a9add1 |
- SalWheelMouseEvent aEvent;
|
|
 |
a9add1 |
- aEvent.mnTime = pSEvent->time;
|
|
 |
a9add1 |
- aEvent.mnX = (sal_uLong)pSEvent->x;
|
|
 |
a9add1 |
- aEvent.mnY = (sal_uLong)pSEvent->y;
|
|
 |
a9add1 |
- aEvent.mnDelta = bNeg ? -120 : 120;
|
|
 |
a9add1 |
- aEvent.mnNotchDelta = bNeg ? -1 : 1;
|
|
 |
a9add1 |
- aEvent.mnScrollLines = nLines;
|
|
 |
a9add1 |
- aEvent.mnCode = GetMouseModCode( pSEvent->state );
|
|
 |
a9add1 |
- aEvent.mbHorz = (pSEvent->direction == GDK_SCROLL_LEFT || pSEvent->direction == GDK_SCROLL_RIGHT);
|
|
 |
a9add1 |
+ aEvent.mnNotchDelta = aEvent.mnDelta < 0 ? -1 : 1;
|
|
 |
a9add1 |
|
|
 |
a9add1 |
// --- RTL --- (mirror mouse pos)
|
|
 |
a9add1 |
if( AllSettings::GetLayoutRTL() )
|
|
 |
a9add1 |
--
|
|
 |
a9add1 |
2.5.0
|
|
 |
a9add1 |
|