include/vcl/window.hxx | 3 ++- vcl/inc/brdwin.hxx | 2 ++ vcl/inc/salframe.hxx | 1 + vcl/inc/unx/gtk/gtkframe.hxx | 5 ++++- vcl/source/window/brdwin.cxx | 7 ++++++- vcl/source/window/window.cxx | 2 ++ vcl/unx/gtk3/gtk3gtkframe.cxx | 13 ++++++++++++- 7 files changed, 29 insertions(+), 4 deletions(-)
New commits: commit e2ea766b2c3a72974fa4b80f0b74675be9196691 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 15 14:24:35 2015 +0000 gtk3+wayland: enable manual movement of toolbars via gtk_window_begin_move_drag so add some BYDRAG/ByDrag hints to select mechanism to move window by Change-Id: Icc58653dff752a6d4ee49446647d7ede2af9dd9b (cherry picked from commit ea4c75dcc9c3e53e7ef40bd273ea18a48ea9b18d) diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 0691427..0e95d02 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -162,10 +162,11 @@ enum class PosSizeFlags PosSize = Pos | Size, All = PosSize, Dropdown = 0x0010, + ByDrag = 0x0020, }; namespace o3tl { - template<> struct typed_flags<PosSizeFlags> : is_typed_flags<PosSizeFlags, 0x001f> {}; + template<> struct typed_flags<PosSizeFlags> : is_typed_flags<PosSizeFlags, 0x003f> {}; } // Flags for Show() diff --git a/vcl/inc/brdwin.hxx b/vcl/inc/brdwin.hxx index 430ae04..d5d8fbc 100644 --- a/vcl/inc/brdwin.hxx +++ b/vcl/inc/brdwin.hxx @@ -169,6 +169,8 @@ public: Rectangle GetMenuRect() const; + void MoveToByDrag(const Point& rNewPos); + virtual Size GetOptimalSize() const override; }; diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx index a9c11e4..72e61e4 100644 --- a/vcl/inc/salframe.hxx +++ b/vcl/inc/salframe.hxx @@ -100,6 +100,7 @@ typedef sal_uInt64 SalExtStyle; #define SAL_FRAME_POSSIZE_Y ((sal_uInt16)0x0002) #define SAL_FRAME_POSSIZE_WIDTH ((sal_uInt16)0x0004) #define SAL_FRAME_POSSIZE_HEIGHT ((sal_uInt16)0x0008) +#define SAL_FRAME_POSSIZE_BYDRAG ((sal_uInt16)0x0010) struct SystemParentData; struct ImplSVEvent; diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index dc5cd19..96c28bf 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -297,7 +297,10 @@ class GtkSalFrame : public SalFrame, public X11WindowProvider void widget_set_size_request(long nWidth, long nHeight); void resizeWindow( long nWidth, long nHeight ); - void moveWindow( long nX, long nY ); + void moveWindow(long nX, long nY); +#if GTK_CHECK_VERSION(3,0,0) + void dragWindowTo(long nX, long nY); +#endif Size calcDefaultSize(); diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx index d46ad02..1d79dd0 100644 --- a/vcl/source/window/brdwin.cxx +++ b/vcl/source/window/brdwin.cxx @@ -1243,7 +1243,7 @@ bool ImplStdBorderWindowView::Tracking( const TrackingEvent& rTEvt ) aPos.Y() += aMousePos.Y(); if ( maFrameData.mbDragFull ) { - pBorderWindow->SetPosPixel( aPos ); + pBorderWindow->MoveToByDrag(aPos); pBorderWindow->ImplUpdateAll(); pBorderWindow->ImplGetFrameWindow()->ImplUpdateAll(); } @@ -2179,6 +2179,11 @@ Rectangle ImplBorderWindow::GetMenuRect() const return mpBorderView->GetMenuRect(); } +void ImplBorderWindow::MoveToByDrag(const Point& rNewPos) +{ + setPosSizePixel(rNewPos.X(), rNewPos.Y(), 0, 0, PosSizeFlags::Pos | PosSizeFlags::ByDrag); +} + Size ImplBorderWindow::GetOptimalSize() const { const vcl::Window* pClientWindow = ImplGetClientWindow(); diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 48be717..a064650 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -2902,6 +2902,8 @@ void Window::setPosSizePixel( long nX, long nY, nSysFlags |= SAL_FRAME_POSSIZE_WIDTH; if( nFlags & PosSizeFlags::Height ) nSysFlags |= SAL_FRAME_POSSIZE_HEIGHT; + if( nFlags & PosSizeFlags::ByDrag ) + nSysFlags |= SAL_FRAME_POSSIZE_BYDRAG; if( nFlags & PosSizeFlags::X ) { nSysFlags |= SAL_FRAME_POSSIZE_X; diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index c27fbc4..966dc80 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -872,6 +872,14 @@ void GtkSalFrame::moveWindow( long nX, long nY ) gtk_window_move( GTK_WINDOW(m_pWindow), nX, nY ); } +void GtkSalFrame::dragWindowTo(long nX, long nY) +{ + if (isChild(false)) + moveWindow(nX, nY); + else + gtk_window_begin_move_drag(GTK_WINDOW(m_pWindow), 1, nX, nY, GDK_CURRENT_TIME); +} + void GtkSalFrame::widget_set_size_request(long nWidth, long nHeight) { gtk_widget_set_size_request(GTK_WIDGET(m_pFixedContainer), nWidth, nHeight ); @@ -1582,7 +1590,10 @@ void GtkSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_u m_bDefaultPos = false; - moveWindow(nX, nY); + if (nFlags & SAL_FRAME_POSSIZE_BYDRAG) + dragWindowTo(nX, nY); + else + moveWindow(nX, nY); updateScreenNumber(); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits