Re: GtkWindow show and move



On Mon, 2006-07-10 at 21:55 +0200, Atanas Atanasov wrote:
I have a fragment of code similar to this:

gtk_widget_show_all (window);
gtk_window_resize (window, ...);

The problem is that sometimes the specified window starts with the
size I set and sometimes it doesn't. This problem occurs in both debug
& release versions, and it seems to be completely random. What I know
is that before a window is shown the resize function acts differently.
It seems that it works well after the window is shown so as such it is
a timing issue. If for example I delay for a second between these two
lines with g_usleep(1000000); everything would be fine. How can I
solve the problem without introducing any artificial solutions such as
delays and the similar? 

Try something like this:

gboolean
resize_window_on_idle (gpointer data)
{
        gtk_window_resize (GTK_WINDOW(data), ... , ...);
        return FALSE; 
}


// ...
gtk_widget_show_all (window);
g_idle_add  (resize_window_on_idle,  (gpointer) window);


The window may flicker a bit ( I mean the size change will be visible by the user ) but it will work.

You can also pass a composite structure with the window, width and height to g_idle_add if you want.


Should I try to purge the message queue
running gtk_main_iteration while gtk_main_events_pending? 

This may do the trick as well.

Would it
make a difference if I use functions like gtk_widget_request_size and
the alike requests?

If you mean gtk_widget_size_request  yes there will be differences but
not what you want. This will set the preferred size of your window so
you won't be able to shrink it. 

-- 
Iago Rubio




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]