У меня есть виджет области рисования GTK, который отображает видео из UDP (GStreamer udpsrc). Этот виджет находится в контейнере Overlay, где у меня есть кнопка, которая скрывает виджет области рисования при нажатии.
, показывающий область рисования и играющий GStreamer videotestsrc pattern = ball
Виджет скрывается, как и ожидалось, но иногда «остаточное» неподвижное изображение видео оказывается наложенным на окно.
скрытая область рисования
Я пытался сделать GDKWindow недействительным, выполнив
gdk_window_invalidate_rect(gtk_widget_get_window(drawing_area_widget),NULL,FALSE)
... но без разницы.
Код для переключения видимости виджета области рисования:
int toggle = 0;
static void toggle_drawing_area()
{
if (toggle) {
gtk_widget_show(drawing_area_widget);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
} else {
gst_element_set_state (pipeline, GST_STATE_PAUSED);
gtk_widget_hide(drawing_area_widget);
}
}
Я ожидаю, что, как только область рисования будет скрыта, она не должна "вытекать" видео в окно верхнего уровня. Однако я не уверен, почему это происходит. Любое руководство будет оценено.
РЕДАКТИРОВАТЬ # 1:
Одна вещь, которую я заметил, - это то, что когда возникает такая ситуация, и я щелкаю где-то из окна GTK, я получаю чистый экран. Я предполагаю, что есть некоторое событие сигнала окна, которое заставляет мое окно быть недействительным. Интересно, могу ли я подключиться к этому событию и сделать это сам.