Ошибка скрытия виджета области рисования GTK, который получает видео GStreamer udpsrc - PullRequest
0 голосов
/ 11 октября 2019

У меня есть виджет области рисования 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, я получаю чистый экран. Я предполагаю, что есть некоторое событие сигнала окна, которое заставляет мое окно быть недействительным. Интересно, могу ли я подключиться к этому событию и сделать это сам.

...