Hi,

I have some old Qt4 code I'm porting to Qt5 that includes this

```
void
MyApplication::renderDone()
{
    QPalette palette = desktop()->palette();
    palette.setBrush(desktop()->backgroundRole(), QBrush(renderer->pixmap()));
    desktop()->setPalette(palette);
    //QApplication::setPalette(palette);
    if (dpy) {
       //XSynchronize(dpy, true);
        XClearWindow(dpy, desktop()->winId());
    }

    renderer->saveCacheFile();
    renderer->cleanup();
// ...
    QTimer::singleShot(1000, this, &MyApplication::quit);
//     quit();
}

main()
{
//....
        // Keep color resources after termination
        XSetCloseDownMode(app.display(), RetainTemporary);
//....
}
```

Some of you may recognise this as part of KDM, and that'd be correct :)

Displayed in a window, `renderer->pixmap()` is identical in Qt4 and Qt5, but 
only Qt4 gives me an actual image on the X11 root window (tested with the 
Xephyr nested window server). QDesktopWidget::winID() returns the correct X11 
Window so the differences can only be in what the QWidget::setPalette() does 
behind the scenes and how that trickles down to the underlying Window atom. Or 
in what it does in addition, like only actually applying the setting before 
doing some actual painting via the QPA, and then restoring the initial 
configuration?

I've tried to achieve what I want via Qt calls but have gotten nowhere with 
that either.

How does one do this sort of thing in Qt5? Clearly some part of the KF5 Plasma 
code manages to do what I'm trying to do, but which? 

Thanks,
R.

Reply via email to