Здравствуйте,
Пытаюсь добить вопрос с модальностью. Модальность вроде бы и есть, но сейчас она распространяется только на основное окно, т.е. если в приложении не одно главное окно, а есть ещё и дополнительное, то модальный диалог игнорирует это дополнительное окно - им можно спокойно управлять, что неправильно.
Для модального диалога делаю так:
Atom wm_type=x11_XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
Atom type_dialog=x11_XInternAtom(display, "_NET_WM_WINDOW_TYPE_DIALOG", False);
x11_XChangeProperty(display, window, wm_type, XA_ATOM, 32, PropModeReplace, (unsigned char*)&type_dialog, 1);
Atom state=x11_XInternAtom(display, "_NET_WM_STATE", False);
Atom modal=x11_XInternAtom(display, "_NET_WM_STATE_MODAL", False);
x11_XChangeProperty(display, window, state, XA_ATOM, 32, PropModeReplace, (unsigned char *)&modal, 1);
Далее ещё была идея установить общую группу для всех окон:
Atom XLeader=XInternAtom(display, "WM_CLIENT_LEADER", False);
XChangeProperty(display, window, XLeader, XA_WINDOW, 32, PropModeReplace, (unsigned char*)&leader, 1);
XWMHints h={0};
h.flags=WindowGroupHint;
h.window_group=leader;
XSetWMHints(display, window, &h);
if (mode==LINUX_WINMODE_MODAL)
XSetTransientForHint(display, window, leader);
Здесь leader - это главное окно и этот leader устанавливается для всех существующих окон. Но модальное окно так и не стало полноценным - происходит игнорирование дополнительного окна.
Что ещё можно сделать ? Или предполагается, что нужно руками блокировать все попытки взаимодействовать с другими окнами во время появления модального диалога ?
Debian Xfce 4.18