From a9af99c926a4f7da597a965923328cfdc112004a Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Thu, 7 Mar 2019 19:54:52 +0100 Subject: [PATCH] Add windows platform plugin and its requirements - executed pro2cmake script on windows qpa plugin - added windowsuiautomation platformsupport project - fixed plugin dlls and lib files to be written to the same path - fixed an issue comErrorString which used implicit casting from QString to char*, but plugins are currently built with QT_NO_CAST_TO_ASCII Task-number: QTBUG-74140 Change-Id: I5db3b6c5264bbd5dfba2998b049fda36eb312c70 Reviewed-by: Simon Hausmann --- cmake/QtBuild.cmake | 3 +- src/platformsupport/CMakeLists.txt | 3 + .../windowsuiautomation/CMakeLists.txt | 27 +++ src/plugins/platforms/CMakeLists.txt | 2 +- src/plugins/platforms/windows/CMakeLists.txt | 187 ++++++++++++++++++ .../platforms/windows/qwindowscontext.cpp | 2 +- 6 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 src/platformsupport/windowsuiautomation/CMakeLists.txt create mode 100644 src/plugins/platforms/windows/CMakeLists.txt diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index e7ae97e503..1bbe12d830 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -681,7 +681,8 @@ function(add_qt_plugin target) set_target_properties("${target}" PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${INSTALL_PLUGINSDIR}/${arg_TYPE}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${INSTALL_BINDIR}") + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${INSTALL_PLUGINSDIR}/${arg_TYPE}" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${INSTALL_PLUGINSDIR}/${arg_TYPE}") qt_internal_library_deprecation_level(deprecation_define) diff --git a/src/platformsupport/CMakeLists.txt b/src/platformsupport/CMakeLists.txt index 826cda3903..ece4eed2aa 100644 --- a/src/platformsupport/CMakeLists.txt +++ b/src/platformsupport/CMakeLists.txt @@ -23,6 +23,9 @@ if(QT_FEATURE_accessibility) if(QT_FEATURE_accessibility_atspi_bridge) add_subdirectory(linuxaccessibility) endif() + if(WIN32 AND NOT WINRT) + add_subdirectory(windowsuiautomation) + endif() endif() if(QT_FEATURE_vulkan) diff --git a/src/platformsupport/windowsuiautomation/CMakeLists.txt b/src/platformsupport/windowsuiautomation/CMakeLists.txt new file mode 100644 index 0000000000..542a736966 --- /dev/null +++ b/src/platformsupport/windowsuiautomation/CMakeLists.txt @@ -0,0 +1,27 @@ +# Generated from windowsuiautomation.pro. + +##################################################################### +## WindowsUIAutomationSupport Module: +##################################################################### + +add_qt_module(WindowsUIAutomationSupport + STATIC + SOURCES + qwindowsuiawrapper.cpp qwindowsuiawrapper_p.h + uiaattributeids_p.h + uiaclientinterfaces_p.h + uiacontroltypeids_p.h + uiaerrorids_p.h + uiaeventids_p.h + uiageneralids_p.h + uiapatternids_p.h + uiapropertyids_p.h + uiaserverinterfaces_p.h + uiatypes_p.h + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + # CONFIG = "static" "internal_module" + # MODULE = "windowsuiautomation_support" + # _LOADED = "qt_module" +) diff --git a/src/plugins/platforms/CMakeLists.txt b/src/plugins/platforms/CMakeLists.txt index e5f66e3176..a6dfadc7e8 100644 --- a/src/plugins/platforms/CMakeLists.txt +++ b/src/plugins/platforms/CMakeLists.txt @@ -23,7 +23,7 @@ if(APPLE_OSX) endif() if(WIN32 AND NOT WINRT) -# TODO add_subdirectory(windows) + add_subdirectory(windows) endif() if(WINRT) diff --git a/src/plugins/platforms/windows/CMakeLists.txt b/src/plugins/platforms/windows/CMakeLists.txt new file mode 100644 index 0000000000..cb4da2dab5 --- /dev/null +++ b/src/plugins/platforms/windows/CMakeLists.txt @@ -0,0 +1,187 @@ +# Generated from windows.pro. + +##################################################################### +## qwindows Plugin: +##################################################################### + +add_qt_plugin(qwindows + TYPE platforms + SOURCES + openglblacklists.qrc + qtwindowsglobal.h + qwin10helpers.cpp qwin10helpers.h + qwindowscombase.h + qwindowscontext.cpp qwindowscontext.h + qwindowscursor.cpp qwindowscursor.h + qwindowsdialoghelpers.cpp qwindowsdialoghelpers.h + qwindowsdropdataobject.cpp qwindowsdropdataobject.h + qwindowsinputcontext.cpp qwindowsinputcontext.h + qwindowsintegration.cpp qwindowsintegration.h + qwindowsinternalmimedata.cpp qwindowsinternalmimedata.h + qwindowskeymapper.cpp qwindowskeymapper.h + qwindowsmenu.cpp qwindowsmenu.h + qwindowsmime.cpp qwindowsmime.h + qwindowsmousehandler.cpp qwindowsmousehandler.h + qwindowsnativeinterface.cpp qwindowsnativeinterface.h + qwindowsole.cpp qwindowsole.h + qwindowsopengltester.cpp qwindowsopengltester.h + qwindowspointerhandler.cpp qwindowspointerhandler.h + qwindowsscreen.cpp qwindowsscreen.h + qwindowsservices.cpp qwindowsservices.h + qwindowstheme.cpp qwindowstheme.h + qwindowsthreadpoolrunner.h + qwindowswindow.cpp qwindowswindow.h + main.cpp + qwindowsbackingstore.cpp qwindowsbackingstore.h + qwindowsgdiintegration.cpp qwindowsgdiintegration.h + qwindowsgdinativeinterface.cpp qwindowsgdinativeinterface.h + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_FOREACH + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::EventDispatcherSupportPrivate + Qt::FontDatabaseSupportPrivate + Qt::ThemeSupportPrivate + gdi32 + dwmapi + ole32 + user32 + winspool + imm32 + winmm + oleaut32 + shlwapi + shell32 + advapi32 + wtsapi32 + # OTHER_FILES = "windows.json" + # PLUGIN_CLASS_NAME = "QWindowsIntegrationPlugin" + # QT_FOR_CONFIG = "gui" + # _LOADED = "qt_plugin" +) + +## Scopes: +##################################################################### + +# TODO +extend_target(qwindows CONDITION QT_FEATURE_accessibility + SOURCES + uiautomation/qwindowsuiaaccessibility.cpp uiautomation/qwindowsuiaaccessibility.h + uiautomation/qwindowsuiabaseprovider.cpp uiautomation/qwindowsuiabaseprovider.h + uiautomation/qwindowsuiagriditemprovider.cpp uiautomation/qwindowsuiagriditemprovider.h + uiautomation/qwindowsuiagridprovider.cpp uiautomation/qwindowsuiagridprovider.h + uiautomation/qwindowsuiainvokeprovider.cpp uiautomation/qwindowsuiainvokeprovider.h + uiautomation/qwindowsuiamainprovider.cpp uiautomation/qwindowsuiamainprovider.h + uiautomation/qwindowsuiaprovidercache.cpp uiautomation/qwindowsuiaprovidercache.h + uiautomation/qwindowsuiarangevalueprovider.cpp uiautomation/qwindowsuiarangevalueprovider.h + uiautomation/qwindowsuiaselectionitemprovider.cpp uiautomation/qwindowsuiaselectionitemprovider.h + uiautomation/qwindowsuiaselectionprovider.cpp uiautomation/qwindowsuiaselectionprovider.h + uiautomation/qwindowsuiatableitemprovider.cpp uiautomation/qwindowsuiatableitemprovider.h + uiautomation/qwindowsuiatableprovider.cpp uiautomation/qwindowsuiatableprovider.h + uiautomation/qwindowsuiatextprovider.cpp uiautomation/qwindowsuiatextprovider.h + uiautomation/qwindowsuiatextrangeprovider.cpp uiautomation/qwindowsuiatextrangeprovider.h + uiautomation/qwindowsuiatoggleprovider.cpp uiautomation/qwindowsuiatoggleprovider.h + uiautomation/qwindowsuiautils.cpp uiautomation/qwindowsuiautils.h + uiautomation/qwindowsuiavalueprovider.cpp uiautomation/qwindowsuiavalueprovider.h + LIBRARIES + Qt::AccessibilitySupportPrivate +) + +# Special case, disable vulkan for now because headers can't be found. +extend_target(qwindows CONDITION QT_FEATURE_vulkan + SOURCES + qwindowsvulkaninstance.cpp qwindowsvulkaninstance.h + LIBRARIES + vulkan_supportPrivate +) + +#extend_target(qwindows CONDITION NOT TARGET___equals____ss_QT_DEFAULT_QPA_PLUGIN +# # PLUGIN_EXTENDS = "-" +#) + +extend_target(qwindows CONDITION QT_FEATURE_opengl AND NOT QT_FEATURE_dynamicgl AND NOT QT_FEATURE_opengles2 + LIBRARIES + opengl32 +) + +extend_target(qwindows CONDITION mingw + LIBRARIES + uuid +) + +extend_target(qwindows CONDITION QT_FEATURE_opengl + SOURCES + qwindowsopenglcontext.h +) + +extend_target(qwindows CONDITION QT_FEATURE_opengles2 + SOURCES + qwindowseglcontext.cpp qwindowseglcontext.h +) + +extend_target(qwindows CONDITION QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 + SOURCES + qwindowsglcontext.cpp qwindowsglcontext.h +) + +extend_target(qwindows CONDITION QT_FEATURE_opengl_dynamic + SOURCES + qwindowseglcontext.cpp qwindowseglcontext.h +) + +extend_target(qwindows CONDITION QT_FEATURE_systemtrayicon + SOURCES + qwindowssystemtrayicon.cpp qwindowssystemtrayicon.h +) + +extend_target(qwindows CONDITION QT_FEATURE_clipboard + SOURCES + qwindowsclipboard.cpp qwindowsclipboard.h +) + +extend_target(qwindows CONDITION QT_FEATURE_clipboard AND QT_FEATURE_draganddrop + SOURCES + qwindowsdrag.cpp qwindowsdrag.h +) + +extend_target(qwindows CONDITION QT_FEATURE_tabletevent + SOURCES + qwindowstabletsupport.cpp qwindowstabletsupport.h + INCLUDE_DIRECTORIES + ${PROJECT_SOURCE_DIR}/src/3rdparty/wintab +) + +extend_target(qwindows CONDITION QT_FEATURE_sessionmanager + SOURCES + qwindowssessionmanager.cpp qwindowssessionmanager.h +) + +extend_target(qwindows CONDITION QT_FEATURE_imageformat_png + SOURCES + cursors.qrc +) + +# TODO +extend_target(qwindows CONDITION (QT_FEATURE_accessibility) + LIBRARIES + Qt::WindowsUIAutomationSupportPrivate +) + +extend_target(qwindows CONDITION QT_FEATURE_accessibility AND mingw + LIBRARIES + uuid +) + +#extend_target(qwindows CONDITION QT_FEATURE_combined_angle_lib +# DEFINES +# LIBEGL_NAME= +# LIBGLESV2_NAME= +#) + +#extend_target(qwindows CONDITION NOT QT_FEATURE_combined_angle_lib +# DEFINES +# LIBEGL_NAME= +# LIBGLESV2_NAME= +#) diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 253aeb9d76..13a60af5a7 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -911,7 +911,7 @@ QByteArray QWindowsContext::comErrorString(HRESULT hr) } _com_error error(hr); result += QByteArrayLiteral(" ("); - result += errorMessageFromComError(error); + result += errorMessageFromComError(error).toUtf8(); result += ')'; return result; }