Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kvantum for openSUSE:Factory checked 
in at 2026-11-11 16:26:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kvantum (Old)
 and      /work/SRC/openSUSE:Factory/.kvantum.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kvantum"

Wed Nov 11 16:26:42 2026 rev:27 rq:1396623 version:1.1.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/kvantum/kvantum.changes  2026-06-03 
20:26:00.598140155 +0200
+++ /work/SRC/openSUSE:Factory/.kvantum.new.3759290/kvantum.changes     
2026-11-11 16:26:43.340376290 +0100
@@ -1,0 +2,20 @@
+Tue Nov 10 19:08:36 UTC 2026 - Konstantin Voinov <[email protected]>
+
+- Version 1.1.9
+ * Check genuine mouse events before window dragging.
+ * Workaround for a Qt bug that may report a highlighted action in
+   a menu while there is none.
+ * Removed the workaround for RTL menus of Qt 6.11 (the problems seem
+   to be fixed in Qt 6.11.2).
+ * Added an option for compiling Kvantum without X11 dependency.
+   If it is enabled, Kvantum will still work on X11 but without
+   compositing. It is only for Qt6.
+ * Consider the window's device pixel ratio when getting pixmap from
+   icon (in `getPixmapFromIcon()`).
+ * Added a workaround for a regression that started with the blur
+   effect of KWin 6.5 and rarely resulted in artifacts on resizing,
+   especially on tiling.
+ * Added a workaround to Kvantum Manager for local URLs in Qt 6.12,
+   which could not open them without a scheme.
+
+-------------------------------------------------------------------

Old:
----
  kvantum-1.1.8.tar.gz

New:
----
  kvantum-1.1.9.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kvantum.spec ++++++
--- /var/tmp/diff_new_pack.j0DY0n/_old  2026-11-11 16:26:44.122409087 +0100
+++ /var/tmp/diff_new_pack.j0DY0n/_new  2026-11-11 16:26:44.124409170 +0100
@@ -31,7 +31,7 @@
 %define dsc_suffix Qt5
 %endif
 Name:           kvantum%{?pkg_suffix}
-Version:        1.1.8
+Version:        1.1.9
 Release:        0
 Summary:        SVG-based theme engine for Qt5 and Qt6
 License:        GPL-3.0-or-later

++++++ kvantum-1.1.8.tar.gz -> kvantum-1.1.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/CMakeLists.txt 
new/Kvantum-1.1.9/Kvantum/CMakeLists.txt
--- old/Kvantum-1.1.8/Kvantum/CMakeLists.txt    2026-05-09 22:40:42.000000000 
+0200
+++ new/Kvantum-1.1.9/Kvantum/CMakeLists.txt    2026-10-31 20:59:15.000000000 
+0100
@@ -10,6 +10,7 @@
 option(ENABLE_QT4 "Building Qt4 plugin." OFF)
 option(ENABLE_QT5 "Building Qt5 plugin." OFF)
 option(WITHOUT_KF "Compiling without KDE Frameworks..." OFF)
+option(WITHOUT_X11 "Compiling without X11..." OFF)
 
 add_subdirectory(style)
 if(NOT ENABLE_QT4)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/ChangeLog 
new/Kvantum-1.1.9/Kvantum/ChangeLog
--- old/Kvantum-1.1.8/Kvantum/ChangeLog 2026-05-09 22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/ChangeLog 2026-10-31 20:59:15.000000000 +0100
@@ -1,3 +1,13 @@
+V1.1.9
+---------
+ * Check genuine mouse events before window dragging.
+ * Workaround for a Qt bug that may report a highlighted action in a menu 
while there is none.
+ * Removed the workaround for RTL menus of Qt 6.11 (the problems seem to be 
fixed in Qt 6.11.2).
+ * Added an option for compiling Kvantum without X11 dependency. If it is 
enabled, Kvantum will still work on X11 but without compositing. It is only for 
Qt6.
+ * Consider the window's device pixel ratio when getting pixmap from icon (in 
`getPixmapFromIcon()`).
+ * Added a workaround for a regression that started with the blur effect of 
KWin 6.5 and rarely resulted in artifacts on resizing, especially on tiling.
+ * Added a workaround to Kvantum Manager for local URLs in Qt 6.12, which 
could not open them without a scheme.
+
 V1.1.8
 ---------
  * Covered a rare edge case of finding the parent menubar of a menu.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/INSTALL.md 
