+//-----------------------------------------------------------------------------
+// "realize" from m_widget
+//-----------------------------------------------------------------------------
+
+/* we cannot MWM hints and icons before the widget has been realized,
+ so we do this directly after realization */
+
+static void
+gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget), wxFrame *win )
+{
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ if ((win->m_miniEdge > 0) || (win->HasFlag(wxSIMPLE_BORDER)) || (win->HasFlag(wxNO_BORDER)))
+ {
+ /* This is a mini-frame or a borderless frame. */
+ gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)0 );
+ gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)0 );
+ }
+ else
+ {
+ /* All this is for Motif Window Manager "hints" and is supposed to be
+ recognized by other WM as well. Not tested. */
+ long decor = (long) GDK_DECOR_BORDER;
+ long func = (long) GDK_FUNC_MOVE;
+
+ if ((win->GetWindowStyle() & wxCAPTION) != 0)
+ decor |= GDK_DECOR_TITLE;
+ if ((win->GetWindowStyle() & wxSYSTEM_MENU) != 0)
+ {
+ decor |= GDK_DECOR_MENU;
+ func |= GDK_FUNC_CLOSE;
+ }
+ if ((win->GetWindowStyle() & wxMINIMIZE_BOX) != 0)
+ {
+ func |= GDK_FUNC_MINIMIZE;
+ decor |= GDK_DECOR_MINIMIZE;
+ }
+ if ((win->GetWindowStyle() & wxMAXIMIZE_BOX) != 0)
+ {
+ func |= GDK_FUNC_MAXIMIZE;
+ decor |= GDK_DECOR_MAXIMIZE;
+ }
+ if ((win->GetWindowStyle() & wxRESIZE_BORDER) != 0)
+ {
+ func |= GDK_FUNC_RESIZE;
+ decor |= GDK_DECOR_RESIZEH;
+ }
+
+ gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
+ gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
+ }
+
+ /* GTK's shrinking/growing policy */
+ if ((win->GetWindowStyle() & wxRESIZE_BORDER) == 0)
+ gtk_window_set_policy(GTK_WINDOW(win->m_widget), 0, 0, 1);
+ else
+ gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
+
+ /* reset the icon */
+ wxIcon iconOld = win->GetIcon();
+ if ( iconOld != wxNullIcon )
+ {
+ wxIcon icon( iconOld );
+ win->SetIcon( wxNullIcon );
+ win->SetIcon( icon );
+ }
+
+ /* we set the focus to the child that accepts the focus. this
+ doesn't really have to be done in "realize" but why not? */
+ wxWindowList::Node *node = win->GetChildren().GetFirst();
+ while (node)
+ {
+ wxWindow *child = node->GetData();
+ if (child->AcceptsFocus())
+ {
+ child->SetFocus();
+ break;
+ }
+
+ node = node->GetNext();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// "map_event" from m_widget
+//-----------------------------------------------------------------------------
+
+static void
+gtk_frame_map_callback( GtkWidget * WXUNUSED(widget),
+ GdkEvent * WXUNUSED(event),
+ wxFrame *win )
+{
+ win->SetIconizeState(FALSE);
+}
+
+//-----------------------------------------------------------------------------
+// "unmap_event" from m_widget
+//-----------------------------------------------------------------------------
+
+static void
+gtk_frame_unmap_callback( GtkWidget * WXUNUSED(widget),
+ GdkEvent * WXUNUSED(event),
+ wxFrame *win )
+{
+ win->SetIconizeState(TRUE);
+}
+
+//-----------------------------------------------------------------------------
+// "expose_event" of m_client
+//-----------------------------------------------------------------------------
+
+static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
+{
+ GtkPizza *pizza = GTK_PIZZA(widget);
+
+ gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE, &gdk_event->area, win->m_widget, "base", 0, 0, -1, -1);
+
+ return TRUE;
+}
+
+//-----------------------------------------------------------------------------
+// "draw" of m_client
+//-----------------------------------------------------------------------------
+
+
+static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win )
+{
+ GtkPizza *pizza = GTK_PIZZA(widget);
+
+ gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE, rect, win->m_widget, "base", 0, 0, -1, -1);
+}
+
+// ----------------------------------------------------------------------------
+// wxFrame itself
+// ----------------------------------------------------------------------------
+