LINUX.ORG.RU

GTK: Свернуть приложение в трей


0

0

Собственно, проблема в седующем.

Трей создал. По кнопке закрытия [X] окна оно у меня в него отлично сворачивается, но также хотелось бы, чтобы оно сворачивалось по кнопке сворачивания [_] окна.

Повесил коллбэк на "window-state-event", но событие GDK_WINDOW_STATE_ICONIFIED генерируется не только тогда, когда пользователь сворачивает окно, но и когда переключается на другой рабочий стол. Если при этом не скрывать окно, то Gnome впоследствии снимает флаг GDK_WINDOW_STATE_ICONIFIED, когда пользователь возвращается на этот рабочий стол, но если окно скрыть (что мне как раз и надо), он перестает снимать данный флаг.

Таким образом, заставить свое приложение сворачиваться по [_] в трей у меня так и не получилось. Подскажите, пожалуйста, можно ли это как-нибудь реализовать? Или, может быть, кто-нибудь знает какое-нибудь приложение, которое так умеет делать - посмотрю в исходниках.


просто в обработчике дергай gdk_window_set_skip_taskbar_hint вместо gtk_widget_hide или как там у тебя реализовано

ananas ★★★★★
()

_NET_WM_STATE_HIDDEN проверяй.

len
()
Ответ на: комментарий от ananas

> _NET_WM_STATE_HIDDEN проверяй.
Уж очень хотелось бы обойтись средствами GTK. Курить доки X11 только ради этого, честно говоря, не очень хочется. Но все равно спасибо, если не получится средствами GTK, то попробую ваш метод.

> просто в обработчике дергай gdk_window_set_skip_taskbar_hint вместо gtk_widget_hide или как там у тебя реализовано
О, вот это уже гораздо лучше, спасибо! Правда, хотя окно и пропадает из таскбара, его все равно видно в меню, которое отображает WM по Alt+Tab. Пробовал переключать gdk_window_set_skip_pager_hint() - никакого эффекта. Не подскажете, как и с этим справиться? :)

P.S.: GdkWindow получаю как:
GtkWindow window = ...;
GdkWindow gdk_window = GTK_WIDGET(window)->window;
Насколько я понял, делать нужно именно так.

riYu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.