Skip to content

Commit dc65a35

Browse files
committed
QPA: fix systemMoveResize, cleanup mouse code
1 parent 19f1d3a commit dc65a35

File tree

3 files changed

+18
-51
lines changed

3 files changed

+18
-51
lines changed

platforms/qhaikuplatform/haiku/qhaikuview.cpp

+2-29
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,6 @@ QHaikuSurfaceView::QHaikuSurfaceView(BRect rect)
7575
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
7676

7777
lastMouseMoveTime = system_time();
78-
mousePreventTime = system_time();
79-
}
80-
81-
QHaikuSurfaceView::~QHaikuSurfaceView()
82-
{
83-
}
84-
85-
void
86-
QHaikuSurfaceView::PreventMouse(void)
87-
{
88-
if (Window()->Look() == B_NO_BORDER_WINDOW_LOOK)
89-
return;
90-
mousePreventTime = system_time();
9178
}
9279

9380
void
@@ -164,15 +151,12 @@ QHaikuSurfaceView::MouseDown(BPoint point)
164151
if (isSizeGripperContains(point))
165152
return;
166153

167-
if (system_time() - mousePreventTime < Q_HAIKU_MOUSE_PREVENT_TIME)
168-
return;
169-
170154
uint32 buttons = Window()->CurrentMessage()->FindInt32("buttons");
171155

172156
QHaikuWindow *wnd = ((QtHaikuWindow*)Window())->fQWindow;
173157

174-
SetMouseEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY);
175-
158+
SetMouseEventMask(B_POINTER_EVENTS, B_LOCK_WINDOW_FOCUS | B_NO_POINTER_HISTORY);
159+
176160
if (wnd->window()->flags() & Qt::FramelessWindowHint) {
177161
Window()->Activate();
178162
}
@@ -182,8 +166,6 @@ QHaikuSurfaceView::MouseDown(BPoint point)
182166

183167
Q_EMIT mouseEvent(localPoint, globalPoint, lastMouseState, lastMouseButton, QEvent::MouseButtonPress,
184168
hostToQtModifiers(modifiers()), Qt::MouseEventNotSynthesized);
185-
186-
BView::MouseDown(point);
187169
}
188170

189171
void
@@ -196,9 +178,6 @@ QHaikuSurfaceView::MouseUp(BPoint point)
196178
if (isSizeGripperContains(point))
197179
return;
198180

199-
if (system_time() - mousePreventTime < Q_HAIKU_MOUSE_PREVENT_TIME)
200-
return;
201-
202181
BPoint pointer;
203182
uint32 buttons;
204183
GetMouse(&pointer, &buttons);
@@ -207,18 +186,13 @@ QHaikuSurfaceView::MouseUp(BPoint point)
207186

208187
Q_EMIT mouseEvent(localPoint, globalPoint, state, lastMouseButton, QEvent::MouseButtonRelease,
209188
hostToQtModifiers(modifiers()), Qt::MouseEventNotSynthesized);
210-
211-
BView::MouseUp(point);
212189
}
213190

214191
void
215192
QHaikuSurfaceView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg)
216193
{
217194
bool isTabletEvent = Window()->CurrentMessage()->HasFloat("be:tablet_x");
218195

219-
if (system_time() - mousePreventTime < Q_HAIKU_MOUSE_PREVENT_TIME)
220-
return;
221-
222196
switch (transit) {
223197
case B_INSIDE_VIEW:
224198
break;
@@ -295,5 +269,4 @@ QHaikuSurfaceView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg)
295269

296270
lastMouseMoveTime = timeNow;
297271
}
298-
BView::MouseMoved(point, transit, msg);
299272
}

platforms/qhaikuplatform/haiku/qhaikuview.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,19 @@
5454
#include <Rect.h>
5555

5656
#define Q_HAIKU_MOUSE_EVENTS_TIME 10000
57-
#define Q_HAIKU_MOUSE_PREVENT_TIME 300000
5857

5958
class QHaikuSurfaceView : public QObject, public BView
6059
{
6160
Q_OBJECT
6261
public:
6362
QHaikuSurfaceView(BRect rect);
64-
~QHaikuSurfaceView();
63+
~QHaikuSurfaceView() {};
6564

6665
virtual void Draw(BRect rect);
6766
virtual void MouseDown(BPoint p);
6867
virtual void MouseUp(BPoint p);
6968
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *msg);
7069

