Моё предложение заключается во введении пяти "уровней" для окон. Эти уровни будут определять положение окон относительно друг друга и поведение окон при их активации. Уровни такие:
- WLEVEL_BELOWALL [-2] - окна, всегда находяшиеся под всеми другими окнами; используется для программы десктопа, и только для неё
- WLEVEL_BOTTOMMOST [-1] - окна, всегда находяшиеся под обычными окнами и всеми их перекрывающими; используется для десктоповых виджетов
- WLEVEL_NORMAL [0] - обычные окна; используется для создания обычных окон в текущем их состоянии
- WLEVEL_TOPMOST [+1] - окна, всегда находяшиеся над обычными окнами и всеми ими перекрываемыми; используется для создания окон, которые всегда на виду (не придумал, каких, но я думаю всем ясно, для чего нужен этот уровень)
- WLEVEL_ABOVEALL [+2] - окна, всегда находяшиеся над всеми другими окнами; используется для создания панели задач, всплывающих меню и подсказок, хранителей экрана
Есть, однако же, и некоторые проблемы. Оконная подсистема требует более глубокой, если не полной, переработки. Данные об окнах и процессах нужно разделить и группировать в отдельных структурах, не смешивая. Предусмотреть возможность создания более одного окна в пределах одного потока, создание дочерних окон, соответствующие изменения в событийной системе (ещё одна моя идея - реализовать очередь событий и возвращать при вызове функций 10, 11, 23 не только идентификатор события в EAX, но заодно и дополнительные данные события в ECX, EDX, EBX; связано это с предпложением, что при вызове упомянутых функций регистры общего назначения не используются ни в одной программе, однако при описанном подходе мы уменьшаем количество системных вызовов при возникновении события, убирая те, которые получают дополнительную информацию; также этот подход позволяет лучше гарантировать, что данные с момента возникновения события и до его обработки не изменятся на стороне ядра).
Я прекрасно понимаю, что у меня просто не хватит времени реализовать это всё в должном порядке, потому решил изложить мысли. Комментарии приветствуются, как собственно и реализация.