xcb: set _KDE_NET_WM_DESKTOP_FILE and _GTK_APPLICATION_ID for window
in top level, which are in used very common for KDE and GNOME. Pick-to: 6.5 6.2 Fixes: QTBUG-117488 Change-Id: I88fe7b4afe44e4ac8f07e60e990cbe68498e98d9 Reviewed-by: Nicolas Fella <nicolas.fella@kdab.com> Reviewed-by: Ilya Fedin <fedin-ilja2010@ya.ru> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit 70d3c15e8e9ef5965a242022e6681dd87dff5bd4) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
26c3a2fd79
commit
51129d65b9
@ -111,6 +111,7 @@ static const char *xcb_atomnames = {
|
|||||||
"_NET_WM_WINDOW_TYPE_NORMAL\0"
|
"_NET_WM_WINDOW_TYPE_NORMAL\0"
|
||||||
"_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0"
|
"_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0"
|
||||||
|
|
||||||
|
"_KDE_NET_WM_DESKTOP_FILE\0"
|
||||||
"_KDE_NET_WM_FRAME_STRUT\0"
|
"_KDE_NET_WM_FRAME_STRUT\0"
|
||||||
"_NET_FRAME_EXTENTS\0"
|
"_NET_FRAME_EXTENTS\0"
|
||||||
|
|
||||||
@ -196,6 +197,7 @@ static const char *xcb_atomnames = {
|
|||||||
"_COMPIZ_DECOR_REQUEST\0"
|
"_COMPIZ_DECOR_REQUEST\0"
|
||||||
"_COMPIZ_DECOR_DELETE_PIXMAP\0"
|
"_COMPIZ_DECOR_DELETE_PIXMAP\0"
|
||||||
"_COMPIZ_TOOLKIT_ACTION\0"
|
"_COMPIZ_TOOLKIT_ACTION\0"
|
||||||
|
"_GTK_APPLICATION_ID\0"
|
||||||
"_GTK_LOAD_ICONTHEMES\0"
|
"_GTK_LOAD_ICONTHEMES\0"
|
||||||
"AT_SPI_BUS\0"
|
"AT_SPI_BUS\0"
|
||||||
"EDID\0"
|
"EDID\0"
|
||||||
|
@ -112,6 +112,7 @@ public:
|
|||||||
Atom_NET_WM_WINDOW_TYPE_NORMAL,
|
Atom_NET_WM_WINDOW_TYPE_NORMAL,
|
||||||
Atom_KDE_NET_WM_WINDOW_TYPE_OVERRIDE,
|
Atom_KDE_NET_WM_WINDOW_TYPE_OVERRIDE,
|
||||||
|
|
||||||
|
Atom_KDE_NET_WM_DESKTOP_FILE,
|
||||||
Atom_KDE_NET_WM_FRAME_STRUT,
|
Atom_KDE_NET_WM_FRAME_STRUT,
|
||||||
Atom_NET_FRAME_EXTENTS,
|
Atom_NET_FRAME_EXTENTS,
|
||||||
|
|
||||||
@ -199,6 +200,7 @@ public:
|
|||||||
Atom_COMPIZ_DECOR_REQUEST,
|
Atom_COMPIZ_DECOR_REQUEST,
|
||||||
Atom_COMPIZ_DECOR_DELETE_PIXMAP,
|
Atom_COMPIZ_DECOR_DELETE_PIXMAP,
|
||||||
Atom_COMPIZ_TOOLKIT_ACTION,
|
Atom_COMPIZ_TOOLKIT_ACTION,
|
||||||
|
Atom_GTK_APPLICATION_ID,
|
||||||
Atom_GTK_LOAD_ICONTHEMES,
|
Atom_GTK_LOAD_ICONTHEMES,
|
||||||
|
|
||||||
AtomAT_SPI_BUS,
|
AtomAT_SPI_BUS,
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QMetaEnum>
|
#include <QMetaEnum>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
#include <QtCore/QFileInfo>
|
||||||
#include <QtGui/QIcon>
|
#include <QtGui/QIcon>
|
||||||
#include <QtGui/QRegion>
|
#include <QtGui/QRegion>
|
||||||
#include <QtGui/private/qhighdpiscaling_p.h>
|
#include <QtGui/private/qhighdpiscaling_p.h>
|
||||||
@ -388,6 +389,31 @@ void QXcbWindow::create()
|
|||||||
XCB_ATOM_STRING, 8, wmClass.size(), wmClass.constData());
|
XCB_ATOM_STRING, 8, wmClass.size(), wmClass.constData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString desktopFileName = QGuiApplication::desktopFileName();
|
||||||
|
if (QGuiApplication::desktopFileName().isEmpty()) {
|
||||||
|
QFileInfo fi = QFileInfo(QCoreApplication::instance()->applicationFilePath());
|
||||||
|
QStringList domainName =
|
||||||
|
QCoreApplication::instance()->organizationDomain().split(QLatin1Char('.'),
|
||||||
|
Qt::SkipEmptyParts);
|
||||||
|
|
||||||
|
if (domainName.isEmpty()) {
|
||||||
|
desktopFileName = fi.baseName();
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < domainName.size(); ++i)
|
||||||
|
desktopFileName.prepend(QLatin1Char('.')).prepend(domainName.at(i));
|
||||||
|
desktopFileName.append(fi.baseName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!desktopFileName.isEmpty()) {
|
||||||
|
const QByteArray dfName = desktopFileName.toUtf8();
|
||||||
|
xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE,
|
||||||
|
m_window, atom(QXcbAtom::Atom_KDE_NET_WM_DESKTOP_FILE),
|
||||||
|
atom(QXcbAtom::AtomUTF8_STRING), 8, dfName.size(), dfName.constData());
|
||||||
|
xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE,
|
||||||
|
m_window, atom(QXcbAtom::Atom_GTK_APPLICATION_ID),
|
||||||
|
atom(QXcbAtom::AtomUTF8_STRING), 8, dfName.size(), dfName.constData());
|
||||||
|
}
|
||||||
|
|
||||||
if (connection()->hasXSync()) {
|
if (connection()->hasXSync()) {
|
||||||
m_syncCounter = xcb_generate_id(xcb_connection());
|
m_syncCounter = xcb_generate_id(xcb_connection());
|
||||||
xcb_sync_create_counter(xcb_connection(), m_syncCounter, m_syncValue);
|
xcb_sync_create_counter(xcb_connection(), m_syncCounter, m_syncValue);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user