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();
