Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2015-02-13 12:52:30 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-02-13 12:57:26 +0300
commite63594a6e5d5e00f397bafa75dc234f1a1733a7a (patch)
tree72b480e58001c05914ffc6939aab91b57191e9ff /intern/ghost
parent46151a6a69aa7461fbfd03561aea2cfd5eecbc61 (diff)
Fix again tablets with linux!
Yes, for me tablets (both wacom and no-name) were again broken - curse X11! So now, we want ButtonPress, Button1Motion does not work anymore... Anyway, this patch makes things much cleaner, storing each event type in its own variable! Patch by cedricp (Cédric PAILLE) from T43367, thanks a bunch!
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp6
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.h6
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp14
3 files changed, 18 insertions, 8 deletions
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index d4693e99fa5..e8199288fb2 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -1181,7 +1181,11 @@ GHOST_SystemX11::processEvent(XEvent *xe)
default:
{
#ifdef WITH_X11_XINPUT
- if (xe->type == m_xtablet.MotionEvent) {
+ if (xe->type == m_xtablet.MotionEvent ||
+ xe->type == m_xtablet.MotionEventEraser ||
+ xe->type == m_xtablet.PressEvent ||
+ xe->type == m_xtablet.PressEventEraser)
+ {
XDeviceMotionEvent *data = (XDeviceMotionEvent *)xe;
const unsigned char axis_first = data->first_axis;
const unsigned char axes_end = axis_first + data->axes_count; /* after the last */
diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h
index bc35b6c6026..378f07dd0bd 100644
--- a/intern/ghost/intern/GHOST_SystemX11.h
+++ b/intern/ghost/intern/GHOST_SystemX11.h
@@ -286,6 +286,12 @@ public:
int MotionEvent;
int ProxInEvent;
int ProxOutEvent;
+ int PressEvent;
+
+ int MotionEventEraser;
+ int ProxInEventEraser;
+ int ProxOutEventEraser;
+ int PressEventEraser;
int PressureLevels;
int XtiltLevels, YtiltLevels;
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index 5e2a881dd17..4e619264401 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -570,18 +570,18 @@ void GHOST_WindowX11::initXInputDevices()
if (version && (version != (XExtensionVersion *)NoSuchExtension)) {
if (version->present) {
GHOST_SystemX11::GHOST_TabletX11 &xtablet = m_system->GetXTablet();
- XEventClass xevents[10], ev;
+ XEventClass xevents[8], ev;
int dcount = 0;
/* With modern XInput (xlib 1.6.2 at least and/or evdev 2.9.0) and some 'no-name' tablets
- * like 'UC-LOGIC Tablet WP5540U', we also need to 'select' Button1 for motion event,
+ * like 'UC-LOGIC Tablet WP5540U', we also need to 'select' ButtonPress for motion event,
* otherwise we do not get any tablet motion event once pen is pressed... See T43367.
*/
if (xtablet.StylusDevice) {
DeviceMotionNotify(xtablet.StylusDevice, xtablet.MotionEvent, ev);
if (ev) xevents[dcount++] = ev;
- DeviceButton1Motion(xtablet.StylusDevice, xtablet.MotionEvent, ev);
+ DeviceButtonPress(xtablet.StylusDevice, xtablet.PressEvent, ev);
if (ev) xevents[dcount++] = ev;
ProximityIn(xtablet.StylusDevice, xtablet.ProxInEvent, ev);
if (ev) xevents[dcount++] = ev;
@@ -589,13 +589,13 @@ void GHOST_WindowX11::initXInputDevices()
if (ev) xevents[dcount++] = ev;
}
if (xtablet.EraserDevice) {
- DeviceMotionNotify(xtablet.EraserDevice, xtablet.MotionEvent, ev);
+ DeviceMotionNotify(xtablet.EraserDevice, xtablet.MotionEventEraser, ev);
if (ev) xevents[dcount++] = ev;
- DeviceButton1Motion(xtablet.EraserDevice, xtablet.MotionEvent, ev);
+ DeviceButtonPress(xtablet.EraserDevice, xtablet.PressEventEraser, ev);
if (ev) xevents[dcount++] = ev;
- ProximityIn(xtablet.EraserDevice, xtablet.ProxInEvent, ev);
+ ProximityIn(xtablet.EraserDevice, xtablet.ProxInEventEraser, ev);
if (ev) xevents[dcount++] = ev;
- ProximityOut(xtablet.EraserDevice, xtablet.ProxOutEvent, ev);
+ ProximityOut(xtablet.EraserDevice, xtablet.ProxOutEventEraser, ev);
if (ev) xevents[dcount++] = ev;
}