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

List:       kde-kimageshop
Subject:    =?utf-8?q?=5Bgraphics/krita=5D_/=3A_Revert_=22Revert_=22windows=3A_Set_the_minimum_SDK_API_to_Window
From:       L. E. Segovia <null () kde ! org>
Date:       2023-01-24 3:27:17
Message-ID: 20230124032717.4F98F1241CAB () leptone ! kde ! org
[Download RAW message or body]

Git commit 1d3fcd0b6b7434076273794b98e4d8d9f9c13998 by L. E. Segovia.
Committed on 24/01/2023 at 03:25.
Pushed by lsegovia into branch 'master'.

Revert "Revert "windows: Set the minimum SDK API to Windows 8 and clean relevant \
ifdefs""

The only necessary change is ensuring appmodel.h exists, and if not
(which means an outdated SDK), define the necessary variables as before.

This reverts commit 9505bc4dc0fff15946857b31237d90ec592c5a2a.

CCMAIL: kimageshop@kde.org

M  +11   -0    CMakeLists.txt
M  +2    -12   krita/main.cc
M  +50   -51   libs/global/KisWindowsPackageUtils.cpp
M  +0    -10   libs/ui/input/wintab/kis_tablet_support_win8.cpp

https://invent.kde.org/graphics/krita/commit/1d3fcd0b6b7434076273794b98e4d8d9f9c13998

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 081bf63ce6..c43b6b4150 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -354,6 +354,17 @@ endif()
 include(KDECMakeSettings)
 include(KDECompilerSettings)
 
+if (WIN32)
+# KDECompilerSettings sets Windows Vista as the default,
+# while MSVC's default is 0x0A00 (_WIN32_WINNT_WIN10, sdkddkver.h) and
+# MinGW's is 0x0601 (_WIN32_WINNT_WIN7, _mingw.h).
+# Both are enough to supply the APIs we need in main.cc, but since we
+# need the Windows 8 APIs anyway for the surface orientation and Store API,
+# we set the minimum here.
+remove_definitions(-D_WIN32_WINNT=0x0600 -DWINVER=0x0600 -D_WIN32_IE=0x0600)
+add_definitions(-D_WIN32_WINNT=0x0602 -DWINVER=0x0602  -D_WIN32_IE=0x0602)
+endif()
+
 # do not reorder to be alphabetical: this is the order in which the frameworks
 # depend on each other.
 find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED COMPONENTS
diff --git a/krita/main.cc b/krita/main.cc
index bde47c1815..79e136dec7 100644
--- a/krita/main.cc
+++ b/krita/main.cc
@@ -60,6 +60,7 @@
 #if defined Q_OS_WIN
 #include "config_use_qt_tablet_windows.h"
 #include <windows.h>
+#include <winuser.h>
 #ifndef USE_QT_TABLET_WINDOWS
 #include <kis_tablet_support_win.h>
 #include <kis_tablet_support_win8.h>
