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 }