mirror of https://github.com/buggins/dlangui.git
X11: Fix convertMouseFlags() should fix #474
This commit is contained in:
parent
fd6940c184
commit
4c6cc85481
|
@ -758,14 +758,39 @@ class X11Window : DWindow {
|
||||||
protected ButtonDetails _mbutton;
|
protected ButtonDetails _mbutton;
|
||||||
protected ButtonDetails _rbutton;
|
protected ButtonDetails _rbutton;
|
||||||
|
|
||||||
ushort convertMouseFlags(uint flags) {
|
// x11 gives flags from time prior event so if left button is pressed there is not Button1Mask
|
||||||
|
ushort convertMouseFlags(uint flags, MouseButton btn, bool pressed) {
|
||||||
ushort res = 0;
|
ushort res = 0;
|
||||||
|
if (btn == MouseButton.Left) {
|
||||||
|
if (pressed)
|
||||||
|
res |= MouseFlag.LButton;
|
||||||
|
else
|
||||||
|
res &= ~MouseFlag.LButton;
|
||||||
|
}
|
||||||
|
else
|
||||||
if (flags & Button1Mask)
|
if (flags & Button1Mask)
|
||||||
res |= MouseFlag.LButton;
|
res |= MouseFlag.LButton;
|
||||||
if (flags & Button2Mask)
|
|
||||||
res |= MouseFlag.RButton;
|
if (btn == MouseButton.Middle) {
|
||||||
if (flags & Button3Mask)
|
if (pressed)
|
||||||
res |= MouseFlag.MButton;
|
res |= MouseFlag.MButton;
|
||||||
|
else
|
||||||
|
res &= ~MouseFlag.MButton;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (flags & Button2Mask)
|
||||||
|
res |= MouseFlag.MButton;
|
||||||
|
|
||||||
|
if (btn == MouseButton.Right) {
|
||||||
|
if (pressed)
|
||||||
|
res |= MouseFlag.RButton;
|
||||||
|
else
|
||||||
|
res &= ~MouseFlag.RButton;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (flags & Button3Mask)
|
||||||
|
res |= MouseFlag.RButton;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -803,7 +828,9 @@ class X11Window : DWindow {
|
||||||
if (wheelDelta)
|
if (wheelDelta)
|
||||||
event = new MouseEvent(action, MouseButton.None, lastFlags, lastx, lasty, wheelDelta);
|
event = new MouseEvent(action, MouseButton.None, lastFlags, lastx, lasty, wheelDelta);
|
||||||
} else {
|
} else {
|
||||||
lastFlags = convertMouseFlags(state);
|
MouseButton btn = convertMouseButton(button);
|
||||||
|
lastFlags = convertMouseFlags(state, btn, action == MouseAction.ButtonDown);
|
||||||
|
|
||||||
if (_keyFlags & KeyFlag.Shift)
|
if (_keyFlags & KeyFlag.Shift)
|
||||||
lastFlags |= MouseFlag.Shift;
|
lastFlags |= MouseFlag.Shift;
|
||||||
if (_keyFlags & KeyFlag.Control)
|
if (_keyFlags & KeyFlag.Control)
|
||||||
|
@ -812,7 +839,6 @@ class X11Window : DWindow {
|
||||||
lastFlags |= MouseFlag.Alt;
|
lastFlags |= MouseFlag.Alt;
|
||||||
lastx = cast(short)x;
|
lastx = cast(short)x;
|
||||||
lasty = cast(short)y;
|
lasty = cast(short)y;
|
||||||
MouseButton btn = convertMouseButton(button);
|
|
||||||
event = new MouseEvent(action, btn, lastFlags, lastx, lasty);
|
event = new MouseEvent(action, btn, lastFlags, lastx, lasty);
|
||||||
}
|
}
|
||||||
if (event) {
|
if (event) {
|
||||||
|
@ -833,6 +859,7 @@ class X11Window : DWindow {
|
||||||
event.lbutton = _lbutton;
|
event.lbutton = _lbutton;
|
||||||
event.rbutton = _rbutton;
|
event.rbutton = _rbutton;
|
||||||
event.mbutton = _mbutton;
|
event.mbutton = _mbutton;
|
||||||
|
|
||||||
bool res = dispatchMouseEvent(event);
|
bool res = dispatchMouseEvent(event);
|
||||||
if (res) {
|
if (res) {
|
||||||
debug(mouse) Log.d("Calling update() after mouse event");
|
debug(mouse) Log.d("Calling update() after mouse event");
|
||||||
|
@ -1655,7 +1682,7 @@ class X11Platform : Platform {
|
||||||
XFlush(x11display);
|
XFlush(x11display);
|
||||||
int eventsInQueue = numberOfPendingEvents();
|
int eventsInQueue = numberOfPendingEvents();
|
||||||
if (!eventsInQueue) {
|
if (!eventsInQueue) {
|
||||||
debug(x11) Log.d("X11: Sleeping");
|
//debug(x11) Log.d("X11: Sleeping");
|
||||||
Thread.sleep(dur!("msecs")(10));
|
Thread.sleep(dur!("msecs")(10));
|
||||||
}
|
}
|
||||||
foreach(eventIndex; 0..eventsInQueue)
|
foreach(eventIndex; 0..eventsInQueue)
|
||||||
|
|
Loading…
Reference in New Issue