У меня есть несколько вложенных X Windows - скажем, прокручиваемых окон внутри прокручиваемых окон (см. Пример ниже). В таком случае главное окно содержит (как минимум) основные полосы прокрутки и (основную) область рисования, которой они управляют. Эта область рисования в свою очередь содержит (по крайней мере) пакет прокручиваемого окна - (вспомогательное) главное окно, содержащее полосу прокрутки и вспомогательную область рисования.
Во время прокрутки в реальном времени внутренней области рисования процедура перерисовки не работает, потому что я использую XCopyArea, чтобы ускорить процесс и переместить допустимое содержимое, а также вызвать актуальную процедуру перерисовки только для недавно появившегося содержимого. Это прекрасно работает, когда внутренний пакет чертежа сам по себе, но при вложении в другой пакет возникает проблема - когда внутренний пакет прокрутки частично виден (т. Е. Прокручивается основная область рисования), перерисовка вновь появившегося содержимого отсекается от основного область рисования и никогда фактически не перерисовывается, но считается таковой. Когда при следующей прокрутке XCopyArea получает эту область, предположительно перерисованную, она фактически пуста. Наконец, эта пустая область отображается на частично видимой внутренней партии прокрутки, и она пуста. На первом общем перерисованном сообщении они исправлены.
Если я могу получить обтравочную маску для того, что на самом деле видно из (моей) внутренней области рисования, я могу настроить вызов XCopyArea () и перерисовать вызов и преодолеть проблему без плана "B", который перерисовывает все содержимое на каждом движение полосы прокрутки.
Пример: разработка плагина для Mozilla Firefox и необходимость определения региона, описывающего видимую область окна «my», то есть того, который передается из системы Mozilla в качестве окна просмотра плагина.