new/Kvantum-1.1.9/Kvantum/INSTALL.md
--- old/Kvantum-1.1.8/Kvantum/INSTALL.md        2026-05-09 22:40:42.000000000 
+0200
+++ new/Kvantum-1.1.9/Kvantum/INSTALL.md        2026-10-31 20:59:15.000000000 
+0100
@@ -21,7 +21,7 @@
        - [LXQt](#in-lxqt)
        - [Other DEs](#in-other-des)
    - [Using other themes](#using-other-themes)
-   - [Blur effect (KWin)](#blur-effect-kwin)
+   - [Blur effect (KWin and some Wayland 
compositors)](#blur-effect-kwin-and-some-wayland-compositors)
    - [Notes for theme makers](#notes-for-theme-makers)
 - [GTK](#gtk)
 
@@ -44,7 +44,7 @@
  * `gcc` (or gcc-multilib for multilib systems)
  * `libx11` and `libxext` (for X11)
  * `qt6-base` and `qt6-svg` (for Qt6)
- * `kwindowsystem`
+ * `kwindowsystem` (for blur effect)
  * `qt6-tools` (for localization if you need it)
 
 To install Kvantum directly, you have the choice to install the stable package 
**or**, preferably, the git package. Respectively, execute:
@@ -64,7 +64,7 @@
  * `g++`
  * `libx11-dev` and `libxext-dev` (for X11)
  * `qt6-base-dev` and `qt6-svg-dev` (for Qt6)
- * `libkf6windowsystem-dev`
+ * `libkf6windowsystem-dev` (for blur effect)
  * `qt6-base-dev-tools` (for localization if you need it)
 
 In Ubuntu, you can install Kvantum directly with:
@@ -150,9 +150,11 @@
 
 In some distros, you may need to be more explicit and use `cmake .. 
-DCMAKE_INSTALL_PREFIX=/usr` for installing Kvantum under `/usr`, in contrast 
to `/usr/local`. The latter place may not be good in Linux distros and could 
cause troubles later.
 
-NOTE 1. Kvantum needs `kwindowsystem` only to support some KWin effects (like 
blur effect). `kwindowsystem` is a small package which does not depend on KDE 
itself. However, if you do not need those effects, you could use `cmake .. 
-DWITHOUT_KF=ON`.
+NOTE 1. Kvantum needs `kwindowsystem` only to support the blur effect (under 
KWin and some Wayland compositors). `kwindowsystem` is a small package which 
does not depend on KDE itself. However, if you do not need blurring, you could 
use `cmake .. -DWITHOUT_KF=ON`.
 
-NOTE 2: You can also compile Kvantum's Qt5 plugin by using `cmake .. 
-DENABLE_QT5=ON`, but you need `qt5-x11extras` (or whatever the name of its dev 
package is in your distro) in addition to the Qt5 counterparts of the required 
packages.
+NOTE 2. Kvantum can be compiled without X11 dependency by using `cmake .. 
-DWITHOUT_X11=ON`. If this option is enabled, Kvantum will still work on X11 
but without compositing. By default, Kvantum is compiled with X11 dependency.
+
+NOTE 3. You can also compile Kvantum's Qt5 plugin by using `cmake .. 
-DENABLE_QT5=ON`, but you need `qt5-x11extras` (or whatever the name of its dev 
package is in your distro) in addition to the Qt5 counterparts of the required 
packages.
 
 ## Installation
 
@@ -203,13 +205,13 @@
 
 For the running parts of KDE/LXQt to recognize the new Kvantum theme, the 
easiest way is logging out and in again.
 
-### Blur effect (KWin)
+### Blur effect (KWin and some Wayland compositors)
 
-The blur effect of any compositor can be used with Kvantum when its active 
theme has translucent backgrounds. However, Kvantum can control KWin's blur 
effect with translucent menus and tooltips as well as explicitly translucent 
windows (like those of QTerminal, Konsole or LXQt Panel). Enabling blur options 
in *Kvantum Manager* has effect only when KWin's blur effect is enabled; 
otherwise, there will be no blurring or another compositor will control how 
translucent backgrounds are blurred.
+Kvantum can control the blur effect of KWin and some Wayland compositors (like 
Niri). *Kvantum Manager* has blur options for translucent windows, menus and 
tooltips as well as explicitly translucent windows (like LXQt Panel).
 
-In the case of compositors other than KWin, it is preferable that menus and 
tooltips have neither shadow nor blurring because those compositors cannot 
distinguish the shadows which Kvantum gives to menus and tooltips. But, if 
disabling menu/tooltip shadow and blurring is not possible with them, *Kvantum 
Manager → Configure Active Theme → Compositing & General Look → Shadowless 
menus and tooltips* could be checked as a workaround.
+In the case of compositors which impose their own blur effect and menu/tooltip 
shadows, it is preferable to exclude menus/tooltips in their settings, because 
those compositors cannot distinguish the shadows which Kvantum may give to 
menus/tooltips. But, if they do not have such settings, *Kvantum Manager → 
Configure Active Theme → Compositing & General Look → Shadowless menus and 
tooltips* could be checked as a workaround.
 
-Under X11, make sure that you never have two compositors running together! 
KWin is highly recommended, whether with KDE or with LXQt. It supports both X11 
and Wayland and has a decent blur effect.
+Under X11, make sure that you never have two compositors running together!
 
 ### Notes for theme makers
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/NEWS 
new/Kvantum-1.1.9/Kvantum/NEWS
--- old/Kvantum-1.1.8/Kvantum/NEWS      2026-05-09 22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/NEWS      2026-10-31 20:59:15.000000000 +0100
@@ -1,5 +1,5 @@
 Latest version:
 
-       10 May 2026, V1.1.8
+       31 Oct 2026, V1.1.9
 
 See "ChangeLog" for changes.
Binary files old/Kvantum-1.1.8/Kvantum/doc/Theme-Making.pdf and 
new/Kvantum-1.1.9/Kvantum/doc/Theme-Making.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Kvantum-1.1.8/Kvantum/kvantummanager/KvantumManager.cpp 
new/Kvantum-1.1.9/Kvantum/kvantummanager/KvantumManager.cpp
--- old/Kvantum-1.1.8/Kvantum/kvantummanager/KvantumManager.cpp 2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/kvantummanager/KvantumManager.cpp 2026-10-31 
20:59:15.000000000 +0100
@@ -1779,10 +1779,10 @@
 {
     if (userConfigFile_.isEmpty()) return;
     QUrl url (userConfigFile_);
-    /* QDesktopServices::openUrl() may resort to "xdg-open", which isn't
-       the best choice. "gio" is always reliable, so we check it first. */
+    /* "gio" is always reliable, so we check it first. */
     if (!QProcess::startDetached ("gio", QStringList() << "open" << 
url.toString()))
-        QDesktopServices::openUrl (url);
+        QDesktopServices::openUrl (url.scheme().isEmpty() ? 
QUrl::fromLocalFile(userConfigFile_) // workaround for Qt 6.12
+                                                          : url);
 }
 /*************************/
 /* Gets the comment and sets the state of the "deleteTheme" button. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Kvantum-1.1.8/Kvantum/kvantummanager/data/translations/kvantummanager_zh_CN.ts
 
new/Kvantum-1.1.9/Kvantum/kvantummanager/data/translations/kvantummanager_zh_CN.ts
--- 
old/Kvantum-1.1.8/Kvantum/kvantummanager/data/translations/kvantummanager_zh_CN.ts
  2026-05-09 22:40:42.000000000 +0200
+++ 
new/Kvantum-1.1.9/Kvantum/kvantummanager/data/translations/kvantummanager_zh_CN.ts
  2026-10-31 20:59:15.000000000 +0100
@@ -1413,7 +1413,8 @@
         <location filename="../../kvantummanager.ui" line="2135"/>
         <source>Each executable name can be either a
 simple string or a regular expression.</source>
-        <translation type="unfinished"></translation>
+        <translation>每个可执行名称可以是
+简单字符串或正则表达式。</translation>
     </message>
     <message>
         <location filename="../../kvantummanager.ui" line="2139"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/kvantummanager/main.cpp 
new/Kvantum-1.1.9/Kvantum/kvantummanager/main.cpp
--- old/Kvantum-1.1.8/Kvantum/kvantummanager/main.cpp   2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/kvantummanager/main.cpp   2026-10-31 
20:59:15.000000000 +0100
@@ -27,7 +27,7 @@
 int main (int argc, char *argv[])
 {
     const QString name = "Kvantum Manager";
-    const QString version = "1.1.8";
+    const QString version = "1.1.9";
 
     QStringList options;
     for (int i = 1; i < argc; ++i)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/CMakeLists.txt 
new/Kvantum-1.1.9/Kvantum/style/CMakeLists.txt
--- old/Kvantum-1.1.8/Kvantum/style/CMakeLists.txt      2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/CMakeLists.txt      2026-10-31 
20:59:15.000000000 +0100
@@ -10,20 +10,23 @@
     if(NOT WITHOUT_KF)
       find_package(KF6WindowSystem "${KF6_MINIMUM_VERSION}" REQUIRED)
     endif()
+    if(NOT WITHOUT_X11)
+      find_package(X11 REQUIRED)
+    endif()
   else()
     set(QT_VERSION_MAJOR 5)
+    find_package(X11 REQUIRED)
     find_package(Qt5 "${QT5_MINIMUM_VERSION}" REQUIRED COMPONENTS Core Gui 
Widgets Svg X11Extras)
   endif()
 else()
   set(QT_VERSION_MAJOR 4)
   find_package(Qt4 4.8.7 REQUIRED)
+  find_package(X11 REQUIRED)
 
   include(${QT_USE_FILE})
   add_definitions(${QT_DEFINITIONS})
 endif()
 
-find_package(X11 REQUIRED)
-
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -36,10 +39,16 @@
                   ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
   set(KVANTUM_STYLE_DIR "${_Qt6_PLUGIN_INSTALL_DIR}/styles/")
 
-  include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
-                      ${Qt6Core_INCLUDE_DIRS} ${Qt6Widgets_INCLUDE_DIRS}
-                      ${Qt6Gui_INCLUDE_DIRS} ${Qt6Svg_INCLUDE_DIRS}
-                      ${X11_INCLUDE_DIR})
+  if(WITHOUT_X11)
+    include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
+                        ${Qt6Core_INCLUDE_DIRS} ${Qt6Widgets_INCLUDE_DIRS}
+                        ${Qt6Gui_INCLUDE_DIRS} ${Qt6Svg_INCLUDE_DIRS})
+  else()
+    include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
+                        ${Qt6Core_INCLUDE_DIRS} ${Qt6Widgets_INCLUDE_DIRS}
+                        ${Qt6Gui_INCLUDE_DIRS} ${Qt6Svg_INCLUDE_DIRS}
+                        ${X11_INCLUDE_DIR})
+  endif()
 elseif(QT_VERSION_MAJOR EQUAL 5)
   get_target_property(REAL_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE}
                       IMPORTED_LOCATION)
@@ -68,6 +77,10 @@
   add_definitions(-DNO_KF)
 endif()
 
+if(WITHOUT_X11)
+  add_definitions(-DNO_X11)
+endif()
+
 if(QT_VERSION_MAJOR EQUAL 6)
   set(kvantum_SOURCES
       Kvantum.cpp
@@ -118,19 +131,34 @@
 endif()
 
 if(QT_VERSION_MAJOR EQUAL 6)
-  if(WITHOUT_KF)
-    target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
-                                  ${Qt6Gui_LIBRARIES}
-                                  ${Qt6Widgets_LIBRARIES}
-                                  ${Qt6Svg_LIBRARIES}
-                                  ${X11_LIBRARIES})
+  if(WITHOUT_X11)
+    if(WITHOUT_KF)
+      target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
+                                    ${Qt6Gui_LIBRARIES}
+                                    ${Qt6Widgets_LIBRARIES}
+                                    ${Qt6Svg_LIBRARIES})
+    else()
+      target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
+                                    ${Qt6Gui_LIBRARIES}
+                                    ${Qt6Widgets_LIBRARIES}
+                                    ${Qt6Svg_LIBRARIES}
+                                    KF6::WindowSystem)
+    endif()
   else()
-    target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
-                                  ${Qt6Gui_LIBRARIES}
-                                  ${Qt6Widgets_LIBRARIES}
-                                  ${Qt6Svg_LIBRARIES}
-                                  ${X11_LIBRARIES}
-                                  KF6::WindowSystem)
+    if(WITHOUT_KF)
+      target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
+                                    ${Qt6Gui_LIBRARIES}
+                                    ${Qt6Widgets_LIBRARIES}
+                                    ${Qt6Svg_LIBRARIES}
+                                    ${X11_LIBRARIES})
+    else()
+      target_link_libraries(kvantum ${Qt6Core_LIBRARIES}
+                                    ${Qt6Gui_LIBRARIES}
+                                    ${Qt6Widgets_LIBRARIES}
+                                    ${Qt6Svg_LIBRARIES}
+                                    ${X11_LIBRARIES}
+                                    KF6::WindowSystem)
+    endif()
   endif()
 elseif(QT_VERSION_MAJOR EQUAL 5)
   target_link_libraries(kvantum ${Qt5Core_LIBRARIES}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/Kvantum.cpp 
new/Kvantum-1.1.9/Kvantum/style/Kvantum.cpp
--- old/Kvantum-1.1.8/Kvantum/style/Kvantum.cpp 2026-05-09 22:40:42.000000000 
+0200
+++ new/Kvantum-1.1.9/Kvantum/style/Kvantum.cpp 2026-10-31 20:59:15.000000000 
+0100
@@ -3319,7 +3319,7 @@
       if (!widget // it's NULL with QML
           || sa
           || widget->inherits("QWellArray") // color dialog's color rects
-          || widget->inherits("QComboBoxPrivateContainer")) // frame for combo 
popups
+          || widget->inherits("QComboBoxPrivateContainer")) // frame for combo 
popups (called by drawControl(CE_ShapedFrame,...)
       {
         bool pcmanfmInactiveView(false);
         if (widget)
@@ -5950,7 +5950,7 @@
               }
             }
             QSize iconSize = combo != nullptr ? combo->iconSize() : 
QSize(smallIconSize, smallIconSize);
-            QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, iconSize);
+            QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, iconSize, widget, painter);
             if (px.isNull()) // with a non-null icon
               iconSpace = iconSize.width() + lspec.tispace;
             QRect r = option->rect.adjusted(rtl ? 0 : iconSpace+checkSpace,
@@ -6184,7 +6184,7 @@
                 if (hasIcon)
                 {
                   QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),
-                                                 iconstate, 
opt->decorationSize);
+                                                 iconstate, 
opt->decorationSize, widget, painter);
                   o.icon = QIcon(px);
                 }
                 drawViewItem(&o,painter,widget);
@@ -6231,14 +6231,14 @@
                                               getPixmapFromIcon(opt->icon,
                                                                 
getIconMode(state,isInactive,lspec),
                                                                 iconstate,
-                                                                
opt->decorationSize),
+                                                                
opt->decorationSize, widget, painter),
                                               tintPercentage);
                     o.icon = QIcon(px);
                   }
                   else
                   {
                     QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),
-                                                   iconstate, 
opt->decorationSize);
+                                                   iconstate, 
opt->decorationSize, widget, painter);
                     o.icon = QIcon(px);
                   }
                 }
@@ -6260,7 +6260,7 @@
                 if (hasIcon)
                 {
                   QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),
-                                                 iconstate, 
opt->decorationSize);
+                                                 iconstate, 
opt->decorationSize, widget, painter);
                   o.icon = QIcon(px);
                 }
                 drawViewItem(&o,painter,widget);
@@ -6283,7 +6283,7 @@
                 if (hasIcon)
                 {
                   QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),
-                                                 iconstate, 
opt->decorationSize);
+                                                 iconstate, 
opt->decorationSize, widget, painter);
                   o.icon = QIcon(px);
                 }
                 drawViewItem(&o,painter,widget);
@@ -6303,7 +6303,7 @@
                                                                            
isWidgetInactive(widget),
                                                                            
lspec),
                                                                iconstate,
-                                                               
opt->decorationSize),
+                                                               
opt->decorationSize, widget, painter),
                                              opacityPercentage);
               o.icon = QIcon(px);
               drawViewItem(&o,painter,widget);
@@ -6464,7 +6464,7 @@
         {
           int icnSize = pixelMetric(PM_SmallIconSize);
           QSize iconSize(icnSize,icnSize);
-          QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),iconstate,iconSize);
+          QPixmap px = getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec),iconstate,iconSize, widget, painter);
           renderLabel(option,painter,r,
                       fspec,lspec,
                       talign,QString(),QPalette::WindowText,
@@ -6687,7 +6687,7 @@
                     talign,opt->text,QPalette::WindowText,
                     state,
                     isInactive,
-                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize),
+                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize, widget, painter),
                     opt->iconSize, Qt::ToolButtonTextBesideIcon, false);
       }
 
@@ -6726,7 +6726,7 @@
                     talign,opt->text,QPalette::WindowText,
                     state,
                     isInactive,
-                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize),
+                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize, widget, painter),
                     opt->iconSize, Qt::ToolButtonTextBesideIcon, false);
       }
 
@@ -6844,7 +6844,7 @@
                     talign,opt->currentText,QPalette::ButtonText,
                     state,
                     isInactive,
-                    getPixmapFromIcon(opt->currentIcon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize),
+                    getPixmapFromIcon(opt->currentIcon, 
getIconMode(state,isInactive,lspec), iconstate, opt->iconSize, widget, painter),
                     opt->iconSize);
       }
 
@@ -7516,7 +7516,7 @@
                     talign,txt,QPalette::WindowText,
                     state,
                     isInactive,
-                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, iconSize),
+                    getPixmapFromIcon(opt->icon, 
getIconMode(state,isInactive,lspec), iconstate, iconSize, widget, painter),
                     iconSize);
 
         if ((opt->state & State_HasFocus)
@@ -7633,7 +7633,7 @@
         QPixmap px = getPixmapFromIcon(opt->icon,
                                        getIconMode(state,isInactive,lspec),
                                        iconstate,
-                                       QSize(smallIconSize,smallIconSize));
+                                       QSize(smallIconSize,smallIconSize), 
widget, painter);
 
         /* first get the correct pixmap and palette */
         QColor col;
@@ -9213,7 +9213,7 @@
                     opt->text,QPalette::ButtonText,
                     state,
                     isInactive,
-                    
getPixmapFromIcon(opt->icon,getIconMode(state,isInactive,lspec),iconstate,iconSize),
+                    
getPixmapFromIcon(opt->icon,getIconMode(state,isInactive,lspec),iconstate,iconSize,
 widget, painter),
                     iconSize);
       }
 
@@ -9839,7 +9839,7 @@
                                                                          
standardPalette().color(QPalette::Window))
                                                         ? -1 : state,
                                                       isInactive, lspec),
-                                          iconstate, opt->iconSize),
+                                          iconstate, opt->iconSize, widget, 
painter),
                     opt->iconSize);
         if(isDefaultBtn)
           painter->restore();
@@ -10802,7 +10802,7 @@
                                                                       
standardPalette().color(QPalette::Window))
                                                       ? -1 : state,
                                                     isInactive, lspec),
-                                        iconstate, iconSize),
+                                        iconstate, iconSize, widget, painter),
                       iconSize,tialign);
           iAlignment |= Qt::AlignLeft;
         }
@@ -10997,7 +10997,7 @@
             painter->restore();
           }
           else
-            QCommonStyle::drawControl(element,option,painter,widget);
+            QCommonStyle::drawControl(element,option,painter,widget); // calls 
drawPrimitive(PE_Frame,...)
         }
       }
 
@@ -12045,7 +12045,7 @@
             }
             QPixmap icn = getPixmapFromIcon(opt->currentIcon,
                                             
getIconMode(state,status.contains(KL1("-inactive")),lspec),
-                                            iconstate, opt->iconSize);
+                                            iconstate, opt->iconSize, widget, 
painter);
             QRect iconRect = alignedRect(option->direction,
                                          Qt::AlignVCenter | Qt::AlignLeft,
                                          opt->iconSize,
@@ -12777,7 +12777,7 @@
                       Qt::AlignCenter,title,QPalette::WindowText,
                       tbStatus == "normal" ? 1 : 2,
                       false,
-                      getPixmapFromIcon(o.icon,Normal,QIcon::Off,iconSize),
+                      getPixmapFromIcon(o.icon,Normal,QIcon::Off,iconSize, 
widget, painter),
                       iconSize);
         }
 
@@ -12901,7 +12901,7 @@
         btnOpt.rect = subControlRect(CC_MdiControls, option, 
SC_MdiCloseButton, widget);
         //drawPrimitive(PE_PanelButtonCommand, &btnOpt, painter, widget);
         QPixmap pm = 
getPixmapFromIcon(standardIcon(SP_TitleBarCloseButton,&btnOpt,widget),
-                                       
iconmode,iconstate,QSize(btnSize,btnSize));
+                                       
iconmode,iconstate,QSize(btnSize,btnSize), widget, painter);
         drawItemPixmap(painter, btnOpt.rect, Qt::AlignCenter, pm);
       }
       if (option->subControls & QStyle::SC_MdiNormalButton)
@@ -12930,7 +12930,7 @@
         btnOpt.rect = subControlRect(CC_MdiControls, option, 
SC_MdiNormalButton, widget);
         //drawPrimitive(PE_PanelButtonCommand, &btnOpt, painter, widget);
         QPixmap pm = 
getPixmapFromIcon(standardIcon(SP_TitleBarNormalButton,&btnOpt,widget),
-                                       
iconmode,iconstate,QSize(btnSize,btnSize));
+                                       
iconmode,iconstate,QSize(btnSize,btnSize), widget, painter);
         drawItemPixmap(painter, btnOpt.rect, Qt::AlignCenter, pm);
       }
       if (option->subControls & QStyle::SC_MdiMinButton)
@@ -12959,7 +12959,7 @@
         btnOpt.rect = subControlRect(CC_MdiControls, option, SC_MdiMinButton, 
widget);
         //drawPrimitive(PE_PanelButtonCommand, &btnOpt, painter, widget);
         QPixmap pm = 
getPixmapFromIcon(standardIcon(SP_TitleBarMinButton,&btnOpt,widget),
-                                                    
iconmode,iconstate,QSize(btnSize,btnSize));
+                                                    
iconmode,iconstate,QSize(btnSize,btnSize), widget, painter);
         drawItemPixmap(painter, btnOpt.rect, Qt::AlignCenter, pm);
       }
 
@@ -15056,7 +15056,7 @@
                             const label_spec &lspec, // label spec
                             const size_spec &sspec, // size spec
                             const QString &text,
-                            const QSize iconSize,
+                            const QSize &iconSize,
                             const Qt::ToolButtonStyle tialign // text-icon 
alignment
                            ) const
 {
@@ -16912,7 +16912,9 @@
 QPixmap Style::getPixmapFromIcon(const QIcon &icon,
                                  const KvIconMode iconmode,
                                  const QIcon::State iconstate,
-                                 QSize iconSize) const
+                                 const QSize &iconSize,
+                                 const QWidget *w,
+                                 const QPainter *p) const
 {
   if (icon.isNull()) return QPixmap();
   QIcon::Mode icnMode;
@@ -16925,7 +16927,14 @@
   else// if (iconmode == Selected || iconmode == DisabledSelected)
     icnMode = QIcon::Selected;
 
-  QPixmap px = icon.pixmap(iconSize,icnMode,iconstate);
+  /* The window's device pixel ratio is especially needed with multi-screen 
setups
+     on Wayland. Without it, the maximum ratio of all screens would be used. */
+  QWindow *win = w ? w->window()->windowHandle() : nullptr;
+  qreal pixelRatio = win ? win->devicePixelRatio()
+                         : p && p->device() ? p->device()->devicePixelRatio() 
// QML
+                                            : qApp->devicePixelRatio();
+
+  QPixmap px = icon.pixmap(iconSize, pixelRatio, icnMode, iconstate);
 
   if (iconmode == Disabled || iconmode == DisabledSelected)
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/Kvantum.h 
new/Kvantum-1.1.9/Kvantum/style/Kvantum.h
--- old/Kvantum-1.1.8/Kvantum/style/Kvantum.h   2026-05-09 22:40:42.000000000 
+0200
+++ new/Kvantum-1.1.9/Kvantum/style/Kvantum.h   2026-10-31 20:59:15.000000000 
+0100
@@ -286,7 +286,9 @@
     QPixmap getPixmapFromIcon(const QIcon &icon,
                               const KvIconMode iconmode,
                               const QIcon::State iconstate,
-                              QSize iconSize) const;
+                              const QSize &iconSize,
+                              const QWidget *w,
+                              const QPainter *p = nullptr) const;
 
     /* Returns a pixmap tinted by the highlight color. */
     QPixmap tintedPixmap(const QStyleOption *option,
@@ -306,7 +308,7 @@
                          const label_spec &lspec,
                          const size_spec &sspec,
                          const QString &text,
-                         const QSize iconSize,
+                         const QSize &iconSize,
                          const Qt::ToolButtonStyle tialign = 
Qt::ToolButtonTextBesideIcon // text-icon alignment
                         ) const;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/blur/blurhelper.cpp 
new/Kvantum-1.1.9/Kvantum/style/blur/blurhelper.cpp
--- old/Kvantum-1.1.8/Kvantum/style/blur/blurhelper.cpp 2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/blur/blurhelper.cpp 2026-10-31 
20:59:15.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2024 <[email protected]>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2026 <[email protected]>
  *
  * Kvantum is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -23,9 +23,11 @@
 #include <QWindow>
 
 #ifdef NO_KF
+#ifndef NO_X11
 #include <QApplication>
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
+#endif
 #else
 #include <KWindowEffects>
 #endif
@@ -37,6 +39,7 @@
                         bool onlyActiveWindow) : QObject (parent)
 {
 #ifdef NO_KF
+#ifndef NO_X11
   isX11_ = (QString::compare(QGuiApplication::platformName(), "xcb", 
Qt::CaseInsensitive) == 0);
   if (isX11_)
   {
@@ -48,6 +51,7 @@
   else
     atom_blur_ = None;
 #endif
+#endif
 
   contrast_ = qBound (static_cast<qreal>(0), contrast, static_cast<qreal>(2));
   intensity_ = qBound (static_cast<qreal>(0), intensity, 
static_cast<qreal>(2));
@@ -240,12 +244,14 @@
 
   qreal dpr = 1;
 #ifdef NO_KF
+#ifndef NO_X11
   if (isX11_)
   {
     QWindow *win = widget->window()->windowHandle();
     dpr = win ? win->devicePixelRatio() : qApp->devicePixelRatio();
   }
 #endif
+#endif
 
   /* blurring may not be suitable when the available
      painting area is restricted by a widget mask */
@@ -327,20 +333,25 @@
 void BlurHelper::update (QWidget* widget) const
 {
 #ifdef NO_KF
+#ifdef NO_X11
+ return;
+#else
   if (!isX11_)
     return;
 #endif
+#endif
 
   QWindow *win = widget->windowHandle();
   if (win == nullptr)
     return;
 
-  const QRegion region (blurRegion (widget));
+  QRegion region (blurRegion (widget));
   if (region.isEmpty())
     clear (widget);
   else
   {
 #ifdef NO_KF
+#ifndef NO_X11
     if (!widget->internalWinId())
       return;
     Display *display = nullptr;
@@ -357,7 +368,13 @@
                      atom_blur_, XA_CARDINAL, 32, PropModeReplace,
                      reinterpret_cast<const unsigned char*>(data.constData()),
                      data.size());
+#endif
 #else
+    /* NOTE: This is a workaround for a regression that started with KWin 6.5
+             and rarely resulted in artifacts on resizing, especially on 
tiling. */
+    if (region == widget->rect())
+      region = QRegion();
+
     KWindowEffects::enableBlurBehind (win, true, region);
     /* NOTE: The contrast effect isn't used with menus and tooltips
              because their borders may be anti-aliased. */
@@ -380,6 +397,10 @@
 void BlurHelper::clear (QWidget* widget) const
 {
 #ifdef NO_KF
+#ifdef NO_X11
+  return;
+#endif
+#ifndef NO_X11
   if (!isX11_)
     return;
   Display *display = nullptr;
@@ -387,6 +408,7 @@
     display = x11NativeInterfce->display();
   if (display && widget->internalWinId())
     XDeleteProperty (display, widget->internalWinId(), atom_blur_);
+#endif
 #else
   QWindow *win = widget->windowHandle();
   if (win != nullptr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/blur/blurhelper.h 
new/Kvantum-1.1.9/Kvantum/style/blur/blurhelper.h
--- old/Kvantum-1.1.8/Kvantum/style/blur/blurhelper.h   2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/blur/blurhelper.h   2026-10-31 
20:59:15.000000000 +0100
@@ -1,7 +1,7 @@
 // Some functions were adapted from Oxygen-Transparent -> oxygenblurhelper.h
 
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2024 <[email protected]>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2026 <[email protected]>
  *
  * Kvantum is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -28,8 +28,10 @@
 #include <QRegion>
 
 #ifdef NO_KF
+#ifndef NO_X11
 #include <X11/Xdefs.h>
 #endif
+#endif
 
 namespace Kvantum {
 /* A class for blurring the region behind a translucent window in KDE. */
@@ -123,10 +125,12 @@
     bool onlyActiveWindow_;
 
 #ifdef NO_KF
+#ifndef NO_X11
     /* The required atom. */
     Atom atom_blur_;
     bool isX11_;
 #endif
+#endif
 };
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/drag/windowmanager.cpp 
new/Kvantum-1.1.9/Kvantum/style/drag/windowmanager.cpp
--- old/Kvantum-1.1.8/Kvantum/style/drag/windowmanager.cpp      2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/drag/windowmanager.cpp      2026-10-31 
20:59:15.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2024 <[email protected]>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2024-2026 <[email protected]>
  *
  * Kvantum is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -281,6 +281,8 @@
 bool WindowManager::mousePressEvent (QObject *object, QEvent *event)
 {
   QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
+  if (mouseEvent->source() != Qt::MouseEventNotSynthesized)
+    return false; // not a genuine mouse event
   if (!(mouseEvent->modifiers() == Qt::NoModifier && mouseEvent->button() == 
Qt::LeftButton))
     return false;
 
@@ -475,6 +477,8 @@
   if (!dragInProgress_)
   {
     QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
+    if (mouseEvent->source() != Qt::MouseEventNotSynthesized)
+      return false; // not a genuine mouse event
     if (dragAboutToStart_)
     {
       dragAboutToStart_ = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/eventFiltering.cpp 
new/Kvantum-1.1.9/Kvantum/style/eventFiltering.cpp
--- old/Kvantum-1.1.8/Kvantum/style/eventFiltering.cpp  2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/eventFiltering.cpp  2026-10-31 
20:59:15.000000000 +0100
@@ -293,7 +293,7 @@
                                                        ? -1 : state,
                                                      isInactive, lspec),
                                          cbtn->isChecked() ? QIcon::On : 
QIcon::Off,
-                                         cbtn->iconSize()));
+                                         cbtn->iconSize(), w));
 
         int textflags = Qt::TextShowMnemonic;
         if (!styleHint(QStyle::SH_UnderlineShortcut, &option, cbtn))
@@ -982,8 +982,13 @@
         /* "magical" condition for a submenu */
         QPoint parentMenuCorner;
         QMenu *parentMenu = 
qobject_cast<QMenu*>(QApplication::activePopupWidget());
-        /* this is a workaround for KDE global menu */
-        if (parentMenu && parentMenu->activeAction() == nullptr) parentMenu = 
nullptr;
+        /* this is a workaround for KDE global menu and also
+           for a Qt bug which may report an active action while there is none 
*/
+        if (parentMenu && (parentMenu->activeAction() == nullptr
+                           || parentMenu->activeAction()->menu() != menu))
+        {
+          parentMenu = nullptr;
+        }
         if (parentMenu == nullptr)
         { // search for a detached menu with an active action
           const QWidgetList topLevels = QApplication::topLevelWidgets();
@@ -993,7 +998,8 @@
             if (auto topMenu = qobject_cast<QMenu*>(topWidget))
             {
               if (topWidget->testAttribute(Qt::WA_X11NetWmWindowTypeMenu)
-                  && topMenu->activeAction())
+                  && topMenu->activeAction()
+                  && topMenu->activeAction()->menu() == menu)
               {
                 parentMenu = topMenu;
                 parentMenuCorner = parentMenu->mapToGlobal(QPoint(0,0));
@@ -1032,7 +1038,6 @@
           }
         }
 
-        bool isWaylandMenu = false;
         bool isWaylandSubMenu = false;
         bool isWaylandMenuBarMenu = false;
 #if (QT_VERSION >= QT_VERSION_CHECK(6,11,0))
@@ -1162,9 +1167,6 @@
               }
               else
               {
-#if (QT_VERSION >= QT_VERSION_CHECK(6,11,0))
-                isWaylandMenu = true;
-#endif
                 QRect pg;
                 if (QWidget *p = w->parentWidget())
                   pg = p->window()->geometry();
@@ -1265,9 +1267,6 @@
               }
               else // the global position is unknown under Wayland
               {
-#if (QT_VERSION >= QT_VERSION_CHECK(6,11,0))
-                isWaylandMenu = true;
-#endif
                 /* snap to the parent window's top/left side if needed and,
                    as the last resort, consider the cursor position */
                 QRect pg;
@@ -1363,27 +1362,6 @@
             }
           }
         }
-        else if (isWaylandMenu && sc != nullptr && w->layoutDirection() == 
Qt::RightToLeft
-                 && menu->menuAction())
-        { // RTL context menus of Qt 6.11 are terrible
-          if (QWindow *win = w->windowHandle())
-          {
-            QRect geom(0, 0, 1, 1);
-            QPoint curPos = QCursor::pos(sc);
-            if (curPos.x() == g.left())
-            { // workaround for a weird RTL issue in Qt
-              dX += menuShadow_.at(2) + menuShadow_.at(0);
-              DX = qRound(dX);
-            }
-            if (QWidget *p = w->parentWidget())
-              curPos = p->window()->mapFromGlobal(curPos);
-            geom.moveTopRight(curPos);
-            win->setProperty("_q_waylandPopupAnchorRect", geom.translated(DX, 
DY));
-
-            uint constraintAdjustment = 1 | 2;
-            win->setProperty("_q_waylandPopupConstraintAdjustment", 
constraintAdjustment);
-          }
-        }
 
         /* This workaround isn't needed anymore. It didn't work with Wayland 
either. */
         // prevent the menu from switching to another screen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Kvantum-1.1.8/Kvantum/style/standardIcons.cpp 
new/Kvantum-1.1.9/Kvantum/style/standardIcons.cpp
--- old/Kvantum-1.1.8/Kvantum/style/standardIcons.cpp   2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/standardIcons.cpp   2026-10-31 
20:59:15.000000000 +0100
@@ -113,7 +113,7 @@
       if (!icn.isNull())
       {
         if (option || widget)
-        { // also correct the color of the symbolic clear icon  (-> CE_ToolBar)
+        { // also correct the color of the symbolic clear icon (-> CE_ToolBar)
           if 
(enoughContrast(standardPalette().color(QPalette::Active,QPalette::Text),
                              option ? 
option->palette.color(QPalette::Active,QPalette::Text)
                                     : 
widget->palette().color(QPalette::Active,QPalette::Text)))
@@ -122,7 +122,7 @@
             QPixmap px = getPixmapFromIcon(icn,
                                            (option ? (option->state & 
State_Enabled) : widget->isEnabled())
                                              ? Selected : DisabledSelected,
-                                           QIcon::On, QSize(s,s));
+                                           QIcon::On, QSize(s,s), widget);
             icn = QIcon(px);
           }
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Kvantum-1.1.8/Kvantum/style/themeconfig/ThemeConfig.cpp 
new/Kvantum-1.1.9/Kvantum/style/themeconfig/ThemeConfig.cpp
--- old/Kvantum-1.1.8/Kvantum/style/themeconfig/ThemeConfig.cpp 2026-05-09 
22:40:42.000000000 +0200
+++ new/Kvantum-1.1.9/Kvantum/style/themeconfig/ThemeConfig.cpp 2026-10-31 
20:59:15.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2024 <[email protected]>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2026 <[email protected]>
  *
  * Kvantum is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -20,10 +20,12 @@
 #include <QApplication>
 #include "ThemeConfig.h"
 
+#ifndef NO_X11
 #if defined Q_WS_X11 || defined Q_OS_LINUX || defined Q_OS_FREEBSD || defined 
Q_OS_OPENBSD || defined Q_OS_NETBSD || defined Q_OS_HURD
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
 #endif
+#endif
 
 namespace Kvantum {
 
@@ -579,6 +581,7 @@
 {
   bool compositing(false);
 
+#ifndef NO_X11
 #if defined Q_WS_X11 || defined Q_OS_LINUX || defined Q_OS_FREEBSD || defined 
Q_OS_OPENBSD || defined Q_OS_NETBSD || defined Q_OS_HURD
   if (isX11_)
   {
@@ -598,6 +601,10 @@
     compositing = true;
   }
 #endif
+#else
+  if (QString::compare(QGuiApplication::platformName(), "wayland", 
Qt::CaseInsensitive) == 0)
+    compositing = true;
+#endif
 
   /* no blurring or window translucency without compositing */
   if (compositing)

Reply via email to