LINUX.ORG.RU

[Xlib] Как показать окно, зная его id?

 


0

0

Допустим, в KDE возьмём любое окно, скажем от сетевого монитора. Через xwininfo определим его id:

$ xwininfo | grep 'Window id'
xwininfo: Window id: 0xc00aff "eth0 Состояние интерфейса"

Теперь закроем окно, оно спрячется. Теперь задача его показать средствами Xlib. Попробовал так:

Window wid = 0xc00aff;
XMapRaised(display, wid);
XMapSubwindows(display, wid);

Однако окно открылось наполовину не отрисованным, и дальнейшие манипуляции с ним не проходят - окно не перерисовывает некоторые участки, и не закрывается вообще. Как правильно его показать?

Ответ на: комментарий от former_anonymous

wmctrl не умеет показывать спрятанные окна. former_anonymous (*) (11.01.2010 2:50:25)

В Firefox rликнул на кнопке Minimize. Окно свернулось.

wmctrl -R Mozilla

Окно появилось.

anonomouso
()

С помощью wmctrl можно еще не скрывать окно, а временно отправлять окно на другой виртуальный десктоп. Получается симуляция скрытия окна.

Например так перемещаем фаерфокс на десктоп номер 3

wmctrl -R Mozilla -t 3

А потом возвращаем на место

wmctrl -R Mozilla -t 0

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

я писал не про минимизацию. Когда ты _закрываешь_ любое окно, которое например имеет иконку в трее (Skype, KNemo...), оно полностью прячется. Теперь задача его программно показать.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

Когда ты закрываешь окно, оно, скорее всего, уничтожается. Так что извне его никак не воссоздать.

Laz ★★★★★
()
Ответ на: комментарий от former_anonymous

> которое например имеет иконку в трее (Skype, KNemo...), оно полностью прячется. Теперь задача его программно показать.

Трей ? Тогда только через dcop, dbus, интерфейс программы. Если программа этого не умеет, то - никак. Ибо unhide окна через иксы еще не означает, что программа знает о необходимости его прорисовки.

Darkman ★★★
()
Ответ на: комментарий от Laz

Как окно может уничтожаться? Его можной найти через xwininfo -root -children. Уничтожаться может его контекст рисования.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от Darkman

Трей ? Тогда только через dcop, dbus, интерфейс программы


к сожалению такого интерфйеса у неё нет.

Ибо unhide окна через иксы еще не означает, что программа знает о необходимости его прорисовки.


Хорошо, можно ли заставить через Xlib перерисоваться окно? Типа послать сообщение что окно «грязное», и чтобы низлежащий тулкит окна (Qt, Gtk) перерисовал свои компоненты?

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

Для этого есть событие Expose, но при вызове XMapWindow оно окну отправляется. Попробуй руками отправить, вдруг чо.

Laz ★★★★★
()
Ответ на: комментарий от former_anonymous

> не помогает

И не поможет. Ибо программа считает что окно скрыто, чего бы иксы себе не думали. Выход один - ковырять саму прогу на предмет предоставления внешнего интефейса.

Darkman ★★★
()

Читай как реализован трей в конкретной среде на уровне иксов. Обычно это манипуляции с properties/atoms. Простой мап конечно ничего не даст

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