INCOMPATIBLE CHANGES SINCE 2.4.x
================================
+ Please take a few minutes to read the following list, especially
+ paying attention to the most important changes which are marked
+ with '!' in the first column.
+
+ Also please note that you should ensure that WXWIN_COMPATIBILITY_2_4
+ is defined to 1 if you wish to retain maximal compatibility with 2.4
+ series.
+
+! windows are no longer fully repainted when resized, use new style
+ wxFULL_REPAINT_ON_RESIZE to force this (wxNO_FULL_REPAINT_ON_RESIZE stll
+ exists but doesn't do anything any more, this behaviour is default now)
+
+
- no initialization/cleanup can be done in wxApp/~wxApp because they are
now called much earlier/later than before; please move any exiting code
from there to wxApp::OnInit()/OnExit()
nothing on the other platforms.}
\twocolitem{\windowstyle{wxCLIP\_CHILDREN}}{Use this style to eliminate flicker caused by the background being
repainted, then children being painted over them. Windows only.}
+\twocolitem{\windowstyle{wxFULL\_REPAINT\_ON\_RESIZE}}{Use this style to force
+a complete redraw of the window whenever it is resized instead of redrawing
+just the part of the window affected by resizing. Note that this was the
+behaviour by default before 2.5.1 release and that if you experience redraw
+problems with the code which previously used to work you may want to try this.}
\end{twocollist}
See also \helpref{window styles overview}{windowstyles}.
// mouse is clicked outside of it or if it loses focus in any other way
#define wxPOPUP_WINDOW 0x00020000
+// force a full repaint when the window is resized (instead of repainting just
+// the invalidated area)
+#define wxFULL_REPAINT_ON_RESIZE 0x00010000
+
+// obsolete: now this is the default behaviour
+//
// don't invalidate the whole window (resulting in a PAINT event) when the
// window is resized (currently, makes sense for wxMSW only)
-#define wxNO_FULL_REPAINT_ON_RESIZE 0x00010000
+#define wxNO_FULL_REPAINT_ON_RESIZE 0
/*
* Extra window style flags (use wxWS_EX prefix to make it clear that they
style &= ~wxBORDER_MASK;
style |= wxBORDER_NONE;
- // we don't need to be completely repainted after resize and doing it
- // results in horrible flicker
- style |= wxNO_FULL_REPAINT_ON_RESIZE;
-
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return FALSE;
if (g_isIdle)
wxapp_install_idle_handler();
- // The wxNO_FULL_REPAINT_ON_RESIZE flag only works if
- // there are no child windows.
- if ((win->HasFlag(wxNO_FULL_REPAINT_ON_RESIZE)) &&
- (win->GetChildren().GetCount() == 0))
+ // if there are any children we must refresh everything
+ //
+ // VZ: why?
+ if ( !win->HasFlag(wxFULL_REPAINT_ON_RESIZE) &&
+ win->GetChildren().IsEmpty() )
{
return;
}
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
- if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE))
+ if (!HasFlag(wxFULL_REPAINT_ON_RESIZE))
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this );
}
#else
- // gtk_widget_set_redraw_on_allocate( GTK_WIDGET(m_wxwindow), HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) );
+ // gtk_widget_set_redraw_on_allocate( GTK_WIDGET(m_wxwindow), !HasFlag( wxFULL_REPAINT_ON_RESIZE ) );
#endif
#ifdef __WXGTK20__
if (g_isIdle)
wxapp_install_idle_handler();
- // The wxNO_FULL_REPAINT_ON_RESIZE flag only works if
- // there are no child windows.
- if ((win->HasFlag(wxNO_FULL_REPAINT_ON_RESIZE)) &&
- (win->GetChildren().GetCount() == 0))
+ // if there are any children we must refresh everything
+ //
+ // VZ: why?
+ if ( !win->HasFlag(wxFULL_REPAINT_ON_RESIZE) &&
+ win->GetChildren().IsEmpty() )
{
return;
}
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
- if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE))
+ if (!HasFlag(wxFULL_REPAINT_ON_RESIZE))
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this );
}
#else
- // gtk_widget_set_redraw_on_allocate( GTK_WIDGET(m_wxwindow), HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) );
+ // gtk_widget_set_redraw_on_allocate( GTK_WIDGET(m_wxwindow), !HasFlag( wxFULL_REPAINT_ON_RESIZE ) );
#endif
#ifdef __WXGTK20__
// the OS takes care of invalidating and erasing the new area so we only have to
// take care of refreshing for full repaints
- if ( doResize && !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( doResize && HasFlag(wxFULL_REPAINT_ON_RESIZE) )
Refresh() ;
bool partialRepaint = false ;
- if ( HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) )
{
wxPoint oldPos( m_x , m_y ) ;
wxPoint newPos( actualX , actualY ) ;
// the OS takes care of invalidating and erasing the new area so we only have to
// take care of refreshing for full repaints
- if ( doResize && !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( doResize && HasFlag(wxFULL_REPAINT_ON_RESIZE) )
Refresh() ;
bool partialRepaint = false ;
- if ( HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) )
{
wxPoint oldPos( m_x , m_y ) ;
wxPoint newPos( actualX , actualY ) ;
long mgl_style = 0;
window_t *wnd_parent = parent ? parent->GetHandle() : NULL;
- if ( !(style & wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( style & wxFULL_REPAINT_ON_RESIZE )
{
mgl_style |= MGL_WM_FULL_REPAINT_ON_RESIZE;
}
// creates flicker but at least doesn't show garbage on the screen
rc = wxWindow::MSWWindowProc(message, wParam, lParam);
processed = TRUE;
- if ( !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) )
{
::InvalidateRect(GetHwnd(), NULL, FALSE /* erase bg */);
}
MDICREATESTRUCT mcs;
- mcs.szClass = style & wxNO_FULL_REPAINT_ON_RESIZE
- ? wxMDIChildFrameClassNameNoRedraw
- : wxMDIChildFrameClassName;
+ mcs.szClass = style & wxFULL_REPAINT_ON_RESIZE
+ ? wxMDIChildFrameClassName
+ : wxMDIChildFrameClassNameNoRedraw;
mcs.szTitle = title;
mcs.hOwner = wxGetInstance();
if (x > -1)
// which is the same but without CS_[HV]REDRAW class styles so using it
// ensures that the window is not fully repainted on each resize
wxString className(wclass);
- if ( GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE )
+ if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) )
{
className += wxT("NR");
}
// which is the same but without CS_[HV]REDRAW class styles so using it
// ensures that the window is not fully repainted on each resize
//
- if (GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE)
+ if (!HasStyle(wxFULL_REPAINT_ON_RESIZE))
{
sClassName += wxT("NR");
}
const wxValidator& validator,
const wxString& name)
{
- // Ee use wxNO_FULL_REPAINT_ON_RESIZE by default as it results in much
- // less flicker and none of the standard controls needs to be entirely
- // repainted after resize anyhow.
- if ( !wxControlBase::Create(parent, id, pos, size,
- style | wxNO_FULL_REPAINT_ON_RESIZE ,
- validator, name) )
+ if ( !wxControlBase::Create(parent, id, pos, size, style, validator, name) )
{
// underlying window creation failed?
return FALSE;
{
public:
wxPopupMenuWindow(wxWindow *parent, wxMenu *menu);
-
+
~wxPopupMenuWindow();
// override the base class version to select the first item initially
else
{
// return FALSE;
-
+
return wxEvtHandler::ProcessEvent(event);
}
}
: m_menu->GetMenuItems().GetLast();
}
-wxMenuItemList::compatibility_iterator
+wxMenuItemList::compatibility_iterator
wxPopupMenuWindow::GetPrevNode(wxMenuItemList::compatibility_iterator node) const
{
if ( node )
: m_menu->GetMenuItems().GetFirst();
}
-wxMenuItemList::compatibility_iterator
+wxMenuItemList::compatibility_iterator
wxPopupMenuWindow::GetNextNode(wxMenuItemList::compatibility_iterator node) const
{
if ( node )
// close all menus
DismissAndNotify();
-
+
menu->ClickItem(item);
}
wxPopupMenuWindow *win = menu->m_popupMenu;
wxCHECK_MSG( win, FALSE, _T("parent menu not shown?") );
-
+
pos = ClientToScreen(pos);
if ( win->GetMenuItemFromPoint(win->ScreenToClient(pos)) )
{
// We are a submenu of a menu of a menubar
if (menu->GetMenuBar())
return menu->GetMenuBar();
-
+
win = menu->GetInvokingWindow();
if ( win )
break;
// we're probably going to crash in the caller anyhow, but try to detect
// this error as soon as possible
wxASSERT_MSG( win, _T("menu without any associated window?") );
-
+
// also remember it in this menu so that we don't have to search for it the
// next time
wxConstCast(this, wxMenu)->m_invokingWindow = win;
wxCHECK_RET( m_invokingWindow, _T("what kind of menu is this?") );
m_invokingWindow->DismissPopupMenu();
-
+
// Why reset it here? We need it for sending the event to...
// SetInvokingWindow(NULL);
}
{
m_popupMenu->SelectFirst();
}
-
+
// the geometry might have changed since the last time we were shown, so
// always resize
m_popupMenu->SetClientSize(GetGeometryInfo().GetSize());
// not applicabled
isChecked = -1;
}
-
+
return SendEvent(item->GetId(), isChecked);
}
m_menuShown = NULL;
m_shouldShowMenu = FALSE;
-
- m_windowStyle |= wxNO_FULL_REPAINT_ON_RESIZE;
}
void wxMenuBar::Attach(wxFrame *frame)
#endif // 0
menu->SetInvokingWindow(this);
-
+
// wxLogDebug( "Name of invoking window %s", menu->GetInvokingWindow()->GetName().c_str() );
-
+
menu->Popup(ClientToScreen(wxPoint(x, y)), wxSize(0, 0));
// this is not very useful if the menu was popped up because of the mouse
void wxWindow::DismissPopupMenu()
{
wxCHECK_RET( ms_evtLoopPopup, _T("no popup menu shown") );
-
+
ms_evtLoopPopup->Exit();
}
#if 0 // ndef __WXMSW__
// Refresh the area (strip) previously occupied by the border
- if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) && IsShown())
+ if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) && IsShown() )
{
// This code assumes that wxSizeEvent.GetSize() returns
// the area of the entire window, not just the client
style |= wxALWAYS_SHOW_SB;
wxTextCtrlBase::Create( parent, id, pos /* wxDefaultPosition */, size,
- style|wxVSCROLL|wxHSCROLL|wxNO_FULL_REPAINT_ON_RESIZE );
+ style | wxVSCROLL | wxHSCROLL);
SetBackgroundColour( *wxWHITE );
xattributes.override_redirect = True;
}
- if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
+ if (!HasFlag( wxFULL_REPAINT_ON_RESIZE ))
{
xattributes_mask |= CWBitGravity;
xattributes.bit_gravity = NorthWestGravity;
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
PropertyChangeMask | VisibilityChangeMask ;
- if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
+ if (!HasFlag( wxFULL_REPAINT_ON_RESIZE ))
{
xattributes_mask |= CWBitGravity;
xattributes.bit_gravity = StaticGravity;
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
PropertyChangeMask | VisibilityChangeMask ;
- if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
+ if (!HasFlag( wxFULL_REPAINT_ON_RESIZE ))
{
xattributes_mask |= CWBitGravity;
xattributes.bit_gravity = NorthWestGravity;