* virtual function here as wxWidgets requires different ways to insert
* a child in container classes. */
-static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child )
+static void wxInsertChildInFrame(wxWindow* parent, wxWindow* child)
{
wxASSERT( GTK_IS_WIDGET(child->m_widget) );
- if (!parent->m_insertInClientArea)
- {
- // These are outside the client area
- wxFrame* frame = (wxFrame*) parent;
- gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
+ // These are outside the client area
+ wxFrame* frame = wx_static_cast(wxFrame*, parent);
+ gtk_pizza_put( GTK_PIZZA(frame->m_mainWidget),
+ child->m_widget,
+ child->m_x,
+ child->m_y,
+ child->m_width,
+ child->m_height );
#if wxUSE_TOOLBAR_NATIVE
- // We connect to these events for recalculating the client area
- // space when the toolbar is floating
- if (wxIS_KIND_OF(child,wxToolBar))
+ // We connect to these events for recalculating the client area
+ // space when the toolbar is floating
+ if (wxIS_KIND_OF(child,wxToolBar))
+ {
+ if (child->HasFlag(wxTB_DOCKABLE))
{
- wxToolBar *toolBar = (wxToolBar*) child;
- if (toolBar->GetWindowStyle() & wxTB_DOCKABLE)
- {
- g_signal_connect (toolBar->m_widget, "child_attached",
- G_CALLBACK (gtk_toolbar_attached_callback),
- parent);
- g_signal_connect (toolBar->m_widget, "child_detached",
- G_CALLBACK (gtk_toolbar_detached_callback),
- parent);
- }
+ g_signal_connect (child->m_widget, "child_attached",
+ G_CALLBACK (gtk_toolbar_attached_callback),
+ parent);
+ g_signal_connect (child->m_widget, "child_detached",
+ G_CALLBACK (gtk_toolbar_detached_callback),
+ parent);
}
-#endif // wxUSE_TOOLBAR
- }
- else
- {
- // These are inside the client area
- gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
- child->m_widget,
- child->m_x,
- child->m_y,
- child->m_width,
- child->m_height );
}
+#endif // wxUSE_TOOLBAR
}
// ----------------------------------------------------------------------------
m_menuBarDetached = false;
m_toolBarDetached = false;
m_menuBarHeight = 2;
+ m_fsSaveFlag = 0;
}
bool wxFrame::Create( wxWindow *parent,
long style,
const wxString &name )
{
- bool rt = wxTopLevelWindow::Create(parent, id, title, pos, sizeOrig,
- style, name);
- m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame;
-
- return rt;
+ return wxFrameBase::Create(parent, id, title, pos, sizeOrig, style, name);
}
wxFrame::~wxFrame()
*height = 0;
}
+bool wxFrame::ShowFullScreen(bool show, long style)
+{
+ if (!wxFrameBase::ShowFullScreen(show, style))
+ return false;
+
+ wxWindow* const bar[] = {
+ m_frameMenuBar, m_frameToolBar, m_frameStatusBar
+ };
+ const long fsNoBar[] = {
+ wxFULLSCREEN_NOMENUBAR, wxFULLSCREEN_NOTOOLBAR, wxFULLSCREEN_NOSTATUSBAR
+ };
+ for (int i = 0; i < 3; i++)
+ {
+ if (show)
+ {
+ if (bar[i] && (style & fsNoBar[i]))
+ {
+ if (bar[i]->IsShown())
+ bar[i]->Show(false);
+ else
+ style &= ~fsNoBar[i];
+ }
+ }
+ else
+ {
+ if (bar[i] && (m_fsSaveFlag & fsNoBar[i]))
+ bar[i]->Show(true);
+ }
+ }
+ if (show)
+ m_fsSaveFlag = style;
+
+ return true;
+}
+
void wxFrame::GtkOnSize()
{
// avoid recursions
// area, which is represented by m_wxwindow.
#if wxUSE_MENUS_NATIVE
- if (m_frameMenuBar && !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOMENUBAR) != 0))
+ if (m_frameMenuBar && m_frameMenuBar->IsShown())
{
- if (!GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget))
- gtk_widget_show( m_frameMenuBar->m_widget );
int xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle;
int ww = m_width - 2*m_miniEdge;
xx, yy, ww, hh );
client_area_y_offset += hh;
}
- else
- {
- if (m_frameMenuBar)
- {
- if (GTK_WIDGET_VISIBLE(m_frameMenuBar->m_widget))
- gtk_widget_hide( m_frameMenuBar->m_widget );
- }
- }
#endif // wxUSE_MENUS_NATIVE
#if wxUSE_TOOLBAR
}
#if wxUSE_STATUSBAR
- if (m_frameStatusBar && m_frameStatusBar->IsShown() &&
- !(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOSTATUSBAR) != 0))
+ if (m_frameStatusBar && m_frameStatusBar->IsShown())
{
- if (!GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget))
- gtk_widget_show( m_frameStatusBar->m_widget );
-
int xx = 0 + m_miniEdge;
int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
int ww = m_width - 2*m_miniEdge;
m_frameStatusBar->m_widget,
xx, yy, ww, hh );
}
- else
- {
- if (m_frameStatusBar)
- {
- if (GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget))
- gtk_widget_hide( m_frameStatusBar->m_widget );
- }
- }
#endif // wxUSE_STATUSBAR
m_sizeSet = true;
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
- m_insertInClientArea = false;
-
+ InsertChildFunction save = m_insertCallback;
+ m_insertCallback = wxInsertChildInFrame;
m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name );
-
- m_insertInClientArea = true;
+ m_insertCallback = save;
GtkUpdateSize();