Hello community,

here is the log from the commit of package dtkwidget for openSUSE:Factory 
checked in at 2019-07-11 13:17:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dtkwidget (Old)
 and      /work/SRC/openSUSE:Factory/.dtkwidget.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dtkwidget"

Thu Jul 11 13:17:46 2019 rev:5 rq:714325 version:2.0.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/dtkwidget/dtkwidget.changes      2019-04-30 
13:02:37.826127635 +0200
+++ /work/SRC/openSUSE:Factory/.dtkwidget.new.4615/dtkwidget.changes    
2019-07-11 13:18:09.262771911 +0200
@@ -1,0 +2,9 @@
+Sun Jul  7 14:39:26 UTC 2019 - Hillwood Yang <[email protected]>
+
+- Update version to 2.0.15
+  * Fix repaint widget mask color when the color changed
+  * Fix always show menu button
+  * Fix always show button on none linux
+  * Fix hide the non-window type window titlebar menu button on initialize
+
+-------------------------------------------------------------------

Old:
----
  dtkwidget-2.0.12.1.tar.gz

New:
----
  dtkwidget-2.0.15.tar.gz

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

Other differences:
------------------
++++++ dtkwidget.spec ++++++
--- /var/tmp/diff_new_pack.f1O73n/_old  2019-07-11 13:18:10.398771552 +0200
+++ /var/tmp/diff_new_pack.f1O73n/_new  2019-07-11 13:18:10.402771551 +0200
@@ -13,14 +13,14 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 %define libver 2
 
 Name:           dtkwidget
-Version:        2.0.12.1
+Version:        2.0.15
 Release:        0
 Summary:        Deepin graphical user interface library
 License:        GPL-3.0-or-later
@@ -95,7 +95,8 @@
 
 %files
 %defattr(-,root,root,-)
-%doc LICENSE README.md
+%doc README.md CHANGELOG.md
+%license LICENSE
 %dir %{_datadir}/dtkwidget
 %{_datadir}/dtkwidget/translations
 %dir %{_libexecdir}/dtk2

++++++ dtkwidget-2.0.12.1.tar.gz -> dtkwidget-2.0.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/.release.json 
new/dtkwidget-2.0.15/.release.json
--- old/dtkwidget-2.0.12.1/.release.json        2019-04-18 09:34:05.000000000 
+0200
+++ new/dtkwidget-2.0.15/.release.json  2019-07-05 08:42:21.000000000 +0200
@@ -1,7 +1,7 @@
 {
         "commit": {
                 "quilt": false,
-                "pkgver": "echo $(git tag | sort -V | tail -n1)'+r'$(date 
'+%%y%%m%%d%%H%%M%%S')'+g'$(git rev-parse --short HEAD);",
+                "pkgver": "echo $(git tag | sort -V | tail -n1)'+r'$(git log 
$(git describe --abbrev=0 --tags)..HEAD --oneline|wc -l)'+g'$(git rev-parse 
--short HEAD);",
                 "dist": "experimental"
         },
         "release": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/CHANGELOG.md 
