Handle creating nested TreeItemUnlocker objects correctly. This fixes the
problem when a wxTreeCtrl method unlocking some item is called with another
item is already unlocked, e.g. from a selection changed event handler.
Closes #14400.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71723
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Add VT_I8 support to wxAutomationObject (PB).
- Fix wxListbook size calculations to avoid spurious scrollbars.
- Fix code compilation with wxUSE_UNICODE_UTF8 (Kolya Kosenko).
- Add VT_I8 support to wxAutomationObject (PB).
- Fix wxListbook size calculations to avoid spurious scrollbars.
- Fix code compilation with wxUSE_UNICODE_UTF8 (Kolya Kosenko).
+- Fix crash in wxTreeCtrl when calling GetSelection() from selection changed
+ event handler under Vista and later (sbrowne).
{
public:
// unlock a single item
{
public:
// unlock a single item
- TreeItemUnlocker(HTREEITEM item) { ms_unlockedItem = item; }
+ TreeItemUnlocker(HTREEITEM item)
+ {
+ m_oldUnlockedItem = ms_unlockedItem;
+ ms_unlockedItem = item;
+ }
// unlock all items, don't use unless absolutely necessary
// unlock all items, don't use unless absolutely necessary
- TreeItemUnlocker() { ms_unlockedItem = (HTREEITEM)-1; }
+ TreeItemUnlocker()
+ {
+ m_oldUnlockedItem = ms_unlockedItem;
+ ms_unlockedItem = (HTREEITEM)-1;
+ }
- ~TreeItemUnlocker() { ms_unlockedItem = NULL; }
+ ~TreeItemUnlocker() { ms_unlockedItem = m_oldUnlockedItem; }
// check if the item state is currently locked
// check if the item state is currently locked
private:
static HTREEITEM ms_unlockedItem;
private:
static HTREEITEM ms_unlockedItem;
+ HTREEITEM m_oldUnlockedItem;
+
+ wxDECLARE_NO_COPY_CLASS(TreeItemUnlocker);
};
HTREEITEM TreeItemUnlocker::ms_unlockedItem = NULL;
};
HTREEITEM TreeItemUnlocker::ms_unlockedItem = NULL;