LINUX.ORG.RU

X11 Window Manager


0

0

Собственно, интересны и алгоритмы его работы и их реализация на Xlib. Сырцы WMа не советовать - второй день в blackbox'e копаюсь. Так же не предлагать обычные материалы по Xlib без привязки к данной задаче. Язык документации неважен (в смысле, русский или английский).Заранее спасибо.


Ничего не понял. X11 это не Window Manager. Советую для начала ознакомиться с базовыми понятиями.

kraw ★★★★
()

>второй день в blackbox'e копаюсь

Думаю тебе надо было начать с twm. он куда проще

cvv ★★★★★
()

Вообще-то сначала следует прочесть доку по ICCCM. Она идет с иксами. Ищи ее в дистре. Далее, возьми исходники какого-нибудь простого WM. Для этого лучше пойти на freshmeat.net и поискать там примитивный WM. Они есть -- я находил, когда интересовался этим вопросом. Названий не помню. Бери тарболы кило на 20-30, там нет ничего лишнего, никаких наворотов. И еще, если не читал, то обязательно прочти "Xlib - C Language X Interface" -- там описаны базовые вещи, в т.ч. кое-что по взаимодействию с WM.

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

Спасибо за нормальный ответ. Хотя, конечно, хотелось бы ссылку на талмуд "напиши свой X11 Window Manager".

С Xlib я достаточно хорошо знаком. Но что-то относительно крупное и связное не писал. Проблема не в том, чтобы разобрать сырцы "буквально" (blackbox тоже не очень большой), а в том, чтобы понять схему работы WM в целом, для чего реализуются те или иные вещи. Доки и маны я непрерывно читаю ).

А TWM, наверное, посмотрю.

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

> Проблема не в том, чтобы разобрать сырцы "буквально" (blackbox тоже не очень большой), а в том, чтобы понять схему работы WM в целом, для чего реализуются те или иные вещи.

Ну, в целом логика примитивного WM проста до безобразия. Во-первых, определяем задачи. Их всего ничего:

1) Приделывать к окнам рамку и заголовок.
2) Перемещать окна и изменять их размер.
3) Помещать окно поверх остальных.
4) Изменять при этом colormap.
5) Закрывать окна.

Во-вторых, смотрим, чем мы располагаем для решения этих задач:

1) XCreateWindow + XReparentWindow. На каждое клиентское окно верхнего уровня (parent == root), которое клиент хочет XMapWindow, и при этом не override-redirect, создаем свое окно. После чего делаем reparent клиента под себя.

2) XMoveWindow + XResizeWindow. Если юзер зажал кнопку крысы на нашем окне, двигаем или изменяем его размер. Заодно при изменении размера ресайзим клиента. При изменении положения посылаем ему событие с его координатами относительно root.

3) XRaiseWindow по клику юзера (или по какому еще событию -- на твой вкус).

4) XInstallColormap для клиента, если он наверху.

5) XSendEvent, если клиент поддерживает WM_PROTOCOLS. Иначе XKillClient. Это по нажатию Alt+F4, или чего тебе хочется.

В-третьих, когда этого оказывается мало, и нужны навороты, то первым из них оказывается управление фокусом ввода. Для этого есть XSetInputFocus, когда клиент выводится наверх (см. пункт 3). Ну а прочие навороты, типа поддержки темы GNOME/KDE и т.п. -- это уже вне ICCCM.

ЗЫ: чтобы разобраться с twm, тебе придется сначала разбираться с Xt, а это г. редкостное, IMO.

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

Все-таки я рекомендую тебе сначала прочитать ICCCM и поглядеть в сырцы какого-нибудь примитивного WM. Потому что иначе грабли тебе обеспечены. Например, ты будешь пытаться попиксельно ресайзить xterm, а он ресайзиться не будет, и будешь ты думать, почему он, сволочь, не хочет работать с твоим WM. А потому что ты забил на WM_SIZE_HINTS. Или запустишь прогу на Qt, а она имя иконки не устанавливает, и опять будешь долго и упорно искать, где же грабли. Вобщем, чтение ICCCM является обязательным для писателя WM, IMHO.

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

Обижаете, дяденька )

Читаю я ICCCM, УЖЕ читаю. Спасибо за заботу )

Хинт: с xterm уже началось )

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

Кстати, а можно мыло, а? Я, наверное, все-таки периодически буду на грабли наступать ) Клянусь не доставать по пустякам и спрашивать не чаще раза в неделю ) Честное пионерское.

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

Можно: a72 at hotbox dot ru. Но лучше тебе вопросы в форум задавать, потому что людей здесь больше, а значит суммарный уровень знаний выше, чем у одного меня, следовательно, больше вероятность получить корректный ответ. А я на самом деле очень мало знаю -- только то, с чем лично сталкивался. К тому же никаких гарантий оперативности -- может быть через 3 суток отвечу, а может через пару месяцев (отпуск у меня скоро, а он у северян длинный, а я еще не решил, то ли поехать на юг, то ли ремонт в квартире делать).

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

Все равно спасибо )

P. S. На Лоре достаточно мало людей, способных (или имеющих желание) нормально и по делу ответить, при этом "не кинув пальцы", не "опустив" пониже. А вот болтунов здесь хватает )

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