уже несколько раз проскакивал вопрос, да и самому надо:
как создать виджет, остающийся видимым после "свернуть все окна" ("показать рабочий стол", win+d, etc.)
Linux (KDE, ибо с другими DE не знаком)
KDE 4 с плазмой делают этот вопрос неактуальным - достаточно просто установить Qt::WindowStaysOnBottomHint, "показать рабочий стол" показывает нечто вроде макосевого дашборда, к виджетам-не-плазмоидам доступа нет
(upd: наврал, виджет "поверх всех окон" - с флагами Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | Qt::ToolTip | Qt::FramelessWindowHint - вполне себе доступен).в KDE 3 приходит уже не помню какой ивент, после которого можно просто показать виджет заново с маленькой задержкой (QTimer::singleShot(25) к show();). думаю, кому третьи кеды актуальны - сами могут посмотреть, что приходит при сабже.
Windowsпро нее обычно и спрашивают =) вот, нарыл (ну как нарыл... вторая ссылка в гугле :-) ) на
codeproject.
суть: ставим хук на EVENT_SYSTEM_FOREGROUND, в нем проверяем, если для десктопа (GetClassName для целевого HWND - "WorkerW") - bring-to-top'аем свой виджет:
SetWindowPos( widgetHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE );
SetWindowPos( widgetHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
если нет акка или лень логиниться - исходники примера по ссылке приаттачил. отмечу сразу, что виджету-гаджету надо задавать те же флаги, что и в примере (Qt::CustomizeWindowHint | Qt::SplashScreen | Qt::FramelessWindowHint) - добавление WindowStaysOnBottomHint ломает костыль нафиг.
Mac OSмак трогал один раз. чужой. в качестве пользователя. посему - хз че там да как=)
собсно, предлагаю поделиться опытом для мака и линуксовых WM'ов.