@@ -120,18 +121,7 @@ void installTranslators(KisApplication &app);
 #ifdef Q_OS_WIN
 namespace
 {
-using ORIENTATION_PREFERENCE = enum ORIENTATION_PREFERENCE {
-    ORIENTATION_PREFERENCE_NONE = 0x0,
-    ORIENTATION_PREFERENCE_LANDSCAPE = 0x1,
-    ORIENTATION_PREFERENCE_PORTRAIT = 0x2,
-    ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,
-    ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8
-};
-#if !defined(_MSC_VER)
-using pSetDisplayAutoRotationPreferences_t = BOOL WINAPI (*)(ORIENTATION_PREFERENCE \
                orientation);
-#else
-using pSetDisplayAutoRotationPreferences_t = BOOL(WINAPI *)(ORIENTATION_PREFERENCE \
                orientation);
-#endif
+using pSetDisplayAutoRotationPreferences_t = \
decltype(&SetDisplayAutoRotationPreferences);  
 void resetRotation()
 {
diff --git a/libs/global/KisWindowsPackageUtils.cpp \
b/libs/global/KisWindowsPackageUtils.cpp index eb99fbbd88..72931e7dfc 100644
--- a/libs/global/KisWindowsPackageUtils.cpp
+++ b/libs/global/KisWindowsPackageUtils.cpp
@@ -5,48 +5,61 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-// Get Windows Vista API
-#if defined(WINVER) && WINVER < 0x0600
-#undef WINVER
-#endif
-#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
-#undef _WIN32_WINNT
-#endif
-#ifndef WINVER
-#define WINVER 0x0600
-#endif
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0600
-#endif
-
 #include "KisWindowsPackageUtils.h"
 
 #include <array>
 
-#include <Shlobj.h>
+// XXX: needs to go first because under MinGW
+// clangd gets really confused and errors on missing
+// definition of WINAPI_FAMILY_PARTITION
 #include <windows.h>
 
-#include <QDebug>
-#include <QLibrary>
-#include <QString>
-
-constexpr int appmodel_PACKAGE_FULL_NAME_MAX_LENGTH = 127;
+#if defined __has_include
+#if __has_include(<appmodel.h>)
+#include <appmodel.h>
+#define HAS_APPMODEL_H
+#endif
+#endif
 
-constexpr LONG winerror_APPMODEL_ERROR_NO_PACKAGE = 15700;
+#if defined HAS_APPMODEL_H
+// ---
+// GetCurrentPackageFamilyName
+// appmodel.h / Kernel32.dll / Windows 8
+// ---
+using pGetCurrentPackageFamilyName_t = decltype(&GetCurrentPackageFamilyName);
 
+// ---
+// GetCurrentPackageFullName
+// appmodel.h / Kernel32.dll / Windows 8
+// ---
+using pGetCurrentPackageFullName_t = decltype(&GetCurrentPackageFullName);
+#else
 // ---
 // GetCurrentPackageFamilyName
 // appmodel.h / Kernel32.dll / Windows 8
 // ---
-using pGetCurrentPackageFamilyName_t =
-    LONG(WINAPI *)(UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
+using pGetCurrentPackageFamilyName_t = LONG(WINAPI *)(UINT32 \
*packageFamilyNameLength, PWSTR packageFamilyName);  
 // ---
 // GetCurrentPackageFullName
 // appmodel.h / Kernel32.dll / Windows 8
 // ---
-using pGetCurrentPackageFullName_t =
-    LONG(WINAPI *)(UINT32 *packageFullNameLength, PWSTR packageFullName);
+using pGetCurrentPackageFullName_t = LONG(WINAPI *)(UINT32 *packageFullNameLength, \
PWSTR packageFullName); +#endif
+
+#include <shlobj.h>
+
+#include <QDebug>
+#include <QLibrary>
+#include <QString>
+
+#ifndef PACKAGE_FULL_NAME_MAX_LENGTH
+constexpr int PACKAGE_FULL_NAME_MAX_LENGTH = 127;
+#endif
+
+#ifndef APPMODEL_ERROR_NO_PACKAGE
+constexpr LONG APPMODEL_ERROR_NO_PACKAGE = 15700;
+#endif
 
 // Flag for `KNOWN_FOLDER_FLAG`, introduced in Win 10 ver 1703, which when
 // used within a Desktop Bridge process, will cause the API to return the
@@ -56,6 +69,7 @@ using pGetCurrentPackageFullName_t =
 // KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET
 // shlobj_core.h / Windows 10 v1703
 // ---
+// TODO: remove this once MinGW adds the flag -- see shlobj.h KNOWN_FOLDER_FLAG
 constexpr int shlobj_KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000;
 
 struct AppmodelFunctions {
@@ -102,13 +116,10 @@ bool tryGetCurrentPackageFamilyName(QString *outName)
         return false;
     }
 
-    std::array<WCHAR, appmodel_PACKAGE_FULL_NAME_MAX_LENGTH + 1>
-        name{}; // includes null terminator
+    std::array<WCHAR, PACKAGE_FULL_NAME_MAX_LENGTH + 1> name{}; // includes null \
terminator  UINT32 nameLength = name.size();
-    LONG result =
-        AppmodelFunctions::instance().getCurrentPackageFamilyName(&nameLength,
-                                                                  name.data());
-    if (result == winerror_APPMODEL_ERROR_NO_PACKAGE) {
+    const LONG result = \
AppmodelFunctions::instance().getCurrentPackageFamilyName(&nameLength, name.data()); \
+    if (result == APPMODEL_ERROR_NO_PACKAGE) {  // Process not running from a \
package.  return false;
     }
@@ -123,9 +134,7 @@ bool tryGetCurrentPackageFamilyName(QString *outName)
         return true;
     }
     if (result != ERROR_SUCCESS) {
-        qWarning()
-            << "GetCurrentPackageFamilyName returned unexpected error code:"
-            << result;
+        qWarning() << "GetCurrentPackageFamilyName returned unexpected error code:" \
<< result;  return false;
     }
 
@@ -141,8 +150,7 @@ bool tryGetCurrentPackageFamilyName(QString *outName)
         if (nameLength > 0 && name.at(nameLength - 1) == L'\0') {
             nameLength -= 1;
         }
-        *outName =
-            QString::fromWCharArray(name.data(), static_cast<int>(nameLength));
+        *outName = QString::fromWCharArray(name.data(), \
static_cast<int>(nameLength));  }
     return true;
 }
@@ -154,13 +162,10 @@ bool tryGetCurrentPackageFullName(QString *outName)
         return false;
     }
 
