From: fliep Date: Tue, 19 May 2009 21:07:56 +0000 (+0000) Subject: Use gdk_window_process_all_updates() to send window update events immediately instead... X-Git-Tag: v0.9~408 X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=98ce0c00f8b0b0484b7d56cbb160501000edfd28;p=projects%2Fchimara%2Fchimara.git Use gdk_window_process_all_updates() to send window update events immediately instead of asynchronously. --- diff --git a/src/window.c b/src/window.c index aa894c6..cd0961c 100644 --- a/src/window.c +++ b/src/window.c @@ -563,7 +563,8 @@ glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype, /* Set the window as a child of the Glk widget */ gtk_widget_set_parent(win->frame, GTK_WIDGET(glk_data->self)); gtk_widget_queue_resize(GTK_WIDGET(glk_data->self)); - + gdk_window_process_all_updates(); + gdk_threads_leave(); /* For blank or pair windows, this is almost a no-op. For text grid and @@ -771,6 +772,7 @@ glk_window_close(winid_t win, stream_result_t *result) /* Schedule a redraw */ gdk_threads_enter(); gtk_widget_queue_resize( GTK_WIDGET(glk_data->self) ); + gdk_window_process_all_updates(); gdk_threads_leave(); } @@ -988,6 +990,7 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr) case wintype_TextGrid: gdk_threads_enter(); /* Wait for the window to be drawn, and then cache the width and height */ + gdk_window_process_all_updates(); while(win->widget->allocation.width == 1 && win->widget->allocation.height == 1) { /* Release the GDK lock momentarily */ @@ -996,7 +999,8 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr) while(gtk_events_pending()) gtk_main_iteration(); } - win->width = (glui32)(win->widget->allocation.width / win->unit_width); + + win->width = (glui32)(win->widget->allocation.width / win->unit_width); win->height = (glui32)(win->widget->allocation.height / win->unit_height); gdk_threads_leave(); @@ -1017,7 +1021,8 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr) } */ /* Instead, we wait for GTK to draw the widget. This is probably very slow and should be fixed. */ - while(win->widget->allocation.width == 1 && win->widget->allocation.height == 1) + gdk_window_process_all_updates(); + while(win->widget->allocation.width == 1 && win->widget->allocation.height == 1) { /* Release the GDK lock momentarily */ gdk_threads_leave();