LINUX.ORG.RU

Управление чужими графическими окнами (Xlib)

 , ,


0

4

Здравствуйте. Работаю с ОС AstraLinuxSE 1.6 на рабочем месте с двумя и более мониторами, накопилось несколько вопросов, на которые не могу найти ответы.

  1. Функции XMoveResizeWindow, XMoveWindow, XResizeWindow из библиотеки Xlib двигают окна жестко привязываясь к краям монитора, то есть невозможно поместить окно сразу на два и более мониторов. Попытался обойти данную проблему путем изменения параметра override_redirect в атрибутах окна. Но таким образом оконный менеджер не воспринимает изменение положения окна и при переключении рабочего стола или сворачивании/разворачивании окна, оно возвращается на исходную позицию.

  2. Можно ли из своей программы задавать стартовые координаты окна (при запуске чужого приложения)?

  3. Можно ли отследить существование какого либо окна(чужого), дабы избежать ошибки BadWindow и остановки программы. Или же отследить появление данной ошибки (исключений при этом, видимо, не генерируется).

Тут это, x11 выкидивают помаленьку, в исках вроде всё что ты написал можно (как не подскажу), а вот вялый точно не даст ничего из списка

peregrine ★★★★★ ()

Управлять окном, наверно надо один раз, при запуске ПО? Сделать это можно через соответствующую программу:

export DISPLAY=:0.0
xdotool search --name "Astra Linux SE 1.6 Smolensk - arm1\s" windowactivate windowsize 2048 768
xdotool search --name "Astra Linux SE 1.6 Smolensk - arm1\s" windowactivate windowmove 500 250

Xintrea ★★★★★ ()
  1. Можно оверрайдить геометрию окна, но менеджеру окон может не понравится и он переделает. Нужно выставлять хинты для него, тогда он может и пойти навстречу, но может и не пойти (зависит от конкретного wm).

  2. То же самое, но приложение должно откуда-то взять твои параметры. Или становись window manager’ом. Или дружись с ним каким-то образом.

  3. Можно искать по ресурсам. Примеры есть в исходниках xrb, xdotool, xlsatoms, там всего несколько строк кода.

slapin ★★★★★ ()

что бы dwm работал с несколькими мониторами - его надо собрать с поддержкой xinerama - возможно вам стоит обратится к этой библиотеке за необходимыми фичами.

Silerus ★★★ ()
Ответ на: комментарий от slapin
  1. Хинты WM должен воспринимать постоянно, пока работает окно или при открытии?

  2. Я отлавливаю событие ReparentNotify, всплывающее при открытии всех испробованных приложений. Но изменение атрибутов окна срабатывает не сразу, приходится делать паузы между командами. Может есть возможность не отображать окно при запуске?

  3. Спасибо, посмотрю.

anrie30 ()
Ответ на: комментарий от anrie30
  1. при создании, при обновлении.
  2. Потому что это задача WM. Можно не отображать, но когда отобразишь, все равно нужно ждать события обновления. Тут я бы посовеловал посмотреть простые клиенты X11, там есть все что тебе нужно. Посмотри те, которые рисуют на пиксмапах/битмапах, там все будет что тебе базово нужно.
slapin ★★★★★ ()
Ответ на: комментарий от anrie30

Управлять окном надо периодически время от времени, сторонние утилиты не могу использовать.

Вызов сторонних утилит ты можешь использовать, если они идут в комплекте с Astra Linux, ибо они сертифицированы. Сделай system() вызов с нужными командами и не парь мозго.

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

сторонние утилиты не могу использовать

Извиняюсь за оффтоп, но просто интересно стало.

Я так понимаю, что нельзя из-за сертификаций?

Но чем отличается принципиально в этом смысле вставка в свой код, а свой код пишешь и позволено же, да? кода из этих утилит, да хоть и вообще их целиком в исходниках?

praseodim ★★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от praseodim

Но чем отличается принципиально в этом смысле вставка в свой код, а свой код пишешь и позволено же, да? кода из этих утилит, да хоть и вообще их целиком в исходниках?

Потому что потом будет сертификация исходного кода. И если в документах на сертификацию не было заранее заявлен отдельный исполняемый компонент, то его не пропустят. А если документы составлены так, что допустимы отдельные исполняемый блоки и их перечень не ограничен, то весь код утилиты полюбому нужно будет документировать, как минимум каждую функцию и каждый член класса. А это то еще занятие если утилита большая.

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

Да, из-за сертификаций. Вставки кода конечно допустимы. Изначально использовал исходники wmctrl и xwininfo. Но использовать куски кода в сыром виде накладно, приходится их перерабатывать. Разбирать исходники упомянутых здесь программ тоже планирую, но на это опять таки придется потратить кучу времени.

anrie30 ()