LINUX.ORG.RU

[Xlib] UnmapNotify

 


0

1

Пишу оконный менеджер, столкнулся со следующей проблемой. Когда приходит событие UnmapNotify, мне нужно передать фокус другому окну, которое станет видимым после unmap'а данного окна. Вот код, реализующий это:

        case UnmapNotify: { 
                Window window = event->xunmap.window;
                // QList<Window> windowList;
                windowList.removeAll(window);
                if (!windowList.isEmpty()) {
                        XRaiseWindow(display, windowList[0]);
                        XSetInputFocus(display, windowList[0], RevertToParent, CurrentTime);
                }
                return true;
                }
Проблема в том, что если быстро закроются 2 окна подряд (например, подтверждение о сохранении файла в текстовом редакторе и сам текстовый редактор), то когда я попытаюсь сделать XRaiseWindow, появляется ошибка, что поднимаемое окно не существует, т.к. оно уже реально unmapped, но событие об этом ещё не обработано, т.к. обрабатывается предыдущее. Ошибка такая:
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 12 (X_ConfigureWindow)
  Resource id:  0x600026
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 42 (X_SetInputFocus)
  Resource id:  0x600026
Кто-нибудь знает, как бы предотвратить появление этой ошибки?

★★★★★

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

В исходники остальных WM не смотрел?

Смотрел исходники kwin, metacity, xfwm, openbox, matchbox — в них достаточно сложный код, чтобы быстро разобраться, не нашёл то место, где поднимается некоторое окно после unmap'а верхнего. В простых WM такой возможности вообще нет, в них тоже возникает такая ошибка. Если подскажете, в какое именно место исходников смотреть, буду благодарен.

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

посмотри в karmen

Спасибо, посмотрел, баг в нём не наблюдается, поэтому буду его изучать — там код действительно проще.

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