LINUX.ORG.RU

Как в X11 создать полноценный модальный диалог?

 ,


0

1

Здравствуйте,

Пытаюсь добить вопрос с модальностью. Модальность вроде бы и есть, но сейчас она распространяется только на основное окно, т.е. если в приложении не одно главное окно, а есть ещё и дополнительное, то модальный диалог игнорирует это дополнительное окно - им можно спокойно управлять, что неправильно.

Для модального диалога делаю так:

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

одно главное окно, а есть ещё и дополнительное

А еще есть второстепенное главное окно и дочернее главное окно

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

Модальные «окна» - зло.

А как же запросы наподобие «Вы точно хотите выйти? Сохранить/Выйти/Отмена»? На самом деле конечно случаев когда нужна модальность намного больше. Вот System modal, это и правда зло(и то может быть нужно для вопросов вроде завершения работы системы), но так вроде уже никто не делает.

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

Я сейчас работаю с Unity(который движок, а не который DE), так постоянно раздражает убегающий фокус из окна текущего(которое прямо напрашивается быть модальным) при выходе мыши за его границы. Но это Hyprland скорее виноват, думаю в венде или кедах такого не было бы.

Loki13 ★★★★★
()