diff --git a/krita/main.cc b/krita/main.cc --- a/krita/main.cc +++ b/krita/main.cc @@ -55,6 +55,7 @@ #include #include #include +#include #elif defined HAVE_X11 #include @@ -323,23 +324,42 @@ #if defined Q_OS_WIN { KisConfig cfg; - bool isUsingWin8PointerInput = false; + if (cfg.useWin8PointerInput() && !KisTabletSupportWin8::isAvailable()) { + cfg.setUseWin8PointerInput(false); + } + if (!cfg.useWin8PointerInput()) { + bool hasWinTab = KisTabletSupportWin::init(); + if (!hasWinTab && !cfg.readEntry("WarnedAboutMissingWinTab", false)) { + if (KisTabletSupportWin8::isAvailable()) { + QMessageBox::StandardButton mboxResult = QMessageBox::question(nullptr, + i18n("Krita Tablet Support"), + i18n("Cannot load WinTab driver. If you have a drawing tablet, please make sure the driver is properly installed.\n\n" + "Alternatively, if your tablet supports Windows Ink, it can be used instead of WinTab. Windows Ink is recommended for Microsoft Surface devices.\n\n" + "Change to use Windows Ink now? (This option can be changed later.)"), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + if (mboxResult == QMessageBox::Yes) { + cfg.setUseWin8PointerInput(true); + } + } else { + QMessageBox::information(nullptr, + i18n("Krita Tablet Support"), + i18n("Cannot load WinTab driver. If you have a drawing tablet, please make sure the driver is properly installed."), + QMessageBox::Ok, QMessageBox::Ok); + } + cfg.writeEntry("WarnedAboutMissingWinTab", true); + } + } if (cfg.useWin8PointerInput()) { KisTabletSupportWin8 *penFilter = new KisTabletSupportWin8(); if (penFilter->init()) { // penFilter.registerPointerDeviceNotifications(); app.installNativeEventFilter(penFilter); - isUsingWin8PointerInput = true; qDebug() << "Using Win8 Pointer Input for tablet support"; } else { qDebug() << "No Win8 Pointer Input available"; delete penFilter; } } - if (!isUsingWin8PointerInput) { - KisTabletSupportWin::init(); - // app.installNativeEventFilter(new KisTabletSupportWin()); - } } #endif @@ -367,4 +387,3 @@ return state; } - diff --git a/libs/ui/input/wintab/kis_tablet_support_win.h b/libs/ui/input/wintab/kis_tablet_support_win.h --- a/libs/ui/input/wintab/kis_tablet_support_win.h +++ b/libs/ui/input/wintab/kis_tablet_support_win.h @@ -26,7 +26,7 @@ class KRITAUI_EXPORT KisTabletSupportWin { public: - static void init(); + static bool init(); }; diff --git a/libs/ui/input/wintab/kis_tablet_support_win.cpp b/libs/ui/input/wintab/kis_tablet_support_win.cpp --- a/libs/ui/input/wintab/kis_tablet_support_win.cpp +++ b/libs/ui/input/wintab/kis_tablet_support_win.cpp @@ -162,11 +162,11 @@ QWindowsWinTab32DLL QWindowsTabletSupport::m_winTab32DLL; -void KisTabletSupportWin::init() +bool KisTabletSupportWin::init() { if (!QWindowsTabletSupport::m_winTab32DLL.init()) { qWarning() << "Failed to initialize Wintab"; - return; + return false; } QTAB = QWindowsTabletSupport::create(); @@ -177,6 +177,7 @@ delete QTAB; QTAB = QWindowsTabletSupport::create(); }); + return true; }