| 1 | ------------------------ |
| 2 | wxWidgets 2.5 Change Log |
| 3 | ------------------------ |
| 4 | |
| 5 | INCOMPATIBLE CHANGES SINCE 2.4.x |
| 6 | ================================ |
| 7 | |
| 8 | Please take a few minutes to read the following list, especially |
| 9 | paying attention to the most important changes which are marked |
| 10 | with '!' in the first column. |
| 11 | |
| 12 | Also please note that you should ensure that WXWIN_COMPATIBILITY_2_4 |
| 13 | is defined to 1 if you wish to retain maximal compatibility with 2.4 |
| 14 | series. |
| 15 | |
| 16 | ! windows are no longer fully repainted when resized, use new style |
| 17 | wxFULL_REPAINT_ON_RESIZE to force this (wxNO_FULL_REPAINT_ON_RESIZE still |
| 18 | exists but doesn't do anything any more, this behaviour is default now) |
| 19 | |
| 20 | ! wxWindow::m_font and m_backgroundColour/m_foregroundColour are no longer |
| 21 | always set, use GetFont(), GetBack/ForegroundColour() to access |
| 22 | them, and they will be dynamically determined if necessary. |
| 23 | |
| 24 | |
| 25 | ! The Sizers have had some fundamental internal changes in the 2.5.2 |
| 26 | and 2.5.3 releases intended to make them do more of the "Right |
| 27 | Thing" but also be as backwards compatible as possible. First a bit |
| 28 | about how things used to work: |
| 29 | |
| 30 | * The size that a window had when Add()ed to the sizer was assumed |
| 31 | to be its minimal size, and that size would always be used by |
| 32 | default when calculating layout size and positions, and the |
| 33 | sizer itself would keep track of that minimal size. |
| 34 | |
| 35 | * If the window item was Add()ed with the wxADJUST_MINSIZE flag |
| 36 | then when layout was calculated the item's GetBestSize would be |
| 37 | used to reset the minimal size that the sizer used. |
| 38 | |
| 39 | The main thrust of the new Sizer changes was to make behaviour like |
| 40 | wxADJUST_MINSIZE be the default, and also to push the tracking of |
| 41 | the minimal size to the window itself (since it knows its own needs) |
| 42 | instead of having the sizer take care of it. Consequently these |
| 43 | changes were made: |
| 44 | |
| 45 | * The wxFIXED_MINSIZE flag was added to allow for the old |
| 46 | behaviour. When this flag is used the size a window has when |
| 47 | Add()ed to the sizer will be treated as its minimal size and it |
| 48 | will not be readjusted on each layout. |
| 49 | |
| 50 | * The min size stored in wxWindow and settable with SetSizeHints or |
| 51 | SetMinSize will by default be used by the sizer (if it was set) |
| 52 | as the minimal size of the sizer item. If the minsize was not |
| 53 | set (or was only partially set) then the window's best size is |
| 54 | fetched and it is used instead of (or blended with) the minsize. |
| 55 | wxWindow:GetBestFittingSize was added to facilitate getting the |
| 56 | size to be used by the sizers. |
| 57 | |
| 58 | * The best size of a window is cached so it doesn't need to |
| 59 | recaculated on every layout. wxWindow::InvalidateBestSize was |
| 60 | added and should be called (usually just internally in control |
| 61 | methods) whenever something is done that would make the best |
| 62 | size change. |
| 63 | |
| 64 | * All wxControls were changed to set the minsize to what is passed |
| 65 | to the constructor or Create method, and also to set the real |
| 66 | size of the control to the blending of the minsize and bestsize. |
| 67 | wxWindow::SetBestFittingSize was added to help with this, |
| 68 | although most controls don't need to call it directly because it |
| 69 | is called indirectly via the SetInitialSize called in the base |
| 70 | classes. |
| 71 | |
| 72 | At this time, the only situation known not to work the same as |
| 73 | before is the following: |
| 74 | |
| 75 | win = new SomeWidget(parent); |
| 76 | win->SetSize(SomeNonDefaultSize); |
| 77 | sizer->Add(win); |
| 78 | |
| 79 | In this case the old code would have used the new size as the |
| 80 | minimum, but now the sizer will use the default size as the minimum |
| 81 | rather than the size set later. It is an easy fix though, just move |
| 82 | the specification of the size to the constructor (assuming that |
| 83 | SomeWidget will set its minsize there like the rest of the controls |
| 84 | do) or call SetMinSize instead of SetSize. |
| 85 | |
| 86 | In order to fit well with this new scheme of things, all wxControls |
| 87 | or custom controls should do the following things. (Depending on |
| 88 | how they are used you may also want to do the same thing for |
| 89 | non-control custom windows.) |
| 90 | |
| 91 | * Either override or inherit a meaningful DoGetBestSize method |
| 92 | that calculates whatever size is "best" for the control. Once |
| 93 | that size is calculated then there should normally be a call to |
| 94 | CacheBestSize to save it for later use, unless for some reason |
| 95 | you want the best size to be recalculated on every layout. |
| 96 | |
| 97 | * Any method that changes the attributes of the control such that |
| 98 | the best size will change should call InvalidateBestSize so it |
| 99 | will be recalculated the next time it is needed. |
| 100 | |
| 101 | * The control's constructor and/or Create method should ensure |
| 102 | that the minsize is set to the size passed in, and that the |
| 103 | control is sized to a blending of the min size and best size. |
| 104 | This can be done by calling SetBestFittingSize. |
| 105 | |
| 106 | |
| 107 | |
| 108 | - no initialization/cleanup can be done in wxApp/~wxApp because they are |
| 109 | now called much earlier/later than before; please move any exiting code |
| 110 | from there to wxApp::OnInit()/OnExit() |
| 111 | - also, OnExit() is not called if OnInit() fails |
| 112 | - finally the program exit code is OnRun() return value, not OnExit() one |
| 113 | - wxTheApp can't be assigned to any longer, use wxApp::SetInstance() instead |
| 114 | - wxFileType::GetIcon() returns wxIconLocation, not wxIcon |
| 115 | - wxColourDatabase is not a wxList any more, use AddColour to add new colours |
| 116 | - wxWindow::Clear() is now called ClearBackground() |
| 117 | - pointer returned by wxFont::GetNativeFontInfo() must not be deleted now |
| 118 | - wxMouseEvent::Moving() doesn't return true if mouse is being dragged any more |
| 119 | - (most) controls now inherit parents colours by default, override |
| 120 | ShouldInheritColours() to return false if you don't want this to happen |
| 121 | - wxApp::SendIdleEvent() now takes 2 arguments |
| 122 | - wxTabView::GetLayers() changed return type from wxList& to wxTabLayerList& |
| 123 | (when WXWIN_COMPATIBILITY_2_4 == 0) |
| 124 | - wxID_SEPARATOR (id used for the menu separators) value changed from -1 to -2 |
| 125 | - wxGetNumberFromUser() is now in separate wx/numdlg.h, not wx/textdlg.h |
| 126 | - wxChoice and wxCombobox now handle their size in the same way as in all the |
| 127 | other ports under MSW, new code is actually correct but different from weird |
| 128 | stuff they were doing before so the behaviour of your programs might change |
| 129 | - wxTaskBarIcon objects must now be destroyed before the application can exit. |
| 130 | Previously, the application terminated if there were no top level windows; |
| 131 | now it terminates if there are no top level windows or taskbar icons left. |
| 132 | - wxZlibInputStream is not by default compatible with the output of the |
| 133 | 2.4.x version of wxZlibOutputStream. However, there is a compatibilty mode, |
| 134 | switched on by passing wxZLIB_24COMPATIBLE to the constructor. |
| 135 | - when WXWIN_COMPATIBILITY_2_4 == 0 wxHashTable uses a new implementation |
| 136 | not using wxList keyed interface (the same used when wxUSE_STL == 1), |
| 137 | the only incompatibility being that Next() returns a wxHashTable::Node* |
| 138 | instead of a wxNode*. |
| 139 | - non-const wxDC methods GetBackground(), GetBrush(), GetFont() and GetPen() |
| 140 | as well as wxWindow methods GetFont() and GetCursor() don't exist any more, |
| 141 | please fix your code -- it never worked correctly anyhow if you modified the |
| 142 | objects returned by these methods so you should simply switch to using const |
| 143 | methods. |
| 144 | - wxWindow::GetFont() now returns wxFont object instead of reference |
| 145 | - EVT_XXX macros are now type-safe; code that uses wrong type for event |
| 146 | handler's argument will no longer compile. |
| 147 | - Identical functionality of wxFileDialog::ParseWildcard, |
| 148 | wxGenericDirCtrl::ParseFilter, Motif and MSW parsing native dialogs |
| 149 | is now accessible in ::wxParseCommonDialogsFilter |
| 150 | - wxNotebookSizer and wxBookCtrlSizer are now deprecated -- they are no longer |
| 151 | needed, you can treat wxNotebook as any other control and put it directly |
| 152 | into the sizer that was wxNotebookSizer's parent sizer in old code. |
| 153 | - wxFile methods now return wxFileOffset which may be a 64 bit integer type, |
| 154 | even on 32 bit platforms, instead of off_t and so the return value of |
| 155 | wxFile::Length(), for example, shouldn't be assigned to off_t variable any |
| 156 | more (the compiler might warn you about this). |
| 157 | - wxListItem::m_data is now of type wxUIntPtr, not long, for compatibility |
| 158 | with 64 bit systems |
| 159 | |
| 160 | |
| 161 | DEPRECATED METHODS SINCE 2.4.x |
| 162 | ============================== |
| 163 | |
| 164 | Deprecated methods may still be used but will disappear in future wxWidgets |
| 165 | versions, please update your code to not use them. |
| 166 | |
| 167 | - wxDocManager::GetNoHistoryFiles() renamed to GetHistoryFilesCount() |
| 168 | - wxSizer::Remove(wxWindow *), use Detach() instead [it is more clear] |
| 169 | - wxSizer::Set/GetOption(): use Set/GetProportion() instead |
| 170 | - wxKeyEvent::KeyCode(): use GetKeyCode instead |
| 171 | - wxList::Number, First, Last, Nth: use GetCount, GetFirst/Last, Item instead |
| 172 | - wxNode::Next, Previous, Data: use GetNext, GetPrevious, GetData instead |
| 173 | - wxListBase::operator wxList&(): use typesafe lists instead |
| 174 | - wxTheFontMapper: use wxFontMapper::Get() instead |
| 175 | - wxStringHashTable: use wxHashMap instead |
| 176 | - wxHashTableLong: use wxHashMap instead |
| 177 | - wxArrayString::GetStringArray: use wxCArrayString or alternative wxWidgets |
| 178 | methods taking wxArrayString |
| 179 | - wxArrayString::Remove(index, count): use RemoveAt instead |
| 180 | - wxTreeItemId conversion to long is deprecated and shouldn't be used |
| 181 | - wxTreeCtrl::GetFirst/NextChild() 2nd argument now has type wxTreeItemIdValue |
| 182 | and not long, please change declarations of "cookie"s in your code |
| 183 | accordingly -- otherwise your code won't work on 64 bit platforms |
| 184 | - [MSW only] wxWindow::GetUseCtl3D(), GetTransparentBackground() and |
| 185 | SetTransparent() as well as wxNO_3D and wxUSER_COLOURS styles |
| 186 | - wxList keyed interface: use wxHashMap instead |
| 187 | - wxColourDatabase::FindColour(): use Find() instead (NB: different ret type) |
| 188 | - wxHashTable::Next: use wxHashTable::Node* or |
| 189 | wxHashTable::compatibility_iterator to store the return |
| 190 | value |
| 191 | - wxWave class; use wxSound instead |
| 192 | - The wxHIDE_READONLY flag for wxFileDialog was not implemented |
| 193 | and has now been removed |
| 194 | - wxTaskBarIcon::OnXXX() virtual methods: use events instead |
| 195 | - obsolete and not used wxUSE_GENERIC_DIALOGS_IN_MSW has been removed |
| 196 | |
| 197 | |
| 198 | OTHER CHANGES |
| 199 | ============= |
| 200 | |
| 201 | 2.5.3 |
| 202 | ----- |
| 203 | |
| 204 | All: |
| 205 | |
| 206 | - support for huge (>2 Gb) files (Tim Kosse) |
| 207 | - number of fixes to wxPluginManager (Rick Brice, Hans Van Leemputten) |
| 208 | - fixed memory leak in wxURL when using a proxy (Steven Van Ingelgem) |
| 209 | - fixed bug in wxDateTime::Set(jdn) when DST was in effect |
| 210 | - fixed fatal bug in wxString when wxUSE_STL==1 (Kurt Granroth) |
| 211 | - support msgids in charsets other than C and languages other than English |
| 212 | (based on patch by Stefan Kowski) |
| 213 | - added wxMicroSleep() and wxMilliSleep() replacing deprecated wxUsleep() |
| 214 | - basic UDP sockets support (Lenny Maiorani) |
| 215 | - fixed wxDateTime::GetWeekDayName() for some dates (Daniel Kaps) |
| 216 | - deprecated wxDateTime::SetToTheWeek() in favour of SetToWeekOfYear() |
| 217 | - active mode support in wxFTP (Randall Fox) |
| 218 | - sped up wxHTTP and wxFTP |
| 219 | - added wxStringInput/OutputStreams |
| 220 | |
| 221 | All (GUI): |
| 222 | |
| 223 | - added wxWindow::MoveBefore/AfterInTabOrder() to change tab navigation order |
| 224 | - added wxTaskBarIcon::CreatePopupMenu which is now the recommended way |
| 225 | of showing a popup menu; calling wxTaskBarIcon::PopupMenu directly |
| 226 | is discouraged |
| 227 | - added ..._CMD_...(id) variants for wxGrid event table entry macros |
| 228 | - added wxWindow::Navigate for programmatic navigation to the next control |
| 229 | - wxTextCtrl::OnChar now inserts a tab character if wxTE_PROCESS_TAB is set |
| 230 | - added wxKeyEvent::GetUnicodeKey() |
| 231 | - added wxKeyEvent::CmdDown() and wxMouseEvent::CmdDown() |
| 232 | - implemented wxListCtrl::FindItem() for non-MSW (Robin Stoll) |
| 233 | - added status bar fields styles support (Tim Kosse) |
| 234 | - added convenience functions wxSizer::AddSpacer() and |
| 235 | wxSizer::AddStretchSpacer() (as well as Prepend and Insert variants) |
| 236 | - added samples/splash |
| 237 | - added support for stock buttons |
| 238 | - added wxTopLevelWindow::RequestUserAttention() |
| 239 | - support for comma in contrib gizmo wxLEDNumberCtrl (Grant Likely) |
| 240 | - recursive wxSizer::Show for subsizer and return value if element was found |
| 241 | - added wxChoicebook control |
| 242 | - smoother time estimation updates in wxProgressDialog (Christian Sturmlechner) |
| 243 | - the XRC contrib library was moved to the core |
| 244 | - wx(Choice/List/Note)book controls send CHANG(ED/ING) events in SetSelection |
| 245 | - it is now possible to create a wxFont with given size in pixels (d2walter) |
| 246 | - added wxTopLevelWindow::IsActive() |
| 247 | |
| 248 | Unix: |
| 249 | |
| 250 | - wxTaskBarIcon now supports freedesktop.org System Tray protocol |
| 251 | - security fixes to wxSingleInstanceChecker |
| 252 | - wx-config script was modified to allow choosing from multiple installed |
| 253 | builds of wxWidgets and to return flags/libs for selected libraries only |
| 254 | - wx-config has new --version-full option |
| 255 | |
| 256 | wxMAC: |
| 257 | |
| 258 | - Fixed MLTE text control GetLineText and GetLineLength on OSX (RN) |
| 259 | - Added OSX wxTaskBarIcon implementation for the OSX Dock (RN) |
| 260 | - Added wxDrawerWindow class for drawer windows for OSX >= 10.2 (RN - from Jason Bagley) |
| 261 | - Native font dialog on OSX 10.2 and greater (RN) |
| 262 | |
| 263 | wxGTK: |
| 264 | |
| 265 | - wxGTK uses GTK+ 2.x by default now, you have to pass --disable-gtk2 to |
| 266 | configure if you want to use GTK+ 1.2 |
| 267 | - fixed many rendering artifacts and wrong colours with lots of GTK+ themes |
| 268 | - implemented wxColourDialog as native dialog |
| 269 | - implemented wxTextCtrl::HitTest() (GTK+ >= 2) |
| 270 | - implemented wxTextCtrl::ScrollLines() and ScrollPages for GTK+ 2.x |
| 271 | - wxTreeCtrl::GetCount() counts root as well now (compatible with MSW) |
| 272 | - added support for wxCHK_3STATE style (GTK2 only) |
| 273 | - implemented text underlining under GTK2 |
| 274 | - implemented wxFRAME_NO_TASKBAR style (GTK >= 2.2) |
| 275 | - implemented support for wxSYS_DCLICK_?, wxSYS_DRAG_? and wxSYS_CURSOR_? |
| 276 | in wxSystemSettings::GetMetric (Mart Raudsepp) |
| 277 | - implemented wxTopLevel::IsMaximized() for GTK+2 and WMs that implement |
| 278 | freedesktop.org's wm-spec (Mart Raudsepp) |
| 279 | - wxEVT_CONTEXT_MENU is now generated for right mouse press, not release |
| 280 | - implemented alpha channel support in wxBitmap |
| 281 | - added native GTK+2 wxArtProvider implementation with ability to load |
| 282 | icons from icon theme in addition to recognized stock art |
| 283 | - fixed crash on 64 bit platforms (Paul Cornett) |
| 284 | |
| 285 | wxMotif: |
| 286 | |
| 287 | - added support for wxCHK_3STATE style (3 state checkbox) |
| 288 | |
| 289 | wxMSW: |
| 290 | |
| 291 | - fixed UNC paths handling in wxFileSystem (Daniel Nash) |
| 292 | - set wxKeyEvent::m_uniChar in Unicode build |
| 293 | - support for alpha channel in toolbar bitmaps (Jurgen Doornik) |
| 294 | - wxFileDialog can now be moved and centered (Randall Fox) |
| 295 | - restored (and improved) possibility to use wx with MFC broken in 2.5.2 |
| 296 | - fixed wxTextCtrl::SetMaxLength for rich edit controls |
| 297 | - fixed flat style for toolbars under XP, Windows Classic style |
| 298 | - fixed truncation of transferred data in wxConnection under unicode build |
| 299 | - wxChoice and wxComboBox dropdown background can be set now too (Adrian Lupei) |
| 300 | - fixed wxMaximizeEvent generation in wxFrame |
| 301 | - don't send duplicate EVT_COMBOBOX events whenever selection changes any more |
| 302 | - implemented support for selecting printer bin (Steven Van Ingelgem) |
| 303 | - fixed wxListCtrl::SetSingleStyle() which was broken since a few releases |
| 304 | |
| 305 | wxUniv/X11: |
| 306 | |
| 307 | - fixed fatal crash when opening a menu |
| 308 | |
| 309 | wxWinCE: |
| 310 | |
| 311 | - added native WinCE driven smartphone wxTextCtrl implementation using spinners |
| 312 | - added native WinCE driven smartphone wxChoice implementation using spinners |
| 313 | - added automatized but customizable handling of native WinCE driven smartphone menus |
| 314 | - fixed wxRadioBox and wxStaticBox |
| 315 | |
| 316 | wxHTML: |
| 317 | |
| 318 | - added support for nested index entries and index entries pointing to more |
| 319 | than one page to wxHtmlHelpController |
| 320 | |
| 321 | |
| 322 | 2.5.2 |
| 323 | ----- |
| 324 | |
| 325 | All: |
| 326 | |
| 327 | - Hindi translation added (Dhananjaya Sharma) |
| 328 | - Brazilian Portuguese translation added (E. A. Tacao) |
| 329 | - wxDynamicCast() now uses static_cast<wxObject *> internally and so using it |
| 330 | with anything not deriving from wxObject will fail at compile time (instead |
| 331 | of run-time) now |
| 332 | - when wxUSE_STL == 1 and STL provides quasi-standard hash_map/hash_set, |
| 333 | wxHashMap/wxHashSet are just typedefs for them. This makes impossible |
| 334 | to forward declare these classes. |
| 335 | |
| 336 | All (GUI): |
| 337 | |
| 338 | - wxHtmlWindow now delays image scaling until rendering, |
| 339 | resulting in much better display of scaled images |
| 340 | - Added UpdateSize to wxSplitterWindow to allow layout while hidden |
| 341 | - implemented Freeze/Thaw() for wxGenericTreeCtrl (Kevin Hock) |
| 342 | - support for KOI8-U encoding added (Yuriy Tkachenko) |
| 343 | - The old wxADJUST_MINSIZE behaviour is now the default behaviour for |
| 344 | sizer items that are windows. This means that GetAdjustedBestSize |
| 345 | will now be called by default to determine the minimum size that a |
| 346 | window in a sizer should have. If you want to still use the initial |
| 347 | size (and not the BestSize) then use the wxFIXED_MINSIZE flag. When |
| 348 | windows are added to a sizer their initial size is made the window's |
| 349 | min size using SetSizeHints, and calls to wxSizer::SetItemMinSize |
| 350 | are also forwarded to SetSizeHints for window items. |
| 351 | - added wxRegEx::GetMatchCount() |
| 352 | - it is now possible to display images in wxHtmlListBox |
| 353 | |
| 354 | wxMSW: |
| 355 | |
| 356 | - wxWindow::Freeze()/Thaw() can now be nested |
| 357 | - Added wxSP_NO_XP_THEME style to wxSplitterWindow to switch off |
| 358 | XP theming (some applications look bad without 3D borders) |
| 359 | - wxMenuBar::GetLabelTop() doesn't include '&'s in the label any more |
| 360 | - wxRegConf couldn't read global settings without admin privileges and didn't |
| 361 | even try to do it by default -- now it does |
| 362 | - wxTaskBarIcon must be explicitly destroyed now, otherwise the application |
| 363 | won't exit even though there are no top level windows |
| 364 | - wxFileName::GetModificationTime() works with opened files too now |
| 365 | - wxDC::GetClippingBox() now works even for clipping regions created by Windows |
| 366 | - fixed wxFileDataObject in Unicode build (Alex D) |
| 367 | - subdindented paragraphs support (Tim Kosse) |
| 368 | |
| 369 | wxGTK: |
| 370 | |
| 371 | - added support for wxTE_RIGHT and wxTE_CENTRE styles under GTK2 (Mart Raudsepp) |
| 372 | |
| 373 | wxMotif: |
| 374 | |
| 375 | - removed wxMenuItem::DeleteSubMenu() |
| 376 | - wxButtons use Motif default size, which is smaller than it used to be |
| 377 | and closer to wxMSW/wxGTK look. This can be disabled by setting |
| 378 | motif.largebuttons system option to 1 (see wxSystemOptions). |
| 379 | |
| 380 | wxUniv/X11: |
| 381 | |
| 382 | - implemented DrawRoundedRectangle() (clawghoul) |
| 383 | |
| 384 | wxHTML: |
| 385 | |
| 386 | - improved tables and lists layout algorithms (Tim Kosse) |
| 387 | - <div> handling fix (Xavier Nodet) |
| 388 | |
| 389 | Unix: |
| 390 | |
| 391 | - fixed priorities of mailcap entries (David Hart) |
| 392 | - added "wx-config --libs=std,<extra>" syntax (i.e. support for "std") |
| 393 | |
| 394 | wxODBC: |
| 395 | |
| 396 | - Full Unicode support is now available |
| 397 | - BLOB support is working |
| 398 | |
| 399 | |
| 400 | 2.5.1 |
| 401 | ----- |
| 402 | |
| 403 | All: |
| 404 | |
| 405 |