Kaydet (Commit) ea4c75dc authored tarafından Caolán McNamara's avatar Caolán McNamara

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
üst 4c82edfb
......@@ -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()
......
......@@ -169,6 +169,8 @@ public:
Rectangle GetMenuRect() const;
void MoveToByDrag(const Point& rNewPos);
virtual Size GetOptimalSize() const override;
};
......
......@@ -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;
......
......@@ -302,7 +302,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();
......
......@@ -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();
......
......@@ -2909,6 +2909,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;
......
......@@ -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 );
......@@ -1579,7 +1587,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();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment