File indexing completed on 2024-04-28 05:36:54

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         KWindowSystem::setMainWindow(w, QStringView(parent_window).mid(4).toULongLong(nullptr, 16));
0036     }
0037     if (parent_window.startsWith((QLatin1String("wayland:")))) {
0038         WaylandIntegration::setParentWindow(w, parent_window.mid(strlen("wayland:")));
0039     }
0040 }
0041 
0042 QString Utils::applicationName(const QString &appName)
0043 {
0044     QString applicationName;
0045     const QString desktopFile = appName + QStringLiteral(".desktop");
0046     const QStringList desktopFileLocations = QStandardPaths::locateAll(QStandardPaths::ApplicationsLocation, desktopFile, QStandardPaths::LocateFile);
0047     for (const QString &location : desktopFileLocations) {
0048         QSettings settings(location, QSettings::IniFormat);
0049         settings.beginGroup(QStringLiteral("Desktop Entry"));
0050         if (settings.contains(QStringLiteral("X-GNOME-FullName"))) {
0051             applicationName = settings.value(QStringLiteral("X-GNOME-FullName")).toString();
0052         } else {
0053             applicationName = settings.value(QStringLiteral("Name")).toString();
0054         }
0055 
0056         if (!applicationName.isEmpty()) {
0057             break;
0058         }
0059     }
0060     return applicationName;
0061 }