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 }