diff --git a/include/DWidget/DDesktopServices b/include/DWidget/DDesktopServices deleted file mode 100644 index 6d5336c39..000000000 --- a/include/DWidget/DDesktopServices +++ /dev/null @@ -1 +0,0 @@ -#include "ddesktopservices.h" diff --git a/include/util/ddesktopservices.h b/include/util/ddesktopservices.h index 4d158b488..50adf27f7 100644 --- a/include/util/ddesktopservices.h +++ b/include/util/ddesktopservices.h @@ -11,7 +11,9 @@ DWIDGET_BEGIN_NAMESPACE -class DDesktopServices +class + D_DECL_DEPRECATED_X("Use Dtk::Gui::DDesktopServices") + DDesktopServices { public: diff --git a/src/util/ddesktopservices_linux.cpp b/src/util/ddesktopservices_linux.cpp index c4a7a119a..76b24c30d 100644 --- a/src/util/ddesktopservices_linux.cpp +++ b/src/util/ddesktopservices_linux.cpp @@ -6,245 +6,121 @@ #include #include #include -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) -#include -#endif -DWIDGET_BEGIN_NAMESPACE - -#define EASY_CALL_DBUS(name) \ - QDBusInterface *interface = fileManager1DBusInterface(); \ - return interface && \ - interface->call(#name, urls2uris(urls), startupId).type() != \ - QDBusMessage::ErrorMessage; - -static const QStringList SOUND_EFFECT_LIST { - "message", - "camera-shutter", - "trash-empty", - "x-deepin-app-sent-to-desktop", - "desktop-login", - "system-shutdown", - "desktop-logout", - "suspend-resume", - "audio-volume-change", - "power-unplug-battery-low", - "power-plug", - "power-unplug", - "device-added", - "device-removed", - "dialog-error", -}; - -static QDBusInterface *fileManager1DBusInterface() -{ - static QDBusInterface interface(QStringLiteral("org.freedesktop.FileManager1"), - QStringLiteral("/org/freedesktop/FileManager1"), - QStringLiteral("org.freedesktop.FileManager1")); - return &interface; -} - -static QStringList urls2uris(const QList &urls) -{ - QStringList list; - - list.reserve(urls.size()); - - for (const QUrl &url : urls) { - list << url.toString(); - } - - return list; -} - -static QList path2urls(const QList &paths) -{ - QList list; - - list.reserve(paths.size()); - - for (const QString &path : paths) { - list << QUrl::fromLocalFile(path); - } - - return list; -} - -/*! - \brief Converts \a name from 'key-name' notation - to camel case 'keyName' or 'KeyName'. - This function converts GSettings key names to names - suitable for Qt getters and setters. - - Well fsck this. - - \a name key name - \return key name converted to camel case - \internal - */ -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) -static QString GSettingsKeyToCamelCase(const QString name) -{ - QStringList parts = name.split('-',Qt::SkipEmptyParts); - for (int i=1; i +using DGuiDesktopServices = DTK_GUI_NAMESPACE::DDesktopServices; +using DGuiSystemSoundEffect = DGuiDesktopServices::SystemSoundEffect; - const bool effEnabled = settings.get("enabled").toBool(); - QString newName = GSettingsKeyToCamelCase(name); - - if (effEnabled) { - const QStringList list = settings.keys(); - if (!list.contains(newName)) { - return false; - } - - return settings.get(newName).toBool(); - } - - return effEnabled; -#else - return false; -#endif -} +DWIDGET_BEGIN_NAMESPACE bool DDesktopServices::showFolder(QString localFilePath, const QString &startupId) { - return showFolder(QUrl::fromLocalFile(localFilePath), startupId); + return DGuiDesktopServices::showFolder(localFilePath, startupId); } bool DDesktopServices::showFolders(const QList localFilePaths, const QString &startupId) { - return showFolders(path2urls(localFilePaths), startupId); + return DGuiDesktopServices::showFolders(localFilePaths, startupId); } bool DDesktopServices::showFolder(QUrl url, const QString &startupId) { - return showFolders(QList() << url, startupId); + return DGuiDesktopServices::showFolder(url, startupId); } bool DDesktopServices::showFolders(const QList urls, const QString &startupId) { - EASY_CALL_DBUS(ShowFolders) + return DGuiDesktopServices::showFolders(urls, startupId); } bool DDesktopServices::showFileItemPropertie(QString localFilePath, const QString &startupId) { - return showFileItemPropertie(QUrl::fromLocalFile(localFilePath), startupId); + return DGuiDesktopServices::showFileItemProperty(localFilePath , startupId); } bool DDesktopServices::showFileItemProperties(const QList localFilePaths, const QString &startupId) { - return showFileItemProperties(path2urls(localFilePaths), startupId); + return DGuiDesktopServices::showFileItemProperties(localFilePaths, startupId); } bool DDesktopServices::showFileItemPropertie(QUrl url, const QString &startupId) { - return showFileItemProperties(QList() << url, startupId); + return DGuiDesktopServices::showFileItemProperty(url, startupId); } bool DDesktopServices::showFileItemProperties(const QList urls, const QString &startupId) { - EASY_CALL_DBUS(ShowItemProperties) + return DGuiDesktopServices::showFileItemProperties(urls, startupId); } bool DDesktopServices::showFileItem(QString localFilePath, const QString &startupId) { - return showFileItem(QUrl::fromLocalFile(localFilePath), startupId); + return DGuiDesktopServices::showFileItem(localFilePath, startupId); } bool DDesktopServices::showFileItems(const QList localFilePaths, const QString &startupId) { - return showFileItems(path2urls(localFilePaths), startupId); + return DGuiDesktopServices::showFileItems(localFilePaths, startupId); } bool DDesktopServices::showFileItem(QUrl url, const QString &startupId) { - return showFileItems(QList() << url, startupId); + return DGuiDesktopServices::showFileItem(url, startupId); } bool DDesktopServices::showFileItems(const QList urls, const QString &startupId) { - EASY_CALL_DBUS(ShowItems) + return DGuiDesktopServices::showFileItems(urls, startupId); } bool DDesktopServices::trash(QString localFilePath) { - return trash(QUrl::fromLocalFile(localFilePath)); + return DGuiDesktopServices::trash(localFilePath); } bool DDesktopServices::trash(const QList localFilePaths) { - return trash(path2urls(localFilePaths)); + return DGuiDesktopServices::trash(localFilePaths); } bool DDesktopServices::trash(QUrl url) { - return trash(QList() << url); + return DGuiDesktopServices::trash(url); } bool DDesktopServices::trash(const QList urls) { - QDBusInterface *interface = fileManager1DBusInterface(); - return interface && interface->call("Trash", urls2uris(urls)).type() != QDBusMessage::ErrorMessage; + return DGuiDesktopServices::trash(urls); } bool DDesktopServices::playSystemSoundEffect(const DDesktopServices::SystemSoundEffect &effect) { - return playSystemSoundEffect(SOUND_EFFECT_LIST.at(static_cast(effect))); + return DGuiDesktopServices::playSystemSoundEffect(DGuiSystemSoundEffect(effect)); } bool DDesktopServices::playSystemSoundEffect(const QString &name) { - if (!systemSoundEffectEnabled(name)) { - return false; - } - - return previewSystemSoundEffect(name); + return DGuiDesktopServices::playSystemSoundEffect(name); } bool DDesktopServices::previewSystemSoundEffect(const DDesktopServices::SystemSoundEffect &effect) { - return previewSystemSoundEffect(SOUND_EFFECT_LIST.at(static_cast(effect))); + return DGuiDesktopServices::previewSystemSoundEffect(DGuiSystemSoundEffect(effect)); } bool DDesktopServices::previewSystemSoundEffect(const QString &name) { - if (name.isEmpty()) { - return false; - } - -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - const auto& infc = QDBusConnection::sessionBus().interface(); - QStringList activatableServiceNames = infc->activatableServiceNames(); - bool isNewInterface = activatableServiceNames.contains(QLatin1String("org.deepin.dde.SoundEffect1")); -#else - bool isNewInterface = false; // Qt 5.14 以下就直接用旧的接口 -#endif - const QLatin1String service(isNewInterface ? "org.deepin.dde.SoundEffect1" :"com.deepin.daemon.SoundEffect"); - const QLatin1String path(isNewInterface ? "/org/deepin/dde/SoundEffect1" : "/com/deepin/daemon/SoundEffect"); - const QLatin1String interface(isNewInterface ? "org.deepin.dde.SoundEffect1" :"com.deepin.daemon.SoundEffect"); - - // 使用后端 dbus 接口播放系统音频,音频存放目录: /usr/share/sounds/deepin/stereo/ - return QDBusInterface(service, path, interface).call("PlaySound", name).type() != QDBusMessage::ErrorMessage; + return DGuiDesktopServices::previewSystemSoundEffect(name); } QString DDesktopServices::getNameByEffectType(const DDesktopServices::SystemSoundEffect &effect) { - return SOUND_EFFECT_LIST.at(static_cast(effect)); + return DGuiDesktopServices::getNameByEffectType(DGuiSystemSoundEffect(effect)); } QString DDesktopServices::errorMessage() { - return fileManager1DBusInterface()->lastError().message(); + return DGuiDesktopServices::errorMessage(); } DWIDGET_END_NAMESPACE diff --git a/src/widgets/darrowrectangle.cpp b/src/widgets/darrowrectangle.cpp index 02c4917f6..dc340f528 100644 --- a/src/widgets/darrowrectangle.cpp +++ b/src/widgets/darrowrectangle.cpp @@ -800,7 +800,7 @@ QPainterPath DArrowRectanglePrivate::getLeftCornerPath() border.arcTo(bottomRight.x() - 2 * radius, bottomRight.y() - 2 * radius, 2 * radius, 2 * radius, 0, -90); if (radiusArrowStyleEnable) { - border.lineTo(bottomLeft.x() + arrowWidth, bottomLeft.y()); + border.lineTo(bottomLeft.x() + radius, bottomLeft.y()); border.arcTo(bottomLeft.x(), bottomLeft.y() - widgetRadius, widgetRadius, widgetRadius, -90, -90); border.lineTo(bottomLeft.x(), cornerPoint.y() + m_arrowWidth / 2 + radius / 2); @@ -818,9 +818,11 @@ QPainterPath DArrowRectanglePrivate::getLeftCornerPath() border.lineTo(topLeft.x(), cornerPoint.y() - m_arrowWidth / 2 - radius / 2); border.arcTo(topLeft.x(), topLeft.y(), widgetRadius, widgetRadius, -180, -90); + + border.lineTo(topLeft.x() + radius, topLeft.y()); } else { if (leftRightRadius) { - border.lineTo(bottomLeft.x() + arrowWidth, bottomLeft.y()); + border.lineTo(bottomLeft.x() + radius, bottomLeft.y()); border.arcTo(bottomLeft.x(), bottomLeft.y() - widgetRadius, widgetRadius, widgetRadius, -90, -90); border.lineTo(bottomLeft.x(), cornerPoint.y() + m_arrowWidth / 2); } else { @@ -900,6 +902,8 @@ QPainterPath DArrowRectanglePrivate::getRightCornerPath() border.lineTo(bottomRight.x(), cornerPoint.y() + m_arrowWidth / 2 + radius / 2); border.arcTo(bottomRight.x() - widgetRadius, bottomRight.y() - widgetRadius, widgetRadius, widgetRadius, 0, -90); + + border.lineTo(bottomRight.x() - radius, bottomRight.y()); } else { if (leftRightRadius) { border.lineTo(topRight.x() - radius, topRight.y()); diff --git a/src/widgets/dlicensedialog.cpp b/src/widgets/dlicensedialog.cpp index 054321ae6..76c0f11e1 100644 --- a/src/widgets/dlicensedialog.cpp +++ b/src/widgets/dlicensedialog.cpp @@ -56,7 +56,7 @@ DLicenseDialogPrivate::DLicenseDialogPrivate(DLicenseDialog *qq) : DAbstractDialogPrivate(qq) , backwardBtn(new DIconButton(QStyle::SP_ArrowBack)) , listView(new DListView) - , listModel(new QStandardItemModel) + , listModel(new QStandardItemModel(listView)) , stackedLayout(new QStackedLayout) , componentNameLabel(new QLabel) , componentVersionLabel(new QLabel) diff --git a/src/widgets/private/startupnotifications/startupnotificationmonitor.cpp b/src/widgets/private/startupnotifications/startupnotificationmonitor.cpp index 241b8966c..2b5829193 100644 --- a/src/widgets/private/startupnotifications/startupnotificationmonitor.cpp +++ b/src/widgets/private/startupnotifications/startupnotificationmonitor.cpp @@ -77,11 +77,22 @@ StartupNotificationMonitor::StartupNotificationMonitor() : return; int screen = 0; - xcb_screen_t *s = xcb_aux_get_screen (QX11Info::connection(), screen); - const uint32_t select_input_val[] = { XCB_EVENT_MASK_PROPERTY_CHANGE }; - xcb_change_window_attributes (QX11Info::connection(), s->root, XCB_CW_EVENT_MASK, - select_input_val); + xcb_get_window_attributes_cookie_t attr_cookie = xcb_get_window_attributes (QX11Info::connection(), s->root); + xcb_get_window_attributes_reply_t *attr_reply = xcb_get_window_attributes_reply (QX11Info::connection(), attr_cookie, NULL); + + if (attr_reply) { + uint32_t old_event_mask = attr_reply->your_event_mask; + if (!(old_event_mask & XCB_EVENT_MASK_PROPERTY_CHANGE)) { + const uint32_t select_input_val[] = { XCB_EVENT_MASK_PROPERTY_CHANGE | old_event_mask }; + + xcb_change_window_attributes (QX11Info::connection(), s->root, XCB_CW_EVENT_MASK, + select_input_val); + } + free(attr_reply); + } else { + qWarning() << "can not get xcb window attributes reply"; + } display = sn_xcb_display_new (QX11Info::connection(), NULL, NULL);