LINUX.ORG.RU

как установить свёрнуто ли главное окно некоторой иксовой проги с известным pid? И если свёрнуто то как развернуть???


0

0

Тоесть есть некоторая иксовая прога ПРГ1 которая запускает другую иксовую прогу ПРГ2

при некоторых обстоятельствах ПРГ1 должна определить свёрнуто ли главное окно дочерней проги ПРГ2 и если свёрнуто то развернуть.

Насколько я понимаю эт сотворить не так уже и сложно. Если можно то желательно средствами gtk/gdk.

★★★★★

абсолютной связи между X окнами и pid процессом нет. Также состояние свернутости должно поддерживаться WM-ом, то есть WM должен быть ICCCM compliant.

если програ поддерживает netwm, то у нее вполне вероятно на окнах висит свойство _NET_WM_PID. Насколько я знаю поддержка _NET_WM_PID есть в gtk.

Так вот, ты делаешь QueryTree рутового окна, бежишь по дереву и проверяешь _NET_WM_PID на соответсвие твоего записаного pidа. Как только нашел окно, то проверяешь его state - свойство WM_STATE. Если state - IconicState, то ты делаешь MapWindow для этого окна - тем самым WM переведет окно в NormalState.

Помни что концепт IconicState не поддерживается на прямую X клиентами - это полнстью забота WMа

все это будет с трудом работать всегда, по хорошему твоя ПРГ2 должна как то определять себя, чтобы ПРГ1 могла связать окно с процессом.

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

>абсолютной связи между X окнами и pid процессом нет.

никогда не думал что такое может быть

>Также состояние свернутости должно поддерживаться WM-ом, то есть WM должен быть ICCCM compliant.

Меня интересуют matacity && windowmaker

>Как только нашел окно, то проверяешь его state - свойство WM_STATE. Если state - IconicState

А состояния свёрнутости и скатанности таким образом различаются???

Вобщем Спасибо.

ЗЫ: Чувствую что мне здесь придётся довольно поковырятся

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

>>абсолютной связи между X окнами и pid процессом нет.

>никогда не думал что такое может быть

Попробуй подумать еще раз :)

hint: какой _pid_ у окна _удалённо_ запущеного Xterma ? ;)

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

>>>абсолютной связи между X окнами и pid процессом нет.

>>никогда не думал что такое может быть

>Попробуй подумать еще раз :)

Попробую

>hint: какой _pid_ у окна _удалённо_ запущеного Xterma ? ;)

У меня ПРГ1 и ПРГ2 запущены на одном дисплее

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

> Меня интересуют matacity && windowmaker

по идеи они поддерживают icccm

> А состояния свёрнутости и скатанности таким образом различаются???

это на усмотрение WMа.  icccm определяет 3 состояния:

  * Withdrawn    - никакое
  * Normal       - нормальное состояние, клиент показан и все пучком
  * Iconic       - окно не показывается

WM может определить какое нибудь новое состояние, например Skatano,
которое только WMом и рассматривается, но клиент про это вообще ничего 
не знает.  Поэтому состояние Skatano определяется WMами как алиас на 
Iconic

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

> У меня ПРГ1 и ПРГ2 запущены на одном дисплее

он говорит про то что X display может обслуживать не только локальных клиентов(запущеных на том же хосте где и X), а так же и ремотных клиентов(которые запущены на другом хосте нежели X). У ремотных клиентов тоже может быть pid, но pid не на локальном хосте где X а на ремотном .. поэтому то и нет абсолютной связи между pid и окном ..

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

>> У меня ПРГ1 и ПРГ2 запущены на одном дисплее

>он говорит про то что X display может обслуживать не только локальных клиентов(запущеных на том же хосте где и X), а так же и ремотных клиентов(которые запущены на другом хосте нежели X). У ремотных клиентов тоже может быть pid, но pid не на локальном хосте где X а на ремотном .. поэтому то и нет абсолютной связи между pid и окном ..

Я эт довольно неплохо понял с первого раза

Я тут ещё пошевелил мозгой и обратил внимание что если я знаю pid процесса то я могу довольно просто определить его WINDOWID. Я думаю что используя его можно слегка упростить себе жизнь

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

> Я тут ещё пошевелил мозгой и обратил внимание что если я знаю pid процесса то я могу довольно просто определить его WINDOWID. Я думаю что используя его можно слегка упростить себе жизнь

КАК??? колись давай! .. все давно ищут как это сделать а найти не могут ..

WINDOWID - это и есть окно

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

>КАК??? колись давай! .. все давно ищут как это сделать а найти не могут

В моём случае покатит вариант типа 'grep WINDOWID /proc/$PID/environ'

>WINDOWID - это и есть окно

Тоесть его можно передавать XMapWindow() в роли параметра Window????

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

>>КАК??? колись давай! .. все давно ищут как это сделать а найти не могут

>В моём случае покатит вариант типа 'grep WINDOWID /proc/$PID/environ'

ааа, ясно .. а что делать если этот процесс создаст больше одного окна?

>>WINDOWID - это и есть окно

>Тоесть его можно передавать XMapWindow() в роли параметра Window????

не совсем, но используя WINDOWID можно создать Window которую уже можно передавать в функции

я имел ввиду что с точки зрения X протокола - WindowID это и есть идентификатор ресурса соответсвующего окну

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

>>>КАК??? колись давай! .. все давно ищут как это сделать а найти не могут

>>В моём случае покатит вариант типа 'grep WINDOWID /proc/$PID/environ'

>ааа, ясно .. а что делать если этот процесс создаст больше одного окна?

Ну вообще я в етих вещах не силён.

Хотя по моим експериментам WINDOWID всегда coдержит ID главного окна приложения. Для моей задачи етого достаточно.

>>>WINDOWID - это и есть окно

>>Тоесть его можно передавать XMapWindow() в роли параметра Window????

>не совсем, но используя WINDOWID можно создать Window которую уже можно передавать в функции

А как а тоя я уже в поисках екзамплов

>я имел ввиду что с точки зрения X протокола - WindowID это и есть идентификатор ресурса соответсвующего окну

спасибо за помощь

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

>>>КАК??? колись давай! .. все давно ищут как это сделать а найти не могут

>>В моём случае покатит вариант типа 'grep WINDOWID /proc/$PID/environ'

>ааа, ясно .. а что делать если этот процесс создаст больше одного окна?

Ну вообще я в етих вещах не силён.

Хотя по моим експериментам WINDOWID всегда coдержит ID главного окна приложения. Для моей задачи етого достаточно.

>>>WINDOWID - это и есть окно

>>Тоесть его можно передавать XMapWindow() в роли параметра Window????

>не совсем, но используя WINDOWID можно создать Window которую уже можно передавать в функции

А как а тоя я уже в поисках екзамплов

>я имел ввиду что с точки зрения X протокола - WindowID это и есть идентификатор ресурса соответсвующего окну

спасибо за помощь

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

>>КАК??? колись давай! .. все давно ищут как это сделать а найти не могут

>В моём случае покатит вариант типа 'grep WINDOWID /proc/$PID/environ'

Вариант не покатил. ГТК не устанавливает WINDOWID. Тоесть я получил WINDOWID родительской консоли ;-(

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