Мне нужно знать, когда GtkWidget был перерисован и проверен после того, как я изменил его содержимое (запланировал перерисовку).
В любом случае, чтобы узнать, полностью ли он перерисован, или нужно подождать больше, чтобы перерисовать.
Мне нужно знать, когда GtkWidget был перерисован и проверен после того, как я изменил его содержимое (запланировал перерисовку).
В любом случае, чтобы узнать, полностью ли он перерисован, или нужно подождать больше, чтобы перерисовать.
Способ обойти то, что вам нужно, - отложить прокрутку до тех пор, пока GTK не узнает, насколько велика область прокрутки. Вероятно, самый простой способ — использовать g_idle_add(). Добавленные в него обратные вызовы будут выполняться в порядке приоритета, когда нет необходимости выполнять другие задачи. GTK использует функции бездействия с высоким приоритетом для перерисовки, но приоритет по умолчанию вас вполне устроит.
gboolena my_delayed_function(gpointer user_data)
{
// The function that does the scroll goes here.
return FALSE;
}
void my_function_that_shows_something()
{
// Do some drawing.
// ...
// Schedule a scroll.
g_idle_add(my_delayed_function, NULL);
}
В качестве примечания вы должны вернуть FALSE из этого обратного вызова, иначе он будет вызываться повторно.