summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2017-01-01 19:47:45 +0100
committerAndré Nusser <andre.nusser@googlemail.com>2017-01-01 19:52:34 +0100
commitbadbd103ae9387912189f2aedf888fd89770ea10 (patch)
tree13aaffe3d93901f2714ea9a8f6f6ee681d37d0b3
parent19136bce2c197943fa2c7476fe5b75edc87d6ac4 (diff)
Add a workaround for JUCE hosts.
The event time for them is always '0' and thus we couldn't recognize double-clicks.
-rw-r--r--plugingui/nativewindow_x11.cc10
-rw-r--r--plugingui/nativewindow_x11.h2
2 files changed, 11 insertions, 1 deletions
diff --git a/plugingui/nativewindow_x11.cc b/plugingui/nativewindow_x11.cc
index f50551e..a4e9659 100644
--- a/plugingui/nativewindow_x11.cc
+++ b/plugingui/nativewindow_x11.cc
@@ -28,6 +28,7 @@
#include <X11/Xutil.h>
#include <stdlib.h>
+#include <chrono>
#include <hugin.hpp>
@@ -459,6 +460,15 @@ std::shared_ptr<Event> NativeWindowX11::translateXMessage(XEvent& xevent,
(xevent.type == ButtonPress) ?
Direction::down : Direction::up;
+ // This is a fix for hosts (e.g. those using JUCE) that set the
+ // event time to '0'.
+ if(xevent.xbutton.time == 0)
+ {
+ auto now = std::chrono::system_clock::now().time_since_epoch();
+ xevent.xbutton.time =
+ std::chrono::duration_cast<std::chrono::milliseconds>(now).count();
+ }
+
buttonEvent->doubleClick =
(xevent.type == ButtonPress) &&
((xevent.xbutton.time - last_click) < 200);
diff --git a/plugingui/nativewindow_x11.h b/plugingui/nativewindow_x11.h
index 50cd904..db6ec76 100644
--- a/plugingui/nativewindow_x11.h
+++ b/plugingui/nativewindow_x11.h
@@ -62,7 +62,7 @@ private:
Window& window;
- int last_click{0};
+ Time last_click{0};
Display* display{nullptr};
int screen{0};