SHOW:
|
|
- or go back to the newest paste.
1 | int main(int argc, char *argv[]) | |
2 | { | |
3 | #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) | |
4 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); | |
5 | #endif | |
6 | ||
7 | QGuiApplication app(argc, argv); | |
8 | QmlCBridge c_app; | |
9 | ||
10 | QQmlApplicationEngine engine; | |
11 | const QUrl url(QStringLiteral("qrc:/main.qml")); | |
12 | QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, | |
13 | &app, [url](QObject *obj, const QUrl &objUrl) { | |
14 | if (!obj && url == objUrl) | |
15 | QCoreApplication::exit(-1); | |
16 | }, Qt::QueuedConnection); | |
17 | engine.load(url); | |
18 | ||
19 | QQmlContext *root = engine.rootContext(); | |
20 | root->setContextProperty("app", &c_app); | |
21 | ||
22 | QObject *component = engine.rootObjects().first(); | |
23 | c_app.setComponent(component); | |
24 | ||
25 | WId window = qobject_cast<QWindow*>(component)->winId(); | |
26 | Display *display = QX11Info::display(); | |
27 | ||
28 | // make window visible on all desktops | |
29 | unsigned long data = 0xffffffff; // all desktop | |
30 | XChangeProperty (display, window, | |
31 | XInternAtom(display, "_NET_WM_DESKTOP", False), | |
32 | XA_CARDINAL, | |
33 | 32, | |
34 | PropModeReplace, | |
35 | reinterpret_cast<unsigned char *>(&data), | |
36 | 1); | |
37 | ||
38 | // make window pass-through | |
39 | XRectangle rect; | |
40 | XserverRegion region = XFixesCreateRegion(display, &rect, 1); | |
41 | XFixesSetWindowShapeRegion(display, window, ShapeInput, 0, 0, region); | |
42 | XFixesSetWindowShapeRegion (display, window, ShapeBounding, 0, 0, 0); | |
43 | XFixesDestroyRegion(display, region); | |
44 | ||
45 | XMapWindow(display, window); | |
46 | XFlush(display); | |
47 | ||
48 | int status = app.exec(); | |
49 | return status; | |
50 | } | |
51 |