summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/window.hxx3
-rw-r--r--vcl/inc/brdwin.hxx2
-rw-r--r--vcl/inc/salframe.hxx1
-rw-r--r--vcl/inc/unx/gtk/gtkframe.hxx5
-rw-r--r--vcl/source/window/brdwin.cxx7
-rw-r--r--vcl/source/window/window.cxx2
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx13
7 files changed, 29 insertions, 4 deletions
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index 06914273c891..0e95d02d1bf2 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 430ae04e1988..d5d8fbc4f37d 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 a9c11e4c37ce..72e61e49d4b7 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 dc5cd191d5e0..96c28bfc3ddc 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 d46ad02ffdee..1d79dd082393 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 48be7171a994..a064650f40bb 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 c27fbc401cbe..966dc8014a48 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();
}