LINUX.ORG.RU

xlib, нубский вопрос, motif


0

1

Вернее нужно определить свойства окна, в частности то, что клиент позволяет менять размер. _MOTIF_WM_HINTS упорно говорит, что да, но я на тесте знаю, что нет.

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

Я не использую мотиф. :) Это одно из поддерживаемых иксами свойств окна.

zJes ★★
() автор топика

Ну если нужно получить новые размеры окна когда пользователь делает resize, то тогда

Установить StructureNotifyMask

XSelectInput(display, window, ... StructureNotifyMask);

И затем отследить событие ConfigureNotify

// gcc -lX11 xdrawsquare.c -o xdrawsquare

#include <X11/Xlib.h>
#include <X11/Xutil.h>

int main() {

int windowwidth = 300, windowheight = 300, run = 1;
XEvent event;

Display *display = XOpenDisplay(NULL);
int screen = DefaultScreen(display);

XSizeHints hints;
hints.flags = PSize;

Window window = XCreateSimpleWindow(display, RootWindow(display,
screen), 100, 100, windowwidth, windowheight, 1, 10,
WhitePixel(display, screen));

Atom wmDeleteMessage = XInternAtom(display, "WM_DELETE_WINDOW",
False);
XSetWMProtocols(display, window, &wmDeleteMessage, 1);

XSetStandardProperties(display, window, "X draw/resize demo",
"xdrawsquare", None, (char **)"", 0, &hints);

Window square = XCreateSimpleWindow(display, window, 10, 10,
windowwidth - 20, windowheight - 20, 0, 0,
BlackPixel(display, screen));

XSelectInput(display, window, ExposureMask | KeyPressMask |\
KeyReleaseMask | StructureNotifyMask);

XMapWindow(display, square);
XMapWindow(display, window);

while (run == 1) {

XNextEvent(display, &event);

switch (event.type) {

case DestroyNotify:
case ClientMessage:
if (event.xclient.data.l[0] ==
wmDeleteMessage) run = 0;
break;

case ConfigureNotify:

if (event.xconfigure.window == window) {

windowwidth =
event.xconfigure.width;
windowheight =
event.xconfigure.height;

XResizeWindow(display, square,
windowwidth - 20,
windowheight - 20);

}

break;

default:
break;

}

}

XDestroyWindow(display, square);
XDestroyWindow(display, window);

XCloseDisplay(display);

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

>> Зачем motif используешь, он же юникод не поддерживает. Лучше уж gtk1 или gtk2.

В openmotif 2.3 вроде есть utf8

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

Да понятно это. Вопрос о другом. В списке поддерживаемых свойств клиента есть _MOTIF_WM_HINTS. Следовательно мне при запросе этого атома возвращаются свойства клиента, к примеру, MWM_FUNC_RESIZE и MWM_DECOR_RESIZEH, но тестовый клиент не может менять размер, куда копать чтобы получить правильную маску свойств клиента?

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

Короче посмотри исходники программ wnckprop, wmctrl. Эти программы умеют получать кучу информации о иксовых окнах.

wnckprop :

Name: mc [sem@darkstar]:~/bin
Icon Name: mc [sem@darkstar]:~/bin
Icons: set
On Workspace: 0 ("desktop 1")
On Screen: 0 (Window Manager: Openbox)
Window Type: normal window
Geometry (x, y, width, height): 99, 96, 824, 518
Class Group: Roxterm
XID: 12582916
PID: 2734
Session ID: <unset>
State: normal
Possible Actions: move, resize, shade, unshade, maximize horizontally, unmaximize horizontally, maximize vertically, unmaximize vertically, change workspace, pin, unpin, minimize, unminimize, maximize, unmaximize, change fullscreen mode, close, make above, unmake above, make below, unmake below

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

Ага, похоже на правду, спасибо.

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