win->SetIcon( wxNullIcon );
win->SetIcons( iconsOld );
}
+
+ if (win->HasFlag(wxFRAME_SHAPED))
+ win->SetShape(win->m_shape); // it will really set the window shape now
}
}
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
- const bool wasRealized = GTK_WIDGET_REALIZED(m_widget);
- bool deferShow =
- show && m_deferShow && !wasRealized &&
- g_signal_handler_find(m_widget,
- GSignalMatchType(G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA),
- g_signal_lookup("property_notify_event", GTK_TYPE_WIDGET),
- 0, NULL, NULL, this);
+ bool deferShow = show && m_deferShow;
+ if (deferShow)
+ {
+ m_deferShow =
+ deferShow = !GTK_WIDGET_REALIZED(m_widget) &&
+ gdk_x11_screen_supports_net_wm_hint(
+ gtk_widget_get_screen(m_widget),
+ gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false)) &&
+ g_signal_handler_find(m_widget,
+ GSignalMatchType(G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA),
+ g_signal_lookup("property_notify_event", GTK_TYPE_WIDGET),
+ 0, NULL, NULL, this);
+ }
if (deferShow)
{
// Initial show. If WM supports _NET_REQUEST_FRAME_EXTENTS, defer
if (alloc_width == 1)
m_widget->allocation.width = 1;
- m_deferShow =
- deferShow = gdk_x11_screen_supports_net_wm_hint(
- gdk_drawable_get_screen(m_widget->window),
- gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false)) != 0;
- }
- if (deferShow)
- {
// send _NET_REQUEST_FRAME_EXTENTS
XClientMessageEvent xevent;
memset(&xevent, 0, sizeof(xevent));
return true;
}
- if (show && !wasRealized)
+ if (show && !GTK_WIDGET_REALIZED(m_widget))
{
// size_allocate signals occur in reverse order (bottom to top).
// Things work better if the initial wxSizeEvents are sent (from the
wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
_T("Shaped windows must be created with the wxFRAME_SHAPED style."));
- GdkWindow *window = NULL;
- if (m_wxwindow)
+ if ( GTK_WIDGET_REALIZED(m_widget) )
{
- do_shape_combine_region(m_wxwindow->window, region);
+ if ( m_wxwindow )
+ do_shape_combine_region(m_wxwindow->window, region);
+
+ return do_shape_combine_region(m_widget->window, region);
+ }
+ else // not realized yet
+ {
+ // store the shape to set, it will be really set once we're realized
+ m_shape = region;
+
+ // we don't know if we're going to succeed or fail, be optimistic by
+ // default
+ return true;
}
- window = m_widget->window;
- return do_shape_combine_region(window, region);
}
bool wxTopLevelWindowGTK::IsActive()