-    std::array<WCHAR, appmodel_PACKAGE_FULL_NAME_MAX_LENGTH + 1>
-        name{}; // includes null terminator
+    std::array<WCHAR, PACKAGE_FULL_NAME_MAX_LENGTH + 1> name{}; // includes null \
terminator  UINT32 nameLength = name.size();
-    const LONG result =
-        AppmodelFunctions::instance().getCurrentPackageFullName(&nameLength,
-                                                                name.data());
-    if (result == winerror_APPMODEL_ERROR_NO_PACKAGE) {
+    const LONG result = \
AppmodelFunctions::instance().getCurrentPackageFullName(&nameLength, name.data()); +  \
if (result == APPMODEL_ERROR_NO_PACKAGE) {  // Process not running from a package.
         return false;
     }
@@ -175,9 +180,7 @@ bool tryGetCurrentPackageFullName(QString *outName)
         return true;
     }
     if (result != ERROR_SUCCESS) {
-        qWarning()
-            << "GetCurrentPackageFullName returned unexpected error code:"
-            << result;
+        qWarning() << "GetCurrentPackageFullName returned unexpected error code:" << \
result;  return false;
     }
 
@@ -193,8 +196,7 @@ bool tryGetCurrentPackageFullName(QString *outName)
         if (nameLength > 0 && name.at(nameLength - 1) == L'\0') {
             nameLength -= 1;
         }
-        *outName =
-            QString::fromWCharArray(name.data(), static_cast<int>(nameLength));
+        *outName = QString::fromWCharArray(name.data(), \
static_cast<int>(nameLength));  }
     return true;
 }
@@ -203,10 +205,7 @@ QString getPackageRoamingAppDataLocation()
 {
     PWSTR path = nullptr;
     HRESULT result =
-        SHGetKnownFolderPath(FOLDERID_RoamingAppData,
-                             shlobj_KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET,
-                             nullptr,
-                             &path);
+        SHGetKnownFolderPath(FOLDERID_RoamingAppData, \
shlobj_KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET, nullptr, &path);  if (result != \
                S_OK) {
         qWarning() << "SHGetKnownFolderPath returned error HRESULT:" << result;
         return {};
diff --git a/libs/ui/input/wintab/kis_tablet_support_win8.cpp \
b/libs/ui/input/wintab/kis_tablet_support_win8.cpp index 08bba59f27..6d9dfe3f1d \
                100644
--- a/libs/ui/input/wintab/kis_tablet_support_win8.cpp
+++ b/libs/ui/input/wintab/kis_tablet_support_win8.cpp
@@ -4,16 +4,6 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
-// Get Windows 8 API prototypes and types
-#ifdef WINVER
-#  undef WINVER
-#endif
-#ifdef _WIN32_WINNT
-#  undef _WIN32_WINNT
-#endif
-#define WINVER 0x0602
-#define _WIN32_WINNT 0x0602
-
 #include "kis_tablet_support_win8.h"
 
 #include <QApplication>


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

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