[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra/krita-testing-kazakov] krita/ui/input/wintab: Fix a crash with newer evdev driver
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2014-08-15 13:06:00
Message-ID: E1XIHCi-0007kK-4H () scm ! kde ! org
[Download RAW message or body]

Git commit 86b1ee3185cb44ecbfb9fb2e23c083d06c465613 by Dmitry Kazakov.
Committed on 13/08/2014 at 09:52.
Pushed by dkazakov into branch 'krita-testing-kazakov'.

Fix a crash with newer evdev driver

New evdev driver (Mint 17) has more axes than expected

Axis Labels (269): "Abs X" (370), "Abs Y" (371), "Abs Wheel" (375), "Abs Pressure" \
(372), "Abs Tilt X" (373), "Abs Tilt Y" (374), "Abs Misc" (389), "Rel Vert Wheel" \
(261)

So we should handle that correctly.

M  +5    -7    krita/ui/input/wintab/kis_tablet_support.h
M  +1    -1    krita/ui/input/wintab/kis_tablet_support_x11.cpp

http://commits.kde.org/calligra/86b1ee3185cb44ecbfb9fb2e23c083d06c465613

diff --git a/krita/ui/input/wintab/kis_tablet_support.h \
b/krita/ui/input/wintab/kis_tablet_support.h index e7b00e5..fcb0548 100644
--- a/krita/ui/input/wintab/kis_tablet_support.h
+++ b/krita/ui/input/wintab/kis_tablet_support.h
@@ -116,18 +116,16 @@ struct QTabletDeviceData
         SavedAxesData()
         {
             for (int i = 0; i < NAxes; i++) {
-                m_x11_to_local_axis_mapping[i] = i;
+                m_x11_to_local_axis_mapping.append((AxesIndexes)i);
             }
         }
 
         void tryFetchAxesMapping(XDevice *dev);
 
         void setAxesMap(const QVector<AxesIndexes> &axesMap) {
-            KIS_ASSERT_RECOVER_RETURN(axesMap.size() == NAxes);
+            KIS_ASSERT_RECOVER_RETURN(axesMap.size() >= NAxes);
 
-            for (int i = 0; i < NAxes; i++) {
-                m_x11_to_local_axis_mapping[i] = axesMap[i];
-            }
+            m_x11_to_local_axis_mapping = axesMap;
         }
 
         inline QPointF position(const QTabletDeviceData *tablet, const QRect \
&screenArea) const { @@ -152,7 +150,7 @@ struct QTabletDeviceData
             return m_axis_data[Rotation];
         }
 
-        bool updateAxesData(int firstAxis, int axesCount, const int axes[NAxes]) {
+        bool updateAxesData(int firstAxis, int axesCount, const int *axes) {
             for (int srcIt = 0, dstIt = firstAxis;
                  srcIt < axesCount;
                  srcIt++, dstIt++) {
@@ -164,7 +162,7 @@ struct QTabletDeviceData
         }
     private:
         int m_axis_data[NAxes];
-        int m_x11_to_local_axis_mapping[NAxes];
+        QVector<AxesIndexes> m_x11_to_local_axis_mapping;
         int m_lastSaneAxis;
     };
 
diff --git a/krita/ui/input/wintab/kis_tablet_support_x11.cpp \
b/krita/ui/input/wintab/kis_tablet_support_x11.cpp index 67a2901..4e0a907 100644
--- a/krita/ui/input/wintab/kis_tablet_support_x11.cpp
+++ b/krita/ui/input/wintab/kis_tablet_support_x11.cpp
@@ -187,7 +187,7 @@ void \
QTabletDeviceData::SavedAxesData::tryFetchAxesMapping(XDevice *dev)  qDebug() << "# \
Building tablet axes remapping table:";  }
 
-        QVector<AxesIndexes> axesMap(NAxes, Unused);
+        QVector<AxesIndexes> axesMap(nitems, Unused);
 
         for (unsigned int axisIndex = 0; axisIndex < nitems; axisIndex++) {
             Atom currentAxisName = ((Atom*)prop)[axisIndex];


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic