restructure fullscreen code dealing with hiding bars

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2007-05-26 18:47:53 +00:00
parent 585892aac6
commit 1529bc41dc
4 changed files with 44 additions and 36 deletions

View File

@@ -69,6 +69,7 @@ public:
void SetToolBar(wxToolBar *toolbar); void SetToolBar(wxToolBar *toolbar);
#endif // wxUSE_TOOLBAR #endif // wxUSE_TOOLBAR
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
wxPoint GetClientAreaOrigin() const { return wxPoint(0, 0); } wxPoint GetClientAreaOrigin() const { return wxPoint(0, 0); }
// implementation from now on // implementation from now on
@@ -104,6 +105,9 @@ public:
#endif // wxUSE_MENUS_NATIVE #endif // wxUSE_MENUS_NATIVE
private:
long m_fsSaveFlag;
DECLARE_DYNAMIC_CLASS(wxFrame) DECLARE_DYNAMIC_CLASS(wxFrame)
}; };

View File

@@ -95,7 +95,6 @@ public:
bool m_fsIsShowing; /* full screen */ bool m_fsIsShowing; /* full screen */
long m_fsSaveGdkFunc, m_fsSaveGdkDecor; long m_fsSaveGdkFunc, m_fsSaveGdkDecor;
long m_fsSaveFlag;
wxRect m_fsSaveFrame; wxRect m_fsSaveFrame;
// m_windowStyle translated to GDK's terms // m_windowStyle translated to GDK's terms

View File

@@ -164,6 +164,7 @@ void wxFrame::Init()
m_menuBarDetached = false; m_menuBarDetached = false;
m_toolBarDetached = false; m_toolBarDetached = false;
m_menuBarHeight = 2; m_menuBarHeight = 2;
m_fsSaveFlag = 0;
} }
bool wxFrame::Create( wxWindow *parent, bool wxFrame::Create( wxWindow *parent,
@@ -235,6 +236,41 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
*height = 0; *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() void wxFrame::GtkOnSize()
{ {
// avoid recursions // avoid recursions
@@ -266,10 +302,8 @@ void wxFrame::GtkOnSize()
// area, which is represented by m_wxwindow. // area, which is represented by m_wxwindow.
#if wxUSE_MENUS_NATIVE #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 xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle; int yy = m_miniEdge + m_miniTitle;
int ww = m_width - 2*m_miniEdge; int ww = m_width - 2*m_miniEdge;
@@ -286,14 +320,6 @@ void wxFrame::GtkOnSize()
xx, yy, ww, hh ); xx, yy, ww, hh );
client_area_y_offset += 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 #endif // wxUSE_MENUS_NATIVE
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
@@ -387,12 +413,8 @@ void wxFrame::GtkOnSize()
} }
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
if (m_frameStatusBar && m_frameStatusBar->IsShown() && if (m_frameStatusBar && m_frameStatusBar->IsShown())
!(m_fsIsShowing && (m_fsSaveFlag & wxFULLSCREEN_NOSTATUSBAR) != 0))
{ {
if (!GTK_WIDGET_VISIBLE(m_frameStatusBar->m_widget))
gtk_widget_show( m_frameStatusBar->m_widget );
int xx = 0 + m_miniEdge; int xx = 0 + m_miniEdge;
int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset; int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
int ww = m_width - 2*m_miniEdge; int ww = m_width - 2*m_miniEdge;
@@ -407,14 +429,6 @@ void wxFrame::GtkOnSize()
m_frameStatusBar->m_widget, m_frameStatusBar->m_widget,
xx, yy, ww, hh ); 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 #endif // wxUSE_STATUSBAR
m_sizeSet = true; m_sizeSet = true;

View File

@@ -390,7 +390,6 @@ void wxTopLevelWindowGTK::Init()
m_mainWidget = (GtkWidget*) NULL; m_mainWidget = (GtkWidget*) NULL;
m_isIconized = false; m_isIconized = false;
m_fsIsShowing = false; m_fsIsShowing = false;
m_fsSaveFlag = 0;
m_themeEnabled = true; m_themeEnabled = true;
m_gdkDecor = m_gdkFunc = 0; m_gdkDecor = m_gdkFunc = 0;
m_grabbed = false; m_grabbed = false;
@@ -648,7 +647,7 @@ bool wxTopLevelWindowGTK::EnableCloseButton( bool enable )
return true; return true;
} }
bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style ) bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long)
{ {
if (show == m_fsIsShowing) if (show == m_fsIsShowing)
return false; // return what? return false; // return what?
@@ -667,15 +666,9 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
if ( (method == wxX11_FS_WMSPEC) && !gtk_check_version(2,2,0) ) if ( (method == wxX11_FS_WMSPEC) && !gtk_check_version(2,2,0) )
{ {
if (show) if (show)
{
m_fsSaveFlag = style;
gtk_window_fullscreen( GTK_WINDOW( m_widget ) ); gtk_window_fullscreen( GTK_WINDOW( m_widget ) );
}
else else
{
m_fsSaveFlag = 0;
gtk_window_unfullscreen( GTK_WINDOW( m_widget ) ); gtk_window_unfullscreen( GTK_WINDOW( m_widget ) );
}
} }
else else
#endif // GTK+ >= 2.2.0 #endif // GTK+ >= 2.2.0
@@ -684,7 +677,6 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
if (show) if (show)
{ {
m_fsSaveFlag = style;
GetPosition( &m_fsSaveFrame.x, &m_fsSaveFrame.y ); GetPosition( &m_fsSaveFrame.x, &m_fsSaveFrame.y );
GetSize( &m_fsSaveFrame.width, &m_fsSaveFrame.height ); GetSize( &m_fsSaveFrame.width, &m_fsSaveFrame.height );
@@ -718,7 +710,6 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
} }
else // hide else // hide
{ {
m_fsSaveFlag = 0;
if (method != wxX11_FS_WMSPEC) if (method != wxX11_FS_WMSPEC)
{ {
// don't do it always, Metacity hates it // don't do it always, Metacity hates it
@@ -740,7 +731,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
// documented behaviour is to show the window if it's still hidden when // documented behaviour is to show the window if it's still hidden when
// showing it full screen // showing it full screen
if ( show && !IsShown() ) if (show)
Show(); Show();
return true; return true;