71-
void PreventMouse(void);
72-
7370
Qt::MouseButton hostToQtButton(uint32 buttons) const;
7471
Qt::MouseButtons hostToQtButtons(uint32 buttons) const;
7572
Qt::KeyboardModifiers hostToQtModifiers(uint32 keyState) const;
@@ -82,7 +79,6 @@ class QHaikuSurfaceView : public QObject, public BView
8279
Qt::MouseButtons lastMouseState;
8380
Qt::MouseButton lastMouseButton;
8481
bigtime_t lastMouseMoveTime;
85-
bigtime_t mousePreventTime;
8682
Q_SIGNALS:
8783
void mouseEvent(const QPoint &localPosition,
8884
const QPoint &globalPosition,

platforms/qhaikuplatform/haiku/qhaikuwindow.cpp

+15-17
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,6 @@ void QtHaikuWindow::Zoom(BPoint origin, float w, float h)
257257
Q_UNUSED(origin);
258258
Q_UNUSED(w);
259259
Q_UNUSED(h);
260-
fView->PreventMouse();
261260
Q_EMIT windowZoomed();
262261
}
263262

@@ -269,14 +268,12 @@ void QtHaikuWindow::Minimize(bool minimized)
269268

270269
void QtHaikuWindow::FrameResized(float width, float height)
271270
{
272-
fView->PreventMouse();
273271
Q_EMIT windowResized(QSize(static_cast<int>(width), static_cast<int>(height)));
274272
}
275273

276274

277275
void QtHaikuWindow::FrameMoved(BPoint point)
278276
{
279-
fView->PreventMouse();
280277
Q_EMIT windowMoved(QPoint(point.x, point.y));
281278
}
282279

@@ -1019,12 +1016,25 @@ void QHaikuWindow::platformMouseEvent(const QPoint &localPosition,
10191016
globalPosition, state, button, type, modifiers, source);
10201017
QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0,0), window()->size()));
10211018
} else {
1022-
if (type == QEvent::MouseButtonRelease && m_systemMoveResizeEnabled) {
1023-
m_systemMoveResizeEnabled = false;
1019+
QWindowSystemInterface::handleMouseEvent(window(),
1020+
localPosition, globalPosition, state, button, type, modifiers, source);
1021+
if (window()->cursor().shape() == Qt::BitmapCursor || window()->cursor().shape() == Qt::CustomCursor) {
1022+
QPoint hotSpot = window()->cursor().hotSpot();
1023+
QPoint pos = window()->mapFromGlobal(m_lastMousePos);
1024+
QRect rect = window()->cursor().bitmap()->rect().translated(pos.x() - hotSpot.x(), pos.y() - hotSpot.y());
1025+
QWindowSystemInterface::handleExposeEvent(window(), QRegion(rect.adjusted(-1, -1, 1, 1)));
1026+
1027+
pos = window()->mapFromGlobal(window()->cursor().pos());
1028+
rect = window()->cursor().bitmap()->rect().translated(pos.x() - hotSpot.x(), pos.y() - hotSpot.y());
1029+
QWindowSystemInterface::handleExposeEvent(window(), QRegion(rect.adjusted(-1, -1, 1, 1)));
10241030
}
1031+
if (type == QEvent::MouseButtonRelease && m_systemMoveResizeEnabled)
1032+
m_systemMoveResizeEnabled = false;
1033+
10251034
if (type == QEvent::MouseMove && m_systemMoveResizeEnabled) {
10261035
if (m_systemResizeEdges == 0) {
10271036
window()->setFramePosition(m_systemMoveWindowGeometry.topLeft() + (globalPosition - m_lastMousePos));
1037+
QWindowSystemInterface::handleGeometryChange(window(), m_systemMoveWindowGeometry);
10281038
return;
10291039
}
10301040
QRect newGeometry = m_systemMoveWindowGeometry;
@@ -1040,18 +1050,6 @@ void QHaikuWindow::platformMouseEvent(const QPoint &localPosition,
10401050
QWindowSystemInterface::handleGeometryChange(window(), newGeometry);
10411051
return;
10421052
}
1043-
QWindowSystemInterface::handleMouseEvent(window(),
1044-
localPosition, globalPosition, state, button, type, modifiers, source);
1045-
if (window()->cursor().shape() == Qt::BitmapCursor || window()->cursor().shape() == Qt::CustomCursor) {
1046-
QPoint hotSpot = window()->cursor().hotSpot();
1047-
QPoint pos = window()->mapFromGlobal(m_lastMousePos);
1048-
QRect rect = window()->cursor().bitmap()->rect().translated(pos.x() - hotSpot.x(), pos.y() - hotSpot.y());
1049-
QWindowSystemInterface::handleExposeEvent(window(), QRegion(rect.adjusted(-1, -1, 1, 1)));
1050-
1051-
pos = window()->mapFromGlobal(window()->cursor().pos());
1052-
rect = window()->cursor().bitmap()->rect().translated(pos.x() - hotSpot.x(), pos.y() - hotSpot.y());
1053-
QWindowSystemInterface::handleExposeEvent(window(), QRegion(rect.adjusted(-1, -1, 1, 1)));
1054-
}
10551053
}
10561054
m_lastMousePos = globalPosition;
10571055
}

0 commit comments

Comments
 (0)