+//-----------------------------------------------------------------------------
+// "child_detached" of menu bar
+//-----------------------------------------------------------------------------
+
+static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win )
+{
+ if (!win->HasVMT()) return;
+
+ win->m_menuBarDetached = TRUE;
+ win->m_sizeSet = FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// "child_attached" of tool bar
+//-----------------------------------------------------------------------------
+
+static void gtk_toolbar_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win )
+{
+ if (!win->HasVMT()) return;
+
+ win->m_toolBarDetached = FALSE;
+ win->m_sizeSet = FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// "child_detached" of tool bar
+//-----------------------------------------------------------------------------
+
+static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win )
+{
+ if (!win->HasVMT()) return;
+
+ win->m_toolBarDetached = TRUE;
+ win->m_sizeSet = FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// "configure_event"
+//-----------------------------------------------------------------------------
+
+static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxFrame *win )
+{
+ if (!win->HasVMT()) return FALSE;
+
+ win->m_x = event->x;
+ win->m_y = event->y;
+
+ wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() );
+ mevent.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent( mevent );
+
+ return FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// InsertChild for wxFrame
+//-----------------------------------------------------------------------------
+
+/* Callback for wxFrame. This very strange beast has to be used because
+ * C++ has no virtual methods in a constructor. We have to emulate a
+ * virtual function here as wxWindows requires different ways to insert
+ * a child in container classes. */
+
+static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child )
+{
+ if (wxIS_KIND_OF(child,wxToolBar) || wxIS_KIND_OF(child,wxMenuBar))
+ {
+ /* actually, menubars are never inserted here, but this
+ may change one day */
+
+ /* these are outside the client area */
+ wxFrame* frame = (wxFrame*) parent;
+ gtk_myfixed_put( GTK_MYFIXED(frame->m_mainWidget),
+ GTK_WIDGET(child->m_widget),
+ child->m_x,
+ child->m_y );
+
+ /* we connect to these events for recalculating the client area
+ space when the toolbar is floating */
+ if (wxIS_KIND_OF(child,wxToolBar))
+ {
+ wxToolBar *toolBar = (wxToolBar*) child;
+ if (toolBar->m_windowStyle & wxTB_DOCKABLE)
+ {
+ gtk_signal_connect( GTK_OBJECT(toolBar->m_widget), "child_attached",
+ GTK_SIGNAL_FUNC(gtk_toolbar_attached_callback), (gpointer)parent );
+
+ gtk_signal_connect( GTK_OBJECT(toolBar->m_widget), "child_detached",
+ GTK_SIGNAL_FUNC(gtk_toolbar_detached_callback), (gpointer)parent );
+ }
+ }
+ }
+ else
+ {
+ /* these are inside the client area */
+ gtk_myfixed_put( GTK_MYFIXED(parent->m_wxwindow),
+ GTK_WIDGET(child->m_widget),
+ child->m_x,
+ child->m_y );
+ }
+
+ gtk_widget_set_usize( GTK_WIDGET(child->m_widget),
+ child->m_width,
+ child->m_height );
+
+ /* resize on OnInternalIdle */
+ parent->m_sizeSet = FALSE;
+
+ if (parent->m_windowStyle & wxTAB_TRAVERSAL)
+ {
+ /* we now allow a window to get the focus as long as it
+ doesn't have any children. */
+ GTK_WIDGET_UNSET_FLAGS( parent->m_wxwindow, GTK_CAN_FOCUS );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// wxFrame