Полагаю, вам придется отслеживать все окна верхнего уровня, которые появляются и имеют ли они _NET_WM_STRUT_PARTIAL, чтобы самостоятельно вычислять рабочую область, за исключением ваших собственных окон.Вы можете посмотреть в коде libwnck, как отслеживать все верхние уровни, и посмотреть, как оконные менеджеры вычисляют _NET_WORKAREA, чтобы увидеть, как это сделать.Затем повторите эту работу, но минус ваши собственные распорки.Одна из проблем заключается в том, что если бы каждая панель делала это, был бы бесконечный цикл, когда все они работали друг вокруг друга.Но вы можете предположить, что у людей есть только панель рабочего стола по умолчанию, которая этого не делает, плюс ваша.
Другой вариант может состоять в том, чтобы просто сделать окно вашей панели всегда полной высоты экрана, но если какое-либо окно находится вышеВы смещаете то, что рисуете (и смещаете обработку событий), на немного.Проблема в том, что трудно отследить, как окна перекрывают вас.XVisibilityEvent немного помогает, но не говорит вам, когда окно сверху просто перемещается.Также вы должны быть уверены, что не сломаетесь, если, скажем, полноэкранный фильм в конечном итоге охватит всю панель.Я полагаю, что при таком подходе вы все равно будете сканировать все верхние уровни для панелей, как при первом подходе.