Index: src/mainwin.cpp =================================================================== --- src/mainwin.cpp (revision 942) +++ src/mainwin.cpp (working copy) @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef Q_WS_WIN #include @@ -58,6 +59,8 @@ #include "tipdlg.h" #include "mucjoindlg.h" #include "psicontactlist.h" +#include "tabmanager.h" +#include "tabdlg.h" #include "mainwin_p.h" @@ -87,7 +90,7 @@ Private(PsiCon *, MainWin *); ~Private(); - QVBoxLayout *vb_main; + QVBoxLayout *vb_roster; bool onTop, asTool; QMenu *mainMenu, *statusMenu, *optionsMenu, *toolsMenu; int sbState; @@ -266,23 +269,36 @@ d->old_trayicon = PsiOptions::instance()->getOption("options.ui.systemtray.use-old").toBool(); #endif - QWidget *center = new QWidget (this, "Central widget"); - setCentralWidget ( center ); +// QWidget *center = new QWidget (this, "Central widget"); +// setCentralWidget ( center ); +// d->hb_main = new QHBoxLayout(center); + + + QSplitter *splitter = new QSplitter(this); + setCentralWidget(splitter); + + QWidget *rosterBar = new QWidget; + TabDlg *mainTabs = d->psi->tabManager()->newTabs(0); + d->psi->tabManager()->setPreferredTabsForKind('C', mainTabs); + d->psi->tabManager()->setPreferredTabsForKind('M', mainTabs); + splitter->addWidget(rosterBar); + splitter->addWidget(mainTabs); + - d->vb_main = new QVBoxLayout(center); - cvlist = new ContactView(center); + d->vb_roster = new QVBoxLayout(rosterBar); + cvlist = new ContactView(rosterBar); int layoutMargin = 2; #ifdef Q_WS_MAC layoutMargin = 0; cvlist->setFrameShape(QFrame::NoFrame); #endif - d->vb_main->setMargin(layoutMargin); - d->vb_main->setSpacing(layoutMargin); + d->vb_roster->setMargin(layoutMargin); + d->vb_roster->setSpacing(layoutMargin); // create search bar - d->searchWidget = new QWidget(centralWidget()); - d->vb_main->addWidget(d->searchWidget); + d->searchWidget = new QWidget(rosterBar); + d->vb_roster->addWidget(d->searchWidget); QHBoxLayout* searchLayout = new QHBoxLayout(d->searchWidget); searchLayout->setMargin(0); searchLayout->setSpacing(0); @@ -296,13 +312,13 @@ searchLayout->addWidget(d->searchPb); d->searchWidget->setVisible(false); //add contact view - d->vb_main->addWidget(cvlist); + d->vb_roster->addWidget(cvlist); #ifdef Q_WS_MAC // Disable the empty vertical scrollbar: // it's here because of weird code in q3scrollview.cpp // Q3ScrollView::updateScrollBars() around line 877 - d->vb_main->addSpacing(4); + d->vb_roster->addSpacing(4); #endif d->statusMenu = new QMenu(this); Index: src/psicon.h =================================================================== --- src/psicon.h (revision 942) +++ src/psicon.h (working copy) @@ -48,6 +48,7 @@ class PsiActionList; class PsiToolBar; class TabDlg; +class TabManager; class AccountsComboBox; class ChatDlg; class TuneController; @@ -77,6 +78,7 @@ TuneController* tuneController() const; ProxyManager *proxy() const; FileTransDlg *ftdlg() const; + TabManager *tabManager() const; QWidget *dialogFind(const char *className); void dialogRegister(QWidget *w); Index: src/psicon.cpp =================================================================== --- src/psicon.cpp (revision 942) +++ src/psicon.cpp (working copy) @@ -652,6 +652,11 @@ return d->tuneController; } +TabManager *PsiCon::tabManager() const +{ + return d->tabManager; +} + void PsiCon::closeProgram() { quit(QuitProgram); Index: src/tabs/tabdlg.cpp =================================================================== --- src/tabs/tabdlg.cpp (revision 942) +++ src/tabs/tabdlg.cpp (working copy) @@ -333,6 +333,7 @@ void TabDlg::addTab(TabbableWidget* tab) { setUpdatesEnabled(false); + act_close_->setEnabled(true); tabs_.append(tab); tabWidget_->addTab(tab, captionForTab(tab)); @@ -413,8 +414,13 @@ void TabDlg::checkHasChats() { - if (tabWidget_->count() > 0) + if (tabWidget_->count() > 0) { return; + } + else if (window() == this) { + act_close_->setEnabled(false); + return; + } deleteLater(); }