[x11] Don't set actor size on ConfigureNotify

Calling clutter_actor_set_size in response to ConfigureNotify makes
setting the size of the stage racy - the most common result of which
seems to be that you can't set the stage dimensions to anything less
than 640x480.

Instead, add a first_allocation bit to the private structure of the X11
stage and force the first resize (necessary or the default stage will be
a 1x1 window).
This commit is contained in:
Chris Lord 2010-02-06 16:47:22 +01:00
parent cea9de7f04
commit 29cc027f06
3 changed files with 5 additions and 5 deletions

View File

@ -485,10 +485,6 @@ event_translate (ClutterBackend *backend,
xevent->xconfigure.width,
xevent->xconfigure.height);
clutter_actor_set_size (CLUTTER_ACTOR (stage),
xevent->xconfigure.width,
xevent->xconfigure.height);
CLUTTER_UNSET_PRIVATE_FLAGS (stage_x11->wrapper,
CLUTTER_STAGE_IN_RESIZE);

View File

@ -220,10 +220,12 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
CLUTTER_NOTE (BACKEND, "New size received: (%d, %d)", width, height);
if (width != stage_x11->xwin_width ||
height != stage_x11->xwin_height)
height != stage_x11->xwin_height ||
stage_x11->first_allocation)
{
stage_x11->xwin_width = width;
stage_x11->xwin_height = height;
stage_x11->first_allocation = FALSE;
if (stage_x11->xwin != None && !stage_x11->is_foreign_xwin)
{
@ -659,6 +661,7 @@ clutter_stage_x11_init (ClutterStageX11 *stage)
stage->xwin = None;
stage->xwin_width = 640;
stage->xwin_height = 480;
stage->first_allocation = TRUE;
stage->wm_state = STAGE_X11_WITHDRAWN;

View File

@ -54,6 +54,7 @@ struct _ClutterStageX11
guint fullscreen_on_map : 1;
guint is_cursor_visible : 1;
guint viewport_initialized : 1;
guint first_allocation : 1;
Window xwin;
gint xwin_width;