Blame SOURCES/0001-gtk3-wayland-enable-manual-movement-of-toolbars.patch

a9add1
From 0f58534c4c3825f569a01774b7f8bb1808b37886 Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Tue, 15 Dec 2015 14:24:35 +0000
a9add1
Subject: [PATCH] gtk3+wayland: enable manual movement of toolbars
a9add1
a9add1
via gtk_window_begin_move_drag so add some BYDRAG/ByDrag hints
a9add1
to select mechanism to move window by
a9add1
a9add1
Change-Id: Icc58653dff752a6d4ee49446647d7ede2af9dd9b
a9add1
---
a9add1
 include/vcl/window.hxx        |  3 ++-
a9add1
 vcl/inc/brdwin.hxx            |  2 ++
a9add1
 vcl/inc/salframe.hxx          |  1 +
a9add1
 vcl/inc/unx/gtk/gtkframe.hxx  |  5 ++++-
a9add1
 vcl/source/window/brdwin.cxx  |  7 ++++++-
a9add1
 vcl/source/window/window.cxx  |  2 ++
a9add1
 vcl/unx/gtk3/gtk3gtkframe.cxx | 13 ++++++++++++-
a9add1
 7 files changed, 29 insertions(+), 4 deletions(-)
a9add1
a9add1
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
a9add1
index ae28940..1f5c0c2 100644
a9add1
--- a/include/vcl/window.hxx
a9add1
+++ b/include/vcl/window.hxx
a9add1
@@ -161,10 +161,11 @@ enum class PosSizeFlags
a9add1
     PosSize          = Pos | Size,
a9add1
     All              = PosSize,
a9add1
     Dropdown         = 0x0010,
a9add1
+    ByDrag           = 0x0020,
a9add1
 };
a9add1
 namespace o3tl
a9add1
 {
a9add1
-    template<> struct typed_flags<PosSizeFlags> : is_typed_flags<PosSizeFlags, 0x001f> {};
a9add1
+    template<> struct typed_flags<PosSizeFlags> : is_typed_flags<PosSizeFlags, 0x003f> {};
a9add1
 }
a9add1
 
a9add1
 // Flags for Show()
a9add1
diff --git a/vcl/inc/brdwin.hxx b/vcl/inc/brdwin.hxx
a9add1
index d00ca1b..7e89064 100644
a9add1
--- a/vcl/inc/brdwin.hxx
a9add1
+++ b/vcl/inc/brdwin.hxx
a9add1
@@ -170,6 +170,8 @@ public:
a9add1
 
a9add1
     Rectangle               GetMenuRect() const;
a9add1
 
a9add1
+    void                    MoveToByDrag(const Point& rNewPos);
a9add1
+
a9add1
     virtual Size            GetOptimalSize() const SAL_OVERRIDE;
a9add1
 };
a9add1
 
a9add1
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
a9add1
index cfd401d..9b3d52e 100644
a9add1
--- a/vcl/inc/salframe.hxx
a9add1
+++ b/vcl/inc/salframe.hxx
a9add1
@@ -94,6 +94,7 @@ typedef sal_uInt64 SalExtStyle;
a9add1
 #define SAL_FRAME_POSSIZE_Y                 ((sal_uInt16)0x0002)
a9add1
 #define SAL_FRAME_POSSIZE_WIDTH             ((sal_uInt16)0x0004)
a9add1
 #define SAL_FRAME_POSSIZE_HEIGHT            ((sal_uInt16)0x0008)
a9add1
+#define SAL_FRAME_POSSIZE_BYDRAG            ((sal_uInt16)0x0010)
a9add1
 
a9add1
 struct SystemParentData;
a9add1
 
a9add1
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
index b779d39..a55ff2c 100644
a9add1
--- a/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
@@ -316,7 +316,10 @@ class GtkSalFrame : public SalFrame, public X11WindowProvider
a9add1
     void widget_set_size_request(long nWidth, long nHeight);
a9add1
 
a9add1
     void resizeWindow( long nWidth, long nHeight );
a9add1
-    void moveWindow( long nX, long nY );
a9add1
+    void moveWindow(long nX, long nY);
a9add1
+#if GTK_CHECK_VERSION(3,0,0)
a9add1
+    void dragWindowTo(long nX, long nY);
a9add1
+#endif
a9add1
 
