From e97d2576ae3307ed2f7ee8392090d2dab97df80c Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Fri, 29 Mar 2002 15:04:30 +0000 Subject: [PATCH] Pop-up menus no longer jump before appearing. Added wxTLW::DoGetSize() which uses cashed values. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14861 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/x11/toplevel.h | 1 + src/x11/popupwin.cpp | 6 ++++-- src/x11/toplevel.cpp | 30 +++++++++++++++++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/include/wx/x11/toplevel.h b/include/wx/x11/toplevel.h index ccf1a16618..0b16cf9202 100644 --- a/include/wx/x11/toplevel.h +++ b/include/wx/x11/toplevel.h @@ -88,6 +88,7 @@ protected: virtual void OnInternalIdle(); virtual void DoGetClientSize( int *width, int *height ) const; + virtual void DoGetSize( int *width, int *height ) const; virtual void DoSetClientSize(int width, int height); virtual void DoSetSize(int x, int y, int width, int height, diff --git a/src/x11/popupwin.cpp b/src/x11/popupwin.cpp index a1546f5630..e27499f171 100644 --- a/src/x11/popupwin.cpp +++ b/src/x11/popupwin.cpp @@ -93,7 +93,7 @@ bool wxPopupWindow::Create( wxWindow *parent, int style ) m_mainWindow = (WXWindow) xwindow; wxAddWindowToTable( xwindow, (wxWindow*) this ); - XMapWindow( xdisplay, xwindow ); + // XMapWindow( xdisplay, xwindow ); xattributes.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | @@ -128,6 +128,7 @@ bool wxPopupWindow::Create( wxWindow *parent, int style ) m_clientWindow = (WXWindow) xwindow; wxAddClientWindowToTable( xwindow, (wxWindow*) this ); + m_isShown = FALSE; XMapWindow( xdisplay, xwindow ); } else @@ -147,7 +148,8 @@ bool wxPopupWindow::Create( wxWindow *parent, int style ) m_clientWindow = (WXWindow) xwindow; wxAddWindowToTable( xwindow, (wxWindow*) this ); - XMapWindow( xdisplay, xwindow ); + m_isShown = FALSE; + // XMapWindow( xdisplay, xwindow ); } #else fixme diff --git a/src/x11/toplevel.cpp b/src/x11/toplevel.cpp index d1a58623b7..eb297ec92d 100644 --- a/src/x11/toplevel.cpp +++ b/src/x11/toplevel.cpp @@ -452,13 +452,29 @@ void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const *height = m_height; } +void wxTopLevelWindowX11::DoGetSize( int *width, int *height ) const +{ + // TODO add non-client size + + if (width) + *width = m_width; + if (height) + *height = m_height; +} + void wxTopLevelWindowX11::DoSetClientSize(int width, int height) { - // wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height); - + int old_width = m_width; + int old_height = m_height; + m_width = width; m_height = height; + if (m_width == old_width && m_height == old_height) + return; + + // wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height); + #if !wxUSE_NANOX XSizeHints size_hints; size_hints.flags = PSize; @@ -472,7 +488,10 @@ void wxTopLevelWindowX11::DoSetClientSize(int width, int height) void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height); + int old_x = m_x; + int old_y = m_y; + int old_width = m_width; + int old_height = m_height; if (x != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) m_x = x; @@ -485,7 +504,12 @@ void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int siz if (height != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) m_height = height; + + if (m_x == old_x && m_y == old_y && m_width == old_width && m_height == old_height) + return; + // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height); + #if !wxUSE_NANOX XSizeHints size_hints; size_hints.flags = 0; -- 2.45.2