restore caching of WM frame extents

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53322 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2008-04-23 17:05:47 +00:00
parent 2f45f5545f
commit fce611e426
3 changed files with 28 additions and 1 deletions

View File

@@ -143,6 +143,8 @@ protected:
wxString m_title; wxString m_title;
private: private:
wxSize& GetCachedDecorSize();
// is the frame currently iconized? // is the frame currently iconized?
bool m_isIconized; bool m_isIconized;

View File

@@ -354,6 +354,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
m_gdkFunc = 0; m_gdkFunc = 0;
if (style & wxRESIZE_BORDER) if (style & wxRESIZE_BORDER)
m_gdkFunc = GDK_FUNC_RESIZE; m_gdkFunc = GDK_FUNC_RESIZE;
gtk_window_set_default_size(GTK_WINDOW(m_widget), m_width, m_height);
m_decorSize.Set(0, 0);
m_deferShow = false;
// don't allow sizing smaller than decorations // don't allow sizing smaller than decorations
GdkGeometry geom; GdkGeometry geom;

View File

@@ -624,7 +624,10 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
} }
} }
gtk_window_set_default_size(GTK_WINDOW(m_widget), m_width, m_height); m_decorSize = GetCachedDecorSize();
int w, h;
GTKDoGetSize(&w, &h);
gtk_window_set_default_size(GTK_WINDOW(m_widget), w, h);
return true; return true;
} }
@@ -975,6 +978,8 @@ void wxTopLevelWindowGTK::DoSetSizeHints( int minW, int minH,
void wxTopLevelWindowGTK::GTKUpdateDecorSize(const wxSize& decorSize) void wxTopLevelWindowGTK::GTKUpdateDecorSize(const wxSize& decorSize)
{ {
if (!IsMaximized() && !IsFullScreen())
GetCachedDecorSize() = decorSize;
if (m_decorSize != decorSize) if (m_decorSize != decorSize)
{ {
const wxSize diff = decorSize - m_decorSize; const wxSize diff = decorSize - m_decorSize;
@@ -1021,6 +1026,23 @@ void wxTopLevelWindowGTK::GTKUpdateDecorSize(const wxSize& decorSize)
} }
} }
wxSize& wxTopLevelWindowGTK::GetCachedDecorSize()
{
static wxSize size[8];
int index = 0;
// title bar
if (m_gdkDecor & (GDK_DECOR_MENU | GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE | GDK_DECOR_TITLE))
index = 1;
// border
if (m_gdkDecor & GDK_DECOR_BORDER)
index |= 2;
// utility window decor can be different
if (m_windowStyle & wxFRAME_TOOL_WINDOW)
index |= 4;
return size[index];
}
void wxTopLevelWindowGTK::OnInternalIdle() void wxTopLevelWindowGTK::OnInternalIdle()
{ {
wxWindow::OnInternalIdle(); wxWindow::OnInternalIdle();