2015-02-13 2 views
0

Я использую XCreateSimpleWindow для создания окна x11. xprop показывает следующие разрешенные действия для моего окна:x11 - как установить _NET_WM_ALLOWED_ACTIONS

_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_STICK, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW 

Что произойдет, если я не ставлю их в явном виде (как выше)? В окне есть список по умолчанию, который содержит все из них? Как установить их явно?

Edit1 Вот пример кода, который устанавливает только один разрешенный действие:

Atom aa = XInternAtom(d, "_NET_WM_ALLOWED_ACTIONS", False); 
Atom close = XInternAtom(d, " _NET_WM_ACTION_CLOSE", False); 
XChangeProperty(d, w, aa, XA_ATOM, 32, PropertyNewValue, (unsigned char*)&close, 1); 

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

ответ

1

1) нет, по умолчанию окно не имеет свойств, но администраторы окон часто устанавливают некоторые значения по умолчанию. Попробуйте запустить вашу программу без WM, чтобы увидеть разницу

2) используйте запрос «ChangeProperty». Свойство Window - это некоторые данные, связанные с окном + немного метаданных: name (atom) и type (atom). Если размер данных больше, чем один тип, он бы предположил, что у вас есть массив из них. Например, атом - это всего 32 бита без знака int. Если вы видите 8-байтовое свойство атома типа, вы интерпретируете контент как два атома. См XChangeProperty документацию, если вы используете Xlib

+0

Пожалуйста, смотрите edit1 – Irbis

+2

, если вы хотите, чтобы окно быть не resizeble, лучше использовать WM_NORMAL_HINTS свойство - см http://standards.freedesktop.org/wm-spec/wm-spec -1.3.html # NORESIZE –