summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@digia.com>2013-04-29 20:26:25 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-05-07 22:43:14 +0200
commita2a8a9ea0159cc6239737de2d745129f01c94d37 (patch)
tree2803fcfeb60e616e817aa422e3b1a6982c0cac3b /src
parent43578e1901ab56e6df3e58db21e3e52a28cd9eae (diff)
Make access to xkbcommon_workaround.h more generic
It makes more sense to keep this workaround header together with the other libxkbcommon files for a better access point since it's used by several *.pro files. Change-Id: I63d4eb58f6e7f3852834e41c4b6e058a2c962233 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/xkbcommon/xkbcommon/xkbcommon_workaround.h (renamed from src/plugins/platforminputcontexts/compose/xkbcommon_workaround.h)0
-rw-r--r--src/plugins/platforminputcontexts/compose/compose.pro5
-rw-r--r--src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp7
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.cpp22
-rw-r--r--src/plugins/platforms/xcb/xcb-plugin.pro4
5 files changed, 36 insertions, 2 deletions
diff --git a/src/plugins/platforminputcontexts/compose/xkbcommon_workaround.h b/src/3rdparty/xkbcommon/xkbcommon/xkbcommon_workaround.h
index 58ce143978..58ce143978 100644
--- a/src/plugins/platforminputcontexts/compose/xkbcommon_workaround.h
+++ b/src/3rdparty/xkbcommon/xkbcommon/xkbcommon_workaround.h
diff --git a/src/plugins/platforminputcontexts/compose/compose.pro b/src/plugins/platforminputcontexts/compose/compose.pro
index 1bfd46ebca..2490a4ffbe 100644
--- a/src/plugins/platforminputcontexts/compose/compose.pro
+++ b/src/plugins/platforminputcontexts/compose/compose.pro
@@ -15,7 +15,6 @@ SOURCES += $$PWD/main.cpp \
HEADERS += $$PWD/qcomposeplatforminputcontext.h \
$$PWD/generator/qtablegenerator.h \
- $$PWD/xkbcommon_workaround.h \
# libxkbcommon
contains(QT_CONFIG, xkbcommon-qt): {
@@ -23,6 +22,10 @@ contains(QT_CONFIG, xkbcommon-qt): {
} else {
LIBS += $$QMAKE_LIBS_XKBCOMMON
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
+ equals(QMAKE_VERSION_XKBCOMMON, "0.2.0") {
+ DEFINES += XKBCOMMON_0_2_0
+ INCLUDEPATH += ../../../3rdparty/xkbcommon/xkbcommon/
+ }
}
OTHER_FILES += $$PWD/compose.json
diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
index 400f7aece8..f746207cc0 100644
--- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
+++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
@@ -49,7 +49,10 @@
#include <QtCore/QString>
#include <xkbcommon/xkbcommon.h>
+
+#ifdef XKBCOMMON_0_2_0
#include <xkbcommon_workaround.h>
+#endif
//#define DEBUG_GENERATOR
@@ -258,6 +261,7 @@ ushort TableGenerator::keysymToUtf8(quint32 sym)
int bytes;
chars.resize(8);
+#ifdef XKBCOMMON_0_2_0
if (needWorkaround(sym)) {
quint32 codepoint;
if (sym == XKB_KEY_KP_Space)
@@ -269,6 +273,9 @@ ushort TableGenerator::keysymToUtf8(quint32 sym)
} else {
bytes = xkb_keysym_to_utf8(sym, chars.data(), chars.size());
}
+#else
+ bytes = xkb_keysym_to_utf8(sym, chars.data(), chars.size());
+#endif
if (bytes == -1)
qWarning("TableGenerator::keysymToUtf8 - buffer too small");
diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
index f1b26853a1..18270d3cd5 100644
--- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
@@ -53,6 +53,10 @@
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformcursor.h>
+#ifdef XKBCOMMON_0_2_0
+#include <xkbcommon_workaround.h>
+#endif
+
#ifndef XK_ISO_Left_Tab
#define XK_ISO_Left_Tab 0xFE20
#endif
@@ -1311,7 +1315,23 @@ QString QXcbKeyboard::keysymToUnicode(xcb_keysym_t sym) const
int bytes;
chars.resize(7);
- if ((bytes = xkb_keysym_to_utf8(sym, chars.data(), chars.size())) == -1)
+#ifdef XKBCOMMON_0_2_0
+ if (needWorkaround(sym)) {
+ quint32 codepoint;
+ if (sym == XKB_KEY_KP_Space)
+ codepoint = XKB_KEY_space & 0x7f;
+ else
+ codepoint = sym & 0x7f;
+
+ bytes = utf32_to_utf8(codepoint, chars.data());
+ } else {
+ bytes = xkb_keysym_to_utf8(sym, chars.data(), chars.size());
+ }
+#else
+ bytes = xkb_keysym_to_utf8(sym, chars.data(), chars.size());
+#endif
+
+ if (bytes == -1)
qWarning("QXcbKeyboard::handleKeyEvent - buffer too small");
chars.resize(bytes-1);
diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro
index e8d52ebf2f..f01fa90e2d 100644
--- a/src/plugins/platforms/xcb/xcb-plugin.pro
+++ b/src/plugins/platforms/xcb/xcb-plugin.pro
@@ -124,4 +124,8 @@ contains(QT_CONFIG, xkbcommon-qt): {
} else {
LIBS += $$QMAKE_LIBS_XKBCOMMON
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
+ equals(QMAKE_VERSION_XKBCOMMON, "0.2.0") {
+ DEFINES += XKBCOMMON_0_2_0
+ INCLUDEPATH += ../../../3rdparty/xkbcommon/xkbcommon/
+ }
}