Hi,
If say page 3 is active and you insert a page just before page 3 and pass in true to set it active, nothinf happens because of the guard in SetSelection() (the active index hasn't changed but the page has). I fixed this locally by adding a 'force' param to SetSelection() and defaulting it to false. Don't know if it's the best solution though.
Thatmay be my last bug for a while as my integration is nearing completion. Everything working very nicely.
Cheers,
James
Kirix Support Forums
Bug with InsertPage() in conjunction with setActive=true
5 posts
• Page 1 of 1
- jfrench
- Registered User
- Posts: 14
- Joined: Mon Dec 18, 2006 6:58 am
-
Ben - Kirix Support Team
- Posts: 525
- Joined: Mon Dec 19, 2005 6:29 am
Hi Ben,
I've just fallen foul of that guard in SetSelection() again. I noticed a few time that the tabs we're sometimes unclickable after a reordering op, but I didn't pay it much heed as I was too busy with the basics. Now I'm finessing I noticed it again. The unclickability was due to the guard in SetSelection().
It really is dangerous using indices as guards in a reorderable environment...
My fix is simply to remove the guard (and get rid of my previous 'force' param).
I guess you could change the way the guard works though.
I really will try and get some patches together but I'm incredibly busy at the mo with deadlines looming etc.... As I'm sure you are
Cheers,
James
I've just fallen foul of that guard in SetSelection() again. I noticed a few time that the tabs we're sometimes unclickable after a reordering op, but I didn't pay it much heed as I was too busy with the basics. Now I'm finessing I noticed it again. The unclickability was due to the guard in SetSelection().
It really is dangerous using indices as guards in a reorderable environment...
My fix is simply to remove the guard (and get rid of my previous 'force' param).
I guess you could change the way the guard works though.
I really will try and get some patches together but I'm incredibly busy at the mo with deadlines looming etc.... As I'm sure you are
Cheers,
James
- jfrench
- Registered User
- Posts: 14
- Joined: Mon Dec 18, 2006 6:58 am
Re: Bug with InsertPage() in conjunction with setActive=true
Hello,
I reported a similar bug on wxWidgets SourceForge bug tracker, but Julian Smart advised me to post it here as well.
https://sourceforge.net/tracker/index.p ... tid=109863
Calling wxAuiNotebook::RemovePage(index) and InsertPage(index) and then SetSelection(index) with the same index results in the wrong page being activated. Debugger shows that wxNotebook believes that the right page has already been selected and so SetSelection() call does not do anything. Clicking on the page that should have been selected by SetSelection() also has no effect – tabs do not switch at all, however after a few clicks on other pages the control returns back to normal operation.
It seems that the state of the notebook becomes inconsistent so all attempts to update the control are being ignored. Calling Refresh() or Update() do not change anything.
I found a workaround – before removing a page select some other page, in this case everything works fine.
Why this happens – after call to InsertPage() the active page points to the same window, the index of this window changes (increments), but m_curpage member is not updated. This result in inconsistent state = current tab control points to one, while m_currpage number – to the another. Possible solution is to updated m_currpage if needed.
Example :
size_t index = notebook->GetPageIndex(child_w);
notebook->RemovePage(index);
notebook->InsertPage(index, new_page, label);
new_page->Reparent(notebook);
notebook->SetSelection(index);
// at this point notebook indicates that page “index” is selected, however on screen
// page “index +1” appears to be active
Andrey
I reported a similar bug on wxWidgets SourceForge bug tracker, but Julian Smart advised me to post it here as well.
https://sourceforge.net/tracker/index.p ... tid=109863
Calling wxAuiNotebook::RemovePage(index) and InsertPage(index) and then SetSelection(index) with the same index results in the wrong page being activated. Debugger shows that wxNotebook believes that the right page has already been selected and so SetSelection() call does not do anything. Clicking on the page that should have been selected by SetSelection() also has no effect – tabs do not switch at all, however after a few clicks on other pages the control returns back to normal operation.
It seems that the state of the notebook becomes inconsistent so all attempts to update the control are being ignored. Calling Refresh() or Update() do not change anything.
I found a workaround – before removing a page select some other page, in this case everything works fine.
Why this happens – after call to InsertPage() the active page points to the same window, the index of this window changes (increments), but m_curpage member is not updated. This result in inconsistent state = current tab control points to one, while m_currpage number – to the another. Possible solution is to updated m_currpage if needed.
Example :
size_t index = notebook->GetPageIndex(child_w);
notebook->RemovePage(index);
notebook->InsertPage(index, new_page, label);
new_page->Reparent(notebook);
notebook->SetSelection(index);
// at this point notebook indicates that page “index” is selected, however on screen
// page “index +1” appears to be active
Andrey
- andrey_yazhuk
- Registered User
- Posts: 4
- Joined: Tue Aug 07, 2007 4:01 pm
Re: Bug with InsertPage() in conjunction with setActive=true
Hi Andrey,
I wonder if you could add your suggested m_curpage fix and let us know if it works? If it does I'll commit to wxWidgets so we can have it in 2.8.5.
Many thanks in advance.
Regards,
Julian
I wonder if you could add your suggested m_curpage fix and let us know if it works? If it does I'll commit to wxWidgets so we can have it in 2.8.5.
Many thanks in advance.
Regards,
Julian
andrey_yazhuk wrote:Hello,
I reported a similar bug on wxWidgets SourceForge bug tracker, but Julian Smart advised me to post it here as well.
https://sourceforge.net/tracker/index.p ... tid=109863
Calling wxAuiNotebook::RemovePage(index) and InsertPage(index) and then SetSelection(index) with the same index results in the wrong page being activated. Debugger shows that wxNotebook believes that the right page has already been selected and so SetSelection() call does not do anything. Clicking on the page that should have been selected by SetSelection() also has no effect – tabs do not switch at all, however after a few clicks on other pages the control returns back to normal operation.
It seems that the state of the notebook becomes inconsistent so all attempts to update the control are being ignored. Calling Refresh() or Update() do not change anything.
I found a workaround – before removing a page select some other page, in this case everything works fine.
Why this happens – after call to InsertPage() the active page points to the same window, the index of this window changes (increments), but m_curpage member is not updated. This result in inconsistent state = current tab control points to one, while m_currpage number – to the another. Possible solution is to updated m_currpage if needed.
Example :
size_t index = notebook->GetPageIndex(child_w);
notebook->RemovePage(index);
notebook->InsertPage(index, new_page, label);
new_page->Reparent(notebook);
notebook->SetSelection(index);
// at this point notebook indicates that page “index” is selected, however on screen
// page “index +1” appears to be active
Andrey
- Julian Smart
- Registered User
- Posts: 17
- Joined: Sun Nov 05, 2006 4:45 pm
5 posts
· Page 1 of 1
Return to wxAUI Questions, Thoughts & Feedback