... rest of Surface::Attach here ... canvas->InvokeMethodWithPost (invoke_canvasOnLoaded, canvas, invoke_postCanvasOnLoaded, this); } void Surface::invoke_canvasOnLoaded (gpointer data, gpointer user_data) { ((Canvas*)user_data)->OnLoaded (); } void Surface::invoke_postCanvasOnLoaded (gpointer data, gpointer user_data) { Surface *s = (Surface*)user_data; bool change_size = false; // // If the did not get a size specified // if (s->normal_width == 0){ Value *v = s->toplevel->GetValue (FrameworkElement::WidthProperty); if (v){ s->normal_width = (int) v->AsDouble (); if (s->normal_width < 0) s->normal_width = 0; change_size = true; } } if (s->normal_height == 0){ Value *v = s->toplevel->GetValue (FrameworkElement::HeightProperty); if (v){ s->normal_height = (int) v->AsDouble (); if (s->normal_height < 0) s->normal_height = 0; change_size = true; } } if (!s->full_screen) { s->height = s->normal_height; s->width = s->normal_width; } if (change_size) { s->Realloc (); s->Emit (ResizeEvent); } s->toplevel->UpdateTotalRenderVisibility (); s->toplevel->UpdateTotalHitTestVisibility (); s->toplevel->FullInvalidate (true); }