[packages/keepassx] rm git.patch

sls sls at pld-linux.org
Sat Jan 16 23:46:15 CET 2016


commit 4a61f3a843e635e99823c7496e6cbdd1c32c7bd8
Author: Szymon Siwek <sls at pld-linux.org>
Date:   Sat Jan 16 22:53:00 2016 +0100

    rm git.patch

 git.patch     | 12483 --------------------------------------------------------
 keepassx.spec |     2 -
 2 files changed, 12485 deletions(-)
---
diff --git a/keepassx.spec b/keepassx.spec
index fe4665e..cb19ccd 100644
--- a/keepassx.spec
+++ b/keepassx.spec
@@ -8,7 +8,6 @@ Group:		X11/Applications
 #Source0:	http://downloads.sourceforge.net/keepassx/keepassx-%{version}.tar.gz
 Source0:	http://www.keepassx.org/releases/2.0/keepassx-%{version}.tar.gz
 # Source0-md5:	ded7db880d07cd1e5f7bd5bf3cc8c0f4
-Patch0:		git.patch
 URL:		http://keepassx.sourceforge.net/
 BuildRequires:	Qt5Concurrent-devel >= 5.2.0
 BuildRequires:	Qt5Core-devel >= 5.2.0
@@ -53,7 +52,6 @@ szyfrowania jakie są do tej pory znane (AES i TwoFish).
 
 %prep
 %setup -q
-%patch0 -p1
 
 %build
 install -d build
