File indexing completed on 2024-04-28 16:55:48

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Alexander Volkov <a.volkov@rusbitech.ru>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "utils.h"
0008 
0009 #include "waylandintegration.h"
0010 
0011 #include <KWindowSystem>
0012 
0013 #include <QSettings>
0014 #include <QStandardPaths>
0015 #include <QString>
0016 #include <QWidget>
0017 
0018 void Utils::setParentWindow(QWidget *w, const QString &parent_window)
0019 {
0020     if (parent_window.startsWith(QLatin1String("x11:"))) {
0021         w->setAttribute(Qt::WA_NativeWindow, true);
0022         setParentWindow(w->windowHandle(), parent_window);
0023     }
0024     if (parent_window.startsWith((QLatin1String("wayland:")))) {
0025         if (!w->window()->windowHandle()) {
0026             w->window()->winId(); // create QWindow
0027         }
0028         setParentWindow(w->window()->windowHandle(), parent_window);
0029     }
0030 }
0031 
0032 void Utils::setParentWindow(QWindow *w, const QString &parent_window)
0033 {
0034     if (parent_window.startsWith(QLatin1String("x11:"))) {
0035 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0036         KWindowSystem::setMainWindow(w, parent_window.midRef(4).toULongLong(nullptr, 16));
0037 #else
0038         KWindowSystem::setMainWindow(w, QStringView(parent_window).mid(4).toULongLong(nullptr, 16));
0039 #endif
0040     }
0041     if (parent_window.startsWith((QLatin1String("wayland:")))) {
0042         WaylandIntegration::setParentWindow(w, parent_window.mid(strlen("wayland:")));
0043     }
0044 }
0045 
0046 QString Utils::applicationName(const QString &appName)
0047 {
0048     QString applicationName;
0049     const QString desktopFile = appName + QStringLiteral(".desktop");
0050     const QStringList desktopFileLocations = QStandardPaths::locateAll(QStandardPaths::ApplicationsLocation, desktopFile, QStandardPaths::LocateFile);
0051     for (const QString &location : desktopFileLocations) {
0052         QSettings settings(location, QSettings::IniFormat);
0053         settings.beginGroup(QStringLiteral("Desktop Entry"));
0054         if (settings.contains(QStringLiteral("X-GNOME-FullName"))) {
0055             applicationName = settings.value(QStringLiteral("X-GNOME-FullName")).toString();
0056         } else {
0057             applicationName = settings.value(QStringLiteral("Name")).toString();
0058         }
0059 
0060         if (!applicationName.isEmpty()) {
0061             break;
0062         }
0063     }
0064     return applicationName;
0065 }