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:
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user