diff --git a/git.patch b/git.patch
deleted file mode 100644
index 30b09e4..0000000
--- a/git.patch
+++ /dev/null
@@ -1,12483 +0,0 @@
-diff -urN -x .git -x .tx keepassx-2.0-beta2/CMakeLists.txt keepassx/CMakeLists.txt
---- keepassx-2.0-beta2/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/CMakeLists.txt	2015-10-11 10:44:51.877209219 +0200
-@@ -21,7 +21,7 @@
- 
- project(KeePassX)
- 
--cmake_minimum_required(VERSION 2.6.4)
-+cmake_minimum_required(VERSION 2.8.12)
- 
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
- 
-@@ -31,8 +31,6 @@
- 
- option(WITH_TESTS "Enable building of unit tests" ON)
- option(WITH_GUI_TESTS "Enable building of GUI tests" OFF)
--option(WITH_LTO "Enable Link Time Optimization (LTO)" OFF)
--option(WITH_CXX11 "Build with the C++ 11 standard" ON)
- 
- set(KEEPASSX_VERSION "2.0 beta 2")
- set(KEEPASSX_VERSION_NUM "1.9.92")
-@@ -62,7 +60,7 @@
-   add_gcc_compiler_cflags("${FLAGS}")
- endmacro(add_gcc_compiler_flags)
- 
--add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_NO_STL -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
-+add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
- 
- add_gcc_compiler_flags("-fno-common -fstack-protector --param=ssp-buffer-size=4")
- add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long")
-@@ -101,30 +99,14 @@
-   set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro")
- endif()
- 
--if(WITH_LTO)
--  if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
--    check_cxx_compiler_flag("-flto -fuse-linker-plugin" LTO_AVAILABLE)
--
--    if(LTO_AVAILABLE)
--      add_gcc_compiler_flags("-flto -fuse-linker-plugin")
--    else()
--      message(FATAL_ERROR "This version of gcc doesn't support LTO")
--    endif(LTO_AVAILABLE)
--  else()
--    message(FATAL_ERROR "LTO is only supported with gcc")
--  endif()
--endif()
-+add_gcc_compiler_cxxflags("-std=c++11")
- 
--if (WITH_CXX11)
--  add_gcc_compiler_cxxflags("-std=c++0x")
--  add_gcc_compiler_cflags("-ansi")
--  if(APPLE)
--    add_gcc_compiler_cxxflags("-stdlib=libc++")
--  endif()
--else()
--  add_gcc_compiler_flags("-ansi")
-+if(APPLE)
-+  add_gcc_compiler_cxxflags("-stdlib=libc++")
- endif()
- 
-+add_gcc_compiler_cflags("-ansi")
-+
- if(MINGW)
-   set(CMAKE_RC_COMPILER_INIT windres)
-   enable_language(RC)
-@@ -161,19 +143,18 @@
-   enable_testing()
- endif(WITH_TESTS)
- 
--set(QT_REQUIRED_MODULES QtCore QtGui QtTest)
-+find_package(Qt5Core          5.2 REQUIRED)
-+find_package(Qt5Concurrent    5.2 REQUIRED)
-+find_package(Qt5Widgets       5.2 REQUIRED)
-+find_package(Qt5Test          5.2 REQUIRED)
-+find_package(Qt5LinguistTools 5.2 REQUIRED)
-+set(CMAKE_AUTOMOC ON)
- 
--find_package(Qt4 4.6.0 REQUIRED ${QT_REQUIRED_MODULES})
--include(${QT_USE_FILE})
- # Debian sets the the build type to None for package builds.
- # Make sure we don't enable asserts there.
- set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
- 
--find_package(Gcrypt REQUIRED)
--if(NOT (${GCRYPT_VERSION_STRING} VERSION_LESS "1.6.0"))
--  message(STATUS "Gcrypt ${GCRYPT_VERSION_STRING} supports the SALSA20 cipher")
--  set(GCRYPT_HAS_SALSA20 1)
--endif()
-+find_package(Gcrypt 1.6.0 REQUIRED)
- 
- find_package(ZLIB REQUIRED)
- 
-@@ -214,10 +195,7 @@
- 
- include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
- 
--if(NOT (${CMAKE_VERSION} VERSION_LESS 2.8.3))
--  set(PRINT_SUMMARY ON)
--  include(FeatureSummary)
--endif()
-+include(FeatureSummary)
- 
- add_subdirectory(src)
- add_subdirectory(share)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/README.md keepassx/README.md
---- keepassx-2.0-beta2/README.md	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/README.md	2015-10-11 10:44:51.877209219 +0200
-@@ -49,20 +49,20 @@
- The following tools must exist within your PATH:
- 
- * make
--* cmake (>= 2.6.4)
--* g++ or clang++
-+* cmake (>= 2.8.12)
-+* g++ (>= 4.7) or clang++ (>= 3.0)
- 
- The following libraries are required:
- 
--* Qt 4 (>= 4.6)
--* libgcrypt
-+* Qt 5 (>= 5.2): qtbase and qttools5
-+* libgcrypt (>= 1.6)
- * zlib
--* libxtst (optional for auto-type on X11)
-+* libxtst, qtx11extras (optional for auto-type on X11)
- 
- On Debian you can install them with:
- 
- ```bash
--sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev
-+sudo apt-get install build-essential cmake qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev
- ```
- 
- #### Build Steps
-diff -urN -x .git -x .tx keepassx-2.0-beta2/share/translations/CMakeLists.txt keepassx/share/translations/CMakeLists.txt
---- keepassx-2.0-beta2/share/translations/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/share/translations/CMakeLists.txt	2015-10-11 10:44:51.877209219 +0200
-@@ -17,9 +17,9 @@
- get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE)
- list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts)
- list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS})
--message(STATUS ${TRANSLATION_FILES})
-+message(STATUS "${TRANSLATION_FILES}")
- 
--qt4_add_translation(QM_FILES ${TRANSLATION_FILES})
-+qt5_add_translation(QM_FILES ${TRANSLATION_FILES})
- 
- install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations)
- add_custom_target(translations DEPENDS ${QM_FILES})
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/AutoType.cpp keepassx/src/autotype/AutoType.cpp
---- keepassx-2.0-beta2/src/autotype/AutoType.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/AutoType.cpp	2015-10-11 10:44:51.877209219 +0200
-@@ -32,7 +32,7 @@
- #include "core/Tools.h"
- #include "gui/MessageBox.h"
- 
--AutoType* AutoType::m_instance = Q_NULLPTR;
-+AutoType* AutoType::m_instance = nullptr;
- 
- AutoType::AutoType(QObject* parent, bool test)
-     : QObject(parent)
-@@ -40,8 +40,8 @@
-     , m_currentGlobalKey(static_cast<Qt::Key>(0))
-     , m_currentGlobalModifiers(0)
-     , m_pluginLoader(new QPluginLoader(this))
--    , m_plugin(Q_NULLPTR)
--    , m_executor(Q_NULLPTR)
-+    , m_plugin(nullptr)
-+    , m_executor(nullptr)
-     , m_windowFromGlobal(0)
- {
-     // prevent crash when the plugin has unresolved symbols
-@@ -49,7 +49,7 @@
- 
-     QString pluginName = "keepassx-autotype-";
-     if (!test) {
--        pluginName += Tools::platform();
-+        pluginName += QApplication::platformName();
-     }
-     else {
-         pluginName += "test";
-@@ -68,7 +68,7 @@
- {
-     if (m_executor) {
-         delete m_executor;
--        m_executor = Q_NULLPTR;
-+        m_executor = nullptr;
-     }
- }
- 
-@@ -195,11 +195,11 @@
-         QString message = tr("Couldn't find an entry that matches the window title:");
-         message.append("\n\n");
-         message.append(windowTitle);
--        MessageBox::information(Q_NULLPTR, tr("Auto-Type - KeePassX"), message);
-+        MessageBox::information(nullptr, tr("Auto-Type - KeePassX"), message);
-     }
-     else if ((entryList.size() == 1) && !config()->get("security/autotypeask").toBool()) {
-         m_inAutoType = false;
--        performAutoType(entryList.first(), Q_NULLPTR, sequenceHash[entryList.first()]);
-+        performAutoType(entryList.first(), nullptr, sequenceHash[entryList.first()]);
-     }
-     else {
-         m_windowFromGlobal = m_plugin->activeWindow();
-@@ -218,8 +218,10 @@
- {
-     Q_ASSERT(m_inAutoType);
- 
-+    m_plugin->raiseWindow(m_windowFromGlobal);
-+
-     m_inAutoType = false;
--    performAutoType(entry, Q_NULLPTR, sequence, m_windowFromGlobal);
-+    performAutoType(entry, nullptr, sequence, m_windowFromGlobal);
- }
- 
- void AutoType::resetInAutoType()
-@@ -233,12 +235,12 @@
- {
-     if (m_executor) {
-         delete m_executor;
--        m_executor = Q_NULLPTR;
-+        m_executor = nullptr;
-     }
- 
-     if (m_plugin) {
-         m_plugin->unload();
--        m_plugin = Q_NULLPTR;
-+        m_plugin = nullptr;
-     }
- }
- 
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/AutoType.h keepassx/src/autotype/AutoType.h
---- keepassx-2.0-beta2/src/autotype/AutoType.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/AutoType.h	2015-10-11 10:44:51.877209219 +0200
-@@ -22,8 +22,6 @@
- #include <QStringList>
- #include <QWidget>
- 
--#include "core/Global.h"
--
- class AutoTypeAction;
- class AutoTypeExecutor;
- class AutoTypePlatformInterface;
-@@ -37,7 +35,7 @@
- 
- public:
-     QStringList windowTitles();
--    void performAutoType(const Entry* entry, QWidget* hideWindow = Q_NULLPTR,
-+    void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr,
-                          const QString& customSequence = QString(), WId window = 0);
-     bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
-     void unregisterGlobalShortcut();
-@@ -62,7 +60,7 @@
-     void unloadPlugin();
- 
- private:
--    explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false);
-+    explicit AutoType(QObject* parent = nullptr, bool test = false);
-     ~AutoType();
-     void loadPlugin(const QString& pluginPath);
-     bool parseActions(const QString& sequence, const Entry* entry, QList<AutoTypeAction*>& actions);
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/AutoTypePlatformPlugin.h keepassx/src/autotype/AutoTypePlatformPlugin.h
---- keepassx-2.0-beta2/src/autotype/AutoTypePlatformPlugin.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/AutoTypePlatformPlugin.h	2015-10-11 10:44:51.877209219 +0200
-@@ -33,6 +33,7 @@
-     virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0;
-     virtual int platformEventFilter(void* event) = 0;
-     virtual int initialTimeout() = 0;
-+    virtual bool raiseWindow(WId window) = 0;
-     virtual void unload() {}
- 
-     virtual AutoTypeExecutor* createExecutor() = 0;
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/AutoTypeSelectDialog.h keepassx/src/autotype/AutoTypeSelectDialog.h
---- keepassx-2.0-beta2/src/autotype/AutoTypeSelectDialog.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/AutoTypeSelectDialog.h	2015-10-11 10:44:51.877209219 +0200
-@@ -22,8 +22,6 @@
- #include <QDialog>
- #include <QHash>
- 
--#include "core/Global.h"
--
- class AutoTypeSelectView;
- class Entry;
- 
-@@ -32,7 +30,7 @@
-     Q_OBJECT
- 
- public:
--    explicit AutoTypeSelectDialog(QWidget* parent = Q_NULLPTR);
-+    explicit AutoTypeSelectDialog(QWidget* parent = nullptr);
-     void setEntries(const QList<Entry*>& entries, const QHash<Entry*, QString>& sequences);
- 
- Q_SIGNALS:
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/AutoTypeSelectView.h keepassx/src/autotype/AutoTypeSelectView.h
---- keepassx-2.0-beta2/src/autotype/AutoTypeSelectView.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/AutoTypeSelectView.h	2015-10-11 10:44:51.877209219 +0200
-@@ -18,7 +18,6 @@
- #ifndef KEEPASSX_AUTOTYPESELECTVIEW_H
- #define KEEPASSX_AUTOTYPESELECTVIEW_H
- 
--#include "core/Global.h"
- #include "gui/entry/EntryView.h"
- 
- class Entry;
-@@ -28,10 +27,10 @@
-     Q_OBJECT
- 
- public:
--    explicit AutoTypeSelectView(QWidget* parent = Q_NULLPTR);
-+    explicit AutoTypeSelectView(QWidget* parent = nullptr);
- 
- protected:
--    void mouseMoveEvent(QMouseEvent* event) Q_DECL_OVERRIDE;
-+    void mouseMoveEvent(QMouseEvent* event) override;
- 
- private Q_SLOTS:
-     void selectFirstEntry();
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/CMakeLists.txt keepassx/src/autotype/CMakeLists.txt
---- keepassx-2.0-beta2/src/autotype/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/CMakeLists.txt	2015-10-11 10:44:51.877209219 +0200
-@@ -1,11 +1,12 @@
--if(Q_WS_X11)
-+if(UNIX AND NOT APPLE)
-   find_package(X11)
--  if(PRINT_SUMMARY)
--    add_feature_info(libXtest X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type")
--  endif()
-+  find_package(Qt5X11Extras 5.2)
-+  add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type")
-+  add_feature_info(libXtest X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type")
-+  add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type")
- 
--  if(X11_FOUND AND X11_XTest_FOUND)
--    add_subdirectory(x11)
-+  if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND)
-+    add_subdirectory(xcb)
-   endif()
- endif()
- 
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/ShortcutWidget.h keepassx/src/autotype/ShortcutWidget.h
---- keepassx-2.0-beta2/src/autotype/ShortcutWidget.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/ShortcutWidget.h	2015-10-11 10:44:51.880542689 +0200
-@@ -20,21 +20,19 @@
- 
- #include <QLineEdit>
- 
--#include "core/Global.h"
--
- class ShortcutWidget : public QLineEdit
- {
-     Q_OBJECT
- 
- public:
--    explicit ShortcutWidget(QWidget* parent = Q_NULLPTR);
-+    explicit ShortcutWidget(QWidget* parent = nullptr);
-     Qt::Key key() const;
-     Qt::KeyboardModifiers modifiers() const;
-     void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
- 
- protected:
--    void keyPressEvent(QKeyEvent* event) Q_DECL_OVERRIDE;
--    void keyReleaseEvent(QKeyEvent* event) Q_DECL_OVERRIDE;
-+    void keyPressEvent(QKeyEvent* event) override;
-+    void keyReleaseEvent(QKeyEvent* event) override;
- 
- private:
-     void keyEvent(QKeyEvent* event);
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/test/AutoTypeTest.cpp keepassx/src/autotype/test/AutoTypeTest.cpp
---- keepassx-2.0-beta2/src/autotype/test/AutoTypeTest.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/test/AutoTypeTest.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -103,6 +103,13 @@
-     return 0;
- }
- 
-+bool AutoTypePlatformTest::raiseWindow(WId window)
-+{
-+    Q_UNUSED(window);
-+
-+    return false;
-+}
-+
- AutoTypeExecturorTest::AutoTypeExecturorTest(AutoTypePlatformTest* platform)
-     : m_platform(platform)
- {
-@@ -117,5 +124,3 @@
- {
-     m_platform->addActionKey(action);
- }
--
--Q_EXPORT_PLUGIN2(keepassx-autotype-test, AutoTypePlatformTest)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/test/AutoTypeTest.h keepassx/src/autotype/test/AutoTypeTest.h
---- keepassx-2.0-beta2/src/autotype/test/AutoTypeTest.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/test/AutoTypeTest.h	2015-10-11 10:44:51.880542689 +0200
-@@ -23,32 +23,33 @@
- #include "autotype/AutoTypePlatformPlugin.h"
- #include "autotype/AutoTypeAction.h"
- #include "autotype/test/AutoTypeTestInterface.h"
--#include "core/Global.h"
- 
- class AutoTypePlatformTest : public QObject,
-                              public AutoTypePlatformInterface,
-                              public AutoTypeTestInterface
- {
-     Q_OBJECT
-+    Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformInterface")
-     Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface)
- 
- public:
--    QString keyToString(Qt::Key key);
-+    QString keyToString(Qt::Key key) Q_DECL_OVERRIDE;
- 
--    QStringList windowTitles();
--    WId activeWindow();
--    QString activeWindowTitle();
--    bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
--    void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
--    int platformEventFilter(void* event);
--    int initialTimeout();
--    AutoTypeExecutor* createExecutor();
--
--    void setActiveWindowTitle(const QString& title);
--
--    QString actionChars();
--    int actionCount();
--    void clearActions();
-+    QStringList windowTitles() Q_DECL_OVERRIDE;
-+    WId activeWindow() Q_DECL_OVERRIDE;
-+    QString activeWindowTitle() Q_DECL_OVERRIDE;
-+    bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
-+    void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
-+    int platformEventFilter(void* event) Q_DECL_OVERRIDE;
-+    int initialTimeout() Q_DECL_OVERRIDE;
-+    bool raiseWindow(WId window) Q_DECL_OVERRIDE;
-+    AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE;
-+
-+    void setActiveWindowTitle(const QString& title) Q_DECL_OVERRIDE;
-+
-+    QString actionChars() Q_DECL_OVERRIDE;
-+    int actionCount() Q_DECL_OVERRIDE;
-+    void clearActions() Q_DECL_OVERRIDE;
- 
-     void addActionChar(AutoTypeChar* action);
-     void addActionKey(AutoTypeKey* action);
-@@ -67,8 +68,8 @@
- public:
-     explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform);
- 
--    void execChar(AutoTypeChar* action);
--    void execKey(AutoTypeKey* action);
-+    void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE;
-+    void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE;
- 
- private:
-     AutoTypePlatformTest* const m_platform;
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/test/CMakeLists.txt keepassx/src/autotype/test/CMakeLists.txt
---- keepassx-2.0-beta2/src/autotype/test/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/test/CMakeLists.txt	2015-10-11 10:44:51.880542689 +0200
-@@ -2,11 +2,5 @@
-     AutoTypeTest.cpp
- )
- 
--set(autotype_test_MOC
--    AutoTypeTest.h
--)
--
--qt4_wrap_cpp(autotype_test_SOURCES ${autotype_test_MOC})
--
- add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES})
--target_link_libraries(keepassx-autotype-test testautotype ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
-+target_link_libraries(keepassx-autotype-test testautotype Qt5::Core Qt5::Widgets)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/WindowSelectComboBox.h keepassx/src/autotype/WindowSelectComboBox.h
---- keepassx-2.0-beta2/src/autotype/WindowSelectComboBox.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/WindowSelectComboBox.h	2015-10-11 10:44:51.880542689 +0200
-@@ -20,19 +20,17 @@
- 
- #include <QComboBox>
- 
--#include "core/Global.h"
--
- class WindowSelectComboBox : public QComboBox
- {
-     Q_OBJECT
- 
- public:
--    explicit WindowSelectComboBox(QWidget* parent = Q_NULLPTR);
-+    explicit WindowSelectComboBox(QWidget* parent = nullptr);
-     void refreshWindowList();
- 
--    void showPopup() Q_DECL_OVERRIDE;
--    QSize sizeHint() const Q_DECL_OVERRIDE;
--    QSize minimumSizeHint() const Q_DECL_OVERRIDE;
-+    void showPopup() override;
-+    QSize sizeHint() const override;
-+    QSize minimumSizeHint() const override;
- };
- 
- #endif // KEEPASSX_WINDOWSELECTCOMBOBOX_H
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/x11/AutoTypeX11.cpp keepassx/src/autotype/x11/AutoTypeX11.cpp
---- keepassx-2.0-beta2/src/autotype/x11/AutoTypeX11.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/x11/AutoTypeX11.cpp	1970-01-01 01:00:00.000000000 +0100
-@@ -1,773 +0,0 @@
--/*
-- *  Copyright (C) 2012 Felix Geyer <debfx at fobos.de>
-- *  Copyright (C) 2000-2008 Tom Sato <VEF00200 at nifty.ne.jp>
-- *
-- *  This program is free software: you can redistribute it and/or modify
-- *  it under the terms of the GNU General Public License as published by
-- *  the Free Software Foundation, either version 2 or (at your option)
-- *  version 3 of the License.
-- *
-- *  This program is distributed in the hope that it will be useful,
-- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- *  GNU General Public License for more details.
-- *
-- *  You should have received a copy of the GNU General Public License
-- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-- */
--
--#include "AutoTypeX11.h"
--#include "KeySymMap.h"
--
--#include <time.h>
--
--bool AutoTypePlatformX11::m_catchXErrors = false;
--bool AutoTypePlatformX11::m_xErrorOccured = false;
--int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = Q_NULLPTR;
--
--AutoTypePlatformX11::AutoTypePlatformX11()
--{
--    m_dpy = QX11Info::display();
--    m_rootWindow = QX11Info::appRootWindow();
--
--    m_atomWmState = XInternAtom(m_dpy, "WM_STATE", true);
--    m_atomWmName = XInternAtom(m_dpy, "WM_NAME", true);
--    m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", true);
--    m_atomString = XInternAtom(m_dpy, "STRING", true);
--    m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", true);
--
--    m_classBlacklist << "desktop_window" << "gnome-panel"; // Gnome
--    m_classBlacklist << "kdesktop" << "kicker"; // KDE 3
--    m_classBlacklist << "Plasma"; // KDE 4
--    m_classBlacklist << "plasmashell"; // KDE 5
--    m_classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4
--
--    m_currentGlobalKey = static_cast<Qt::Key>(0);
--    m_currentGlobalModifiers = 0;
--
--    m_keysymTable = Q_NULLPTR;
--    m_xkb = Q_NULLPTR;
--    m_remapKeycode = 0;
--    m_currentRemapKeysym = NoSymbol;
--    m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask;
--
--    m_loaded = true;
--
--    updateKeymap();
--}
--
--void AutoTypePlatformX11::unload()
--{
--    // Restore the KeyboardMapping to its original state.
--    if (m_currentRemapKeysym != NoSymbol) {
--        AddKeysym(NoSymbol);
--    }
--
--    if (m_keysymTable) {
--        XFree(m_keysymTable);
--    }
--
--    if (m_xkb) {
--        XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
--    }
--
--    m_loaded = false;
--}
--
--QStringList AutoTypePlatformX11::windowTitles()
--{
--    return windowTitlesRecursive(m_rootWindow);
--}
--
--WId AutoTypePlatformX11::activeWindow()
--{
--    Window window;
--    int revert_to_return;
--    XGetInputFocus(m_dpy, &window, &revert_to_return);
--
--    int tree;
--    do {
--        if (isTopLevelWindow(window)) {
--            break;
--        }
--
--        Window root;
--        Window parent;
--        Window* children = Q_NULLPTR;
--        unsigned int numChildren;
--        tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren);
--        window = parent;
--        if (children) {
--            XFree(children);
--        }
--    } while (tree && window);
--
--    return window;
--}
--
--QString AutoTypePlatformX11::activeWindowTitle()
--{
--    return windowTitle(activeWindow(), true);
--}
--
--bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
--{
--    int keycode = XKeysymToKeycode(m_dpy, charToKeySym(key));
--    uint nativeModifiers = qtToNativeModifiers(modifiers);
--
--    startCatchXErrors();
--    XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, true, GrabModeAsync, GrabModeAsync);
--    XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, true, GrabModeAsync,
--             GrabModeAsync);
--    XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, true, GrabModeAsync,
--             GrabModeAsync);
--    XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, true,
--             GrabModeAsync, GrabModeAsync);
--    stopCatchXErrors();
--
--    if (!m_xErrorOccured) {
--        m_currentGlobalKey = key;
--        m_currentGlobalModifiers = modifiers;
--        m_currentGlobalKeycode = keycode;
--        m_currentGlobalNativeModifiers = nativeModifiers;
--        return true;
--    }
--    else {
--        unregisterGlobalShortcut(key, modifiers);
--        return false;
--    }
--}
--
--uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers)
--{
--    uint nativeModifiers = 0;
--
--    if (modifiers & Qt::ShiftModifier) {
--        nativeModifiers |= ShiftMask;
--    }
--    if (modifiers & Qt::ControlModifier) {
--        nativeModifiers |= ControlMask;
--    }
--    if (modifiers & Qt::AltModifier) {
--        nativeModifiers |= Mod1Mask;
--    }
--    if (modifiers & Qt::MetaModifier) {
--        nativeModifiers |= Mod4Mask;
--    }
--
--    return nativeModifiers;
--}
--
--void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
--{
--    KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key));
--    uint nativeModifiers = qtToNativeModifiers(modifiers);
--
--    XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow);
--    XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow);
--    XUngrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow);
--    XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow);
--
--    m_currentGlobalKey = static_cast<Qt::Key>(0);
--    m_currentGlobalModifiers = 0;
--    m_currentGlobalKeycode = 0;
--    m_currentGlobalNativeModifiers = 0;
--}
--
--int AutoTypePlatformX11::platformEventFilter(void* event)
--{
--    XEvent* xevent = static_cast<XEvent*>(event);
--
--    if ((xevent->type == KeyPress || xevent->type == KeyRelease)
--            && m_currentGlobalKey
--            && xevent->xkey.keycode == m_currentGlobalKeycode
--            && (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers
--            && !QApplication::focusWidget()
--            && m_loaded) {
--        if (xevent->type == KeyPress) {
--            Q_EMIT globalShortcutTriggered();
--        }
--        return 1;
--    }
--    if (xevent->type == MappingNotify && m_loaded) {
--        XRefreshKeyboardMapping(reinterpret_cast<XMappingEvent*>(xevent));
--        updateKeymap();
--    }
--
--    return -1;
--}
--
--AutoTypeExecutor* AutoTypePlatformX11::createExecutor()
--{
--    return new AutoTypeExecturorX11(this);
--}
--
--QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist)
--{
--    QString title;
--
--    Atom type;
--    int format;
--    unsigned long nitems;
--    unsigned long after;
--    unsigned char* data = Q_NULLPTR;
--
--    // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME
--
--    int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, false, m_atomUtf8String,
--                                    &type, &format, &nitems, &after, &data);
--
--    if ((retVal == 0) && data) {
--        title = QString::fromUtf8(reinterpret_cast<char*>(data));
--    }
--    else {
--        XTextProperty textProp;
--        retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName);
--        if ((retVal != 0) && textProp.value) {
--            char** textList = Q_NULLPTR;
--            int count;
--
--            if (textProp.encoding == m_atomUtf8String) {
--                title = QString::fromUtf8(reinterpret_cast<char*>(textProp.value));
--            }
--            else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0)
--                     && textList && (count > 0)) {
--                title = QString::fromLocal8Bit(textList[0]);
--            }
--            else if (textProp.encoding == m_atomString) {
--                title = QString::fromLocal8Bit(reinterpret_cast<char*>(textProp.value));
--            }
--
--            if (textList) {
--                XFreeStringList(textList);
--            }
--        }
--
--        if (textProp.value) {
--            XFree(textProp.value);
--        }
--    }
--
--    if (data) {
--        XFree(data);
--    }
--
--    if (useBlacklist && !title.isEmpty()) {
--        if (window == m_rootWindow) {
--            return QString();
--        }
--
--        QString className = windowClassName(window);
--        if (m_classBlacklist.contains(className)) {
--            return QString();
--        }
--
--        QList<Window> keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets());
--        if (keepassxWindows.contains(window)) {
--            return QString();
--        }
--    }
--
--    return title;
--}
--
--QString AutoTypePlatformX11::windowClassName(Window window)
--{
--    QString className;
--
--    XClassHint wmClass;
--    wmClass.res_name = Q_NULLPTR;
--    wmClass.res_class = Q_NULLPTR;
--
--    if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) {
--        className = QString::fromLocal8Bit(wmClass.res_name);
--    }
--    if (wmClass.res_name) {
--        XFree(wmClass.res_name);
--    }
--    if (wmClass.res_class) {
--        XFree(wmClass.res_class);
--    }
--
--    return className;
--}
--
--QList<Window> AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widgetList)
--{
--    QList<Window> windows;
--
--    Q_FOREACH (const QWidget* widget, widgetList) {
--        windows.append(widget->effectiveWinId());
--    }
--
--    return windows;
--}
--
--QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window)
--{
--    QStringList titles;
--
--    if (isTopLevelWindow(window)) {
--        QString title = windowTitle(window, true);
--        if (!title.isEmpty()) {
--            titles.append(title);
--        }
--    }
--
--    Window root;
--    Window parent;
--    Window* children = Q_NULLPTR;
--    unsigned int numChildren;
--    if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) {
--        for (uint i = 0; i < numChildren; i++) {
--            titles.append(windowTitlesRecursive(children[i]));
--        }
--    }
--    if (children) {
--        XFree(children);
--    }
--
--    return titles;
--}
--
--bool AutoTypePlatformX11::isTopLevelWindow(Window window)
--{
--    Atom type = None;
--    int format;
--    unsigned long nitems;
--    unsigned long after;
--    unsigned char* data = Q_NULLPTR;
--    int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 0, false, AnyPropertyType, &type, &format,
--                                    &nitems, &after, &data);
--    if (data) {
--        XFree(data);
--    }
--
--    return (retVal == 0) && type;
--}
--
--KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch)
--{
--    ushort unicode = ch.unicode();
--
--    /* first check for Latin-1 characters (1:1 mapping) */
--    if ((unicode >= 0x0020 && unicode <= 0x007e)
--            || (unicode >= 0x00a0 && unicode <= 0x00ff)) {
--        return unicode;
--    }
--
--    /* mapping table generated from keysymdef.h */
--    const uint* match = qBinaryFind(m_unicodeToKeysymKeys,
--                                    m_unicodeToKeysymKeys + m_unicodeToKeysymLen,
--                                    unicode);
--    int index = match - m_unicodeToKeysymKeys;
--    if (index != m_unicodeToKeysymLen) {
--        return m_unicodeToKeysymValues[index];
--    }
--
--    if (unicode >= 0x0100) {
--        return unicode | 0x01000000;
--    }
--
--    return NoSymbol;
--}
--
--KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key)
--{
--    switch (key) {
--    case Qt::Key_Tab:
--        return XK_Tab;
--    case Qt::Key_Enter:
--        return XK_Return;
--    case Qt::Key_Up:
--        return XK_Up;
--    case Qt::Key_Down:
--        return XK_Down;
--    case Qt::Key_Left:
--        return XK_Left;
--    case Qt::Key_Right:
--        return XK_Right;
--    case Qt::Key_Insert:
--        return XK_Insert;
--    case Qt::Key_Delete:
--        return XK_Delete;
--    case Qt::Key_Home:
--        return XK_Home;
--    case Qt::Key_End:
--        return XK_End;
--    case Qt::Key_PageUp:
--        return XK_Page_Up;
--    case Qt::Key_PageDown:
--        return XK_Page_Down;
--    case Qt::Key_Backspace:
--        return XK_BackSpace;
--    case Qt::Key_Pause:
--        return XK_Break;
--    case Qt::Key_CapsLock:
--        return XK_Caps_Lock;
--    case Qt::Key_Escape:
--        return XK_Escape;
--    case Qt::Key_Help:
--        return XK_Help;
--    case Qt::Key_NumLock:
--        return XK_Num_Lock;
--    case Qt::Key_Print:
--        return XK_Print;
--    case Qt::Key_ScrollLock:
--        return XK_Scroll_Lock;
--    default:
--        if (key >= Qt::Key_F1 && key <= Qt::Key_F16) {
--            return XK_F1 + (key - Qt::Key_F1);
--        }
--        else {
--            return NoSymbol;
--        }
--    }
--}
--
--/*
-- * Update the keyboard and modifier mapping.
-- * We need the KeyboardMapping for AddKeysym.
-- * Modifier mapping is required for clearing the modifiers. 
-- */
--void AutoTypePlatformX11::updateKeymap()
--{
--    int keycode, inx;
--    int mod_index, mod_key;
--    XModifierKeymap *modifiers;
--
--    if (m_xkb != NULL) XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
--
--    XDeviceInfo* devices;
--    int num_devices;
--    XID keyboard_id = XkbUseCoreKbd;
--    devices = XListInputDevices(m_dpy, &num_devices);
--
--    for (int i = 0; i < num_devices; i++) {
--        if (QString(devices[i].name) == "Virtual core XTEST keyboard") {
--            keyboard_id = devices[i].id;
--            break;
--        }
--    }
--
--    m_xkb = XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id);
--
--    XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode);
--    if (m_keysymTable != NULL) XFree(m_keysymTable);
--    m_keysymTable = XGetKeyboardMapping(m_dpy,
--            m_minKeycode, m_maxKeycode - m_minKeycode + 1,
--            &m_keysymPerKeycode);
--
--    /* determine the keycode to use for remapped keys */
--    inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode;
--    if (m_remapKeycode == 0 || !isRemapKeycodeValid()) {
--        for (keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) {
--            inx = (keycode - m_minKeycode) * m_keysymPerKeycode;
--            if (m_keysymTable[inx] == NoSymbol) {
--               m_remapKeycode = keycode;
--               m_currentRemapKeysym = NoSymbol;
--               break;
--            }
--        }
--    }
--
--    /* determine the keycode to use for modifiers */
--    modifiers = XGetModifierMapping(m_dpy);
--    for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
--        m_modifier_keycode[mod_index] = 0;
--        for (mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) {
--            keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key];
--            if (keycode) {
--                m_modifier_keycode[mod_index] = keycode;
--                break;
--            }
--        }
--    }
--    XFreeModifiermap(modifiers);
--
--    /* Xlib needs some time until the mapping is distributed to
--       all clients */
--    // TODO: we should probably only sleep while in the middle of typing something
--    timespec ts;
--    ts.tv_sec = 0;
--    ts.tv_nsec = 30 * 1000 * 1000;
--    nanosleep(&ts, Q_NULLPTR);
--}
--
--bool AutoTypePlatformX11::isRemapKeycodeValid()
--{
--    int baseKeycode = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode;
--    for (int i = 0; i < m_keysymPerKeycode; i++) {
--        if (m_keysymTable[baseKeycode + i] == m_currentRemapKeysym) {
--            return true;
--        }
--    }
--
--    return false;
--}
--
--void AutoTypePlatformX11::startCatchXErrors()
--{
--    Q_ASSERT(!m_catchXErrors);
--
--    m_catchXErrors = true;
--    m_xErrorOccured = false;
--    m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler);
--}
--
--void AutoTypePlatformX11::stopCatchXErrors()
--{
--    Q_ASSERT(m_catchXErrors);
--
--    XSync(m_dpy, false);
--    XSetErrorHandler(m_oldXErrorHandler);
--    m_catchXErrors = false;
--}
--
--int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error)
--{
--    Q_UNUSED(display)
--    Q_UNUSED(error)
--
--    if (m_catchXErrors) {
--        m_xErrorOccured = true;
--    }
--
--    return 1;
--}
--
--// --------------------------------------------------------------------------
--// The following code is taken from xvkbd 3.0 and has been slightly modified.
--// --------------------------------------------------------------------------
--
--/*
-- * Insert a specified keysym on the dedicated position in the keymap
-- * table.
-- */
--int AutoTypePlatformX11::AddKeysym(KeySym keysym)
--{
--    if (m_remapKeycode == 0) {
--        return 0;
--    }
--
--    int inx = (m_remapKeycode- m_minKeycode) * m_keysymPerKeycode;
--    m_keysymTable[inx] = keysym;
--    m_currentRemapKeysym = keysym;
--
--    XChangeKeyboardMapping(m_dpy, m_remapKeycode, m_keysymPerKeycode, &m_keysymTable[inx], 1);
--    XFlush(m_dpy);
--    updateKeymap();
--
--    return m_remapKeycode;
--}
--
--/*
-- * Send event to the focused window.
-- * If input focus is specified explicitly, select the window
-- * before send event to the window.
-- */
--void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type)
--{
--    XSync(event->display, FALSE);
--    int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler);
--
--    event->type = event_type;
--    XTestFakeKeyEvent(event->display, event->keycode, event->type == KeyPress, 0);
--    XFlush(event->display);
--
--    XSetErrorHandler(oldHandler);
--}
--
--/*
-- * Send a modifier press/release event for all modifiers
-- * which are set in the mask variable.
-- */
--void AutoTypePlatformX11::SendModifier(XKeyEvent *event, unsigned int mask, int event_type) 
--{
--    int mod_index;
--    for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
--        if (mask & (1 << mod_index)) {
--            event->keycode = m_modifier_keycode[mod_index];
--            SendEvent(event, event_type);
--            if (event_type == KeyPress) 
--                event->state |= (1 << mod_index);
--            else
--                event->state &= (1 << mod_index);
--        }
--    }
--}
--
--/*
-- * Determines the keycode and modifier mask for the given
-- * keysym.
-- */
--int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int *mask)
--{
--    int keycode = XKeysymToKeycode(m_dpy, keysym);
--
--    if (keycode && keysymModifiers(keysym, keycode, mask)) {
--        return keycode;
--    }
--
--    /* no modifier matches => resort to remapping */
--    keycode = AddKeysym(keysym);
--    if (keycode && keysymModifiers(keysym, keycode, mask)) {
--        return keycode;
--    }
--
--    *mask = 0;
--    return 0;
--}
--
--bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int *mask)
--{
--    int shift, mod;
--    unsigned int mods_rtrn;
--
--    /* determine whether there is a combination of the modifiers
--       (Mod1-Mod5) with or without shift which returns keysym */
--    for (shift = 0; shift < 2; shift ++) {
--        for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod ++) {
--            KeySym keysym_rtrn;
--            *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod);
--            XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn);
--            if (keysym_rtrn == keysym) {
--                return true;
--            }
--        }
--    }
--
--    return false;
--}
--
--
--
--/*
-- * Send sequence of KeyPressed/KeyReleased events to the focused
-- * window to simulate keyboard.  If modifiers (shift, control, etc)
-- * are set ON, many events will be sent.
-- */
--void AutoTypePlatformX11::SendKeyPressedEvent(KeySym keysym)
--{
--    Window cur_focus;
--    int revert_to;
--    XKeyEvent event;
--    int keycode;
--
--    if (keysym == NoSymbol) {
--        qWarning("No such key: keysym=0x%lX", keysym);
--        return;
--    }
--
--    XGetInputFocus(m_dpy, &cur_focus, &revert_to);
--
--    event.display = m_dpy;
--    event.window = cur_focus;
--    event.root = m_rootWindow;
--    event.subwindow = None;
--    event.time = CurrentTime;
--    event.x = 1;
--    event.y = 1;
--    event.x_root = 1;
--    event.y_root = 1;
--    event.same_screen = TRUE;
--
--    Window root, child;
--    int root_x, root_y, x, y;
--    unsigned int wanted_mask = 0;
--    unsigned int original_mask;
--
--    XQueryPointer(m_dpy, event.root, &root, &child, &root_x, &root_y, &x, &y, &original_mask);
--
--    /* determine keycode and mask for the given keysym */
--    keycode = GetKeycode(keysym, &wanted_mask);
--    if (keycode < 8 || keycode > 255) {
--        qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym);
--        return;
--    }
--
--    event.state = original_mask;
--
--    // modifiers that need to be pressed but aren't
--    unsigned int press_mask = wanted_mask & ~original_mask;
--
--    // modifiers that are pressed but maybe shouldn't
--    unsigned int release_check_mask = original_mask & ~wanted_mask;
--
--    // modifiers we need to release before sending the keycode
--    unsigned int release_mask = 0;
--
--    // check every release_check_mask individually if it affects the keysym we would generate
--    // if it doesn't we probably don't need to release it
--    for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
--        if (release_check_mask & (1 << mod_index)) {
--            unsigned int mods_rtrn;
--            KeySym keysym_rtrn;
--            XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn);
--
--            if (keysym_rtrn != keysym) {
--                release_mask |= (1 << mod_index);
--            }
--        }
--    }
--
--    // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym
--    unsigned int mods_rtrn;
--    KeySym keysym_rtrn;
--    XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn);
--    if (keysym_rtrn != keysym) {
--        // oh well, release all the modifiers we don't want
--        release_mask = release_check_mask;
--    }
--
--    /* release all modifiers */
--    SendModifier(&event, release_mask, KeyRelease);
--
--    SendModifier(&event, press_mask, KeyPress);
--
--    /* press and release key */
--    event.keycode = keycode;
--    SendEvent(&event, KeyPress);
--    SendEvent(&event, KeyRelease);
--
--    /* release the modifiers */
--    SendModifier(&event, press_mask, KeyRelease);
--
--    /* restore the old keyboard mask */
--    SendModifier(&event, release_mask, KeyPress);
--}
--
--int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event)
--{
--    char msg[200];
--
--    if (event->error_code == BadWindow) {
--        return 0;
--    }
--    XGetErrorText(my_dpy, event->error_code, msg, sizeof(msg) - 1);
--    qWarning("X error trapped: %s, request-code=%d\n", msg, event->request_code);
--    return 0;
--}
--
--
--AutoTypeExecturorX11::AutoTypeExecturorX11(AutoTypePlatformX11* platform)
--    : m_platform(platform)
--{
--}
--
--void AutoTypeExecturorX11::execChar(AutoTypeChar* action)
--{
--    m_platform->SendKeyPressedEvent(m_platform->charToKeySym(action->character));
--}
--
--void AutoTypeExecturorX11::execKey(AutoTypeKey* action)
--{
--    m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(action->key));
--}
--
--int AutoTypePlatformX11::initialTimeout()
--{
--    return 500;
--}
--
--Q_EXPORT_PLUGIN2(keepassx-autotype-x11, AutoTypePlatformX11)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/x11/AutoTypeX11.h keepassx/src/autotype/x11/AutoTypeX11.h
---- keepassx-2.0-beta2/src/autotype/x11/AutoTypeX11.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/x11/AutoTypeX11.h	1970-01-01 01:00:00.000000000 +0100
-@@ -1,130 +0,0 @@
--/*
-- *  Copyright (C) 2012 Felix Geyer <debfx at fobos.de>
-- *  Copyright (C) 2000-2008 Tom Sato <VEF00200 at nifty.ne.jp>
-- *
-- *  This program is free software: you can redistribute it and/or modify
-- *  it under the terms of the GNU General Public License as published by
-- *  the Free Software Foundation, either version 2 or (at your option)
-- *  version 3 of the License.
-- *
-- *  This program is distributed in the hope that it will be useful,
-- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- *  GNU General Public License for more details.
-- *
-- *  You should have received a copy of the GNU General Public License
-- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-- */
--
--#ifndef KEEPASSX_AUTOTYPEX11_H
--#define KEEPASSX_AUTOTYPEX11_H
--
--#include <QApplication>
--#include <QSet>
--#include <QtPlugin>
--#include <QWidget>
--#include <QX11Info>
--
--#include <X11/Xutil.h>
--#include <X11/extensions/XTest.h>
--#include <X11/XKBlib.h>
--
--#include "autotype/AutoTypePlatformPlugin.h"
--#include "autotype/AutoTypeAction.h"
--#include "core/Global.h"
--
--#define N_MOD_INDICES (Mod5MapIndex + 1)
--
--class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface
--{
--    Q_OBJECT
--    Q_INTERFACES(AutoTypePlatformInterface)
--
--public:
--    AutoTypePlatformX11();
--    void unload() Q_DECL_OVERRIDE;
--    QStringList windowTitles();
--    WId activeWindow();
--    QString activeWindowTitle();
--    bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
--    void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
--    int platformEventFilter(void* event);
--    int initialTimeout();
--    AutoTypeExecutor* createExecutor();
--
--    KeySym charToKeySym(const QChar& ch);
--    KeySym keyToKeySym(Qt::Key key);
--
--    void SendKeyPressedEvent(KeySym keysym);
--
--Q_SIGNALS:
--    void globalShortcutTriggered();
--
--private:
--    QString windowTitle(Window window, bool useBlacklist);
--    QStringList windowTitlesRecursive(Window window);
--    QString windowClassName(Window window);
--    QList<Window> widgetsToX11Windows(const QWidgetList& widgetList);
--    bool isTopLevelWindow(Window window);
--    uint qtToNativeModifiers(Qt::KeyboardModifiers modifiers);
--    void startCatchXErrors();
--    void stopCatchXErrors();
--    static int x11ErrorHandler(Display* display, XErrorEvent* error);
--
--    void updateKeymap();
--    bool isRemapKeycodeValid();
--    int AddKeysym(KeySym keysym);
--    void AddModifier(KeySym keysym);
--    void SendEvent(XKeyEvent* event, int event_type);
--    void SendModifier(XKeyEvent *event, unsigned int mask, int event_type);
--    int GetKeycode(KeySym keysym, unsigned int *mask);
--    bool keysymModifiers(KeySym keysym, int keycode, unsigned int *mask);
--
--    static int MyErrorHandler(Display* my_dpy, XErrorEvent* event);
--
--    Display* m_dpy;
--    Window m_rootWindow;
--    Atom m_atomWmState;
--    Atom m_atomWmName;
--    Atom m_atomNetWmName;
--    Atom m_atomString;
--    Atom m_atomUtf8String;
--    QSet<QString> m_classBlacklist;
--    Qt::Key m_currentGlobalKey;
--    Qt::KeyboardModifiers m_currentGlobalModifiers;
--    uint m_currentGlobalKeycode;
--    uint m_currentGlobalNativeModifiers;
--    int m_modifierMask;
--    static bool m_catchXErrors;
--    static bool m_xErrorOccured;
--    static int (*m_oldXErrorHandler)(Display*, XErrorEvent*);
--
--    static const int m_unicodeToKeysymLen;
--    static const uint m_unicodeToKeysymKeys[];
--    static const uint m_unicodeToKeysymValues[];
--
--    XkbDescPtr m_xkb;
--    KeySym* m_keysymTable;
--    int m_minKeycode;
--    int m_maxKeycode;
--    int m_keysymPerKeycode;
--    /* dedicated keycode for remapped keys */
--    unsigned int m_remapKeycode;
--    KeySym m_currentRemapKeysym;
--    KeyCode m_modifier_keycode[N_MOD_INDICES];
--    bool m_loaded;
--};
--
--class AutoTypeExecturorX11 : public AutoTypeExecutor
--{
--public:
--    explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform);
--
--    void execChar(AutoTypeChar* action);
--    void execKey(AutoTypeKey* action);
--
--private:
--    AutoTypePlatformX11* const m_platform;
--};
--
--#endif // KEEPASSX_AUTOTYPEX11_H
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/x11/CMakeLists.txt keepassx/src/autotype/x11/CMakeLists.txt
---- keepassx-2.0-beta2/src/autotype/x11/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/x11/CMakeLists.txt	1970-01-01 01:00:00.000000000 +0100
-@@ -1,17 +0,0 @@
--include_directories(SYSTEM ${X11_X11_INCLUDE_PATH})
--
--set(autotype_X11_SOURCES
--    AutoTypeX11.cpp
--)
--
--set(autotype_X11_MOC
--    AutoTypeX11.h
--)
--
--qt4_wrap_cpp(autotype_X11_SOURCES ${autotype_X11_MOC})
--
--add_library(keepassx-autotype-x11 MODULE ${autotype_X11_SOURCES})
--target_link_libraries(keepassx-autotype-x11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} ${X11_XTest_LIB})
--install(TARGETS keepassx-autotype-x11
--        BUNDLE DESTINATION . COMPONENT Runtime
--        LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/x11/KeySymMap.h keepassx/src/autotype/x11/KeySymMap.h
---- keepassx-2.0-beta2/src/autotype/x11/KeySymMap.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/x11/KeySymMap.h	1970-01-01 01:00:00.000000000 +0100
-@@ -1,169 +0,0 @@
--/*
-- *  Automatically generated by keysymmap.py from parsing keysymdef.h.
-- */
--
--const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632;
--
--const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {
--    0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107,
--    0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f,
--    0x0110, 0x0111, 0x0112, 0x0113, 0x0116, 0x0117, 0x0118, 0x0119,
--    0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120, 0x0121,
--    0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129,
--    0x012a, 0x012b, 0x012e, 0x012f, 0x0130, 0x0131, 0x0134, 0x0135,
--    0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d,
--    0x013e, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147,
--    0x0148, 0x014a, 0x014b, 0x014c, 0x014d, 0x0150, 0x0151, 0x0152,
--    0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015a,
--    0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0162,
--    0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a,
--    0x016b, 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172,
--    0x0173, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x017e,
--    0x0192, 0x02c7, 0x02d8, 0x02d9, 0x02db, 0x02dd, 0x0385, 0x0386,
--    0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391,
--    0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399,
--    0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1,
--    0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa,
--    0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2,
--    0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba,
--    0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2,
--    0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca,
--    0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0401, 0x0402, 0x0403, 0x0404,
--    0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c,
--    0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
--    0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d,
--    0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
--    0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d,
--    0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435,
--    0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d,
--    0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
--    0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d,
--    0x044e, 0x044f, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456,
--    0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f,
--    0x0490, 0x0491, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5,
--    0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd,
--    0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5,
--    0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x060c, 0x061b, 0x061f,
--    0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628,
--    0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630,
--    0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638,
--    0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645,
--    0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d,
--    0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0x0e01, 0x0e02, 0x0e03,
--    0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b,
--    0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13,
--    0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b,
--    0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, 0x0e23,
--    0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b,
--    0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33,
--    0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0e3f,
--    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
--    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e50, 0x0e51,
--    0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59,
--    0x2002, 0x2003, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a,
--    0x2012, 0x2013, 0x2014, 0x2015, 0x2017, 0x2018, 0x2019, 0x201a,
--    0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2025, 0x2026, 0x2030,
--    0x2032, 0x2033, 0x2038, 0x203e, 0x20ac, 0x2105, 0x2116, 0x2117,
--    0x211e, 0x2122, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158,
--    0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x2190, 0x2191,
--    0x2192, 0x2193, 0x21d2, 0x21d4, 0x2202, 0x2207, 0x2218, 0x221a,
--    0x221d, 0x221e, 0x2227, 0x2228, 0x2229, 0x222a, 0x222b, 0x2234,
--    0x223c, 0x2243, 0x2260, 0x2261, 0x2264, 0x2265, 0x2282, 0x2283,
--    0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x2308, 0x230a, 0x2315, 0x2320,
--    0x2321, 0x2395, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a1, 0x23a3,
--    0x23a4, 0x23a6, 0x23a8, 0x23ac, 0x23b7, 0x23ba, 0x23bb, 0x23bc,
--    0x23bd, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x2424, 0x2500,
--    0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c,
--    0x2534, 0x253c, 0x2592, 0x25c6, 0x25cb, 0x260e, 0x2640, 0x2642,
--    0x2663, 0x2665, 0x2666, 0x266d, 0x266f, 0x2713, 0x2717, 0x271d,
--    0x2720, 0x3001, 0x3002, 0x300c, 0x300d, 0x309b, 0x309c, 0x30a1,
--    0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9,
--    0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7,
--    0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c4, 0x30c6,
--    0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2,
--    0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2,
--    0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea,
--    0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f2, 0x30f3, 0x30fb, 0x30fc
--};
--
--const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {
--    0x03c0, 0x03e0, 0x01c3, 0x01e3, 0x01a1, 0x01b1, 0x01c6, 0x01e6,
--    0x02c6, 0x02e6, 0x02c5, 0x02e5, 0x01c8, 0x01e8, 0x01cf, 0x01ef,
--    0x01d0, 0x01f0, 0x03aa, 0x03ba, 0x03cc, 0x03ec, 0x01ca, 0x01ea,
--    0x01cc, 0x01ec, 0x02d8, 0x02f8, 0x02ab, 0x02bb, 0x02d5, 0x02f5,
--    0x03ab, 0x03bb, 0x02a6, 0x02b6, 0x02a1, 0x02b1, 0x03a5, 0x03b5,
--    0x03cf, 0x03ef, 0x03c7, 0x03e7, 0x02a9, 0x02b9, 0x02ac, 0x02bc,
--    0x03d3, 0x03f3, 0x03a2, 0x01c5, 0x01e5, 0x03a6, 0x03b6, 0x01a5,
--    0x01b5, 0x01a3, 0x01b3, 0x01d1, 0x01f1, 0x03d1, 0x03f1, 0x01d2,
--    0x01f2, 0x03bd, 0x03bf, 0x03d2, 0x03f2, 0x01d5, 0x01f5, 0x13bc,
--    0x13bd, 0x01c0, 0x01e0, 0x03a3, 0x03b3, 0x01d8, 0x01f8, 0x01a6,
--    0x01b6, 0x02de, 0x02fe, 0x01aa, 0x01ba, 0x01a9, 0x01b9, 0x01de,
--    0x01fe, 0x01ab, 0x01bb, 0x03ac, 0x03bc, 0x03dd, 0x03fd, 0x03de,
--    0x03fe, 0x02dd, 0x02fd, 0x01d9, 0x01f9, 0x01db, 0x01fb, 0x03d9,
--    0x03f9, 0x13be, 0x01ac, 0x01bc, 0x01af, 0x01bf, 0x01ae, 0x01be,
--    0x08f6, 0x01b7, 0x01a2, 0x01ff, 0x01b2, 0x01bd, 0x07ae, 0x07a1,
--    0x07a2, 0x07a3, 0x07a4, 0x07a7, 0x07a8, 0x07ab, 0x07b6, 0x07c1,
--    0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, 0x07c8, 0x07c9,
--    0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf, 0x07d0, 0x07d1,
--    0x07d2, 0x07d4, 0x07d5, 0x07d6, 0x07d7, 0x07d8, 0x07d9, 0x07a5,
--    0x07a9, 0x07b1, 0x07b2, 0x07b3, 0x07b4, 0x07ba, 0x07e1, 0x07e2,
--    0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, 0x07ea,
--    0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3,
--    0x07f2, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8, 0x07f9, 0x07b5,
--    0x07b9, 0x07b7, 0x07b8, 0x07bb, 0x06b3, 0x06b1, 0x06b2, 0x06b4,
--    0x06b5, 0x06b6, 0x06b7, 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc,
--    0x06be, 0x06bf, 0x06e1, 0x06e2, 0x06f7, 0x06e7, 0x06e4, 0x06e5,
--    0x06f6, 0x06fa, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee,
--    0x06ef, 0x06f0, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06e6, 0x06e8,
--    0x06e3, 0x06fe, 0x06fb, 0x06fd, 0x06ff, 0x06f9, 0x06f8, 0x06fc,
--    0x06e0, 0x06f1, 0x06c1, 0x06c2, 0x06d7, 0x06c7, 0x06c4, 0x06c5,
--    0x06d6, 0x06da, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce,
--    0x06cf, 0x06d0, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06c6, 0x06c8,
--    0x06c3, 0x06de, 0x06db, 0x06dd, 0x06df, 0x06d9, 0x06d8, 0x06dc,
--    0x06c0, 0x06d1, 0x06a3, 0x06a1, 0x06a2, 0x06a4, 0x06a5, 0x06a6,
--    0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af,
--    0x06bd, 0x06ad, 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0ce4, 0x0ce5,
--    0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced,
--    0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf2, 0x0cf3, 0x0cf4, 0x0cf5,
--    0x0cf6, 0x0cf7, 0x0cf8, 0x0cf9, 0x0cfa, 0x05ac, 0x05bb, 0x05bf,
--    0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8,
--    0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0,
--    0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8,
--    0x05d9, 0x05da, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5,
--    0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed,
--    0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x0da1, 0x0da2, 0x0da3,
--    0x0da4, 0x0da5, 0x0da6, 0x0da7, 0x0da8, 0x0da9, 0x0daa, 0x0dab,
--    0x0dac, 0x0dad, 0x0dae, 0x0daf, 0x0db0, 0x0db1, 0x0db2, 0x0db3,
--    0x0db4, 0x0db5, 0x0db6, 0x0db7, 0x0db8, 0x0db9, 0x0dba, 0x0dbb,
--    0x0dbc, 0x0dbd, 0x0dbe, 0x0dbf, 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3,
--    0x0dc4, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, 0x0dca, 0x0dcb,
--    0x0dcc, 0x0dcd, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3,
--    0x0dd4, 0x0dd5, 0x0dd6, 0x0dd7, 0x0dd8, 0x0dd9, 0x0dda, 0x0ddf,
--    0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de6, 0x0de7,
--    0x0de8, 0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0df0, 0x0df1,
--    0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9,
--    0x0aa2, 0x0aa1, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8,
--    0x0abb, 0x0aaa, 0x0aa9, 0x07af, 0x0cdf, 0x0ad0, 0x0ad1, 0x0afd,
--    0x0ad2, 0x0ad3, 0x0afe, 0x0af1, 0x0af2, 0x0aaf, 0x0aae, 0x0ad5,
--    0x0ad6, 0x0ad7, 0x0afc, 0x047e, 0x20ac, 0x0ab8, 0x06b0, 0x0afb,
--    0x0ad4, 0x0ac9, 0x0ab0, 0x0ab1, 0x0ab2, 0x0ab3, 0x0ab4, 0x0ab5,
--    0x0ab6, 0x0ab7, 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac6, 0x08fb, 0x08fc,
--    0x08fd, 0x08fe, 0x08ce, 0x08cd, 0x08ef, 0x08c5, 0x0bca, 0x08d6,
--    0x08c1, 0x08c2, 0x08de, 0x08df, 0x08dc, 0x08dd, 0x08bf, 0x08c0,
--    0x08c8, 0x08c9, 0x08bd, 0x08cf, 0x08bc, 0x08be, 0x08da, 0x08db,
--    0x0bfc, 0x0bdc, 0x0bc2, 0x0bce, 0x0bd3, 0x0bc4, 0x0afa, 0x08a4,
--    0x08a5, 0x0bcc, 0x08ab, 0x08ac, 0x08ad, 0x08ae, 0x08a7, 0x08a8,
--    0x08a9, 0x08aa, 0x08af, 0x08b0, 0x08a1, 0x09ef, 0x09f0, 0x09f2,
--    0x09f3, 0x09e2, 0x09e5, 0x09e9, 0x09e3, 0x09e4, 0x09e8, 0x09f1,
--    0x09f8, 0x09ec, 0x09eb, 0x09ed, 0x09ea, 0x09f4, 0x09f5, 0x09f7,
--    0x09f6, 0x09ee, 0x09e1, 0x09e0, 0x0bcf, 0x0af9, 0x0af8, 0x0af7,
--    0x0aec, 0x0aee, 0x0aed, 0x0af6, 0x0af5, 0x0af3, 0x0af4, 0x0ad9,
--    0x0af0, 0x04a4, 0x04a1, 0x04a2, 0x04a3, 0x04de, 0x04df, 0x04a7,
--    0x04b1, 0x04a8, 0x04b2, 0x04a9, 0x04b3, 0x04aa, 0x04b4, 0x04ab,
--    0x04b5, 0x04b6, 0x04b7, 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc,
--    0x04bd, 0x04be, 0x04bf, 0x04c0, 0x04c1, 0x04af, 0x04c2, 0x04c3,
--    0x04c4, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, 0x04ca, 0x04cb,
--    0x04cc, 0x04cd, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d2, 0x04d3,
--    0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8,
--    0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0
--};
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/x11/keysymmap.py keepassx/src/autotype/x11/keysymmap.py
---- keepassx-2.0-beta2/src/autotype/x11/keysymmap.py	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/autotype/x11/keysymmap.py	1970-01-01 01:00:00.000000000 +0100
-@@ -1,107 +0,0 @@
--#!/usr/bin/python3
--
--#
--# Copyright (C) 2013 Felix Geyer <debfx at fobos.de>
--#
--# This program is free software: you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation, either version 2 or (at your option)
--# version 3 of the License.
--#
--# This program is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with this program.  If not, see <http://www.gnu.org/licenses/>.
--#
--
--#
--# Parses keysymdef.h to construct a unicode symbol -> keysym mapping table.
--#
--# The lines that are parsed look like this:
--# #define XK_Aogonek 0x01a1  /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */
--#
--# This would create a 0x0104 -> 0x01a1 mapping.
--#
--
--import sys
--import re
--import collections
--
--cols = 8
--
--if len(sys.argv) >= 2:
--    keysymdef = sys.argv[1]
--else:
--    keysymdef = "/usr/include/X11/keysymdef.h"
--
--keysymMap = {}
--
--f = open(keysymdef, "r")
--for line in f:
--    match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line)
--    if match:
--        keysym = int(match.group(1), 16)
--        unicodeVal = int(match.group(2), 16)
--
--        # ignore 1:1 mappings
--        if keysym >= 0x0020 and keysym <= 0x007e:
--            continue
--        if keysym >= 0x00a0 and keysym <= 0x00ff:
--            continue
--        # ignore unicode | 0x01000000 mappings
--        if keysym >= 0x1000000:
--            continue
--
--        keysymMap[unicodeVal] = keysym
--
--keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0]))
--
--print("""/*
-- *  Automatically generated by keysymmap.py from parsing keysymdef.h.
-- */
--""")
--
--print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = " + str(len(keysymMap)) + ";")
--
--print()
--
--print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {")
--keys = keysymMap.keys()
--keyLen = len(keys)
--i = 1
--for val in keys:
--    hexVal = "{0:#0{1}x}".format(val, 6)
--
--    if i == keyLen:
--        print(hexVal)
--    elif (i % cols) == 0:
--        print(hexVal + ",")
--    elif ((i - 1) % cols) == 0:
--        print("    " + hexVal + ", ", end="")
--    else:
--        print(hexVal + ", ", end="")
--    i += 1
--print("};")
--
--print()
--
--print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {")
--values = keysymMap.values()
--valuesLen = len(values)
--i = 1
--for val in values:
--    hexVal = "{0:#0{1}x}".format(val, 6)
--
--    if i == valuesLen:
--        print(hexVal)
--    elif (i % cols) == 0:
--        print(hexVal + ",")
--    elif ((i - 1) % cols) == 0:
--        print("    " + hexVal + ", ", end="")
--    else:
--        print(hexVal + ", ", end="")
--    i += 1
--print("};")
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/xcb/AutoTypeXCB.cpp keepassx/src/autotype/xcb/AutoTypeXCB.cpp
---- keepassx-2.0-beta2/src/autotype/xcb/AutoTypeXCB.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ keepassx/src/autotype/xcb/AutoTypeXCB.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -0,0 +1,834 @@
-+/*
-+ *  Copyright (C) 2012 Felix Geyer <debfx at fobos.de>
-+ *  Copyright (C) 2000-2008 Tom Sato <VEF00200 at nifty.ne.jp>
-+ *
-+ *  This program is free software: you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation, either version 2 or (at your option)
-+ *  version 3 of the License.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include "AutoTypeXCB.h"
-+#include "KeySymMap.h"
-+
-+#include <time.h>
-+#include <xcb/xcb.h>
-+
-+bool AutoTypePlatformX11::m_catchXErrors = false;
-+bool AutoTypePlatformX11::m_xErrorOccured = false;
-+int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = nullptr;
-+
-+AutoTypePlatformX11::AutoTypePlatformX11()
-+{
-+    m_dpy = QX11Info::display();
-+    m_rootWindow = QX11Info::appRootWindow();
-+
-+    m_atomWmState = XInternAtom(m_dpy, "WM_STATE", True);
-+    m_atomWmName = XInternAtom(m_dpy, "WM_NAME", True);
-+    m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", True);
-+    m_atomString = XInternAtom(m_dpy, "STRING", True);
-+    m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True);
-+    m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True);
-+
-+    m_classBlacklist << "desktop_window" << "gnome-panel"; // Gnome
-+    m_classBlacklist << "kdesktop" << "kicker"; // KDE 3
-+    m_classBlacklist << "Plasma"; // KDE 4
-+    m_classBlacklist << "plasmashell"; // KDE 5
-+    m_classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4
-+
-+    m_currentGlobalKey = static_cast<Qt::Key>(0);
-+    m_currentGlobalModifiers = 0;
-+
-+    m_keysymTable = nullptr;
-+    m_xkb = nullptr;
-+    m_remapKeycode = 0;
-+    m_currentRemapKeysym = NoSymbol;
-+    m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask;
-+
-+    m_loaded = true;
-+
-+    updateKeymap();
-+}
-+
-+void AutoTypePlatformX11::unload()
-+{
-+    // Restore the KeyboardMapping to its original state.
-+    if (m_currentRemapKeysym != NoSymbol) {
-+        AddKeysym(NoSymbol);
-+    }
-+
-+    if (m_keysymTable) {
-+        XFree(m_keysymTable);
-+    }
-+
-+    if (m_xkb) {
-+        XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
-+    }
-+
-+    m_loaded = false;
-+}
-+
-+QStringList AutoTypePlatformX11::windowTitles()
-+{
-+    return windowTitlesRecursive(m_rootWindow);
-+}
-+
-+WId AutoTypePlatformX11::activeWindow()
-+{
-+    Window window;
-+    int revert_to_return;
-+    XGetInputFocus(m_dpy, &window, &revert_to_return);
-+
-+    int tree;
-+    do {
-+        if (isTopLevelWindow(window)) {
-+            break;
-+        }
-+
-+        Window root;
-+        Window parent;
-+        Window* children = nullptr;
-+        unsigned int numChildren;
-+        tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren);
-+        window = parent;
-+        if (children) {
-+            XFree(children);
-+        }
-+    } while (tree && window);
-+
-+    return window;
-+}
-+
-+QString AutoTypePlatformX11::activeWindowTitle()
-+{
-+    return windowTitle(activeWindow(), true);
-+}
-+
-+bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
-+{
-+    int keycode = XKeysymToKeycode(m_dpy, charToKeySym(key));
-+    uint nativeModifiers = qtToNativeModifiers(modifiers);
-+
-+    startCatchXErrors();
-+    XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync);
-+    XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync,
-+             GrabModeAsync);
-+    XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync,
-+             GrabModeAsync);
-+    XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True,
-+             GrabModeAsync, GrabModeAsync);
-+    stopCatchXErrors();
-+
-+    if (!m_xErrorOccured) {
-+        m_currentGlobalKey = key;
-+        m_currentGlobalModifiers = modifiers;
-+        m_currentGlobalKeycode = keycode;
-+        m_currentGlobalNativeModifiers = nativeModifiers;
-+        return true;
-+    }
-+    else {
-+        unregisterGlobalShortcut(key, modifiers);
-+        return false;
-+    }
-+}
-+
-+uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers)
-+{
-+    uint nativeModifiers = 0;
-+
-+    if (modifiers & Qt::ShiftModifier) {
-+        nativeModifiers |= ShiftMask;
-+    }
-+    if (modifiers & Qt::ControlModifier) {
-+        nativeModifiers |= ControlMask;
-+    }
-+    if (modifiers & Qt::AltModifier) {
-+        nativeModifiers |= Mod1Mask;
-+    }
-+    if (modifiers & Qt::MetaModifier) {
-+        nativeModifiers |= Mod4Mask;
-+    }
-+
-+    return nativeModifiers;
-+}
-+
-+void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
-+{
-+    KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key));
-+    uint nativeModifiers = qtToNativeModifiers(modifiers);
-+
-+    XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow);
-+    XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow);
-+    XUngrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow);
-+    XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow);
-+
-+    m_currentGlobalKey = static_cast<Qt::Key>(0);
-+    m_currentGlobalModifiers = 0;
-+    m_currentGlobalKeycode = 0;
-+    m_currentGlobalNativeModifiers = 0;
-+}
-+
-+int AutoTypePlatformX11::platformEventFilter(void* event)
-+{
-+    xcb_generic_event_t* genericEvent = static_cast<xcb_generic_event_t*>(event);
-+    quint8 type = genericEvent->response_type & 0x7f;
-+
-+    if (type == XCB_KEY_PRESS || type == XCB_KEY_RELEASE) {
-+        xcb_key_press_event_t* keyPressEvent = static_cast<xcb_key_press_event_t*>(event);
-+        if (keyPressEvent->detail == m_currentGlobalKeycode
-+                && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers
-+                && !QApplication::focusWidget()
-+                && m_loaded) {
-+            if (type == XCB_KEY_PRESS) {
-+                Q_EMIT globalShortcutTriggered();
-+            }
-+
-+            return 1;
-+        }
-+    }
-+    else if (type == XCB_MAPPING_NOTIFY) {
-+        xcb_mapping_notify_event_t* mappingNotifyEvent = static_cast<xcb_mapping_notify_event_t*>(event);
-+        if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD
-+                || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER)
-+        {
-+            XMappingEvent xMappingEvent;
-+            memset(&xMappingEvent, 0, sizeof(xMappingEvent));
-+            xMappingEvent.type = MappingNotify;
-+            xMappingEvent.display = m_dpy;
-+            if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD) {
-+                xMappingEvent.request = MappingKeyboard;
-+            }
-+            else {
-+                xMappingEvent.request = MappingModifier;
-+            }
-+            xMappingEvent.first_keycode = mappingNotifyEvent->first_keycode;
-+            xMappingEvent.count = mappingNotifyEvent->count;
-+            XRefreshKeyboardMapping(&xMappingEvent);
-+            updateKeymap();
-+        }
-+    }
-+
-+    return -1;
-+}
-+
-+AutoTypeExecutor* AutoTypePlatformX11::createExecutor()
-+{
-+    return new AutoTypeExecturorX11(this);
-+}
-+
-+QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist)
-+{
-+    QString title;
-+
-+    Atom type;
-+    int format;
-+    unsigned long nitems;
-+    unsigned long after;
-+    unsigned char* data = nullptr;
-+
-+    // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME
-+
-+    int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String,
-+                                    &type, &format, &nitems, &after, &data);
-+
-+    if ((retVal == 0) && data) {
-+        title = QString::fromUtf8(reinterpret_cast<char*>(data));
-+    }
-+    else {
-+        XTextProperty textProp;
-+        retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName);
-+        if ((retVal != 0) && textProp.value) {
-+            char** textList = nullptr;
-+            int count;
-+
-+            if (textProp.encoding == m_atomUtf8String) {
-+                title = QString::fromUtf8(reinterpret_cast<char*>(textProp.value));
-+            }
-+            else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0)
-+                     && textList && (count > 0)) {
-+                title = QString::fromLocal8Bit(textList[0]);
-+            }
-+            else if (textProp.encoding == m_atomString) {
-+                title = QString::fromLocal8Bit(reinterpret_cast<char*>(textProp.value));
-+            }
-+
-+            if (textList) {
-+                XFreeStringList(textList);
-+            }
-+        }
-+
-+        if (textProp.value) {
-+            XFree(textProp.value);
-+        }
-+    }
-+
-+    if (data) {
-+        XFree(data);
-+    }
-+
-+    if (useBlacklist && !title.isEmpty()) {
-+        if (window == m_rootWindow) {
-+            return QString();
-+        }
-+
-+        QString className = windowClassName(window);
-+        if (m_classBlacklist.contains(className)) {
-+            return QString();
-+        }
-+
-+        QList<Window> keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets());
-+        if (keepassxWindows.contains(window)) {
-+            return QString();
-+        }
-+    }
-+
-+    return title;
-+}
-+
-+QString AutoTypePlatformX11::windowClassName(Window window)
-+{
-+    QString className;
-+
-+    XClassHint wmClass;
-+    wmClass.res_name = nullptr;
-+    wmClass.res_class = nullptr;
-+
-+    if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) {
-+        className = QString::fromLocal8Bit(wmClass.res_name);
-+    }
-+    if (wmClass.res_name) {
-+        XFree(wmClass.res_name);
-+    }
-+    if (wmClass.res_class) {
-+        XFree(wmClass.res_class);
-+    }
-+
-+    return className;
-+}
-+
-+QList<Window> AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widgetList)
-+{
-+    QList<Window> windows;
-+
-+    Q_FOREACH (const QWidget* widget, widgetList) {
-+        windows.append(widget->effectiveWinId());
-+    }
-+
-+    return windows;
-+}
-+
-+QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window)
-+{
-+    QStringList titles;
-+
-+    if (isTopLevelWindow(window)) {
-+        QString title = windowTitle(window, true);
-+        if (!title.isEmpty()) {
-+            titles.append(title);
-+        }
-+    }
-+
-+    Window root;
-+    Window parent;
-+    Window* children = nullptr;
-+    unsigned int numChildren;
-+    if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) {
-+        for (uint i = 0; i < numChildren; i++) {
-+            titles.append(windowTitlesRecursive(children[i]));
-+        }
-+    }
-+    if (children) {
-+        XFree(children);
-+    }
-+
-+    return titles;
-+}
-+
-+bool AutoTypePlatformX11::isTopLevelWindow(Window window)
-+{
-+    Atom type = None;
-+    int format;
-+    unsigned long nitems;
-+    unsigned long after;
-+    unsigned char* data = nullptr;
-+    int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 0, False, AnyPropertyType, &type, &format,
-+                                    &nitems, &after, &data);
-+    if (data) {
-+        XFree(data);
-+    }
-+
-+    return (retVal == 0) && type;
-+}
-+
-+KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch)
-+{
-+    ushort unicode = ch.unicode();
-+
-+    /* first check for Latin-1 characters (1:1 mapping) */
-+    if ((unicode >= 0x0020 && unicode <= 0x007e)
-+            || (unicode >= 0x00a0 && unicode <= 0x00ff)) {
-+        return unicode;
-+    }
-+
-+    /* mapping table generated from keysymdef.h */
-+    const uint* match = qBinaryFind(m_unicodeToKeysymKeys,
-+                                    m_unicodeToKeysymKeys + m_unicodeToKeysymLen,
-+                                    unicode);
-+    int index = match - m_unicodeToKeysymKeys;
-+    if (index != m_unicodeToKeysymLen) {
-+        return m_unicodeToKeysymValues[index];
-+    }
-+
-+    if (unicode >= 0x0100) {
-+        return unicode | 0x01000000;
-+    }
-+
-+    return NoSymbol;
-+}
-+
-+KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key)
-+{
-+    switch (key) {
-+    case Qt::Key_Tab:
-+        return XK_Tab;
-+    case Qt::Key_Enter:
-+        return XK_Return;
-+    case Qt::Key_Up:
-+        return XK_Up;
-+    case Qt::Key_Down:
-+        return XK_Down;
-+    case Qt::Key_Left:
-+        return XK_Left;
-+    case Qt::Key_Right:
-+        return XK_Right;
-+    case Qt::Key_Insert:
-+        return XK_Insert;
-+    case Qt::Key_Delete:
-+        return XK_Delete;
-+    case Qt::Key_Home:
-+        return XK_Home;
-+    case Qt::Key_End:
-+        return XK_End;
-+    case Qt::Key_PageUp:
-+        return XK_Page_Up;
-+    case Qt::Key_PageDown:
-+        return XK_Page_Down;
-+    case Qt::Key_Backspace:
-+        return XK_BackSpace;
-+    case Qt::Key_Pause:
-+        return XK_Break;
-+    case Qt::Key_CapsLock:
-+        return XK_Caps_Lock;
-+    case Qt::Key_Escape:
-+        return XK_Escape;
-+    case Qt::Key_Help:
-+        return XK_Help;
-+    case Qt::Key_NumLock:
-+        return XK_Num_Lock;
-+    case Qt::Key_Print:
-+        return XK_Print;
-+    case Qt::Key_ScrollLock:
-+        return XK_Scroll_Lock;
-+    default:
-+        if (key >= Qt::Key_F1 && key <= Qt::Key_F16) {
-+            return XK_F1 + (key - Qt::Key_F1);
-+        }
-+        else {
-+            return NoSymbol;
-+        }
-+    }
-+}
-+
-+/*
-+ * Update the keyboard and modifier mapping.
-+ * We need the KeyboardMapping for AddKeysym.
-+ * Modifier mapping is required for clearing the modifiers. 
-+ */
-+void AutoTypePlatformX11::updateKeymap()
-+{
-+    int keycode, inx;
-+    int mod_index, mod_key;
-+    XModifierKeymap *modifiers;
-+
-+    if (m_xkb != NULL) XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
-+
-+    XDeviceInfo* devices;
-+    int num_devices;
-+    XID keyboard_id = XkbUseCoreKbd;
-+    devices = XListInputDevices(m_dpy, &num_devices);
-+
-+    for (int i = 0; i < num_devices; i++) {
-+        if (QString(devices[i].name) == "Virtual core XTEST keyboard") {
-+            keyboard_id = devices[i].id;
-+            break;
-+        }
-+    }
-+
-+    m_xkb = XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id);
-+
-+    XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode);
-+    if (m_keysymTable != NULL) XFree(m_keysymTable);
-+    m_keysymTable = XGetKeyboardMapping(m_dpy,
-+            m_minKeycode, m_maxKeycode - m_minKeycode + 1,
-+            &m_keysymPerKeycode);
-+
-+    /* determine the keycode to use for remapped keys */
-+    inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode;
-+    if (m_remapKeycode == 0 || !isRemapKeycodeValid()) {
-+        for (keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) {
-+            inx = (keycode - m_minKeycode) * m_keysymPerKeycode;
-+            if (m_keysymTable[inx] == NoSymbol) {
-+               m_remapKeycode = keycode;
-+               m_currentRemapKeysym = NoSymbol;
-+               break;
-+            }
-+        }
-+    }
-+
-+    /* determine the keycode to use for modifiers */
-+    modifiers = XGetModifierMapping(m_dpy);
-+    for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
-+        m_modifier_keycode[mod_index] = 0;
-+        for (mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) {
-+            keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key];
-+            if (keycode) {
-+                m_modifier_keycode[mod_index] = keycode;
-+                break;
-+            }
-+        }
-+    }
-+    XFreeModifiermap(modifiers);
-+
-+    /* Xlib needs some time until the mapping is distributed to
-+       all clients */
-+    // TODO: we should probably only sleep while in the middle of typing something
-+    timespec ts;
-+    ts.tv_sec = 0;
-+    ts.tv_nsec = 30 * 1000 * 1000;
-+    nanosleep(&ts, nullptr);
-+}
-+
-+bool AutoTypePlatformX11::isRemapKeycodeValid()
-+{
-+    int baseKeycode = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode;
-+    for (int i = 0; i < m_keysymPerKeycode; i++) {
-+        if (m_keysymTable[baseKeycode + i] == m_currentRemapKeysym) {
-+            return true;
-+        }
-+    }
-+
-+    return false;
-+}
-+
-+void AutoTypePlatformX11::startCatchXErrors()
-+{
-+    Q_ASSERT(!m_catchXErrors);
-+
-+    m_catchXErrors = true;
-+    m_xErrorOccured = false;
-+    m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler);
-+}
-+
-+void AutoTypePlatformX11::stopCatchXErrors()
-+{
-+    Q_ASSERT(m_catchXErrors);
-+
-+    XSync(m_dpy, False);
-+    XSetErrorHandler(m_oldXErrorHandler);
-+    m_catchXErrors = false;
-+}
-+
-+int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error)
-+{
-+    Q_UNUSED(display)
-+    Q_UNUSED(error)
-+
-+    if (m_catchXErrors) {
-+        m_xErrorOccured = true;
-+    }
-+
-+    return 1;
-+}
-+
-+// --------------------------------------------------------------------------
-+// The following code is taken from xvkbd 3.0 and has been slightly modified.
-+// --------------------------------------------------------------------------
-+
-+/*
-+ * Insert a specified keysym on the dedicated position in the keymap
-+ * table.
-+ */
-+int AutoTypePlatformX11::AddKeysym(KeySym keysym)
-+{
-+    if (m_remapKeycode == 0) {
-+        return 0;
-+    }
-+
-+    int inx = (m_remapKeycode- m_minKeycode) * m_keysymPerKeycode;
-+    m_keysymTable[inx] = keysym;
-+    m_currentRemapKeysym = keysym;
-+
-+    XChangeKeyboardMapping(m_dpy, m_remapKeycode, m_keysymPerKeycode, &m_keysymTable[inx], 1);
-+    XFlush(m_dpy);
-+    updateKeymap();
-+
-+    return m_remapKeycode;
-+}
-+
-+/*
-+ * Send event to the focused window.
-+ * If input focus is specified explicitly, select the window
-+ * before send event to the window.
-+ */
-+void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type)
-+{
-+    XSync(event->display, False);
-+    int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler);
-+
-+    event->type = event_type;
-+    Bool press;
-+    if (event->type == KeyPress) {
-+        press = True;
-+    }
-+    else {
-+        press = False;
-+    }
-+    XTestFakeKeyEvent(event->display, event->keycode, press, 0);
-+    XFlush(event->display);
-+
-+    XSetErrorHandler(oldHandler);
-+}
-+
-+/*
-+ * Send a modifier press/release event for all modifiers
-+ * which are set in the mask variable.
-+ */
-+void AutoTypePlatformX11::SendModifier(XKeyEvent *event, unsigned int mask, int event_type) 
-+{
-+    int mod_index;
-+    for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
-+        if (mask & (1 << mod_index)) {
-+            event->keycode = m_modifier_keycode[mod_index];
-+            SendEvent(event, event_type);
-+            if (event_type == KeyPress) 
-+                event->state |= (1 << mod_index);
-+            else
-+                event->state &= (1 << mod_index);
-+        }
-+    }
-+}
-+
-+/*
-+ * Determines the keycode and modifier mask for the given
-+ * keysym.
-+ */
-+int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int *mask)
-+{
-+    int keycode = XKeysymToKeycode(m_dpy, keysym);
-+
-+    if (keycode && keysymModifiers(keysym, keycode, mask)) {
-+        return keycode;
-+    }
-+
-+    /* no modifier matches => resort to remapping */
-+    keycode = AddKeysym(keysym);
-+    if (keycode && keysymModifiers(keysym, keycode, mask)) {
-+        return keycode;
-+    }
-+
-+    *mask = 0;
-+    return 0;
-+}
-+
-+bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int *mask)
-+{
-+    int shift, mod;
-+    unsigned int mods_rtrn;
-+
-+    /* determine whether there is a combination of the modifiers
-+       (Mod1-Mod5) with or without shift which returns keysym */
-+    for (shift = 0; shift < 2; shift ++) {
-+        for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod ++) {
-+            KeySym keysym_rtrn;
-+            *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod);
-+            XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn);
-+            if (keysym_rtrn == keysym) {
-+                return true;
-+            }
-+        }
-+    }
-+
-+    return false;
-+}
-+
-+
-+
-+/*
-+ * Send sequence of KeyPressed/KeyReleased events to the focused
-+ * window to simulate keyboard.  If modifiers (shift, control, etc)
-+ * are set ON, many events will be sent.
-+ */
-+void AutoTypePlatformX11::SendKeyPressedEvent(KeySym keysym)
-+{
-+    Window cur_focus;
-+    int revert_to;
-+    XKeyEvent event;
-+    int keycode;
-+
-+    if (keysym == NoSymbol) {
-+        qWarning("No such key: keysym=0x%lX", keysym);
-+        return;
-+    }
-+
-+    XGetInputFocus(m_dpy, &cur_focus, &revert_to);
-+
-+    event.display = m_dpy;
-+    event.window = cur_focus;
-+    event.root = m_rootWindow;
-+    event.subwindow = None;
-+    event.time = CurrentTime;
-+    event.x = 1;
-+    event.y = 1;
-+    event.x_root = 1;
-+    event.y_root = 1;
-+    event.same_screen = True;
-+
-+    Window root, child;
-+    int root_x, root_y, x, y;
-+    unsigned int wanted_mask = 0;
-+    unsigned int original_mask;
-+
-+    XQueryPointer(m_dpy, event.root, &root, &child, &root_x, &root_y, &x, &y, &original_mask);
-+
-+    /* determine keycode and mask for the given keysym */
-+    keycode = GetKeycode(keysym, &wanted_mask);
-+    if (keycode < 8 || keycode > 255) {
-+        qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym);
-+        return;
-+    }
-+
-+    event.state = original_mask;
-+
-+    // modifiers that need to be pressed but aren't
-+    unsigned int press_mask = wanted_mask & ~original_mask;
-+
-+    // modifiers that are pressed but maybe shouldn't
-+    unsigned int release_check_mask = original_mask & ~wanted_mask;
-+
-+    // modifiers we need to release before sending the keycode
-+    unsigned int release_mask = 0;
-+
-+    // check every release_check_mask individually if it affects the keysym we would generate
-+    // if it doesn't we probably don't need to release it
-+    for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
-+        if (release_check_mask & (1 << mod_index)) {
-+            unsigned int mods_rtrn;
-+            KeySym keysym_rtrn;
-+            XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn);
-+
-+            if (keysym_rtrn != keysym) {
-+                release_mask |= (1 << mod_index);
-+            }
-+        }
-+    }
-+
-+    // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym
-+    unsigned int mods_rtrn;
-+    KeySym keysym_rtrn;
-+    XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn);
-+    if (keysym_rtrn != keysym) {
-+        // oh well, release all the modifiers we don't want
-+        release_mask = release_check_mask;
-+    }
-+
-+    /* release all modifiers */
-+    SendModifier(&event, release_mask, KeyRelease);
-+
-+    SendModifier(&event, press_mask, KeyPress);
-+
-+    /* press and release key */
-+    event.keycode = keycode;
-+    SendEvent(&event, KeyPress);
-+    SendEvent(&event, KeyRelease);
-+
-+    /* release the modifiers */
-+    SendModifier(&event, press_mask, KeyRelease);
-+
-+    /* restore the old keyboard mask */
-+    SendModifier(&event, release_mask, KeyPress);
-+}
-+
-+int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event)
-+{
-+    char msg[200];
-+
-+    if (event->error_code == BadWindow) {
-+        return 0;
-+    }
-+    XGetErrorText(my_dpy, event->error_code, msg, sizeof(msg) - 1);
-+    qWarning("X error trapped: %s, request-code=%d\n", msg, event->request_code);
-+    return 0;
-+}
-+
-+
-+AutoTypeExecturorX11::AutoTypeExecturorX11(AutoTypePlatformX11* platform)
-+    : m_platform(platform)
-+{
-+}
-+
-+void AutoTypeExecturorX11::execChar(AutoTypeChar* action)
-+{
-+    m_platform->SendKeyPressedEvent(m_platform->charToKeySym(action->character));
-+}
-+
-+void AutoTypeExecturorX11::execKey(AutoTypeKey* action)
-+{
-+    m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(action->key));
-+}
-+
-+int AutoTypePlatformX11::initialTimeout()
-+{
-+    return 500;
-+}
-+
-+bool AutoTypePlatformX11::raiseWindow(WId window)
-+{
-+    if (m_atomNetActiveWindow == None) {
-+        return false;
-+    }
-+
-+    XRaiseWindow(m_dpy, window);
-+
-+    XEvent event;
-+    event.xclient.type = ClientMessage;
-+    event.xclient.serial = 0;
-+    event.xclient.send_event = True;
-+    event.xclient.window = window;
-+    event.xclient.message_type = m_atomNetActiveWindow;
-+    event.xclient.format = 32;
-+    event.xclient.data.l[0] = 1; // FromApplication
-+    event.xclient.data.l[1] = QX11Info::appUserTime();
-+    QWidget* activeWindow = QApplication::activeWindow();
-+    if (activeWindow) {
-+        event.xclient.data.l[2] = activeWindow->internalWinId();
-+    }
-+    else {
-+        event.xclient.data.l[2] = 0;
-+    }
-+    event.xclient.data.l[3] = 0;
-+    event.xclient.data.l[4] = 0;
-+    XSendEvent(m_dpy, m_rootWindow, False,
-+               SubstructureRedirectMask | SubstructureNotifyMask,
-+               &event);
-+    XFlush(m_dpy);
-+
-+    return true;
-+}
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/xcb/AutoTypeXCB.h keepassx/src/autotype/xcb/AutoTypeXCB.h
---- keepassx-2.0-beta2/src/autotype/xcb/AutoTypeXCB.h	1970-01-01 01:00:00.000000000 +0100
-+++ keepassx/src/autotype/xcb/AutoTypeXCB.h	2015-10-11 10:44:51.880542689 +0200
-@@ -0,0 +1,132 @@
-+/*
-+ *  Copyright (C) 2012 Felix Geyer <debfx at fobos.de>
-+ *  Copyright (C) 2000-2008 Tom Sato <VEF00200 at nifty.ne.jp>
-+ *
-+ *  This program is free software: you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation, either version 2 or (at your option)
-+ *  version 3 of the License.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef KEEPASSX_AUTOTYPEXCB_H
-+#define KEEPASSX_AUTOTYPEXCB_H
-+
-+#include <QApplication>
-+#include <QSet>
-+#include <QtPlugin>
-+#include <QWidget>
-+#include <QX11Info>
-+
-+#include <X11/Xutil.h>
-+#include <X11/extensions/XTest.h>
-+#include <X11/XKBlib.h>
-+
-+#include "autotype/AutoTypePlatformPlugin.h"
-+#include "autotype/AutoTypeAction.h"
-+
-+#define N_MOD_INDICES (Mod5MapIndex + 1)
-+
-+class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface
-+{
-+    Q_OBJECT
-+    Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformX11")
-+    Q_INTERFACES(AutoTypePlatformInterface)
-+
-+public:
-+    AutoTypePlatformX11();
-+    void unload() override;
-+    QStringList windowTitles() override;
-+    WId activeWindow() override;
-+    QString activeWindowTitle() override;
-+    bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override;
-+    void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override;
-+    int platformEventFilter(void* event) override;
-+    int initialTimeout() override;
-+    bool raiseWindow(WId window) override;
-+    AutoTypeExecutor* createExecutor() override;
-+
-+    KeySym charToKeySym(const QChar& ch);
-+    KeySym keyToKeySym(Qt::Key key);
-+
-+    void SendKeyPressedEvent(KeySym keysym);
-+
-+Q_SIGNALS:
-+    void globalShortcutTriggered();
-+
-+private:
-+    QString windowTitle(Window window, bool useBlacklist);
-+    QStringList windowTitlesRecursive(Window window);
-+    QString windowClassName(Window window);
-+    QList<Window> widgetsToX11Windows(const QWidgetList& widgetList);
-+    bool isTopLevelWindow(Window window);
-+    uint qtToNativeModifiers(Qt::KeyboardModifiers modifiers);
-+    void startCatchXErrors();
-+    void stopCatchXErrors();
-+    static int x11ErrorHandler(Display* display, XErrorEvent* error);
-+
-+    void updateKeymap();
-+    bool isRemapKeycodeValid();
-+    int AddKeysym(KeySym keysym);
-+    void AddModifier(KeySym keysym);
-+    void SendEvent(XKeyEvent* event, int event_type);
-+    void SendModifier(XKeyEvent *event, unsigned int mask, int event_type);
-+    int GetKeycode(KeySym keysym, unsigned int *mask);
-+    bool keysymModifiers(KeySym keysym, int keycode, unsigned int *mask);
-+
-+    static int MyErrorHandler(Display* my_dpy, XErrorEvent* event);
-+
-+    Display* m_dpy;
-+    Window m_rootWindow;
-+    Atom m_atomWmState;
-+    Atom m_atomWmName;
-+    Atom m_atomNetWmName;
-+    Atom m_atomString;
-+    Atom m_atomUtf8String;
-+    Atom m_atomNetActiveWindow;
-+    QSet<QString> m_classBlacklist;
-+    Qt::Key m_currentGlobalKey;
-+    Qt::KeyboardModifiers m_currentGlobalModifiers;
-+    uint m_currentGlobalKeycode;
-+    uint m_currentGlobalNativeModifiers;
-+    int m_modifierMask;
-+    static bool m_catchXErrors;
-+    static bool m_xErrorOccured;
-+    static int (*m_oldXErrorHandler)(Display*, XErrorEvent*);
-+
-+    static const int m_unicodeToKeysymLen;
-+    static const uint m_unicodeToKeysymKeys[];
-+    static const uint m_unicodeToKeysymValues[];
-+
-+    XkbDescPtr m_xkb;
-+    KeySym* m_keysymTable;
-+    int m_minKeycode;
-+    int m_maxKeycode;
-+    int m_keysymPerKeycode;
-+    /* dedicated keycode for remapped keys */
-+    unsigned int m_remapKeycode;
-+    KeySym m_currentRemapKeysym;
-+    KeyCode m_modifier_keycode[N_MOD_INDICES];
-+    bool m_loaded;
-+};
-+
-+class AutoTypeExecturorX11 : public AutoTypeExecutor
-+{
-+public:
-+    explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform);
-+
-+    void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE;
-+    void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE;
-+
-+private:
-+    AutoTypePlatformX11* const m_platform;
-+};
-+
-+#endif // KEEPASSX_AUTOTYPEXCB_H
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/xcb/CMakeLists.txt keepassx/src/autotype/xcb/CMakeLists.txt
---- keepassx-2.0-beta2/src/autotype/xcb/CMakeLists.txt	1970-01-01 01:00:00.000000000 +0100
-+++ keepassx/src/autotype/xcb/CMakeLists.txt	2015-10-11 10:44:51.880542689 +0200
-@@ -0,0 +1,11 @@
-+include_directories(SYSTEM ${X11_X11_INCLUDE_PATH})
-+
-+set(autotype_XCB_SOURCES
-+    AutoTypeXCB.cpp
-+)
-+
-+add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES})
-+target_link_libraries(keepassx-autotype-xcb Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB})
-+install(TARGETS keepassx-autotype-xcb
-+        BUNDLE DESTINATION . COMPONENT Runtime
-+        LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime)
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/xcb/KeySymMap.h keepassx/src/autotype/xcb/KeySymMap.h
---- keepassx-2.0-beta2/src/autotype/xcb/KeySymMap.h	1970-01-01 01:00:00.000000000 +0100
-+++ keepassx/src/autotype/xcb/KeySymMap.h	2015-10-11 10:44:51.880542689 +0200
-@@ -0,0 +1,169 @@
-+/*
-+ *  Automatically generated by keysymmap.py from parsing keysymdef.h.
-+ */
-+
-+const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632;
-+
-+const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {
-+    0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107,
-+    0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f,
-+    0x0110, 0x0111, 0x0112, 0x0113, 0x0116, 0x0117, 0x0118, 0x0119,
-+    0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120, 0x0121,
-+    0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129,
-+    0x012a, 0x012b, 0x012e, 0x012f, 0x0130, 0x0131, 0x0134, 0x0135,
-+    0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d,
-+    0x013e, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147,
-+    0x0148, 0x014a, 0x014b, 0x014c, 0x014d, 0x0150, 0x0151, 0x0152,
-+    0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015a,
-+    0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0162,
-+    0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a,
-+    0x016b, 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172,
-+    0x0173, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x017e,
-+    0x0192, 0x02c7, 0x02d8, 0x02d9, 0x02db, 0x02dd, 0x0385, 0x0386,
-+    0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391,
-+    0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399,
-+    0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1,
-+    0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa,
-+    0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2,
-+    0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba,
-+    0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2,
-+    0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca,
-+    0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0401, 0x0402, 0x0403, 0x0404,
-+    0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c,
-+    0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
-+    0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d,
-+    0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
-+    0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d,
-+    0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435,
-+    0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d,
-+    0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
-+    0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d,
-+    0x044e, 0x044f, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456,
-+    0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f,
-+    0x0490, 0x0491, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5,
-+    0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd,
-+    0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5,
-+    0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x060c, 0x061b, 0x061f,
-+    0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628,
-+    0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630,
-+    0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638,
-+    0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645,
-+    0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d,
-+    0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0x0e01, 0x0e02, 0x0e03,
-+    0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b,
-+    0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13,
-+    0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b,
-+    0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, 0x0e23,
-+    0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b,
-+    0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33,
-+    0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0e3f,
-+    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
-+    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e50, 0x0e51,
-+    0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59,
-+    0x2002, 0x2003, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a,
-+    0x2012, 0x2013, 0x2014, 0x2015, 0x2017, 0x2018, 0x2019, 0x201a,
-+    0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2025, 0x2026, 0x2030,
-+    0x2032, 0x2033, 0x2038, 0x203e, 0x20ac, 0x2105, 0x2116, 0x2117,
-+    0x211e, 0x2122, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158,
-+    0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x2190, 0x2191,
-+    0x2192, 0x2193, 0x21d2, 0x21d4, 0x2202, 0x2207, 0x2218, 0x221a,
-+    0x221d, 0x221e, 0x2227, 0x2228, 0x2229, 0x222a, 0x222b, 0x2234,
-+    0x223c, 0x2243, 0x2260, 0x2261, 0x2264, 0x2265, 0x2282, 0x2283,
-+    0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x2308, 0x230a, 0x2315, 0x2320,
-+    0x2321, 0x2395, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a1, 0x23a3,
-+    0x23a4, 0x23a6, 0x23a8, 0x23ac, 0x23b7, 0x23ba, 0x23bb, 0x23bc,
-+    0x23bd, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x2424, 0x2500,
-+    0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c,
-+    0x2534, 0x253c, 0x2592, 0x25c6, 0x25cb, 0x260e, 0x2640, 0x2642,
-+    0x2663, 0x2665, 0x2666, 0x266d, 0x266f, 0x2713, 0x2717, 0x271d,
-+    0x2720, 0x3001, 0x3002, 0x300c, 0x300d, 0x309b, 0x309c, 0x30a1,
-+    0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9,
-+    0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7,
-+    0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c4, 0x30c6,
-+    0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2,
-+    0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2,
-+    0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea,
-+    0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f2, 0x30f3, 0x30fb, 0x30fc
-+};
-+
-+const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {
-+    0x03c0, 0x03e0, 0x01c3, 0x01e3, 0x01a1, 0x01b1, 0x01c6, 0x01e6,
-+    0x02c6, 0x02e6, 0x02c5, 0x02e5, 0x01c8, 0x01e8, 0x01cf, 0x01ef,
-+    0x01d0, 0x01f0, 0x03aa, 0x03ba, 0x03cc, 0x03ec, 0x01ca, 0x01ea,
-+    0x01cc, 0x01ec, 0x02d8, 0x02f8, 0x02ab, 0x02bb, 0x02d5, 0x02f5,
-+    0x03ab, 0x03bb, 0x02a6, 0x02b6, 0x02a1, 0x02b1, 0x03a5, 0x03b5,
-+    0x03cf, 0x03ef, 0x03c7, 0x03e7, 0x02a9, 0x02b9, 0x02ac, 0x02bc,
-+    0x03d3, 0x03f3, 0x03a2, 0x01c5, 0x01e5, 0x03a6, 0x03b6, 0x01a5,
-+    0x01b5, 0x01a3, 0x01b3, 0x01d1, 0x01f1, 0x03d1, 0x03f1, 0x01d2,
-+    0x01f2, 0x03bd, 0x03bf, 0x03d2, 0x03f2, 0x01d5, 0x01f5, 0x13bc,
-+    0x13bd, 0x01c0, 0x01e0, 0x03a3, 0x03b3, 0x01d8, 0x01f8, 0x01a6,
-+    0x01b6, 0x02de, 0x02fe, 0x01aa, 0x01ba, 0x01a9, 0x01b9, 0x01de,
-+    0x01fe, 0x01ab, 0x01bb, 0x03ac, 0x03bc, 0x03dd, 0x03fd, 0x03de,
-+    0x03fe, 0x02dd, 0x02fd, 0x01d9, 0x01f9, 0x01db, 0x01fb, 0x03d9,
-+    0x03f9, 0x13be, 0x01ac, 0x01bc, 0x01af, 0x01bf, 0x01ae, 0x01be,
-+    0x08f6, 0x01b7, 0x01a2, 0x01ff, 0x01b2, 0x01bd, 0x07ae, 0x07a1,
-+    0x07a2, 0x07a3, 0x07a4, 0x07a7, 0x07a8, 0x07ab, 0x07b6, 0x07c1,
-+    0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, 0x07c8, 0x07c9,
-+    0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf, 0x07d0, 0x07d1,
-+    0x07d2, 0x07d4, 0x07d5, 0x07d6, 0x07d7, 0x07d8, 0x07d9, 0x07a5,
-+    0x07a9, 0x07b1, 0x07b2, 0x07b3, 0x07b4, 0x07ba, 0x07e1, 0x07e2,
-+    0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, 0x07ea,
-+    0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3,
-+    0x07f2, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8, 0x07f9, 0x07b5,
-+    0x07b9, 0x07b7, 0x07b8, 0x07bb, 0x06b3, 0x06b1, 0x06b2, 0x06b4,
-+    0x06b5, 0x06b6, 0x06b7, 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc,
-+    0x06be, 0x06bf, 0x06e1, 0x06e2, 0x06f7, 0x06e7, 0x06e4, 0x06e5,
-+    0x06f6, 0x06fa, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee,
-+    0x06ef, 0x06f0, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06e6, 0x06e8,
-+    0x06e3, 0x06fe, 0x06fb, 0x06fd, 0x06ff, 0x06f9, 0x06f8, 0x06fc,
-+    0x06e0, 0x06f1, 0x06c1, 0x06c2, 0x06d7, 0x06c7, 0x06c4, 0x06c5,
-+    0x06d6, 0x06da, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce,
-+    0x06cf, 0x06d0, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06c6, 0x06c8,
-+    0x06c3, 0x06de, 0x06db, 0x06dd, 0x06df, 0x06d9, 0x06d8, 0x06dc,
-+    0x06c0, 0x06d1, 0x06a3, 0x06a1, 0x06a2, 0x06a4, 0x06a5, 0x06a6,
-+    0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af,
-+    0x06bd, 0x06ad, 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0ce4, 0x0ce5,
-+    0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced,
-+    0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf2, 0x0cf3, 0x0cf4, 0x0cf5,
-+    0x0cf6, 0x0cf7, 0x0cf8, 0x0cf9, 0x0cfa, 0x05ac, 0x05bb, 0x05bf,
-+    0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8,
-+    0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0,
-+    0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8,
-+    0x05d9, 0x05da, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5,
-+    0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed,
-+    0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x0da1, 0x0da2, 0x0da3,
-+    0x0da4, 0x0da5, 0x0da6, 0x0da7, 0x0da8, 0x0da9, 0x0daa, 0x0dab,
-+    0x0dac, 0x0dad, 0x0dae, 0x0daf, 0x0db0, 0x0db1, 0x0db2, 0x0db3,
-+    0x0db4, 0x0db5, 0x0db6, 0x0db7, 0x0db8, 0x0db9, 0x0dba, 0x0dbb,
-+    0x0dbc, 0x0dbd, 0x0dbe, 0x0dbf, 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3,
-+    0x0dc4, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, 0x0dca, 0x0dcb,
-+    0x0dcc, 0x0dcd, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3,
-+    0x0dd4, 0x0dd5, 0x0dd6, 0x0dd7, 0x0dd8, 0x0dd9, 0x0dda, 0x0ddf,
-+    0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de6, 0x0de7,
-+    0x0de8, 0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0df0, 0x0df1,
-+    0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9,
-+    0x0aa2, 0x0aa1, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8,
-+    0x0abb, 0x0aaa, 0x0aa9, 0x07af, 0x0cdf, 0x0ad0, 0x0ad1, 0x0afd,
-+    0x0ad2, 0x0ad3, 0x0afe, 0x0af1, 0x0af2, 0x0aaf, 0x0aae, 0x0ad5,
-+    0x0ad6, 0x0ad7, 0x0afc, 0x047e, 0x20ac, 0x0ab8, 0x06b0, 0x0afb,
-+    0x0ad4, 0x0ac9, 0x0ab0, 0x0ab1, 0x0ab2, 0x0ab3, 0x0ab4, 0x0ab5,
-+    0x0ab6, 0x0ab7, 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac6, 0x08fb, 0x08fc,
-+    0x08fd, 0x08fe, 0x08ce, 0x08cd, 0x08ef, 0x08c5, 0x0bca, 0x08d6,
-+    0x08c1, 0x08c2, 0x08de, 0x08df, 0x08dc, 0x08dd, 0x08bf, 0x08c0,
-+    0x08c8, 0x08c9, 0x08bd, 0x08cf, 0x08bc, 0x08be, 0x08da, 0x08db,
-+    0x0bfc, 0x0bdc, 0x0bc2, 0x0bce, 0x0bd3, 0x0bc4, 0x0afa, 0x08a4,
-+    0x08a5, 0x0bcc, 0x08ab, 0x08ac, 0x08ad, 0x08ae, 0x08a7, 0x08a8,
-+    0x08a9, 0x08aa, 0x08af, 0x08b0, 0x08a1, 0x09ef, 0x09f0, 0x09f2,
-+    0x09f3, 0x09e2, 0x09e5, 0x09e9, 0x09e3, 0x09e4, 0x09e8, 0x09f1,
-+    0x09f8, 0x09ec, 0x09eb, 0x09ed, 0x09ea, 0x09f4, 0x09f5, 0x09f7,
-+    0x09f6, 0x09ee, 0x09e1, 0x09e0, 0x0bcf, 0x0af9, 0x0af8, 0x0af7,
-+    0x0aec, 0x0aee, 0x0aed, 0x0af6, 0x0af5, 0x0af3, 0x0af4, 0x0ad9,
-+    0x0af0, 0x04a4, 0x04a1, 0x04a2, 0x04a3, 0x04de, 0x04df, 0x04a7,
-+    0x04b1, 0x04a8, 0x04b2, 0x04a9, 0x04b3, 0x04aa, 0x04b4, 0x04ab,
-+    0x04b5, 0x04b6, 0x04b7, 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc,
-+    0x04bd, 0x04be, 0x04bf, 0x04c0, 0x04c1, 0x04af, 0x04c2, 0x04c3,
-+    0x04c4, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, 0x04ca, 0x04cb,
-+    0x04cc, 0x04cd, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d2, 0x04d3,
-+    0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8,
-+    0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0
-+};
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/autotype/xcb/keysymmap.py keepassx/src/autotype/xcb/keysymmap.py
---- keepassx-2.0-beta2/src/autotype/xcb/keysymmap.py	1970-01-01 01:00:00.000000000 +0100
-+++ keepassx/src/autotype/xcb/keysymmap.py	2015-10-11 10:44:51.880542689 +0200
-@@ -0,0 +1,107 @@
-+#!/usr/bin/python3
-+
-+#
-+# Copyright (C) 2013 Felix Geyer <debfx at fobos.de>
-+#
-+# This program is free software: you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation, either version 2 or (at your option)
-+# version 3 of the License.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+#
-+
-+#
-+# Parses keysymdef.h to construct a unicode symbol -> keysym mapping table.
-+#
-+# The lines that are parsed look like this:
-+# #define XK_Aogonek 0x01a1  /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */
-+#
-+# This would create a 0x0104 -> 0x01a1 mapping.
-+#
-+
-+import sys
-+import re
-+import collections
-+
-+cols = 8
-+
-+if len(sys.argv) >= 2:
-+    keysymdef = sys.argv[1]
-+else:
-+    keysymdef = "/usr/include/X11/keysymdef.h"
-+
-+keysymMap = {}
-+
-+f = open(keysymdef, "r")
-+for line in f:
-+    match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line)
-+    if match:
-+        keysym = int(match.group(1), 16)
-+        unicodeVal = int(match.group(2), 16)
-+
-+        # ignore 1:1 mappings
-+        if keysym >= 0x0020 and keysym <= 0x007e:
-+            continue
-+        if keysym >= 0x00a0 and keysym <= 0x00ff:
-+            continue
-+        # ignore unicode | 0x01000000 mappings
-+        if keysym >= 0x1000000:
-+            continue
-+
-+        keysymMap[unicodeVal] = keysym
-+
-+keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0]))
-+
-+print("""/*
-+ *  Automatically generated by keysymmap.py from parsing keysymdef.h.
-+ */
-+""")
-+
-+print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = " + str(len(keysymMap)) + ";")
-+
-+print()
-+
-+print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {")
-+keys = keysymMap.keys()
-+keyLen = len(keys)
-+i = 1
-+for val in keys:
-+    hexVal = "{0:#0{1}x}".format(val, 6)
-+
-+    if i == keyLen:
-+        print(hexVal)
-+    elif (i % cols) == 0:
-+        print(hexVal + ",")
-+    elif ((i - 1) % cols) == 0:
-+        print("    " + hexVal + ", ", end="")
-+    else:
-+        print(hexVal + ", ", end="")
-+    i += 1
-+print("};")
-+
-+print()
-+
-+print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {")
-+values = keysymMap.values()
-+valuesLen = len(values)
-+i = 1
-+for val in values:
-+    hexVal = "{0:#0{1}x}".format(val, 6)
-+
-+    if i == valuesLen:
-+        print(hexVal)
-+    elif (i % cols) == 0:
-+        print(hexVal + ",")
-+    elif ((i - 1) % cols) == 0:
-+        print("    " + hexVal + ", ", end="")
-+    else:
-+        print(hexVal + ", ", end="")
-+    i += 1
-+print("};")
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/CMakeLists.txt keepassx/src/CMakeLists.txt
---- keepassx-2.0-beta2/src/CMakeLists.txt	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/CMakeLists.txt	2015-10-11 10:44:51.877209219 +0200
-@@ -54,9 +54,6 @@
-     core/ListDeleter.h
-     core/Metadata.cpp
-     core/PasswordGenerator.cpp
--    core/qlockfile.cpp
--    core/qsavefile.cpp
--    core/qsavefile_p.h
-     core/SignalMultiplexer.cpp
-     core/TimeDelta.cpp
-     core/TimeInfo.cpp
-@@ -64,8 +61,6 @@
-     core/Tools.cpp
-     core/Translator.cpp
-     core/Uuid.cpp
--    core/qcommandlineoption.cpp
--    core/qcommandlineparser.cpp
-     crypto/Crypto.cpp
-     crypto/CryptoHash.cpp
-     crypto/Random.cpp
-@@ -131,93 +126,10 @@
-     streams/SymmetricCipherStream.cpp
- )
- 
--if(NOT GCRYPT_HAS_SALSA20)
--  set(keepassx_SOURCES
--      ${keepassx_SOURCES}
--      crypto/salsa20/ecrypt-config.h
--      crypto/salsa20/ecrypt-machine.h
--      crypto/salsa20/ecrypt-portable.h
--      crypto/salsa20/ecrypt-sync.h
--      crypto/salsa20/salsa20.c
--      crypto/SymmetricCipherSalsa20.cpp
--  )
--endif()
--
--if(UNIX)
--  set(keepassx_SOURCES
--      ${keepassx_SOURCES}
--      core/qlockfile_unix.cpp
--  )
--elseif(MINGW)
--  set(keepassx_SOURCES
--      ${keepassx_SOURCES}
--      core/qlockfile_win.cpp
--  )
--endif()
--
- set(keepassx_SOURCES_MAINEXE
-     main.cpp
- )
- 
--set(keepassx_MOC
--    autotype/AutoType.h
--    autotype/AutoTypeSelectDialog.h
--    autotype/AutoTypeSelectView.h
--    autotype/ShortcutWidget.h
--    autotype/WindowSelectComboBox.h
--    core/AutoTypeAssociations.h
--    core/Config.h
--    core/Database.h
--    core/Entry.h
--    core/EntryAttachments.h
--    core/EntryAttributes.h
--    core/Group.h
--    core/InactivityTimer.h
--    core/Metadata.h
--    core/qsavefile.h
--    gui/AboutDialog.h
--    gui/Application.h
--    gui/ChangeMasterKeyWidget.h
--    gui/Clipboard.h
--    gui/DatabaseOpenWidget.h
--    gui/DatabaseSettingsWidget.h
--    gui/DatabaseTabWidget.h
--    gui/DatabaseWidget.h
--    gui/DatabaseWidgetStateSync.h
--    gui/DialogyWidget.h
--    gui/DragTabBar.h
--    gui/EditWidget.h
--    gui/EditWidgetIcons.h
--    gui/EditWidgetProperties.h
--    gui/IconModels.h
--    gui/KeePass1OpenWidget.h
--    gui/LineEdit.h
--    gui/MainWindow.h
--    gui/PasswordEdit.h
--    gui/PasswordGeneratorWidget.h
--    gui/PasswordComboBox.h
--    gui/SettingsWidget.h
--    gui/SortFilterHideProxyModel.h
--    gui/UnlockDatabaseWidget.h
--    gui/WelcomeWidget.h
--    gui/entry/AutoTypeAssociationsModel.h
--    gui/entry/EditEntryWidget.h
--    gui/entry/EntryAttachmentsModel.h
--    gui/entry/EntryAttributesModel.h
--    gui/entry/EntryHistoryModel.h
--    gui/entry/EntryModel.h
--    gui/entry/EntryView.h
--    gui/group/EditGroupWidget.h
--    gui/group/GroupModel.h
--    gui/group/GroupView.h
--    keys/CompositeKey_p.h
--    streams/HashedBlockStream.h
--    streams/LayeredStream.h
--    streams/qtiocompressor.h
--    streams/StoreDataStream.h
--    streams/SymmetricCipherStream.h
--)
--
- set(keepassx_FORMS
-     gui/AboutDialog.ui
-     gui/ChangeMasterKeyWidget.ui
-@@ -245,17 +157,18 @@
-       ${CMAKE_SOURCE_DIR}/share/windows/icon.rc)
- endif()
- 
--qt4_wrap_ui(keepassx_SOURCES ${keepassx_FORMS})
--qt4_wrap_cpp(keepassx_SOURCES ${keepassx_MOC})
-+qt5_wrap_ui(keepassx_SOURCES ${keepassx_FORMS})
- 
- add_library(keepassx_core STATIC ${keepassx_SOURCES})
- set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE)
-+target_link_libraries(keepassx_core Qt5::Core Qt5::Concurrent Qt5::Widgets)
- 
- add_executable(${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES_MAINEXE})
- target_link_libraries(${PROGNAME}
-                       keepassx_core
--                      ${QT_QTCORE_LIBRARY}
--                      ${QT_QTGUI_LIBRARY}
-+                      Qt5::Core
-+                      Qt5::Concurrent
-+                      Qt5::Widgets
-                       ${GCRYPT_LIBRARIES}
-                       ${ZLIB_LIBRARIES})
- 
-@@ -273,7 +186,7 @@
- 
- add_subdirectory(autotype)
- 
--if(APPLE AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8))
-+if(APPLE)
-   if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib")
-     install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib"
-             DESTINATION "${DATA_INSTALL_DIR}")
-@@ -291,7 +204,7 @@
-   install_qt4_executable(${PROGNAME}.app "qjpeg;qgif;qico;qtaccessiblewidgets")
- endif()
- 
--if(MINGW AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8))
-+if(MINGW )
-   set(CPACK_GENERATOR "ZIP")
-   set(CPACK_STRIP_FILES ON)
-   set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSX_VERSION_NUM}")
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/config-keepassx.h.cmake keepassx/src/config-keepassx.h.cmake
---- keepassx-2.0-beta2/src/config-keepassx.h.cmake	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/config-keepassx.h.cmake	2015-10-11 10:44:51.880542689 +0200
-@@ -16,6 +16,4 @@
- #cmakedefine HAVE_RLIMIT_CORE 1
- #cmakedefine HAVE_PT_DENY_ATTACH 1
- 
--#cmakedefine GCRYPT_HAS_SALSA20
--
- #endif // KEEPASSX_CONFIG_KEEPASSX_H
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/AutoTypeAssociations.h keepassx/src/core/AutoTypeAssociations.h
---- keepassx-2.0-beta2/src/core/AutoTypeAssociations.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/AutoTypeAssociations.h	2015-10-11 10:44:51.880542689 +0200
-@@ -20,8 +20,6 @@
- 
- #include <QObject>
- 
--#include "core/Global.h"
--
- class AutoTypeAssociations : public QObject
- {
-     Q_OBJECT
-@@ -36,7 +34,7 @@
-         bool operator!=(const AutoTypeAssociations::Association& other) const;
-     };
- 
--    explicit AutoTypeAssociations(QObject* parent = Q_NULLPTR);
-+    explicit AutoTypeAssociations(QObject* parent = nullptr);
-     void copyDataFrom(const AutoTypeAssociations* other);
-     void add(const AutoTypeAssociations::Association& association);
-     void remove(int index);
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Config.cpp keepassx/src/core/Config.cpp
---- keepassx-2.0-beta2/src/core/Config.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Config.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -18,12 +18,12 @@
- #include "Config.h"
- 
- #include <QCoreApplication>
--#include <QDesktopServices>
- #include <QDir>
- #include <QSettings>
-+#include <QStandardPaths>
- #include <QTemporaryFile>
- 
--Config* Config::m_instance(Q_NULLPTR);
-+Config* Config::m_instance(nullptr);
- 
- QVariant Config::get(const QString& key)
- {
-@@ -53,7 +53,7 @@
-     QString homePath = QDir::homePath();
- 
- #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
--    // we can't use QDesktopServices on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME
-+    // we can't use QStandardPaths on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME
-     QByteArray env = qgetenv("XDG_CONFIG_HOME");
-     if (env.isEmpty()) {
-         userPath = homePath;
-@@ -70,7 +70,7 @@
- 
-     userPath += "/keepassx/";
- #else
--    userPath = QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
-+    userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
-     // storageLocation() appends the application name ("/keepassx") to the end
-     userPath += "/";
- #endif
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Config.h keepassx/src/core/Config.h
---- keepassx-2.0-beta2/src/core/Config.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Config.h	2015-10-11 10:44:51.880542689 +0200
-@@ -21,8 +21,6 @@
- #include <QScopedPointer>
- #include <QVariant>
- 
--#include "core/Global.h"
--
- class QSettings;
- 
- class Config : public QObject
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Database.cpp keepassx/src/core/Database.cpp
---- keepassx-2.0-beta2/src/core/Database.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Database.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -23,7 +23,6 @@
- 
- #include "core/Group.h"
- #include "core/Metadata.h"
--#include "core/Tools.h"
- #include "crypto/Random.h"
- #include "format/KeePass2.h"
- 
-@@ -105,7 +104,7 @@
-         }
-     }
- 
--    return Q_NULLPTR;
-+    return nullptr;
- }
- 
- Group* Database::resolveGroup(const Uuid& uuid)
-@@ -126,7 +125,7 @@
-         }
-     }
- 
--    return Q_NULLPTR;
-+    return nullptr;
- }
- 
- QList<DeletedObject> Database::deletedObjects()
-@@ -143,7 +142,7 @@
- void Database::addDeletedObject(const Uuid& uuid)
- {
-     DeletedObject delObj;
--    delObj.deletionTime = Tools::currentDateTimeUtc();
-+    delObj.deletionTime = QDateTime::currentDateTimeUtc();
-     delObj.uuid = uuid;
- 
-     addDeletedObject(delObj);
-@@ -223,7 +222,7 @@
-     m_data.transformedMasterKey = transformedMasterKey;
-     m_data.hasKey = true;
-     if (updateChangedTime) {
--        m_metadata->setMasterKeyChanged(Tools::currentDateTimeUtc());
-+        m_metadata->setMasterKeyChanged(QDateTime::currentDateTimeUtc());
-     }
-     Q_EMIT modifiedImmediate();
- 
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Database.h keepassx/src/core/Database.h
---- keepassx-2.0-beta2/src/core/Database.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Database.h	2015-10-11 10:44:51.880542689 +0200
-@@ -20,6 +20,7 @@
- 
- #include <QDateTime>
- #include <QHash>
-+#include <QObject>
- 
- #include "core/Uuid.h"
- #include "keys/CompositeKey.h"
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/DatabaseIcons.cpp keepassx/src/core/DatabaseIcons.cpp
---- keepassx-2.0-beta2/src/core/DatabaseIcons.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/DatabaseIcons.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -19,7 +19,7 @@
- 
- #include "core/FilePath.h"
- 
--DatabaseIcons* DatabaseIcons::m_instance(Q_NULLPTR);
-+DatabaseIcons* DatabaseIcons::m_instance(nullptr);
- const int DatabaseIcons::IconCount(69);
- const int DatabaseIcons::ExpiredIconIndex(45);
- const char* const DatabaseIcons::m_indexToName[] = {
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/DatabaseIcons.h keepassx/src/core/DatabaseIcons.h
---- keepassx-2.0-beta2/src/core/DatabaseIcons.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/DatabaseIcons.h	2015-10-11 10:44:51.880542689 +0200
-@@ -23,8 +23,6 @@
- #include <QPixmapCache>
- #include <QVector>
- 
--#include "core/Global.h"
--
- class DatabaseIcons
- {
- public:
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/EntryAttachments.h keepassx/src/core/EntryAttachments.h
---- keepassx-2.0-beta2/src/core/EntryAttachments.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/EntryAttachments.h	2015-10-11 10:44:51.880542689 +0200
-@@ -21,14 +21,12 @@
- #include <QMap>
- #include <QObject>
- 
--#include "core/Global.h"
--
- class EntryAttachments : public QObject
- {
-     Q_OBJECT
- 
- public:
--    explicit EntryAttachments(QObject* parent = Q_NULLPTR);
-+    explicit EntryAttachments(QObject* parent = nullptr);
-     QList<QString> keys() const;
-     bool hasKey(const QString& key) const;
-     QList<QByteArray> values() const;
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/EntryAttributes.h keepassx/src/core/EntryAttributes.h
---- keepassx-2.0-beta2/src/core/EntryAttributes.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/EntryAttributes.h	2015-10-11 10:44:51.880542689 +0200
-@@ -23,14 +23,12 @@
- #include <QSet>
- #include <QStringList>
- 
--#include "core/Global.h"
--
- class EntryAttributes : public QObject
- {
-     Q_OBJECT
- 
- public:
--    explicit EntryAttributes(QObject* parent = Q_NULLPTR);
-+    explicit EntryAttributes(QObject* parent = nullptr);
-     QList<QString> keys() const;
-     bool hasKey(const QString& key) const;
-     QList<QString> customKeys();
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Entry.cpp keepassx/src/core/Entry.cpp
---- keepassx-2.0-beta2/src/core/Entry.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Entry.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -21,7 +21,6 @@
- #include "core/DatabaseIcons.h"
- #include "core/Group.h"
- #include "core/Metadata.h"
--#include "core/Tools.h"
- 
- const int Entry::DefaultIconNumber = 0;
- 
-@@ -29,7 +28,7 @@
-     : m_attributes(new EntryAttributes(this))
-     , m_attachments(new EntryAttachments(this))
-     , m_autoTypeAssociations(new AutoTypeAssociations(this))
--    , m_tmpHistoryItem(Q_NULLPTR)
-+    , m_tmpHistoryItem(nullptr)
-     , m_modifiedSinceBegin(false)
-     , m_updateTimeinfo(true)
- {
-@@ -74,8 +73,8 @@
- void Entry::updateTimeinfo()
- {
-     if (m_updateTimeinfo) {
--        m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc());
--        m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc());
-+        m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc());
-+        m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc());
-     }
- }
- 
-@@ -211,7 +210,7 @@
- 
- bool Entry::isExpired() const
- {
--    return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc();
-+    return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc();
- }
- 
- EntryAttributes* Entry::attributes()
-@@ -466,7 +465,7 @@
-     entry->setUpdateTimeinfo(true);
- 
-     if (flags & CloneResetTimeInfo) {
--        QDateTime now = Tools::currentDateTimeUtc();
-+        QDateTime now = QDateTime::currentDateTimeUtc();
-         entry->m_data.timeInfo.setCreationTime(now);
-         entry->m_data.timeInfo.setLastModificationTime(now);
-         entry->m_data.timeInfo.setLastAccessTime(now);
-@@ -514,7 +513,7 @@
-         delete m_tmpHistoryItem;
-     }
- 
--    m_tmpHistoryItem = Q_NULLPTR;
-+    m_tmpHistoryItem = nullptr;
- }
- 
- void Entry::updateModifiedSinceBegin()
-@@ -560,7 +559,7 @@
-     QObject::setParent(group);
- 
-     if (m_updateTimeinfo) {
--        m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc());
-+        m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc());
-     }
- }
- 
-@@ -575,7 +574,7 @@
-         return m_group->database();
-     }
-     else {
--        return Q_NULLPTR;
-+        return nullptr;
-     }
- }
- 
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Entry.h keepassx/src/core/Entry.h
---- keepassx-2.0-beta2/src/core/Entry.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Entry.h	2015-10-11 10:44:51.880542689 +0200
-@@ -30,7 +30,6 @@
- #include "core/AutoTypeAssociations.h"
- #include "core/EntryAttachments.h"
- #include "core/EntryAttributes.h"
--#include "core/Global.h"
- #include "core/TimeInfo.h"
- #include "core/Uuid.h"
- 
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/FilePath.cpp keepassx/src/core/FilePath.cpp
---- keepassx-2.0-beta2/src/core/FilePath.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/FilePath.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -23,7 +23,7 @@
- 
- #include "config-keepassx.h"
- 
--FilePath* FilePath::m_instance(Q_NULLPTR);
-+FilePath* FilePath::m_instance(nullptr);
- 
- QString FilePath::dataPath(const QString& name)
- {
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/FilePath.h keepassx/src/core/FilePath.h
---- keepassx-2.0-beta2/src/core/FilePath.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/FilePath.h	2015-10-11 10:44:51.880542689 +0200
-@@ -22,8 +22,6 @@
- #include <QIcon>
- #include <QString>
- 
--#include "core/Global.h"
--
- class FilePath
- {
- public:
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Global.h keepassx/src/core/Global.h
---- keepassx-2.0-beta2/src/core/Global.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Global.h	2015-10-11 10:44:51.880542689 +0200
-@@ -20,104 +20,8 @@
- #ifndef KEEPASSX_GLOBAL_H
- #define KEEPASSX_GLOBAL_H
- 
--// mostly copied from qcompilerdetection.h which is part of Qt 5
--
- #include <QtGlobal>
- 
--#ifdef Q_CC_CLANG
--#  if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
--#    if __has_feature(cxx_strong_enums)
--#      define COMPILER_CLASS_ENUM
--#    endif
--#    if __has_feature(cxx_constexpr)
--#      define COMPILER_CONSTEXPR
--#    endif
--#    if __has_feature(cxx_decltype) /* && __has_feature(cxx_decltype_incomplete_return_types) */
--#      define COMPILER_DECLTYPE
--#    endif
--#    if __has_feature(cxx_override_control)
--#      define COMPILER_EXPLICIT_OVERRIDES
--#    endif
--#    if __has_feature(cxx_nullptr)
--#      define COMPILER_NULLPTR
--#    endif
--#    if __has_feature(cxx_static_assert)
--#      define COMPILER_STATIC_ASSERT
--#    endif
--#  endif
--#endif // Q_CC_CLANG
--
--#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG)
--#  if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
--#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
--#      define COMPILER_DECLTYPE
--#      define COMPILER_STATIC_ASSERT
--#    endif
--#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
--#      define COMPILER_CLASS_ENUM
--#    endif
--#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
--#      define COMPILER_CONSTEXPR
--#      define COMPILER_NULLPTR
--#    endif
--#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
--#      define COMPILER_EXPLICIT_OVERRIDES
--#    endif
--#  endif
--#endif
--
--/*
-- * C++11 keywords and expressions
-- */
--#if !defined(Q_NULLPTR)
--#  ifdef COMPILER_NULLPTR
--#    define Q_NULLPTR nullptr
--#  else
--#    define Q_NULLPTR 0
--#  endif
--#endif
--
--#if !defined(Q_DECL_CONSTEXPR)
--#  ifdef COMPILER_CONSTEXPR
--#    define Q_DECL_CONSTEXPR constexpr
--#  else
--#    define Q_DECL_CONSTEXPR
--#  endif
--#endif
--
--#if !defined(Q_DECL_OVERRIDE) && !defined(Q_DECL_FINAL) && !defined(Q_DECL_FINAL_CLASS)
--#  ifdef COMPILER_EXPLICIT_OVERRIDES
--#    define Q_DECL_OVERRIDE override
--#    define Q_DECL_FINAL final
--#    ifdef  COMPILER_DECLTYPE
--#      define Q_DECL_FINAL_CLASS final
--#    else
--#      define Q_DECL_FINAL_CLASS
--#    endif
--#  else
--#    define Q_DECL_OVERRIDE
--#    define Q_DECL_FINAL
--#    define Q_DECL_FINAL_CLASS
--#  endif
--#endif
--
--#if !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X)
--#ifdef COMPILER_STATIC_ASSERT
--#define Q_STATIC_ASSERT(Condition) static_assert(static_cast<bool>(Condition), #Condition)
--#define Q_STATIC_ASSERT_X(Condition, Message) static_assert(static_cast<bool>(Condition), Message)
--#else
--// Intentionally undefined
--template <bool Test> class QStaticAssertFailure;
--template <> class QStaticAssertFailure<true> {};
--
--#define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B)
--#define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B
--#define Q_STATIC_ASSERT(Condition) \
--    enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) = sizeof(QStaticAssertFailure<!!(Condition)>)}
--#define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition)
--#endif // COMPILER_STATIC_ASSERT
--#endif // !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X)
--
- #if defined(Q_OS_WIN)
- #  if defined(KEEPASSX_BUILDING_CORE)
- #    define KEEPASSX_EXPORT Q_DECL_EXPORT
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Group.cpp keepassx/src/core/Group.cpp
---- keepassx-2.0-beta2/src/core/Group.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Group.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -20,7 +20,6 @@
- #include "core/Config.h"
- #include "core/DatabaseIcons.h"
- #include "core/Metadata.h"
--#include "core/Tools.h"
- 
- const int Group::DefaultIconNumber = 48;
- const int Group::RecycleBinIconNumber = 43;
-@@ -50,7 +49,7 @@
- 
-     if (m_db && m_parent) {
-         DeletedObject delGroup;
--        delGroup.deletionTime = Tools::currentDateTimeUtc();
-+        delGroup.deletionTime = QDateTime::currentDateTimeUtc();
-         delGroup.uuid = m_uuid;
-         m_db->addDeletedObject(delGroup);
-     }
-@@ -84,8 +83,8 @@
- void Group::updateTimeinfo()
- {
-     if (m_updateTimeinfo) {
--        m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc());
--        m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc());
-+        m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc());
-+        m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc());
-     }
- }
- 
-@@ -186,7 +185,7 @@
- 
- bool Group::isExpired() const
- {
--    return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc();
-+    return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc();
- }
- 
- void Group::setUuid(const Uuid& uuid)
-@@ -352,7 +351,7 @@
-     }
- 
-     if (m_updateTimeinfo) {
--        m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc());
-+        m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc());
-     }
- 
-     Q_EMIT modified();
-@@ -372,7 +371,7 @@
- 
-     cleanupParent();
- 
--    m_parent = Q_NULLPTR;
-+    m_parent = nullptr;
-     recSetDatabase(db);
- 
-     QObject::setParent(db);
-@@ -497,7 +496,7 @@
- 
-     clonedGroup->setUpdateTimeinfo(true);
- 
--    QDateTime now = Tools::currentDateTimeUtc();
-+    QDateTime now = QDateTime::currentDateTimeUtc();
-     clonedGroup->m_data.timeInfo.setCreationTime(now);
-     clonedGroup->m_data.timeInfo.setLastModificationTime(now);
-     clonedGroup->m_data.timeInfo.setLastAccessTime(now);
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/InactivityTimer.h keepassx/src/core/InactivityTimer.h
---- keepassx-2.0-beta2/src/core/InactivityTimer.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/InactivityTimer.h	2015-10-11 10:44:51.880542689 +0200
-@@ -21,8 +21,6 @@
- #include <QMutex>
- #include <QObject>
- 
--#include "core/Global.h"
--
- class QTimer;
- 
- class InactivityTimer : public QObject
-@@ -30,7 +28,7 @@
-     Q_OBJECT
- 
- public:
--    explicit InactivityTimer(QObject* parent = Q_NULLPTR);
-+    explicit InactivityTimer(QObject* parent = nullptr);
-     void setInactivityTimeout(int inactivityTimeout);
-     void activate();
-     void deactivate();
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Metadata.cpp keepassx/src/core/Metadata.cpp
---- keepassx-2.0-beta2/src/core/Metadata.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Metadata.cpp	2015-10-11 10:44:51.880542689 +0200
-@@ -42,7 +42,7 @@
-     m_data.protectNotes = false;
-     // m_data.autoEnableVisualHiding = false;
- 
--    QDateTime now = Tools::currentDateTimeUtc();
-+    QDateTime now = QDateTime::currentDateTimeUtc();
-     m_data.nameChanged = now;
-     m_data.descriptionChanged = now;
-     m_data.defaultUserNameChanged = now;
-@@ -67,7 +67,7 @@
-     if (property != value) {
-         property = value;
-         if (m_updateDatetime) {
--            dateTime = Tools::currentDateTimeUtc();
-+            dateTime = QDateTime::currentDateTimeUtc();
-         }
-         Q_EMIT modified();
-         return true;
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/Metadata.h keepassx/src/core/Metadata.h
---- keepassx-2.0-beta2/src/core/Metadata.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/Metadata.h	2015-10-11 10:44:51.880542689 +0200
-@@ -24,7 +24,6 @@
- #include <QImage>
- #include <QPointer>
- 
--#include "core/Global.h"
- #include "core/Uuid.h"
- 
- class Database;
-@@ -35,7 +34,7 @@
-     Q_OBJECT
- 
- public:
--    explicit Metadata(QObject* parent = Q_NULLPTR);
-+    explicit Metadata(QObject* parent = nullptr);
- 
-     struct MetadataData
-     {
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/PasswordGenerator.h keepassx/src/core/PasswordGenerator.h
---- keepassx-2.0-beta2/src/core/PasswordGenerator.h	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/PasswordGenerator.h	2015-10-11 10:44:51.880542689 +0200
-@@ -22,8 +22,6 @@
- #include <QString>
- #include <QVector>
- 
--#include "core/Global.h"
--
- typedef QVector<QChar> PasswordGroup;
- 
- class PasswordGenerator
-diff -urN -x .git -x .tx keepassx-2.0-beta2/src/core/qcommandlineoption.cpp keepassx/src/core/qcommandlineoption.cpp
---- keepassx-2.0-beta2/src/core/qcommandlineoption.cpp	2015-09-06 23:41:29.000000000 +0200
-+++ keepassx/src/core/qcommandlineoption.cpp	1970-01-01 01:00:00.000000000 +0100
-@@ -1,305 +0,0 @@
--/****************************************************************************
--**
--** Copyright (C) 2013 Laszlo Papp <lpapp at kde.org>
--** Copyright (C) 2013 David Faure <faure at kde.org>
--** Contact: http://www.qt-project.org/legal
--**
--** This file is part of the QtCore module of the Qt Toolkit.
--**
--** $QT_BEGIN_LICENSE:LGPL$
--** Commercial License Usage
--** Licensees holding valid commercial Qt licenses may use this file in
--** accordance with the commercial license agreement provided with the
--** Software or, alternatively, in accordance with the terms contained in
--** a written agreement between you and Digia.  For licensing terms and
--** conditions see http://qt.digia.com/licensing.  For further information
--** use the contact form at http://qt.digia.com/contact-us.
--**
--** GNU Lesser General Public License Usage
--** Alternatively, this file may be used under the terms of the GNU Lesser
--** General Public License version 2.1 as published by the Free Software
--** Foundation and appearing in the file LICENSE.LGPL included in the
--** packaging of this file.  Please review the following information to
--** ensure the GNU Lesser General Public License version 2.1 requirements
--** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
--**
--** In addition, as a special exception, Digia gives you certain additional
--** rights.  These rights are described in the Digia Qt LGPL Exception
--** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
--**
--** GNU General Public License Usage
--** Alternatively, this file may be used under the terms of the GNU
--** General Public License version 3.0 as published by the Free Software
--** Foundation and appearing in the file LICENSE.GPL included in the
--** packaging of this file.  Please review the following information to
--** ensure the GNU General Public License version 3.0 requirements will be
--** met: http://www.gnu.org/copyleft/gpl.html.
--**
--**
--** $QT_END_LICENSE$
--**
--****************************************************************************/
--
--#include "qcommandlineoption.h"
--
--#include <QSet>
--
--class QCommandLineOptionPrivate : public QSharedData
--{
--public:
--    inline QCommandLineOptionPrivate()
--    { }
--
--    void setNames(const QStringList &nameList);
--
--    //! The list of names used for this option.
--    QStringList names;
--
--    //! The documentation name for the value, if one is expected
--    //! Example: "-o <file>" means valueName == "file"
--    QString valueName;
--
--    //! The description used for this option.
--    QString description;
--
--    //! The list of default values used for this option.
--    QStringList defaultValues;
--};
--
--/*!
--    \since 5.2
--    \class QCommandLineOption
--    \brief The QCommandLineOption class defines a possible command-line option.
--    \inmodule QtCore
--    \ingroup shared
--    \ingroup tools
--
--    This class is used to describe an option on the command line. It allows
--    different ways of defining the same option with multiple aliases possible.
--    It is also used to describe how the option is used - it may be a flag (e.g. \c{-v})
--    or take an argument (e.g. \c{-o file}).
--
--    Examples:
--    \snippet code/src_corelib_tools_qcommandlineoption.cpp 0
--
--    \sa QCommandLineParser
--*/
--
--/*!
--    Constructs a command line option object with the given arguments.
--
--    The name of the option is set to \a name.
--    The name can be either short or long. If the name is one character in
--    length, it is considered a short name. Option names must not be empty,
--    must not start with a dash or a slash character, must not contain a \c{=}
--    and cannot be repeated.
--
--    The description is set to \a description. It is customary to add a "."
--    at the end of the description.
--
--    In addition, the \a valueName can be set if the option expects a value.
--    The default value for the option is set to \a defaultValue.
--
--    \sa setDescription(), setValueName(), setDefaultValues()
--*/
--QCommandLineOption::QCommandLineOption(const QString &name, const QString &description,
--                                       const QString &valueName,
--                                       const QString &defaultValue)
--    : d(new QCommandLineOptionPrivate)
--{
--    d->setNames(QStringList(name));
--    setValueName(valueName);
--    setDescription(description);
--    setDefaultValue(defaultValue);
--}
--
--/*!
--    Constructs a command line option object with the given arguments.
--
--    This overload allows to set multiple names for the option, for instance
--    \c{o} and \c{output}.
--
--    The names of the option are set to \a names.
--    The names can be either short or long. Any name in the list that is one
--    character in length is a short name. Option names must not be empty,
--    must not start with a dash or a slash character, must not contain a \c{=}
--    and cannot be repeated.
--
--    The description is set to \a description. It is customary to add a "."
--    at the end of the description.
--
--    In addition, the \a valueName can be set if the option expects a value.
--    The default value for the option is set to \a defaultValue.
--
--    \sa setDescription(), setValueName(), setDefaultValues()
--*/
--QCommandLineOption::QCommandLineOption(const QStringList &names, const QString &description,
--                                       const QString &valueName,
--                                       const QString &defaultValue)
--    : d(new QCommandLineOptionPrivate)
--{
--    d->setNames(names);
--    setValueName(valueName);
--    setDescription(description);
--    setDefaultValue(defaultValue);
--}
--
--/*!
--    Constructs a QCommandLineOption object that is a copy of the QCommandLineOption
--    object \a other.
--
--    \sa operator=()
--*/
--QCommandLineOption::QCommandLineOption(const QCommandLineOption &other)
--    : d(other.d)
--{
--}
--
--/*!
--    Destroys the command line option object.
--*/
--QCommandLineOption::~QCommandLineOption()
--{
--}
--
--/*!
--    Makes a copy of the \a other object and assigns it to this QCommandLineOption
--    object.
--*/
--QCommandLineOption &QCommandLineOption::operator=(const QCommandLineOption &other)
--{
--    d = other.d;
--    return *this;
--}
--
--/*!
--    Returns the names set for this option.
-- */
--QStringList QCommandLineOption::names() const
--{
--    return d->names;
--}
--
--void QCommandLineOptionPrivate::setNames(const QStringList &nameList)
--{
--    QStringList newNames;
--    if (nameList.isEmpty())
--        qWarning("QCommandLineOption: Options must have at least one name");
--    Q_FOREACH (const QString &name, nameList) {
--        if (name.isEmpty()) {
--            qWarning("QCommandLineOption: Option names cannot be empty");
--        } else {
--            const QChar c = name.at(0);
--            if (c == QLatin1Char('-'))
--                qWarning("QCommandLineOption: Option names cannot start with a '-'");
--            else if (c == QLatin1Char('/'))
--                qWarning("QCommandLineOption: Option names cannot start with a '/'");
--            else if (name.contains(QLatin1Char('=')))
--                qWarning("QCommandLineOption: Option names cannot contain a '='");
--            else
--                newNames.append(name);
--        }
--    }
--    // commit
--    names = newNames;
--}
--
--/*!
--    Sets the name of the expected value, for the documentation, to \a valueName.
--
--    Options without a value assigned have a boolean-like behavior:
--    either the user specifies --option or they don't.
--
--    Options with a value assigned need to set a name for the expected value,
--    for the documentation of the option in the help output. An option with names \c{o} and \c{output},
--    and a value name of \c{file} will appear as \c{-o, --output <file>}.
--
--    Call QCommandLineParser::argument() if you expect the option to be present
--    only once, and QCommandLineParser::arguments() if you expect that option
--    to be present multiple times.
--
--    \sa valueName()
-- */
--void QCommandLineOption::setValueName(const QString &valueName)
--{
--    d->valueName = valueName;
--}
--
--/*!
--    Returns the name of the expected value.
--
--    If empty, the option doesn't take a value.
--
--    \sa setValueName()
-- */
--QString QCommandLineOption::valueName() const
--{
--    return d->valueName;
--}
--
--/*!
--    Sets the description used for this option to \a description.
--
<Skipped 8533 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/keepassx.git/commitdiff/9c87ea3168de9ea2765168df8b29f2e9743c37a3




More information about the pld-cvs-commit mailing list