[Libreoffice-commits] core.git: vcl/inc vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon May 10 15:18:19 UTC 2021
vcl/inc/unx/gtk/gtkframe.hxx | 4 ++-
vcl/unx/gtk3/gtkframe.cxx | 54 +++++++++++++++++++++++++++++--------------
2 files changed, 40 insertions(+), 18 deletions(-)
New commits:
commit 6c6b2fcdf34d9463aeb6d9b94474b5334f5fc20a
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 10 15:00:28 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon May 10 17:17:36 2021 +0200
gtk4: get motion events
Change-Id: I44f28891015cadf3714dbecd48bad73296d78b53
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115335
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 87ab676c624a..49aaafc3ae81 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -287,18 +287,20 @@ class GtkSalFrame final : public SalFrame
void WindowMap();
void WindowUnmap();
bool WindowCloseRequest();
+ void DrawingAreaMotion(int nEventX, int nEventY, guint32 nTime, guint nState);
#if GTK_CHECK_VERSION(4, 0, 0)
static void signalMap( GtkWidget*, gpointer );
static void signalUnmap( GtkWidget*, gpointer );
static gboolean signalDelete( GtkWidget*, gpointer );
+ static void signalMotion(GtkEventControllerMotion *controller, double x, double y, gpointer);
#else
static gboolean signalMap( GtkWidget*, GdkEvent*, gpointer );
static gboolean signalUnmap( GtkWidget*, GdkEvent*, gpointer );
static gboolean signalDelete( GtkWidget*, GdkEvent*, gpointer );
+ static gboolean signalMotion( GtkWidget*, GdkEventMotion*, gpointer );
#endif
#if !GTK_CHECK_VERSION(4, 0, 0)
static gboolean signalConfigure( GtkWidget*, GdkEventConfigure*, gpointer );
- static gboolean signalMotion( GtkWidget*, GdkEventMotion*, gpointer );
static gboolean signalKey( GtkWidget*, GdkEventKey*, gpointer );
static gboolean signalWindowState( GtkWidget*, GdkEvent*, gpointer );
static gboolean signalScroll( GtkWidget*, GdkEvent*, gpointer );
diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index 8a918fe99c67..c51558d6b7e0 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -936,18 +936,21 @@ void GtkSalFrame::InitCommon()
#if !GTK_CHECK_VERSION(4,0,0)
m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "button-press-event", G_CALLBACK(signalButton), this ));
m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "button-release-event", G_CALLBACK(signalButton), this ));
+
+ m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "motion-notify-event", G_CALLBACK(signalMotion), this ));
+ m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "leave-notify-event", G_CALLBACK(signalCrossing), this ));
+ m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "enter-notify-event", G_CALLBACK(signalCrossing), this ));
#else
GtkGesture *pClick = gtk_gesture_click_new();
gtk_widget_add_controller(pEventWidget, GTK_EVENT_CONTROLLER(pClick));
g_signal_connect(pClick, "pressed", G_CALLBACK(gesturePressed), this);
g_signal_connect(pClick, "released", G_CALLBACK(gestureReleased), this);
+
+ GtkEventController* pMotionController = gtk_event_controller_motion_new();
+ g_signal_connect(pMotionController, "motion", G_CALLBACK(signalMotion), this);
+ gtk_widget_add_controller(pEventWidget, pMotionController);
#endif
#if !GTK_CHECK_VERSION(4,0,0)
- m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "motion-notify-event", G_CALLBACK(signalMotion), this ));
- m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "leave-notify-event", G_CALLBACK(signalCrossing), this ));
- m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "enter-notify-event", G_CALLBACK(signalCrossing), this ));
-
-
//Drop Target Stuff
gtk_drag_dest_set(GTK_WIDGET(pEventWidget), GtkDestDefaults(0), nullptr, 0, GdkDragAction(0));
gtk_drag_dest_set_track_motion(GTK_WIDGET(pEventWidget), true);
@@ -3165,7 +3168,30 @@ void GtkSalFrame::gestureLongPress(GtkGestureLongPress* gesture, gdouble x, gdou
}
}
-#if !GTK_CHECK_VERSION(4, 0, 0)
+void GtkSalFrame::DrawingAreaMotion(int nEventX, int nEventY, guint32 nTime, guint nState)
+{
+ SalMouseEvent aEvent;
+ aEvent.mnTime = nTime;
+ aEvent.mnX = nEventX;
+ aEvent.mnY = nEventY;
+ aEvent.mnCode = GetMouseModCode(nState);
+ aEvent.mnButton = 0;
+
+ if( AllSettings::GetLayoutRTL() )
+ aEvent.mnX = maGeometry.nWidth-1-aEvent.mnX;
+
+ CallCallbackExc(SalEvent::MouseMove, &aEvent);
+}
+
+#if GTK_CHECK_VERSION(4, 0, 0)
+void GtkSalFrame::signalMotion(GtkEventControllerMotion *pController, double x, double y, gpointer frame)
+{
+ GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
+ GdkEvent* pEvent = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(pController));
+ GdkModifierType eType = gtk_event_controller_get_current_event_state(GTK_EVENT_CONTROLLER(pController));
+ pThis->DrawingAreaMotion(x, y, gdk_event_get_time(pEvent), eType);
+}
+#else
gboolean GtkSalFrame::signalMotion( GtkWidget*, GdkEventMotion* pEvent, gpointer frame )
{
UpdateLastInputEventTime(pEvent->time);
@@ -3204,17 +3230,9 @@ gboolean GtkSalFrame::signalMotion( GtkWidget*, GdkEventMotion* pEvent, gpointer
if (!aDel.isDeleted())
{
- SalMouseEvent aEvent;
- aEvent.mnTime = pEvent->time;
- aEvent.mnX = static_cast<tools::Long>(pEvent->x_root) - pThis->maGeometry.nX;
- aEvent.mnY = static_cast<tools::Long>(pEvent->y_root) - pThis->maGeometry.nY;
- aEvent.mnCode = GetMouseModCode( pEvent->state );
- aEvent.mnButton = 0;
-
- if( AllSettings::GetLayoutRTL() )
- aEvent.mnX = pThis->maGeometry.nWidth-1-aEvent.mnX;
-
- pThis->CallCallbackExc( SalEvent::MouseMove, &aEvent );
+ pThis->DrawingAreaMotion(pEvent->x_root - pThis->maGeometry.nX,
+ pEvent->y_root - pThis->maGeometry.nY,
+ pEvent->time, pEvent->state);
}
if (!aDel.isDeleted())
@@ -3227,7 +3245,9 @@ gboolean GtkSalFrame::signalMotion( GtkWidget*, GdkEventMotion* pEvent, gpointer
return true;
}
+#endif
+#if !GTK_CHECK_VERSION(4, 0, 0)
gboolean GtkSalFrame::signalCrossing( GtkWidget*, GdkEventCrossing* pEvent, gpointer frame )
{
UpdateLastInputEventTime(pEvent->time);
More information about the Libreoffice-commits
mailing list