new/dtkwidget-2.0.15/CHANGELOG.md
--- old/dtkwidget-2.0.12.1/CHANGELOG.md 2019-04-18 09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/CHANGELOG.md   2019-07-05 08:42:21.000000000 +0200
@@ -1,3 +1,25 @@
+<a name="2.0.14"></a>
+## 2.0.14 (2019-05-23)
+
+
+#### Bug Fixes
+
+*   hide the non-window type window titlebar menu button on initialize 
([eb0500fa](https://github.com/linuxdeepin/dtkwidget/commit/eb0500fa06e3a97fe2d98c8ad76dfc5edfaa9d58))
+
+
+
+<a name="2.0.13"></a>
+## 2.0.13 (2019-05-09)
+
+
+#### Bug Fixes
+
+*   repaint widget mask color when the color changed 
([7553188b](https://github.com/linuxdeepin/dtkwidget/commit/7553188bfe9f9c34def92728e4aaeac9beb078a0))
+*   always show menu button 
([4612b6fc](https://github.com/linuxdeepin/dtkwidget/commit/4612b6fc7cdd976f54065750bc628f5d1776a565))
+*   always show button on none linux 
([633617d0](https://github.com/linuxdeepin/dtkwidget/commit/633617d0e2c7a3282c53b367c5753f688360dee1))
+
+
+
 <a name="2.0.12"></a>
 ## 2.0.12 (2019-04-18)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/README.md 
new/dtkwidget-2.0.15/README.md
--- old/dtkwidget-2.0.12.1/README.md    2019-04-18 09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/README.md      2019-07-05 08:42:21.000000000 +0200
@@ -1,6 +1,6 @@
 # Deepin Tool Kit Widget {#mainpage}
 
-Deepint Tool Kit (Dtk) is the base devlopment tool of all C++/Qt Developer 
work on Deepin.
+Deepin Tool Kit (Dtk) is the base devlopment tool of all C++/Qt Developer work 
on Deepin.
 
 ## Dependencies
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/debian/libdtkwidget2.symbols 
new/dtkwidget-2.0.15/debian/libdtkwidget2.symbols
--- old/dtkwidget-2.0.12.1/debian/libdtkwidget2.symbols 2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/debian/libdtkwidget2.symbols   2019-07-05 
08:42:21.000000000 +0200
@@ -35,7 +35,6 @@
  _ZN11ButtonGroupD0Ev@Base 2.0.11
  _ZN11ButtonGroupD1Ev@Base 2.0.11
  _ZN11ButtonGroupD2Ev@Base 2.0.11
- (optional=templinst)_ZN11DDBusCaller3argI7QStringEES_RKT_@Base 2.0.11
  _ZN11DDBusCallerD1Ev@Base 2.0.11
  _ZN11DDBusCallerD2Ev@Base 2.0.11
  _ZN11QStringListD1Ev@Base 2.0.11
@@ -69,7 +68,6 @@
  
(optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED0Ev@Base
 2.0.11
  
(optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED1Ev@Base
 2.0.11
  
(optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED2Ev@Base
 2.0.11
- 
(optional=templinst)_ZN12QtConcurrent3runIb16QSystemSemaphoreEE7QFutureIT_EPT0_MS5_FS3_vE@Base
 2.0.11
  _ZN12ShortcutEdit10paintEventEP11QPaintEvent@Base 2.0.11
  _ZN12ShortcutEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
  _ZN12ShortcutEdit11qt_metacastEPKc@Base 2.0.11
@@ -93,7 +91,6 @@
  _ZN13DBusInterface12NameAcquiredERK7QString@Base 2.0.11
  _ZN13DBusInterface16NameOwnerChangedERK7QStringS2_S2_@Base 2.0.11
  _ZN13DBusInterface16staticMetaObjectE@Base 2.0.11
- _ZN13DBusInterface19__propertyChanged__ERK12QDBusMessage@Base 2.0.11
  _ZN13DBusInterface8NameLostERK7QString@Base 2.0.11
  _ZN13DBusInterfaceC1ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
  _ZN13DBusInterfaceC2ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
@@ -257,7 +254,6 @@
  _ZN18NavigationDelegateD0Ev@Base 2.0.11
  _ZN18NavigationDelegateD1Ev@Base 2.0.11
  _ZN18NavigationDelegateD2Ev@Base 2.0.11
- 
(optional=templinst)_ZN18QMetaTypeIdQObjectIP7QWidgetLi8EE14qt_metatype_idEv@Base
 2.0.11
  _ZN18QStyleOptionButtonD1Ev@Base 2.0.11
  _ZN18QStyleOptionButtonD2Ev@Base 2.0.11
  
(optional=templinst)_ZN21QScopedPointerDeleterIN3Dtk6Widget14ContentPrivateEE7cleanupEPS2_@Base
 2.0.11
@@ -1143,7 +1139,6 @@
  _ZN3Dtk6Widget14DForeignWindow14wmClassChangedEv@Base 2.0.11
  _ZN3Dtk6Widget14DForeignWindow16staticMetaObjectE@Base 2.0.11
  _ZN3Dtk6Widget14DForeignWindow5eventEP6QEvent@Base 2.0.11
- _ZN3Dtk6Widget14DForeignWindow9fromWinIdEy@Base 2.0.11
  _ZN3Dtk6Widget14DForeignWindowC1EP7QWindow@Base 2.0.11
  _ZN3Dtk6Widget14DForeignWindowC2EP7QWindow@Base 2.0.11
  _ZN3Dtk6Widget14DForeignWindowD0Ev@Base 2.0.11
@@ -2491,8 +2486,6 @@
  _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD0Ev@Base 2.0.11
  _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD1Ev@Base 2.0.11
  _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD2Ev@Base 2.0.11
- 
_ZN3Dtk6Widget29DSettingsWidgetFactoryPrivateC1EPNS0_22DSettingsWidgetFactoryE@Base
 2.0.11
- 
_ZN3Dtk6Widget29DSettingsWidgetFactoryPrivateC2EPNS0_22DSettingsWidgetFactoryE@Base
 2.0.11
  _ZN3Dtk6Widget29createButtonGroupOptionHandleEP7QObject@Base 2.0.11
  
_ZN3Dtk6Widget30DAbstractStackWidgetTransition15beginTransitionERKNS1_14TransitionInfoE@Base
 2.0.11
  _ZN3Dtk6Widget30DAbstractStackWidgetTransitionC1EP7QObject@Base 2.0.11
@@ -2874,18 +2867,12 @@
  _ZN3Dtk6Widget9DTitlebarD1Ev@Base 2.0.11
  _ZN3Dtk6Widget9DTitlebarD2Ev@Base 2.0.11
  (optional=templinst)_ZN4QMapI7QString8QVariantE13detach_helperEv@Base 2.0.11
- (optional=templinst)_ZN4QMapI7QString8QVariantEC1ERKS2_@Base 2.0.11
- (optional=templinst)_ZN4QMapI7QString8QVariantEC2ERKS2_@Base 2.0.11
  (optional=templinst)_ZN4QMapI7QString8QVariantED1Ev@Base 2.0.11
  (optional=templinst)_ZN4QMapI7QString8QVariantED2Ev@Base 2.0.11
  
(optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEE13detach_helperEv@Base
 2.0.11
- 
(optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEEC1ERKS4_@Base
 2.0.11
- 
(optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEEC2ERKS4_@Base
 2.0.11
  
(optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEED1Ev@Base 
2.0.11
  
(optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEED2Ev@Base 
2.0.11
  (optional=templinst)_ZN4QMapI7QStringS0_E13detach_helperEv@Base 2.0.11
- (optional=templinst)_ZN4QMapI7QStringS0_EC1ERKS1_@Base 2.0.11
- (optional=templinst)_ZN4QMapI7QStringS0_EC2ERKS1_@Base 2.0.11
  (optional=templinst)_ZN4QMapI7QStringS0_ED1Ev@Base 2.0.11
  (optional=templinst)_ZN4QMapI7QStringS0_ED2Ev@Base 2.0.11
  
(optional=templinst)_ZN4QMapI7QStringSt8functionIFP7QWidgetP7QObjectEEE6insertERKS0_RKS7_@Base
 2.0.11
@@ -3028,12 +3015,9 @@
  (optional=templinst)_ZN5QListIP11QLayoutItemED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP11QLayoutItemED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP11QToolButtonE18detach_helper_growEii@Base 
2.0.11
- (optional=templinst)_ZN5QListIP11QToolButtonEC1ERKS2_@Base 2.0.11
- (optional=templinst)_ZN5QListIP11QToolButtonEC2ERKS2_@Base 2.0.11
  (optional=templinst)_ZN5QListIP11QToolButtonED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP11QToolButtonED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP12QRadioButtonE18detach_helper_growEii@Base 
2.0.11
- (optional=templinst)_ZN5QListIP12QRadioButtonE6appendERKS1_@Base 2.0.11
  (optional=templinst)_ZN5QListIP12QRadioButtonEC1ERKS2_@Base 2.0.11
  (optional=templinst)_ZN5QListIP12QRadioButtonEC2ERKS2_@Base 2.0.11
  (optional=templinst)_ZN5QListIP12QRadioButtonED1Ev@Base 2.0.11
@@ -3047,13 +3031,10 @@
  (optional=templinst)_ZN5QListIP15QAbstractButtonE13detach_helperEi@Base 2.0.11
  (optional=templinst)_ZN5QListIP15QAbstractButtonE18detach_helper_growEii@Base 
2.0.11
  (optional=templinst)_ZN5QListIP15QAbstractButtonE6appendERKS1_@Base 2.0.11
- (optional=templinst)_ZN5QListIP15QAbstractButtonEC1ERKS2_@Base 2.0.11
- (optional=templinst)_ZN5QListIP15QAbstractButtonEC2ERKS2_@Base 2.0.11
  (optional=templinst)_ZN5QListIP15QAbstractButtonED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP15QAbstractButtonED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemE13detach_helperEi@Base 
2.0.11
  
(optional=templinst)_ZN5QListIP19QGraphicsPixmapItemE18detach_helper_growEii@Base
 2.0.11
- (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemE6appendERKS1_@Base 2.0.11
  (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP7QScreenE13detach_helperEi@Base 2.0.11
@@ -3078,13 +3059,9 @@
  (optional=templinst)_ZN5QListIP9QLineEditED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIP9QLineEditED2Ev@Base 2.0.11
  
(optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEE18detach_helper_growEii@Base
 2.0.11
- 
(optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEE6appendERKS4_@Base
 2.0.11
- 
(optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEEC1ERKS5_@Base 
2.0.11
- 
(optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEEC2ERKS5_@Base 
2.0.11
  (optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEED1Ev@Base 
2.0.11
  (optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEED2Ev@Base 
2.0.11
  
(optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEE18detach_helper_growEii@Base
 2.0.11
- (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEE6appendERKS3_@Base 
2.0.11
  (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEED2Ev@Base 2.0.11
  
(optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEE13detach_helperEi@Base
 2.0.11
@@ -3105,7 +3082,6 @@
  (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEEpLERKS4_@Base 
2.0.11
  
(optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEE18detach_helper_growEii@Base
 2.0.11
- (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEE6appendERKS3_@Base 2.0.11
  (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEED2Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIS_I6QColorEE18detach_helper_growEii@Base 2.0.11
@@ -3113,7 +3089,6 @@
  (optional=templinst)_ZN5QListIbE13detach_helperEi@Base 2.0.11
  (optional=templinst)_ZN5QListIbE18detach_helper_growEii@Base 2.0.11
  (optional=templinst)_ZN5QListIbE6appendERKb@Base 2.0.11
- (optional=templinst)_ZN5QListIbE6detachEv@Base 2.0.11
  (optional=templinst)_ZN5QListIbEC1ERKS0_@Base 2.0.11
  (optional=templinst)_ZN5QListIbEC2ERKS0_@Base 2.0.11
  (optional=templinst)_ZN5QListIbED1Ev@Base 2.0.11
@@ -3122,14 +3097,8 @@
  (optional=templinst)_ZN5QListIiE18detach_helper_growEii@Base 2.0.11
  (optional=templinst)_ZN5QListIiE6appendERKi@Base 2.0.11
  (optional=templinst)_ZN5QListIiE9removeOneERKi@Base 2.0.11
- (optional=templinst)_ZN5QListIiEC1ERKS0_@Base 2.0.11
- (optional=templinst)_ZN5QListIiEC2ERKS0_@Base 2.0.11
  (optional=templinst)_ZN5QListIiED1Ev@Base 2.0.11
  (optional=templinst)_ZN5QListIiED2Ev@Base 2.0.11
- (optional=templinst)_ZN5QListIyE18detach_helper_growEii@Base 2.0.11
- (optional=templinst)_ZN5QListIyE6appendERKy@Base 2.0.11
- (optional=templinst)_ZN5QListIyED1Ev@Base 2.0.11
- (optional=templinst)_ZN5QListIyED2Ev@Base 2.0.11
  _ZN7QStringC1EPKc@Base 2.0.11
  _ZN7QStringC2EPKc@Base 2.0.11
  _ZN7QStringD1Ev@Base 2.0.11
@@ -3141,8 +3110,6 @@
  
(optional=templinst)_ZN7QVectorIN3Dtk6Widget21DPlatformWindowHandle10WMBlurAreaEE6appendERKS3_@Base
 2.0.11
  
(optional=templinst)_ZN7QVectorIiE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base
 2.0.11
  
(optional=templinst)_ZN7QVectorIjE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base
 2.0.11
- (optional=templinst)_ZN7QVectorIjEC1ERKS0_@Base 2.0.11
- (optional=templinst)_ZN7QVectorIjEC2ERKS0_@Base 2.0.11
  _ZN7QWidget8setFocusEv@Base 2.0.11
  _ZN8ComboBox10wheelEventEP11QWheelEvent@Base 2.0.11
  _ZN8ComboBox11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
@@ -3177,7 +3144,6 @@
  _ZN9DBusMPRIS17LoopStatusChangedERK7QString@Base 2.0.11
  _ZN9DBusMPRIS18MaximumRateChangedEd@Base 2.0.11
  _ZN9DBusMPRIS18MinimumRateChangedEd@Base 2.0.11
- _ZN9DBusMPRIS19__propertyChanged__ERK12QDBusMessage@Base 2.0.11
  _ZN9DBusMPRIS20CanGoPreviousChangedEb@Base 2.0.11
  _ZN9DBusMPRIS21PlaybackStatusChangedERK7QString@Base 2.0.11
  _ZN9DBusMPRIS6SeekedEx@Base 2.0.11
@@ -3247,7 +3213,6 @@
  
(optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringListEUlvE2_Li0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base
 2.0.11
  
(optional=templinst)_ZN9QtPrivate28QVariantValueHelperInterfaceI4QMapI7QString8QVariantEE6invokeERKS3_@Base
 2.0.11
  _ZN9QtPrivate8RefCount3refEv@Base 2.0.11
- 
(optional=templinst)_ZN9__gnu_cxx12__to_xstringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEET_PFiPT0_mPKS8_P13__va_list_tagEmSB_z@Base
 2.0.11
  _ZNK11ButtonGroup10metaObjectEv@Base 2.0.11
  _ZNK12ContentTitle10metaObjectEv@Base 2.0.11
  _ZNK12DThemeHelper10metaObjectEv@Base 2.0.11
@@ -3865,10 +3830,6 @@
  (optional=templinst)_ZNK4QMapIiPN3Dtk6Widget11DBaseExpandEE6valuesEv@Base 
2.0.11
  
(optional=templinst)_ZNK5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_Pj@Base
 2.0.11
  
(optional=templinst)_ZNK5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_j@Base
 2.0.11
- 
(optional=templinst)_ZNK5QHashI7QString15QHashDummyValueE8findNodeERKS0_j@Base 
2.0.11
- (optional=templinst)_ZNK5QHashI9QMimeTypexE8findNodeERKS0_j@Base 2.0.11
- 
(optional=templinst)_ZNK5QHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEE8findNodeERKS1_Pj@Base
 2.0.11
- 
(optional=templinst)_ZNK5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetE8findNodeERKS4_Pj@Base
 2.0.11
  (optional=templinst)_ZNK5QListI7QStringE5valueEi@Base 2.0.11
  (optional=templinst)_ZNK5QListIN14QTabBarPrivate3TabEE7indexOfERKS1_i@Base 
2.0.11
  (optional=templinst)_ZNK5QListIP15QAbstractButtonE7indexOfERKS1_i@Base 2.0.11
@@ -3897,15 +3858,12 @@
  
(optional=templinst)_ZNSt14_Function_base13_Base_managerIPFP7QWidgetP7QObjectEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation@Base
 2.0.11
  
(optional=templinst)_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv@Base
 2.0.11
  
(optional=templinst)_ZNSt17_Function_handlerIFP7QWidgetP7QObjectEPS4_E9_M_invokeERKSt9_Any_dataOS3_@Base
 2.0.11
- 
(optional=templinst)_ZNSt6vectorIN16QLineEditPrivate15SideWidgetEntryESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_@Base
 2.0.11
- 
(optional=templinst)_ZNSt6vectorIN16QLineEditPrivate15SideWidgetEntryESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EERS6_@Base
 2.0.11
  (optional=templinst)_ZNSt8functionIFP7QWidgetP7QObjectEEC1ERKS5_@Base 2.0.11
  (optional=templinst)_ZNSt8functionIFP7QWidgetP7QObjectEEC2ERKS5_@Base 2.0.11
  (optional=templinst)_ZNSt8functionIFvRK7QStringEEC1ERKS4_@Base 2.0.11
  (optional=templinst)_ZNSt8functionIFvRK7QStringEEC2ERKS4_@Base 2.0.11
  (optional=templinst)_ZNSt8functionIFvvEEC1ERKS1_@Base 2.0.11
  (optional=templinst)_ZNSt8functionIFvvEEC2ERKS1_@Base 2.0.11
- 
(optional=templinst)_ZSt13__adjust_heapIN5QListIiE8iteratorExiN9__gnu_cxx5__ops15_Iter_less_iterEEvT_T0_S7_T1_T2_@Base
 2.0.11
  
(optional=templinst)_ZSt16__insertion_sortIN5QListIiE8iteratorEN9__gnu_cxx5__ops15_Iter_less_iterEEvT_S6_T0_@Base
 2.0.11
  _ZTI11ButtonGroup@Base 2.0.11
  _ZTI12ContentTitle@Base 2.0.11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dtkwidget-2.0.12.1/examples/dwidget-examples/collections/mainwindow.cpp 
new/dtkwidget-2.0.15/examples/dwidget-examples/collections/mainwindow.cpp
--- old/dtkwidget-2.0.12.1/examples/dwidget-examples/collections/mainwindow.cpp 
2019-04-18 09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/examples/dwidget-examples/collections/mainwindow.cpp   
2019-07-05 08:42:21.000000000 +0200
@@ -58,6 +58,7 @@
     auto flags = windowFlags() & ~Qt::WindowMaximizeButtonHint;
     flags = flags & ~Qt::WindowMinimizeButtonHint;
     setWindowFlags(flags);
+    setAttribute(Qt::WA_TranslucentBackground);
 
     DThemeManager *themeManager = DThemeManager::instance();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/util/dwindowmanagerhelper.cpp 
new/dtkwidget-2.0.15/src/util/dwindowmanagerhelper.cpp
--- old/dtkwidget-2.0.12.1/src/util/dwindowmanagerhelper.cpp    2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/util/dwindowmanagerhelper.cpp      2019-07-05 
08:42:21.000000000 +0200
@@ -34,10 +34,12 @@
 // functions
 DEFINE_CONST_CHAR(hasBlurWindow);
 DEFINE_CONST_CHAR(hasComposite);
+DEFINE_CONST_CHAR(hasNoTitlebar);
 DEFINE_CONST_CHAR(windowManagerName);
 DEFINE_CONST_CHAR(connectWindowManagerChangedSignal);
 DEFINE_CONST_CHAR(connectHasBlurWindowChanged);
 DEFINE_CONST_CHAR(connectHasCompositeChanged);
+DEFINE_CONST_CHAR(connectHasNoTitlebarChanged);
 DEFINE_CONST_CHAR(getCurrentWorkspaceWindows);
 DEFINE_CONST_CHAR(getWindows);
 DEFINE_CONST_CHAR(connectWindowListChanged);
@@ -81,6 +83,17 @@
     return connectHasCompositeChanged && reinterpret_cast<bool(*)(QObject 
*object, std::function<void ()>)>(connectHasCompositeChanged)(object, slot);
 }
 
+static bool connectHasNoTitlebarChanged(QObject *object, std::function<void 
()> slot)
+{
+    QFunctionPointer connectHasNoTitlebarChanged = Q_NULLPTR;
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+    connectHasNoTitlebarChanged = 
qApp->platformFunction(_connectHasNoTitlebarChanged);
+#endif
+
+    return connectHasNoTitlebarChanged && reinterpret_cast<bool(*)(QObject 
*object, std::function<void ()>)>(connectHasNoTitlebarChanged)(object, slot);
+}
+
 static bool connectWindowListChanged(QObject *object, std::function<void ()> 
slot)
 {
     QFunctionPointer connectWindowListChanged = Q_NULLPTR;
@@ -143,6 +156,14 @@
  */
 
 /*!
+ * \~chinese \property DWindowManagerHelper::hasNoTitlebar
+ * \~chinese \brief 窗口管理器是否支持隐藏窗口标题栏。如果支持,则 
DPlatformWindowHandle::enableDXcbForWindow
+ * \~chinese 会优先使用此方法支持自定义窗口标题栏。
+ * \~chinese \note 只读
+ * \~chinese \sa DPlatformWindowHandle::enableNoTitlebarForWindow
+ */
+
+/*!
  * \~chinese \enum DWindowManagerHelper::MotifFunction
  * \~chinese MotifFunction::MotifFunction 窗口管理器对窗口所能控制的行为
  *
@@ -266,6 +287,8 @@
  * \~chinese \brief 信号会在 hasBlurWindow 属性的值改变时被发送
  * \~chinese \fn DWindowManagerHelper::hasCompositeChanged
  * \~chinese \brief 信号会在 hasComposite 属性的值改变时被发送
+ * \~chinese \fn DWindowManagerHelper::hasNoTitlebarChanged
+ * \~chinese \brief 信号会在 hasNoTitlebar 属性的值改变时被发送
  * \~chinese \fn DWindowManagerHelper::windowListChanged
  * \~chinese \brief 信号会在当前环境本地窗口列表变化时被发送。包含打开新窗口、关闭窗口、改变窗口的
  * \~chinese 层叠顺序
@@ -479,6 +502,21 @@
 }
 
 /*!
+ * \~chinese \brief DWindowManagerHelper::hasNoTitlebar
+ * \~chinese \return 如果窗口管理器当前支持设置隐藏窗口标题栏则返回 true,否则返回 false
+ */
+bool DWindowManagerHelper::hasNoTitlebar() const
+{
+    QFunctionPointer hasNoTitlebar = Q_NULLPTR;
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+    hasNoTitlebar = qApp->platformFunction(_hasNoTitlebar);
+#endif
+
+    return hasNoTitlebar && reinterpret_cast<bool(*)()>(hasNoTitlebar)();
+}
+
+/*!
  * \~chinese \brief DWindowManagerHelper::windowManagerNameString
  * \~chinese \return 返回窗口管理器名称。在X11平台上,此值为窗口管理器对应窗口的 _NET_WM_NAME
  * \~chinese 的值
@@ -618,6 +656,9 @@
     connectHasCompositeChanged(this, [this] {
         Q_EMIT hasCompositeChanged();
     });
+    connectHasNoTitlebarChanged(this, [this] {
+        Q_EMIT hasNoTitlebarChanged();
+    });
     connectWindowListChanged(this, [this] {
         Q_EMIT windowListChanged();
     });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/util/dwindowmanagerhelper.h 
new/dtkwidget-2.0.15/src/util/dwindowmanagerhelper.h
--- old/dtkwidget-2.0.12.1/src/util/dwindowmanagerhelper.h      2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/util/dwindowmanagerhelper.h        2019-07-05 
08:42:21.000000000 +0200
@@ -34,6 +34,7 @@
 
     Q_PROPERTY(bool hasBlurWindow READ hasBlurWindow NOTIFY 
hasBlurWindowChanged)
     Q_PROPERTY(bool hasComposite READ hasComposite NOTIFY hasCompositeChanged)
+    Q_PROPERTY(bool hasNoTitlebar READ hasNoTitlebar NOTIFY 
hasNoTitlebarChanged)
 
 public:
     enum MotifFunction {
@@ -79,6 +80,7 @@
 
     bool hasBlurWindow() const;
     bool hasComposite() const;
+    bool hasNoTitlebar() const;
     QString windowManagerNameString() const;
     WMName windowManagerName() const;
 
@@ -90,6 +92,7 @@
     void windowManagerChanged();
     void hasBlurWindowChanged();
     void hasCompositeChanged();
+    void hasNoTitlebarChanged();
     void windowListChanged();
     void windowMotifWMHintsChanged(quint32 winId);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/daboutdialog.cpp 
new/dtkwidget-2.0.15/src/widgets/daboutdialog.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/daboutdialog.cpp 2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/daboutdialog.cpp   2019-07-05 
08:42:21.000000000 +0200
@@ -575,6 +575,6 @@
     }
 }
 
-#include "moc_daboutdialog.cpp"
-
 DWIDGET_END_NAMESPACE
+
+#include "moc_daboutdialog.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dabstractdialog.cpp 
new/dtkwidget-2.0.15/src/widgets/dabstractdialog.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dabstractdialog.cpp      2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dabstractdialog.cpp        2019-07-05 
08:42:21.000000000 +0200
@@ -61,6 +61,9 @@
 //        DPlatformWindowHandle::connectWindowManagerChangedSignal(q, [this] {
 //            bgBlurWidget->setVisible(DPlatformWindowHandle::hasBlurWindow());
 //        });
+    } else {
+        q->setWindowFlags(q->windowFlags() | Qt::FramelessWindowHint);
+        q->setBorderColor(QColor(0, 0, 0));
     }
 
     windowTitle = new QLabel(q);
@@ -70,13 +73,10 @@
         windowTitle->setText(title);
     });
 
-    q->setWindowFlags(q->windowFlags() | Qt::FramelessWindowHint  | 
Qt::WindowCloseButtonHint);
-
     q->setAttribute(Qt::WA_TranslucentBackground);
     q->resize(DIALOG::DEFAULT_WIDTH, DIALOG::DEFAULT_HEIGHT);
     q->setMaximumWidth(480);
     q->setAttribute(Qt::WA_Resized, false);
-    q->setBorderColor(QColor(0, 0, 0));
 }
 
 QRect DAbstractDialogPrivate::getParentGeometry() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dblureffectwidget.cpp 
new/dtkwidget-2.0.15/src/widgets/dblureffectwidget.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dblureffectwidget.cpp    2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dblureffectwidget.cpp      2019-07-05 
08:42:21.000000000 +0200
@@ -52,6 +52,13 @@
            || q->isTopLevel();
 }
 
+bool DBlurEffectWidgetPrivate::isFull() const
+{
+    D_QC(DBlurEffectWidget);
+
+    return full || (q->isTopLevel() && !(blurRectXRadius * blurRectYRadius));
+}
+
 void DBlurEffectWidgetPrivate::addToBlurEffectWidgetHash()
 {
     D_QC(DBlurEffectWidget);
@@ -108,6 +115,10 @@
     if (isBehindWindowBlendMode()) {
         maskColor.setAlpha(DWindowManagerHelper::instance()->hasBlurWindow() ? 
maskAlpha : MASK_COLOR_ALPHA_DEFAULT);
     }
+
+    D_Q(DBlurEffectWidget);
+
+    q->update();
 }
 
 bool DBlurEffectWidgetPrivate::updateWindowBlurArea(QWidget *topLevelWidget)
@@ -121,18 +132,44 @@
     bool isExistMaskPath = false;
 
     Q_FOREACH (const DBlurEffectWidget *w, blurEffectWidgetList) {
+        if (!w->d_func()->blurEnabled) {
+            continue;
+        }
+
+        // 当存在一个模糊区域填充整个窗口时,不需要再考虑其它的控件,直接对此窗口开启全模糊即可
+        if (w->d_func()->isFull() && w->isVisible()) {
+            DPlatformWindowHandle handle(topLevelWidget);
+
+            if (!handle.enableBlurWindow()) {
+                handle.setEnableBlurWindow(true);
+            }
+
+            return true;
+        }
+
         if (!w->d_func()->maskPath.isEmpty() && w->isVisible()) {
             isExistMaskPath = true;
             break;
         }
     }
 
+    // 清理窗口背景模糊是否完全开启的状态
+    DPlatformWindowHandle handle(topLevelWidget);
+
+    if (handle.enableBlurWindow()) {
+        handle.setEnableBlurWindow(false);
+    }
+
     bool ok = false;
 
     if (isExistMaskPath) {
         QList<QPainterPath> pathList;
 
         Q_FOREACH (const DBlurEffectWidget *w, blurEffectWidgetList) {
+            if (!w->d_func()->blurEnabled) {
+                continue;
+            }
+
             if (!w->isVisible()) {
                 continue;
             }
@@ -150,13 +187,17 @@
             pathList << p;
         }
 
-        ok = DPlatformWindowHandle::setWindowBlurAreaByWM(topLevelWidget, 
pathList);
+        ok = handle.setWindowBlurAreaByWM(pathList);
     } else {
         QVector<DPlatformWindowHandle::WMBlurArea> areaList;
 
         areaList.reserve(blurEffectWidgetList.size());
 
         Q_FOREACH (const DBlurEffectWidget *w, blurEffectWidgetList) {
+            if (!w->d_func()->blurEnabled) {
+                continue;
+            }
+
             if (!w->isVisible()) {
                 continue;
             }
@@ -168,7 +209,7 @@
             areaList << dMakeWMBlurArea(r.x(), r.y(), r.width(), r.height(), 
w->blurRectXRadius(), w->blurRectYRadius());
         }
 
-        ok = DPlatformWindowHandle::setWindowBlurAreaByWM(topLevelWidget, 
areaList);
+        ok = handle.setWindowBlurAreaByWM(areaList);
     }
 
     if (blurEffectWidgetList.isEmpty()) {
@@ -267,6 +308,25 @@
  */
 
 /*!
+ * \~chinese \property DBlurEffectWidget::full
+ * \~chinese \brief 如果值为true,将模糊此控件所在顶层窗口的整个背景,而无论控件的大小和位置,否则使用控件的位置和大小
+ * \~chinese 设置顶层窗口的模糊区域。需要注意的时,当控件本身就是顶层窗口且未设置 blurRectXRadius 和 
blurRectYRadius
+ * \~chinese 属性的情况下,无论 full 属性的值为多少,都将和值为 true 时的行为保持一致。
+ * \~chinese \note 可读可写
+ * \~chinese \note 此属性不影响蒙版的绘制区域
+ * \~chinese \note 只在模糊的混合模式为 BehindWindowBlend 时生效
+ * \~chinese \see DBlurEffectWidget::blurRectXRadius 
BlurEffectWidget::blurRectYRadius
+ * \~chinese \see DBlurEffectWidget::maskColor
+ * \~chinese \see DBlurEffectWidget::blendMode
+ */
+
+/*!
+ * \~chinese \property DBlurEffectWidget::blurEnabled
+ * \~chinese \brief 如果值为 true 则此控件的模糊设置生效,否则不生效
+ * \~chinese \note 可读可写
+ */
+
+/*!
  * \~chinese \fn DBlurEffectWidget::radiusChanged
  * \~chinese \brief 信号会在 radius 属性的值改变时被发送
  * \~chinese \fn DBlurEffectWidget::modeChanged
@@ -516,6 +576,20 @@
     update();
 }
 
+bool DBlurEffectWidget::isFull() const
+{
+    D_DC(DBlurEffectWidget);
+
+    return d->full;
+}
+
+bool DBlurEffectWidget::blurEnabled() const
+{
+    D_DC(DBlurEffectWidget);
+
+    return d->blurEnabled;
+}
+
 void DBlurEffectWidget::setRadius(int radius)
 {
     D_D(DBlurEffectWidget);
@@ -609,8 +683,6 @@
 
     d->setMaskAlpha(alpha);
 
-    update();
-
     Q_EMIT maskAlphaChanged(alpha);
 }
 
@@ -628,7 +700,6 @@
 
     d->maskColorType = CustomColor;
     d->setMaskColor(maskColor);
-    update();
 
     Q_EMIT maskColorChanged(maskColor);
 }
@@ -650,6 +721,33 @@
     update();
 }
 
+void DBlurEffectWidget::setFull(bool full)
+{
+    D_D(DBlurEffectWidget);
+
+    if (d->full == full)
+        return;
+
+    d->full = full;
+    d->updateWindowBlurArea();
+
+    Q_EMIT fullChanged(full);
+}
+
+void DBlurEffectWidget::setBlurEnabled(bool blurEnabled)
+{
+    D_D(DBlurEffectWidget);
+
+    if (d->blurEnabled == blurEnabled)
+        return;
+
+    d->blurEnabled = blurEnabled;
+    d->updateWindowBlurArea();
+    update();
+
+    Q_EMIT blurEnabledChanged(d->blurEnabled);
+}
+
 DBlurEffectWidget::DBlurEffectWidget(DBlurEffectWidgetPrivate &dd, QWidget 
*parent)
     : QWidget(parent)
     , DObject(dd)
@@ -666,6 +764,9 @@
 {
     D_D(DBlurEffectWidget);
 
+    if (!d->blurEnabled)
+        return;
+
     QPainter pa(this);
 
     if (d->blurRectXRadius > 0 || d->blurRectYRadius > 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dblureffectwidget.h 
new/dtkwidget-2.0.15/src/widgets/dblureffectwidget.h
--- old/dtkwidget-2.0.12.1/src/widgets/dblureffectwidget.h      2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dblureffectwidget.h        2019-07-05 
08:42:21.000000000 +0200
@@ -41,6 +41,8 @@
     // The alpha channel is 102 if the DPlatformWindowHandle::hasBlurWindow() 
is true, otherwise is 204).
     Q_PROPERTY(QColor maskColor READ maskColor WRITE setMaskColor NOTIFY 
maskColorChanged)
     Q_PROPERTY(quint8 maskAlpha READ maskAlpha WRITE setMaskAlpha NOTIFY 
maskAlphaChanged)
+    Q_PROPERTY(bool full READ isFull WRITE setFull NOTIFY fullChanged)
+    Q_PROPERTY(bool blurEnabled READ blurEnabled WRITE setBlurEnabled NOTIFY 
blurEnabledChanged)
 
 public:
     // TODO: To support MeanBlur, MedianBlur, BilateralFilter
@@ -75,6 +77,9 @@
     int blurRectXRadius() const;
     int blurRectYRadius() const;
 
+    bool isFull() const;
+    bool blurEnabled() const;
+
     QColor maskColor() const;
 
     quint8 maskAlpha() const;
@@ -91,6 +96,8 @@
     void setMaskAlpha(quint8 alpha);
     void setMaskColor(QColor maskColor);
     void setMaskColor(MaskColorType type);
+    void setFull(bool full);
+    void setBlurEnabled(bool blurEnabled);
 
 Q_SIGNALS:
     void radiusChanged(int radius);
@@ -101,6 +108,8 @@
     void blurRectYRadiusChanged(int blurRectYRadius);
     void maskAlphaChanged(quint8 alpha);
     void maskColorChanged(QColor maskColor);
+    void fullChanged(bool full);
+    void blurEnabledChanged(bool blurEnabled);
 
 protected:
     DBlurEffectWidget(DBlurEffectWidgetPrivate &dd, QWidget *parent = 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dborderlesswidget.cpp 
new/dtkwidget-2.0.15/src/widgets/dborderlesswidget.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dborderlesswidget.cpp    2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dborderlesswidget.cpp      2019-07-05 
08:42:21.000000000 +0200
@@ -48,7 +48,7 @@
 
 const QColor BorderColor = QColor(0, 0, 0, 60);
 const QColor BackgroundTopColor = QColor(255, 255, 255);
-const QColor BackgroundBottonColor = QColor(255, 255, 255);
+const QColor BackgroundButtonColor = QColor(255, 255, 255);
 
 const QColor TipsBorderColor = QColor(255, 255, 255, 255 * 0.2);
 const QColor TipsBackground = QColor(0, 0, 0);
@@ -244,8 +244,6 @@
     QWidget::setMouseTracking(true);
 
     QWidget::setAttribute(Qt::WA_TranslucentBackground, true);
-    QWidget::setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
-
     setWindowFlags(windowFlags());
     setDecorationFlags(decorationFlags());
 
@@ -255,12 +253,12 @@
 #endif
 #ifdef DTK_TITLE_DRAG_WINDOW
     connect(d->titlebar, &DTitlebar::mousePosMoving,
-    this, [ = ](Qt::MouseButton /*botton*/, QPoint pos) {
+    this, [ = ](Qt::MouseButton /*button*/, QPoint pos) {
         move(pos - d->m_LastMousePos);
     });
 
     connect(d->titlebar, &DTitlebar::mousePosPressed,
-    this, [ = ](Qt::MouseButtons /*botton*/, QPoint pos) {
+    this, [ = ](Qt::MouseButtons /*button*/, QPoint pos) {
         // TODO: fix margin
         pos.setY(pos.y() - 10);
         d->m_LastMousePos = pos - this->mapToParent(this->pos());
@@ -426,12 +424,12 @@
 
 /*!
  * \~chinese @brief 移动窗口
- * \~chinese @param botton 接收Qt::MouseButton枚举值
+ * \~chinese @param button 接收Qt::MouseButton枚举值
  */
-void DBorderlessWidget::moveWindow(Qt::MouseButton botton)
+void DBorderlessWidget::moveWindow(Qt::MouseButton button)
 {
 #ifdef Q_OS_LINUX
-    XUtils::MoveWindow(this, botton);
+    XUtils::MoveWindow(this, button);
 #endif
 }
 
@@ -488,8 +486,9 @@
 void DBorderlessWidget::setWindowFlags(Qt::WindowFlags type)
 {
     D_D(DBorderlessWidget);
+    QWidget::setWindowFlags(type | Qt::FramelessWindowHint);
     d->dwindowFlags = type;
-    d->titlebar->setWindowFlags(type);
+    d->titlebar->setWindowFlags(type &~ Qt::Window);
 }
 
 /*!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dborderlesswidget.h 
new/dtkwidget-2.0.15/src/widgets/dborderlesswidget.h
--- old/dtkwidget-2.0.12.1/src/widgets/dborderlesswidget.h      2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dborderlesswidget.h        2019-07-05 
08:42:21.000000000 +0200
@@ -155,7 +155,7 @@
     void showFullScreen();
     void showNormal();
 
-    void moveWindow(Qt::MouseButton botton);
+    void moveWindow(Qt::MouseButton button);
     void toggleMaximizedWindow();
 
     void setBackgroundColor(QColor backgroundColor);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dipv4lineedit.cpp 
new/dtkwidget-2.0.15/src/widgets/dipv4lineedit.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dipv4lineedit.cpp        2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dipv4lineedit.cpp  2019-07-05 
08:42:21.000000000 +0200
@@ -530,6 +530,6 @@
     return DLineEdit::eventFilter(obj, e);
 }
 
-#include "moc_dipv4lineedit.cpp"
-
 DWIDGET_END_NAMESPACE
+
+#include "moc_dipv4lineedit.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dlistview.cpp 
new/dtkwidget-2.0.15/src/widgets/dlistview.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dlistview.cpp    2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dlistview.cpp      2019-07-05 
08:42:21.000000000 +0200
@@ -709,6 +709,6 @@
     return tmp;
 }
 
-#include "moc_dlistview.cpp"
-
 DWIDGET_END_NAMESPACE
+
+#include "moc_dlistview.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dmainwindow.cpp 
new/dtkwidget-2.0.15/src/widgets/dmainwindow.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dmainwindow.cpp  2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dmainwindow.cpp    2019-07-05 
08:42:21.000000000 +0200
@@ -82,15 +82,17 @@
         q->connect(handle, &DPlatformWindowHandle::enableBlurWindowChanged, q, 
&DMainWindow::enableBlurWindowChanged);
         q->connect(handle, 
&DPlatformWindowHandle::autoInputMaskByClipPathChanged, q, 
&DMainWindow::autoInputMaskByClipPathChanged);
 
-        q->connect(qApp, &QGuiApplication::focusWindowChanged, q, [q] {
-            if (q->isActiveWindow())
-            {
-                q->setShadowColor(SHADOW_COLOR_ACTIVE);
-            } else
-            {
-                q->setShadowColor(SHADOW_COLOR_NORMAL);
-            }
-        });
+        if (!handle->isEnableNoTitlebar(q->windowHandle())) {
+            q->connect(qApp, &QGuiApplication::focusWindowChanged, q, [q] {
+                if (q->isActiveWindow())
+                {
+                    q->setShadowColor(SHADOW_COLOR_ACTIVE);
+                } else
+                {
+                    q->setShadowColor(SHADOW_COLOR_NORMAL);
+                }
+            });
+        }
     }
 
     if (!help && DApplicationPrivate::isUserManualExists()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dtkwidget-2.0.12.1/src/widgets/dplatformwindowhandle.cpp 
new/dtkwidget-2.0.15/src/widgets/dplatformwindowhandle.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dplatformwindowhandle.cpp        
2019-04-18 09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dplatformwindowhandle.cpp  2019-07-05 
08:42:21.000000000 +0200
@@ -57,6 +57,8 @@
 DEFINE_CONST_CHAR(disableOverrideCursor);
 DEFINE_CONST_CHAR(enableDxcb);
 DEFINE_CONST_CHAR(isEnableDxcb);
+DEFINE_CONST_CHAR(setEnableNoTitlebar);
+DEFINE_CONST_CHAR(isEnableNoTitlebar);
 
 static void setWindowProperty(QWindow *window, const char *name, const 
QVariant &value)
 {
@@ -445,6 +447,9 @@
  * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  * </pre>
  * \endhtmlonly
+ *
+ * 但是,如果窗口管理器自身支持隐藏窗口标题栏,则此方法将优先调用 enableNoTitlebarForWindow 实现同样的效果。
+ *
  * 例子:
  * \~chinese \code
  * QWidget w1;
@@ -502,9 +507,15 @@
  * \~chinese DWindowManagerHelper::hasComposite 或 
QX11Info::isCompositingManagerRunning
  * \~chinese 判断当前运行的窗口管理器是否支持混成。
  * \~chinese \param window
+ * \~chinese \sa DPlatformWindowHandle::setEnableNoTitlebarForWindow
  */
 void DPlatformWindowHandle::enableDXcbForWindow(QWindow *window)
 {
+    // 优先使用窗口管理器中实现的no titlebar接口实现自定义窗口修饰器的效果
+    if (setEnableNoTitlebarForWindow(window, true)) {
+        return;
+    }
+
     if (!DApplication::isDXcbPlatform())
         return;
 
@@ -578,9 +589,13 @@
  * \~chinese \brief DPlatformWindowHandle::isEnabledDXcb
  * \~chinese \param widget
  * \~chinese \return 如果窗口开启了DTK风格的窗口修饰则返回 true,否则返回 false
+ * \~chinese \sa DPlatformWindowHandle::isEnableNoTitlebar
  */
 bool DPlatformWindowHandle::isEnabledDXcb(const QWindow *window)
 {
+    if (isEnableNoTitlebar(window))
+        return true;
+
     QFunctionPointer is_enable_dxcb = nullptr;
 
 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
@@ -595,6 +610,54 @@
 }
 
 /*!
+ * \~chinese \brief DPlatformWindowHandle::setEnableNoTitlebarForWindow
+ * \~chinese 使用窗口管理器提供的方式隐藏窗口的标题栏,目前已适配 DDE KWin 窗管,在窗口管理器支持的前提下,
+ * \~chinese 此方法将通过设置窗口属性 _DEEPIN_SCISSOR_WINDOW 的值为 1 来开启无标题栏效果。
+ * \~chinese \param window
+ * \~chinese \param enable
+ * \~chinese \sa DPlatformWindowHandle::enableDXcbForWindow(QWindow *)
+ * \~chinese \sa DWindowManagerHelper::hasNoTitlebar
+ */
+bool DPlatformWindowHandle::setEnableNoTitlebarForWindow(QWindow *window, bool 
enable)
+{
+    if (!DApplication::isDXcbPlatform())
+        return false;
+
+    QFunctionPointer enable_no_titlear = nullptr;
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+    enable_no_titlear = qApp->platformFunction(_setEnableNoTitlebar);
+#endif
+
+    if (enable_no_titlear) {
+        return (*reinterpret_cast<bool(*)(QWindow*, 
bool)>(enable_no_titlear))(window, enable);
+    }
+
+    return false;
+}
+
+/*!
+ * \~chinese \brief DPlatformWindowHandle::isEnableNoTitlebar
+ * \~chinese \param window
+ * \~chinese \return 如果窗口使用窗管提供的方式隐藏了标题栏则返回 true,否则返回 false
+ * \~chinese \sa DPlatformWindowHandle::isEnabledDXcb
+ */
+bool DPlatformWindowHandle::isEnableNoTitlebar(const QWindow *window)
+{
+    QFunctionPointer is_enable_no_titlebar = nullptr;
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+    is_enable_no_titlebar = qApp->platformFunction(_isEnableNoTitlebar);
+#endif
+
+    if (is_enable_no_titlebar) {
+        return (*reinterpret_cast<bool(*)(const 
QWindow*)>(is_enable_no_titlebar))(window);
+    }
+
+    return false;
+}
+
+/*!
  * \~chinese \brief DPlatformWindowHandle::setWindowBlurAreaByWM
  * \~chinese 这只是一个重载函数,如果 widget 的 QWidget::windowHandle 为 nullptr 则返回 false,
  * \~chinese 否则返回 setWindowBlurAreaByWM(wiget->windowHandle(), area) 的值。示例:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dtkwidget-2.0.12.1/src/widgets/dplatformwindowhandle.h 
new/dtkwidget-2.0.15/src/widgets/dplatformwindowhandle.h
--- old/dtkwidget-2.0.12.1/src/widgets/dplatformwindowhandle.h  2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dplatformwindowhandle.h    2019-07-05 
08:42:21.000000000 +0200
@@ -67,6 +67,9 @@
     static bool isEnabledDXcb(const QWidget *widget);
     static bool isEnabledDXcb(const QWindow *window);
 
+    static bool setEnableNoTitlebarForWindow(QWindow *window, bool enable);
+    static bool isEnableNoTitlebar(const QWindow *window);
+
     struct WMBlurArea {
         qint32 x = 0;
         qint32 y = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dtitlebar.cpp 
new/dtkwidget-2.0.15/src/widgets/dtitlebar.cpp
--- old/dtkwidget-2.0.12.1/src/widgets/dtitlebar.cpp    2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dtitlebar.cpp      2019-07-05 
08:42:21.000000000 +0200
@@ -284,7 +284,12 @@
     bool useDXcb = DPlatformWindowHandle::isEnabledDXcb(targetWindow());
     bool isFullscreen = 
targetWindow()->windowState().testFlag(Qt::WindowFullScreen);
 
-    bool showTitle = (type.testFlag(Qt::WindowTitleHint) || !useDXcb) && 
!embedMode;
+    bool forceShow = !useDXcb;
+#ifndef Q_OS_LINUX
+    forceShow = false;
+#endif
+
+    bool showTitle = (type.testFlag(Qt::WindowTitleHint) || forceShow) && 
!embedMode;
     if (titleLabel) {
         titleLabel->setVisible(showTitle);
     }
@@ -295,24 +300,28 @@
     // Never show in embed/fullscreen
     bool forceHide = embedMode || isFullscreen;
 
-    bool showMin = (type.testFlag(Qt::WindowMinimizeButtonHint) || !useDXcb) 
&& !forceHide;
+    bool showMin = (type.testFlag(Qt::WindowMinimizeButtonHint) || forceShow) 
&& !forceHide;
     minButton->setVisible(showMin);
 
+
     bool allowResize = true;
+
     if (q->window() && q->window()->windowHandle()) {
         auto functions_hints = 
DWindowManagerHelper::getMotifFunctions(q->window()->windowHandle());
         allowResize = 
functions_hints.testFlag(DWindowManagerHelper::FUNC_RESIZE);
     }
 
-    bool showMax = (type.testFlag(Qt::WindowMaximizeButtonHint) || !useDXcb) 
&& !forceHide && allowResize;
+    bool showMax = (type.testFlag(Qt::WindowMaximizeButtonHint) || forceShow) 
&& !forceHide && allowResize;
+//    qDebug() << "max:"
+//             << "allowResize" << allowResize
+//             << "useDXcb" << useDXcb
+//             << "forceHide" << forceHide
+//             << "type.testFlag(Qt::WindowMaximizeButtonHint)" << 
type.testFlag(Qt::WindowMaximizeButtonHint);
     maxButton->setVisible(showMax);
 
-    bool showClose = (type.testFlag(Qt::WindowCloseButtonHint) || !useDXcb) && 
!forceHide;
+    bool showClose = (type.testFlag(Qt::WindowCloseButtonHint) || forceShow) 
&& !forceHide;
     closeButton->setVisible(showClose);
 
-    bool showOption = (type.testFlag(Qt::WindowSystemMenuHint) || !useDXcb) && 
!isFullscreen;
-    optionButton->setVisible(showOption);
-
     buttonArea->adjustSize();
     buttonArea->resize(buttonArea->size());
 
@@ -323,10 +332,9 @@
 
 void DTitlebarPrivate::updateButtonsFunc()
 {
-    optionButton->setDisabled(disableFlags.testFlag(Qt::WindowSystemMenuHint));
-
-    if (!targetWindowHandle)
+    if (!targetWindowHandle) {
         return;
+    }
 
     // 根据 disableFlags 更新窗口标志,而标题栏上具体按钮的开启/禁用状态只根据
     // 窗口标志改变后做更新,且窗口标志改变后也会同步更新 disableFlags 的值,
@@ -429,7 +437,7 @@
 
     
minButton->setEnabled(functions_hints.testFlag(DWindowManagerHelper::FUNC_MINIMIZE));
     
maxButton->setEnabled(functions_hints.testFlag(DWindowManagerHelper::FUNC_MAXIMIZE)
-                            && 
functions_hints.testFlag(DWindowManagerHelper::FUNC_RESIZE));
+                          && 
functions_hints.testFlag(DWindowManagerHelper::FUNC_RESIZE));
     
closeButton->setEnabled(functions_hints.testFlag(DWindowManagerHelper::FUNC_CLOSE));
     // sync button state
 #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
@@ -524,7 +532,7 @@
 
 
 /*!
- *  \~english @brief DTitlebar::DTitlebar create an default widget with 
icon/title/and bottons
+ *  \~english @brief DTitlebar::DTitlebar create an default widget with 
icon/title/and buttons
  * @param parent
  */
 /*!
@@ -542,6 +550,12 @@
 
     D_D(DTitlebar);
     d->init();
+
+    // 默认只在普通窗口中显示窗口菜单按钮
+    if (parent && parent->window()->windowType() != Qt::Window) {
+        d->optionButton->hide();
+    }
+
     d->buttonArea->adjustSize();
     d->buttonArea->resize(d->buttonArea->size());
     d->titlePadding->setFixedSize(d->buttonArea->size());
@@ -1001,6 +1015,30 @@
     DTitlebar::resize(sz.width(), sz.height());
 }
 
+bool DTitlebar::menuIsVisible() const
+{
+    D_DC(DTitlebar);
+    return !d->optionButton->isVisible();
+}
+
+void DTitlebar::setMenuVisible(bool visible)
+{
+    D_D(DTitlebar);
+    d->optionButton->setVisible(visible);
+}
+
+bool DTitlebar::menuIsDisabled() const
+{
+    D_DC(DTitlebar);
+    return !d->optionButton->isEnabled();
+}
+
+void DTitlebar::setMenuDisabled(bool disabled)
+{
+    D_D(DTitlebar);
+    d->optionButton->setDisabled(disabled);
+}
+
 
 /*!
  * \~english \brief DTitlebar::setDisableFlags will disable button match flags.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dtkwidget-2.0.12.1/src/widgets/dtitlebar.h 
new/dtkwidget-2.0.15/src/widgets/dtitlebar.h
--- old/dtkwidget-2.0.12.1/src/widgets/dtitlebar.h      2019-04-18 
09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/dtitlebar.h        2019-07-05 
08:42:21.000000000 +0200
@@ -54,17 +54,23 @@
     void resize(int width, int height);
     void resize(const QSize &);
 
+    bool menuIsVisible() const;
+    void setMenuVisible(bool visible);
+
+    bool menuIsDisabled() const;
+    void setMenuDisabled(bool disabled);
+
     void setDisableFlags(Qt::WindowFlags flags);
     Qt::WindowFlags disableFlags() const;
 Q_SIGNALS:
     void optionClicked();
     void doubleClicked();
     void mousePressed(Qt::MouseButtons buttons);
-    void mouseMoving(Qt::MouseButton botton);
+    void mouseMoving(Qt::MouseButton button);
 
 #ifdef DTK_TITLE_DRAG_WINDOW
     void mousePosPressed(Qt::MouseButtons buttons, QPoint pos);
-    void mousePosMoving(Qt::MouseButton botton, QPoint pos);
+    void mousePosMoving(Qt::MouseButton button, QPoint pos);
 #endif
 
 public Q_SLOTS:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dtkwidget-2.0.12.1/src/widgets/private/dblureffectwidget_p.h 
new/dtkwidget-2.0.15/src/widgets/private/dblureffectwidget_p.h
--- old/dtkwidget-2.0.12.1/src/widgets/private/dblureffectwidget_p.h    
2019-04-18 09:34:05.000000000 +0200
+++ new/dtkwidget-2.0.15/src/widgets/private/dblureffectwidget_p.h      
2019-07-05 08:42:21.000000000 +0200
@@ -37,11 +37,15 @@
     int blurRectYRadius = 0;
     quint8 maskAlpha = 102;
 
+    bool full = false;
+    bool blurEnabled = true;
+
     QColor maskColor = Qt::transparent;
     DBlurEffectWidget::MaskColorType maskColorType = 
DBlurEffectWidget::CustomColor;
     QPainterPath maskPath;
 
     bool isBehindWindowBlendMode() const;
+    bool isFull() const;
 
     void addToBlurEffectWidgetHash();
     void removeFromBlurEffectWidgetHash();


Reply via email to