Hatred's Log Place

DON'T PANIC!

Dec 25, 2010 - 1 minute read - programming c++

Qt4: поместить окно на все рабочие столы

Встроенного функционала нет, для X11 можно записпользовать такой код (юзается XLib):


#ifdef Q_WS_X11
#  include <X11/Xlib.h>
#  include <X11/Xatom.h>
#endif

...

toAllDesktops()
{
#ifdef Q_WS_X11
    Atom atom = XInternAtom(x11Info().display(), "_NET_WM_DESKTOP", True);
    if (atom)
    {
        uint32_t data = 0xFFFFFFFF;
        XChangeProperty(x11Info().display(),                // Display
                        winId(),                            // Window
                        atom,                               // Property
                        XA_CARDINAL,                        // Property type
                        32,                                 // Data format: 8, 16 or 32 bit
                        PropModeReplace,                    // Property change mode
                        reinterpret_cast<uint8_t*>(&data),  // Property data
                        1);                                 // Data elements count
    }
#endif
}

тут предполагается, что эта функцейка будет медотом класса окна, иначе нужно будет передавать Display и Window. Специальное значение 0xFFFFFFFF как раз и говорит - разместить на всех рабочих столах, иначе воспринимается как номер стола, куда нужно поместить окно. В случае Windows этот функционал бесмесленен, поэтому портабельность не сильно пострадает, при использовании директив препроцессора.

Подробности:

Tags: c++ programming qt

Boost.Signals и Qt4 Astxx: action для команды QueuePause

comments powered by Disqus