From fe477576629e1f149f8440717589aceb9cb44831 Mon Sep 17 00:00:00 2001 From: David Faure Date: Mon, 26 Nov 2007 20:18:48 +0000 Subject: [PATCH] Fix problem with the filemanagement profile creating the sidebar -inside- the tabwidget instead of outside (you could see the difference when doing "add tab" :). This is because I removed some harmful magic from the kde3 code some time ago (I'm pretty sure it created surprises in profiles with splitters and no tabs, only the current view would be converted to a tab container...). We now never "convert to a tab container", we create the tab container correctly in the first place. svn path=/trunk/KDE/kdebase/apps/; revision=741954 --- konqueror/profile_filemanagement.desktop | 21 ++++---- konqueror/src/konqviewmanager.cpp | 19 +++++-- konqueror/src/konqviewmanager.h | 6 ++- konqueror/src/tests/konqviewmgrtest.cpp | 67 +++++++++++++----------- 4 files changed, 66 insertions(+), 47 deletions(-) diff --git a/konqueror/profile_filemanagement.desktop b/konqueror/profile_filemanagement.desktop index 9df8102ba5..d210055e5c 100644 --- a/konqueror/profile_filemanagement.desktop +++ b/konqueror/profile_filemanagement.desktop @@ -1,7 +1,4 @@ [Profile] -Container0_Children=View1,View2 -Container0_Orientation=Horizontal -Container0_SplitterSizes=30,100 Name=File Management Name[af]=Lêer Bestuurder Name[ar]=إدارة الملفات @@ -24,13 +21,13 @@ Name[fr]=Gestion de fichiers Name[fy]=Triembehear Name[ga]=Bainisteoireacht Chomhad Name[gl]=Xestión de Ficheiros -Name[he]=ניהול קבצים +Name[he]= יהול קבצים Name[hr]=Upravitelj datotekama Name[hu]=Fájlkezelő Name[is]=Skráastjóri Name[it]=Gestione file Name[ja]=ファイルマネージメント -Name[ka]=ფაილთა მართვა +Name[ka]=ფაილთა მა თვა Name[kk]=Файдарды басқару Name[km]=ការ​គ្រប់គ្រង​ឯកសារ Name[ko]=파일 관리자 @@ -69,13 +66,17 @@ Name[zh_CN]=文件管理 Name[zh_TW]=檔案管理 XMLUIFile=konq-filemanagement.rc RootItem=Container0 +Container0_Children=View1,Tabs1 +Container0_Orientation=Horizontal +Container0_SplitterSizes=30,100 +Tabs1_Children=ViewT0 View1_LinkedView=true View1_PassiveMode=true View1_ServiceName=konq_sidebartng View1_ServiceType=Browser/View View1_ToggleView=true -View2_LinkedView=true -View2_PassiveMode=false -View2_ServiceName=dolphinpart -View2_ServiceType=inode/directory -View2_URL=$HOME +ViewT0_LinkedView=true +ViewT0_PassiveMode=false +ViewT0_ServiceName=dolphinpart +ViewT0_ServiceType=inode/directory +ViewT0_URL[$e]=$HOME diff --git a/konqueror/src/konqviewmanager.cpp b/konqueror/src/konqviewmanager.cpp index 07f5e39669..b27d6e7bbb 100644 --- a/konqueror/src/konqviewmanager.cpp +++ b/konqueror/src/konqviewmanager.cpp @@ -905,7 +905,7 @@ void KonqViewManager::loadViewProfileFromGroup( const KConfigGroup &profileGroup // from profile loading (e.g. in switchView) m_bLoadingProfile = true; - loadItem( profileGroup, tabContainer(), rootItem, defaultURL, openUrl && forcedURL.isEmpty() ); + loadItem( profileGroup, m_pMainWindow, rootItem, defaultURL, openUrl && forcedURL.isEmpty() ); m_bLoadingProfile = false; @@ -1255,6 +1255,10 @@ void KonqViewManager::loadItem( const KConfigGroup &cfg, KonqFrameContainerBase //kDebug(1202) << "KonqViewManager::loadItem Item is a Tabs"; int index = cfg.readEntry( QString::fromLatin1( "activeChildIndex" ).prepend(prefix), 0 ); + if ( !m_tabContainer ) { + createTabContainer(parent->asQWidget(), parent); + parent->insertChildFrame( m_tabContainer ); + } QStringList childList = cfg.readEntry( QString::fromLatin1( "Children" ).prepend( prefix ),QStringList() ); for ( QStringList::Iterator it = childList.begin(); it != childList.end(); ++it ) @@ -1531,15 +1535,20 @@ void KonqViewManager::printFullHierarchy( KonqFrameContainerBase * container ) KonqFrameTabs * KonqViewManager::tabContainer() { if ( !m_tabContainer ) { - m_tabContainer = new KonqFrameTabs( m_pMainWindow /*as widget*/, m_pMainWindow /*as container*/, this ); - - connect( m_tabContainer, SIGNAL(ctrlTabPressed()), m_pMainWindow, SLOT(slotCtrlTabPressed()) ); - applyConfiguration(); + createTabContainer(m_pMainWindow /*as widget*/, m_pMainWindow /*as container*/); m_pMainWindow->insertChildFrame( m_tabContainer ); } return m_tabContainer; } +void KonqViewManager::createTabContainer(QWidget* parent, KonqFrameContainerBase* parentContainer) +{ + //kDebug(1202) << "createTabContainer" << parent << parentContainer; + m_tabContainer = new KonqFrameTabs( parent, parentContainer, this ); + connect( m_tabContainer, SIGNAL(ctrlTabPressed()), m_pMainWindow, SLOT(slotCtrlTabPressed()) ); + applyConfiguration(); +} + void KonqViewManager::applyConfiguration() { tabContainer()->setAlwaysTabbedMode( KonqSettings::alwaysTabbedMode() ); diff --git a/konqueror/src/konqviewmanager.h b/konqueror/src/konqviewmanager.h index 09e05ea72e..e060334aa3 100644 --- a/konqueror/src/konqviewmanager.h +++ b/konqueror/src/konqviewmanager.h @@ -322,8 +322,10 @@ private: void loadItem( const KConfigGroup &cfg, KonqFrameContainerBase *parent, const QString &name, const KUrl & defaultURL, bool openUrl, bool openAfterCurrentPage = false, int pos = -1 ); - // Disabled - we do it ourselves - virtual void setActiveComponent(const KComponentData &) {} + void createTabContainer(QWidget* parent, KonqFrameContainerBase* parentContainer); + + // Disabled - we do it ourselves + virtual void setActiveComponent(const KComponentData &) {} signals: void aboutToRemoveTab( KonqFrameBase* tab ); diff --git a/konqueror/src/tests/konqviewmgrtest.cpp b/konqueror/src/tests/konqviewmgrtest.cpp index 0ff5e4c087..f1025d0773 100644 --- a/konqueror/src/tests/konqviewmgrtest.cpp +++ b/konqueror/src/tests/konqviewmgrtest.cpp @@ -101,10 +101,10 @@ void ViewMgrTest::initTestCase() void ViewMgrTest::testCreateFirstView() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); QVERIFY( view ); - QVERIFY( viewMgr->tabContainer() ); + QVERIFY( viewManager->tabContainer() ); // Use DebugFrameVisitor to find out the structure of the frame hierarchy QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, one tab, one frame @@ -114,7 +114,7 @@ void ViewMgrTest::testCreateFirstView() QCOMPARE( partWidget->topLevelWidget(), &mainWindow ); QWidget* frame = view->frame()->asQWidget(); QCOMPARE( partWidget->parentWidget(), frame ); - QWidget* tabWidget = viewMgr->tabContainer()->asQWidget(); + QWidget* tabWidget = viewManager->tabContainer()->asQWidget(); QCOMPARE( frame->parentWidget()->parentWidget(), tabWidget ); // Check frame geometry, to check that all layouts are there @@ -138,10 +138,10 @@ void ViewMgrTest::testCreateFirstView() void ViewMgrTest::testRemoveFirstView() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, tab widget, one frame - viewMgr->removeView( view ); + viewManager->removeView( view ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // removing not allowed // real test for removeView is part of testSplitView } @@ -149,11 +149,11 @@ void ViewMgrTest::testRemoveFirstView() void ViewMgrTest::testSplitView() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, tab widget, one frame - KonqView* view2 = viewMgr->splitView( view, Qt::Horizontal ); + KonqView* view2 = viewManager->splitView( view, Qt::Horizontal ); QVERIFY( view2 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(FF)].") ); // mainWindow, tab widget, one splitter, two frames @@ -206,27 +206,27 @@ void ViewMgrTest::testSplitView() // Split again - KonqView* view3 = viewMgr->splitView( view, Qt::Horizontal ); + KonqView* view3 = viewManager->splitView( view, Qt::Horizontal ); QVERIFY( view3 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(C(FF)F)].") ); // Now test removing the first view - viewMgr->removeView( view ); + viewManager->removeView( view ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(FF)].") ); // mainWindow, tab widget, one splitter, two frames // Now test removing the last view - viewMgr->removeView( view3 ); + viewManager->removeView( view3 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, tab widget, one frame } void ViewMgrTest::testSplitMainContainer() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, tab widget, one frame KonqFrameContainerBase* tabContainer = view->frame()->parentContainer(); - KonqView* view2 = viewMgr->splitMainContainer( view, Qt::Horizontal, "KonqAboutPage", "konq_aboutpage", true ); + KonqView* view2 = viewManager->splitMainContainer( view, Qt::Horizontal, "KonqAboutPage", "konq_aboutpage", true ); QVERIFY( view2 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MC(FT[F]).") ); // mainWindow, splitter, frame, tab widget, one frame @@ -256,17 +256,17 @@ void ViewMgrTest::testSplitMainContainer() QCOMPARE(container->widget(1), tabContainer->asQWidget()); // Now test removing the view we added last - viewMgr->removeView( view2 ); + viewManager->removeView( view2 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[F].") ); // mainWindow, tab widget, one frame } void ViewMgrTest::testAddTab() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); QVERIFY( view ); - KonqView* viewTab2 = viewMgr->addTab("text/html"); + KonqView* viewTab2 = viewManager->addTab("text/html"); QVERIFY( viewTab2 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[FF].") ); // mainWindow, tab widget, two tabs @@ -275,9 +275,9 @@ void ViewMgrTest::testAddTab() void ViewMgrTest::testDuplicateTab() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); - viewMgr->duplicateTab(view->frame()); // should return a KonqFrameBase? + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + viewManager->duplicateTab(view->frame()); // should return a KonqFrameBase? QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[FF].") ); // mainWindow, tab widget, two tabs // TODO check serviceType and serviceName of the new view @@ -286,9 +286,9 @@ void ViewMgrTest::testDuplicateTab() void ViewMgrTest::testDuplicateSplittedTab() { KonqMainWindow mainWindow; - KonqViewManager* viewMgr = mainWindow.viewManager(); - KonqView* view = viewMgr->createFirstView( "KonqAboutPage", "konq_aboutpage" ); - KonqView* view2 = viewMgr->splitView( view, Qt::Vertical ); + KonqViewManager* viewManager = mainWindow.viewManager(); + KonqView* view = viewManager->createFirstView( "KonqAboutPage", "konq_aboutpage" ); + KonqView* view2 = viewManager->splitView( view, Qt::Vertical ); QVERIFY( view2 ); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(FF)].") ); // mainWindow, tab widget, one splitter, two frames @@ -296,17 +296,24 @@ void ViewMgrTest::testDuplicateSplittedTab() QVERIFY( container ); QVERIFY( container->parentContainer()->frameType() == "Tabs" ); // TODO enum instead - viewMgr->duplicateTab(container); // TODO shouldn't it return a KonqFrameBase? + viewManager->duplicateTab(container); // TODO shouldn't it return a KonqFrameBase? QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(FF)C(FF)].") ); // mainWindow, tab widget, two tabs - viewMgr->removeTab(container); + viewManager->removeTab(container); QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MT[C(FF)].") ); // mainWindow, tab widget, one tab } void ViewMgrTest::testLoadProfile() { - // TODO - // TODO check view->locationBarUrl() and mainWindow.locationBarUrl() too + KonqMainWindow mainWindow; + KonqViewManager* viewManager = mainWindow.viewManager(); + const QString profile = KStandardDirs::locate("data", "konqueror/profiles/filemanagement"); + QVERIFY(!profile.isEmpty()); + QString path = QDir::homePath(); + viewManager->loadViewProfileFromFile(profile, "filemanagement", KUrl(path)); + // TODO QCOMPARE(view->locationBarUrl(), path); + QCOMPARE( DebugFrameVisitor::inspect(&mainWindow), QString("MC(FT[F]).") ); // mainWindow, splitter, frame, tab widget, one frame + QCOMPARE(mainWindow.locationBarURL(), path); } #include "konqviewmgrtest.moc"