Russian Qt Forum
Сентябрь 29, 2024, 20:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: show desktop  (Прочитано 4550 раз)
sendevent
Гость
« : Апрель 24, 2010, 19:56 »

уже несколько раз проскакивал вопрос, да и самому надо:
как создать виджет, остающийся видимым после "свернуть все окна" ("показать рабочий стол", 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'ов.
« Последнее редактирование: Апрель 24, 2010, 20:12 от sendevent » Записан
crossly
Гость
« Ответ #1 : Апрель 26, 2010, 11:47 »

Цитировать
KDE 4 с плазмой делают этот вопрос неактуальным - достаточно просто установить Qt::WindowStaysOnBottomHint.....
это изврат.... лучше написать плазмоид...
Записан
fdn
Гость
« Ответ #2 : Апрель 27, 2010, 08:01 »

Это плохой тон. Если есть "кнопка" свернуть все окна, то она должна сворачивать все окна без исключения.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 27, 2010, 09:59 »

По поводу Mac. Там есть "Hide" - можно выбрать из контекстного меню или просто кликнуть в окно др. задачи с нажатой клавишей Option. Результат - все окна задачи скрываются (но не сбрасываются в minimize), хоть эти окна модальные, floating - хоть какие. Другой процесс получает фокус и захватывает меню.

Можно ли это победить - не знаю, но точно - надо прочитать apple буквари, нарыть системные ф-ции и.т.п. Вместо "легкой изящной вещицы" - нудная рутинная работа без всякого творческого элемента  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.