-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.cpp
56 lines (47 loc) · 1.58 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "mainwindow.h"
#include "commandlinemanager.h"
#include <QApplication>
#include <QFile>
#include <QStringList>
#include <QWindow>
#include <QDebug>
#include <X11/Xlib.h>
int main(int argc, char *argv[])
{
auto envType = qEnvironmentVariable("XDG_SESSION_TYPE");
if (envType.contains("wayland")) {
qInfo() << QDateTime::currentDateTime().toString() << "notes:change wayland to xcb for QT_QPA_PLATFORM.";
qputenv("QT_QPA_PLATFORM", "xcb");
}
QApplication a(argc, argv);
CommandLineManager::instance()->process(a.arguments());
if (CommandLineManager::instance()->isSet("window-id")) {
QString windowId = CommandLineManager::instance()->value("window-id");
WId windowHwnd = WId(windowId.toULongLong());
QWindow *window = QWindow::fromWinId(windowHwnd);
if (!window) {
qDebug() << "Error:not found QWindow by window id:" << windowId;
return -1;
}
MainWindow w;
w.setProperty("_q_embedded_native_parent_handle", QVariant(windowHwnd));
w.winId();
w.windowHandle()->setParent(window);
Display *display = XOpenDisplay(nullptr);
if (!display) {
qWarning() << "can not connect xservice.";
return -1;
}
Window windowXID(windowHwnd);
XWindowAttributes attr;
XGetWindowAttributes(display, windowXID, &attr);
w.setGeometry(QRect(0, 0, attr.width, attr.height));
w.show();
return a.exec();
}
else {
MainWindow w;
w.show();
return a.exec();
}
}