a9add1
     Size calcDefaultSize();
a9add1
 
a9add1
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
a9add1
index 97dbc5b..f57ab37 100644
a9add1
--- a/vcl/source/window/brdwin.cxx
a9add1
+++ b/vcl/source/window/brdwin.cxx
a9add1
@@ -1243,7 +1243,7 @@ bool ImplStdBorderWindowView::Tracking( const TrackingEvent& rTEvt )
a9add1
                 aPos.Y() += aMousePos.Y();
a9add1
                 if ( maFrameData.mbDragFull )
a9add1
                 {
a9add1
-                    pBorderWindow->SetPosPixel( aPos );
a9add1
+                    pBorderWindow->MoveToByDrag(aPos);
a9add1
                     pBorderWindow->ImplUpdateAll();
a9add1
                     pBorderWindow->ImplGetFrameWindow()->ImplUpdateAll();
a9add1
                 }
a9add1
@@ -2195,6 +2195,11 @@ Rectangle ImplBorderWindow::GetMenuRect() const
a9add1
     return mpBorderView->GetMenuRect();
a9add1
 }
a9add1
 
a9add1
+void ImplBorderWindow::MoveToByDrag(const Point& rNewPos)
a9add1
+{
a9add1
+    setPosSizePixel(rNewPos.X(), rNewPos.Y(), 0, 0, PosSizeFlags::Pos | PosSizeFlags::ByDrag);
a9add1
+}
a9add1
+
a9add1
 Size ImplBorderWindow::GetOptimalSize() const
a9add1
 {
a9add1
     const vcl::Window* pClientWindow = ImplGetClientWindow();
a9add1
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
a9add1
index 20377ac..808d683 100644
a9add1
--- a/vcl/source/window/window.cxx
a9add1
+++ b/vcl/source/window/window.cxx
a9add1
@@ -2886,6 +2886,8 @@ void Window::setPosSizePixel( long nX, long nY,
a9add1
             nSysFlags |= SAL_FRAME_POSSIZE_WIDTH;
a9add1
         if( nFlags & PosSizeFlags::Height )
a9add1
             nSysFlags |= SAL_FRAME_POSSIZE_HEIGHT;
a9add1
+        if( nFlags & PosSizeFlags::ByDrag )
a9add1
+            nSysFlags |= SAL_FRAME_POSSIZE_BYDRAG;
a9add1
         if( nFlags & PosSizeFlags::X )
a9add1
         {
a9add1
             nSysFlags |= SAL_FRAME_POSSIZE_X;
a9add1
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
index 7c24d2b..6a69c82 100644
a9add1
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
@@ -878,6 +878,14 @@ void GtkSalFrame::moveWindow( long nX, long nY )
a9add1
         gtk_window_move( GTK_WINDOW(m_pWindow), nX, nY );
a9add1
 }
a9add1
 
a9add1
+void GtkSalFrame::dragWindowTo(long nX, long nY)
a9add1
+{
a9add1
+    if (isChild(false))
a9add1
+        moveWindow(nX, nY);
a9add1
+    else
a9add1
+        gtk_window_begin_move_drag(GTK_WINDOW(m_pWindow), 1, nX, nY, GDK_CURRENT_TIME);
a9add1
+}
a9add1
+
a9add1
 void GtkSalFrame::widget_set_size_request(long nWidth, long nHeight)
a9add1
 {
a9add1
     gtk_widget_set_size_request(GTK_WIDGET(m_pFixedContainer), nWidth, nHeight );
a9add1
@@ -1717,7 +1725,10 @@ void GtkSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_u
a9add1
 
a9add1
         m_bDefaultPos = false;
a9add1
 
a9add1
-        moveWindow(nX, nY);
a9add1
+        if (nFlags & SAL_FRAME_POSSIZE_BYDRAG)
a9add1
+            dragWindowTo(nX, nY);
a9add1
+        else
a9add1
+            moveWindow(nX, nY);
a9add1
 
a9add1
         updateScreenNumber();
a9add1
     }
a9add1
-- 
a9add1
2.5.0
a9add1