Используя GTK, я пытаюсь наложить подсказку «Больше» (но это может быть и любой рисованный объект) в углу GtkTextView
, содержащемся в GtkScrolledWindow
. Я рисую подсказку в обработчике для сигнала expose
текстового представления. Это работает, но когда я прокручиваю окно, я получаю артефакты: приглашение перемещается вместе с содержимым текстового представления и не стирается.
Чтобы избавиться от артефактов, я запускаю перерисовку после каждого свитка. Это в основном работает, но вы все равно можете видеть, что подсказка прыгает вверх и вниз при быстрой прокрутке. Есть ли способ предотвратить это? Было бы неплохо, если бы подсказка просто «всплыла» поверх текстового представления.
Я попытался заключить прокручиваемое окно в GtkEventBox
и нарисовать подсказку поверх этого, но это тоже не сработало; полосы прокрутки и текстовое представление всегда закрашивают подсказку, даже если вы устанавливаете окно окна событий напротив своих дочерних окон.
UPDATE
Если я подключу обратный вызов GtkEventBox
к g_signal_connect_after()
, то он вызывается после обратных вызовов GtkScrolledWindow
и GtkTextView
. Текстовое представление все еще рисует по окну события все же. Я думаю, что это потому, что прокрутка происходит асинхронно. Кто-нибудь знает, как я могу предотвратить перезапись моего рисунка?
ДРУГОЕ ОБНОВЛЕНИЕ
Так что я думаю, что мне действительно нужен сигнал для подключения после завершения асинхронной прокрутки. Если я смогу узнать, когда это произойдет, тогда я могу вызвать другое событие expose на GtkEventBox
. Как я могу получить уведомление о завершении прокрутки?