// we cannot the WM hints and icons before the widget has been realized,
// so we do this directly after realization
-extern "C" {
-static void
-gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget),
- wxTopLevelWindowGTK *win )
+void wxTopLevelWindowGTK::GTKHandleRealized()
{
- gdk_window_set_decorations(gtk_widget_get_window(win->m_widget),
- (GdkWMDecoration)win->m_gdkDecor);
- gdk_window_set_functions(gtk_widget_get_window(win->m_widget),
- (GdkWMFunction)win->m_gdkFunc);
+ wxNonOwnedWindow::GTKHandleRealized();
+
+ gdk_window_set_decorations(gtk_widget_get_window(m_widget),
+ (GdkWMDecoration)m_gdkDecor);
+ gdk_window_set_functions(gtk_widget_get_window(m_widget),
+ (GdkWMFunction)m_gdkFunc);
// GTK's shrinking/growing policy
- if ( !(win->m_gdkFunc & GDK_FUNC_RESIZE) )
- gtk_window_set_resizable(GTK_WINDOW(win->m_widget), FALSE);
+ if ( !(m_gdkFunc & GDK_FUNC_RESIZE) )
+ gtk_window_set_resizable(GTK_WINDOW(m_widget), FALSE);
#if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED)
else
- gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
+ gtk_window_set_policy(GTK_WINDOW(m_widget), 1, 1, 1);
#endif
- const wxIconBundle& icons = win->GetIcons();
+ const wxIconBundle& icons = GetIcons();
if (icons.GetIconCount())
- win->SetIcons(icons);
-
- if (win->HasFlag(wxFRAME_SHAPED))
- win->SetShape(win->m_shape); // it will really set the window shape now
-}
+ SetIcons(icons);
}
//-----------------------------------------------------------------------------
gtk_widget_set_uposition( m_widget, m_x, m_y );
#endif
- // we cannot set MWM hints and icons before the widget has
- // been realized, so we do this directly after realization
- g_signal_connect (m_widget, "realize",
- G_CALLBACK (gtk_frame_realized_callback), this);
-
// for some reported size corrections
g_signal_connect (m_widget, "map_event",
G_CALLBACK (gtk_frame_map_callback), this);
}
-// helper
-static bool do_shape_combine_region(GdkWindow* window, const wxRegion& region)
-{
- if (window)
- {
- if (region.IsEmpty())
- {
- gdk_window_shape_combine_mask(window, NULL, 0, 0);
- }
- else
- {
- gdk_window_shape_combine_region(window, region.GetRegion(), 0, 0);
- return true;
- }
- }
- return false;
-}
-
-
-bool wxTopLevelWindowGTK::SetShape(const wxRegion& region)
-{
- wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
- wxT("Shaped windows must be created with the wxFRAME_SHAPED style."));
-
- if ( gtk_widget_get_realized(m_widget) )
- {
- if ( m_wxwindow )
- do_shape_combine_region(gtk_widget_get_window(m_wxwindow), region);
-
- return do_shape_combine_region(gtk_widget_get_window(m_widget), 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;
- }
-}
-
bool wxTopLevelWindowGTK::IsActive()
{
return (this == (wxTopLevelWindowGTK*)g_activeFrame);