summaryrefslogtreecommitdiff
path: root/src/gui/widgets
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-04-18 15:23:49 +0000
committerDavid Athay <ko2fan@gmail.com>2008-04-18 15:23:49 +0000
commit4371c8c1ffcf24e8d5a7cf2ec126be239cab3d76 (patch)
tree831d9d2e909dabab0ee2c6ed640e290ee28ad294 /src/gui/widgets
parent0b567928c0a24c7346451b59285ce8144ae0bf2e (diff)
downloadmana-client-4371c8c1ffcf24e8d5a7cf2ec126be239cab3d76.tar.gz
mana-client-4371c8c1ffcf24e8d5a7cf2ec126be239cab3d76.tar.bz2
mana-client-4371c8c1ffcf24e8d5a7cf2ec126be239cab3d76.tar.xz
mana-client-4371c8c1ffcf24e8d5a7cf2ec126be239cab3d76.zip
Fixed numerous crashes with chat and guild windows using new tabbed area.
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/tabbedarea.cpp55
-rw-r--r--src/gui/widgets/tabbedarea.h7
2 files changed, 61 insertions, 1 deletions
diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp
index 9087babc..5402bb10 100644
--- a/src/gui/widgets/tabbedarea.cpp
+++ b/src/gui/widgets/tabbedarea.cpp
@@ -87,3 +87,58 @@ gcn::Widget* TabbedArea::getWidget(const std::string &name)
return NULL;
}
+
+void TabbedArea::removeTab(gcn::Tab *tab)
+{
+ int tabIndexToBeSelected = 0;
+
+ if (tab == mSelectedTab)
+ {
+ int index = getSelectedTabIndex();
+
+ if (index == (int)mTabs.size() - 1
+ && mTabs.size() == 1)
+ {
+ tabIndexToBeSelected = -1;
+ }
+ else
+ {
+ tabIndexToBeSelected = index - 1;
+ }
+ }
+
+ std::vector<std::pair<gcn::Tab*, gcn::Widget*> >::iterator iter;
+ for (iter = mTabs.begin(); iter != mTabs.end(); iter++)
+ {
+ if (iter->first == tab)
+ {
+ mTabContainer->remove(tab);
+ mTabs.erase(iter);
+ break;
+ }
+ }
+
+ std::vector<gcn::Tab*>::iterator iter2;
+ for (iter2 = mTabsToDelete.begin(); iter2 != mTabsToDelete.end(); iter2++)
+ {
+ if (*iter2 == tab)
+ {
+ mTabsToDelete.erase(iter2);
+ delete tab;
+ break;
+ }
+ }
+
+ if (tabIndexToBeSelected == -1)
+ {
+ mSelectedTab = NULL;
+ mWidgetContainer->clear();
+ }
+ else
+ {
+ setSelectedTab(tabIndexToBeSelected);
+ }
+
+ adjustSize();
+ adjustTabPositions();
+}
diff --git a/src/gui/widgets/tabbedarea.h b/src/gui/widgets/tabbedarea.h
index 3f58acde..bc623427 100644
--- a/src/gui/widgets/tabbedarea.h
+++ b/src/gui/widgets/tabbedarea.h
@@ -57,9 +57,14 @@ class TabbedArea : public gcn::TabbedArea
gcn::Tab* getTab(const std::string &name);
/**
- * Return selected tab's widget
+ * Returns the widget with the tab that has specified caption
*/
gcn::Widget* getWidget(const std::string &name);
+
+ /**
+ * Overload the remove tab function as its broken in guichan 0.8
+ */
+ void removeTab(gcn::Tab *tab);
};
#endif