diff --git a/cursor.cpp b/cursor.cpp index 1207483313..f68437dc16 100644 --- a/cursor.cpp +++ b/cursor.cpp @@ -31,6 +31,7 @@ along with this program. If not, see . #include // Qt #include +#include #include // Xlib #include @@ -78,7 +79,17 @@ void Cursor::loadThemeSettings() { QString themeName = QString::fromUtf8(qgetenv("XCURSOR_THEME")); bool ok = false; - uint themeSize = qgetenv("XCURSOR_SIZE").toUInt(&ok); + // XCURSOR_SIZE might not be set (e.g. by startkde) + uint themeSize = 0; + if (qEnvironmentVariableIsSet("XCURSOR_SIZE")) { + themeSize = qgetenv("XCURSOR_SIZE").toUInt(&ok); + } + if (!ok) { + if (QScreen *s = QGuiApplication::primaryScreen()) { + themeSize = s->logicalDotsPerInchY() * 16 / 72; + ok = true; + } + } if (!themeName.isEmpty() && ok) { updateTheme(themeName, themeSize); return; diff --git a/kcmkwin/kwintabbox/layoutpreview.cpp b/kcmkwin/kwintabbox/layoutpreview.cpp index 87ed1baea1..1575c4b1a2 100644 --- a/kcmkwin/kwintabbox/layoutpreview.cpp +++ b/kcmkwin/kwintabbox/layoutpreview.cpp @@ -29,7 +29,7 @@ along with this program. If not, see . #include #include #include -#include +#include namespace KWin { @@ -132,14 +132,21 @@ ExampleClientModel::~ExampleClientModel() void ExampleClientModel::init() { - QList applications; - applications << "konqbrowser" << "KMail2" << "systemsettings" << "dolphin"; - - foreach (const QString& application, applications) { - KService::Ptr service = KService::serviceByStorageId("kde4-" + application + ".desktop"); - if (service) { - m_nameList << service->entryPath(); - } + if (const auto s = KMimeTypeTrader::self()->preferredService(QStringLiteral("inode/directory"))) { + m_services << s; + m_fileManager = s; + } + if (const auto s = KMimeTypeTrader::self()->preferredService(QStringLiteral("text/html"))) { + m_services << s; + m_browser = s; + } + if (const auto s = KMimeTypeTrader::self()->preferredService(QStringLiteral("message/rfc822"))) { + m_services << s; + m_email = s; + } + if (const auto s = KService::serviceByDesktopName(QStringLiteral("kdesystemsettings"))) { + m_services << s; + m_systemSettings = s; } } @@ -151,22 +158,22 @@ QVariant ExampleClientModel::data(const QModelIndex &index, int role) const switch (role) { case Qt::DisplayRole: case Qt::UserRole: - return KDesktopFile(m_nameList.at(index.row())).readName(); + return m_services.at(index.row())->name(); case Qt::UserRole+1: return false; case Qt::UserRole+2: return i18nc("An example Desktop Name", "Desktop 1"); case Qt::UserRole+3: - return QIcon::fromTheme(KDesktopFile(m_nameList.at(index.row())).readIcon()); + return m_services.at(index.row())->icon(); case Qt::UserRole+4: - const QString desktopFile = KDesktopFile(m_nameList.at(index.row())).fileName().split('/').last(); - if (desktopFile == "konqbrowser.desktop") { + const auto s = m_services.at(index.row()); + if (s == m_browser) { return WindowThumbnailItem::Konqueror; - } else if (desktopFile == "KMail2.desktop") { + } else if (s == m_email) { return WindowThumbnailItem::KMail; - } else if (desktopFile == "systemsettings.desktop") { + } else if (s == m_systemSettings) { return WindowThumbnailItem::Systemsettings; - } else if (desktopFile == "dolphin.desktop") { + } else if (s == m_fileManager) { return WindowThumbnailItem::Dolphin; } return 0; @@ -177,8 +184,8 @@ QVariant ExampleClientModel::data(const QModelIndex &index, int role) const QString ExampleClientModel::longestCaption() const { QString caption; - for (QString item : m_nameList) { - QString name = KDesktopFile(item).readName(); + for (const auto item : m_services) { + const QString name = item->name(); if (name.size() > caption.size()) { caption = name; } @@ -189,7 +196,7 @@ QString ExampleClientModel::longestCaption() const int ExampleClientModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) - return m_nameList.size(); + return m_services.size(); } SwitcherItem::SwitcherItem(QObject *parent) diff --git a/kcmkwin/kwintabbox/layoutpreview.h b/kcmkwin/kwintabbox/layoutpreview.h index 8180d34589..9a7d65ef5a 100644 --- a/kcmkwin/kwintabbox/layoutpreview.h +++ b/kcmkwin/kwintabbox/layoutpreview.h @@ -20,6 +20,7 @@ along with this program. If not, see . #ifndef KWIN_TABBOX_LAYOUTPREVIEW_H #define KWIN_TABBOX_LAYOUTPREVIEW_H +#include #include #include #include @@ -57,7 +58,11 @@ public: private: void init(); - QStringList m_nameList; + QList m_services; + KService::Ptr m_fileManager; + KService::Ptr m_browser; + KService::Ptr m_email; + KService::Ptr m_systemSettings; }; diff --git a/scene_xrender.cpp b/scene_xrender.cpp index 36b7588c0f..47d9d839c4 100644 --- a/scene_xrender.cpp +++ b/scene_xrender.cpp @@ -1300,13 +1300,14 @@ SceneXRenderDecorationRenderer::~SceneXRenderDecorationRenderer() void SceneXRenderDecorationRenderer::render() { - const QRegion scheduled = getScheduled(); + QRegion scheduled = getScheduled(); if (scheduled.isEmpty()) { return; } if (areImageSizesDirty()) { resizePixmaps(); resetImageSizesDirty(); + scheduled = client()->client()->decorationRect(); } const QRect top(QPoint(0, 0), m_sizes[int(DecorationPart::Top)]);