Better fix for 52161, aka "opening the url in a directory-only view like

sidebar or konsolepart isn't enough to see its contents".
John: thanks for the investigation and initial patch.
CCMAIL: 52161-done@bugs.kde.org

svn path=/trunk/kdebase/konqueror/; revision=237378
This commit is contained in:
David Faure 2003-07-16 09:54:49 +00:00
parent 7a7875c3af
commit 0cdc5974a8
2 changed files with 38 additions and 29 deletions

View file

@ -174,7 +174,7 @@ KonqMainWindow::KonqMainWindow( const KURL &initialURL, bool openInitialURL, con
m_bookmarkBarActionCollection = 0L;
KonqExtendedBookmarkOwner *extOwner = new KonqExtendedBookmarkOwner( this );
m_pBookmarksOwner = extOwner;
connect( extOwner,
connect( extOwner,
SIGNAL( signalFillBookmarksList(KExtendedBookmarkOwner::QStringPairList &) ),
extOwner,
SLOT( slotFillBookmarksList(KExtendedBookmarkOwner::QStringPairList &) ) );
@ -801,7 +801,8 @@ bool KonqMainWindow::openView( QString serviceType, const KURL &_url, KonqView *
}
else // We know the child view
{
ok = childView->changeViewMode( serviceType, serviceName );
if ( !childView->isLockedViewMode() )
ok = childView->changeViewMode( serviceType, serviceName );
}
if (ok)
@ -905,7 +906,7 @@ bool KonqMainWindow::makeViewsFollow( const KURL & url, const KParts::URLArgs &a
const QString & serviceType, KonqView * senderView )
{
if ( !senderView->isLinkedView() && senderView != m_currentView )
return false; // none of those features apply -> return
return false; // none of those features apply -> return
bool res = false;
kdDebug(1202) << "makeViewsFollow " << senderView->className() << " url=" << url.url() << " serviceType=" << serviceType << endl;
@ -922,6 +923,7 @@ bool KonqMainWindow::makeViewsFollow( const KURL & url, const KParts::URLArgs &a
for ( KonqView * view = listViews.first() ; view ; view = listViews.next() )
{
bool followed = false;
// Views that should follow this URL as both views are linked
if ( (view != senderView) && view->isLinkedView() && senderView->isLinkedView())
{
@ -930,25 +932,35 @@ bool KonqMainWindow::makeViewsFollow( const KURL & url, const KParts::URLArgs &a
// XXX duplicate code from ::openURL
if ( view == m_currentView )
{
abortLoading();
setLocationBarURL( url.prettyURL() );
abortLoading();
setLocationBarURL( url.prettyURL() );
}
else
view->stop();
view->stop();
res = openView( serviceType, url, view, req ) || res;
followed = openView( serviceType, url, view, req );
}
else
{
// Make the sidebar follow the URLs opened in the active view
if ((view!=senderView) && view->isFollowActive() && senderView == m_currentView)
{
// Note that the return value is ignored. When clicking on a file it's not enough
// that the dirtree follows, to mean "the other views followed".
// We still want to see that file (e.g. in a separate viewer).
(void)openView(serviceType,url,view,req);
}
// Make the sidebar follow the URLs opened in the active view
if ((view!=senderView) && view->isFollowActive() && senderView == m_currentView)
{
followed = openView(serviceType, url, view, req);
}
}
// Ignore return value if the view followed but doesn't really
// show the file contents. We still want to see that
// file, e.g. in a separate viewer.
// This happens in views locked to a directory mode,
// like sidebar and konsolepart (#52161).
bool ignore = view->isLockedViewMode() && view->supportsServiceType("inode/directory");
//kdDebug(1202) << "View " << view->service()->name()
// << " supports dirs: " << view->supportsServiceType( "inode/directory" )
// << " is locked-view-mode:" << view->isLockedViewMode()
// << " ignore=" << ignore << endl;
if ( !ignore )
res = followed || res;
}
return res;
@ -3727,7 +3739,7 @@ void KonqMainWindow::show()
KParts::MainWindow::show();
}
QString KonqExtendedBookmarkOwner::currentURL() const
QString KonqExtendedBookmarkOwner::currentURL() const
{
return m_pKonqMainWindow->currentURL();
}
@ -3772,7 +3784,7 @@ void KonqExtendedBookmarkOwner::slotFillBookmarksList( KExtendedBookmarkOwner::Q
}
}
QString KonqExtendedBookmarkOwner::currentTitle() const
QString KonqExtendedBookmarkOwner::currentTitle() const
{
return m_pKonqMainWindow->currentTitle();
}

View file

@ -254,14 +254,14 @@ void KonqView::switchView( KonqViewFactory &viewFactory )
prop = m_service->property( "X-KDE-BrowserView-HierarchicalView");
if ( prop.isValid() && prop.toBool() )
{
kdDebug() << "KonqView::switchView X-KDE-BrowserView-HierarchicalView -> setHierarchicalView" << endl;
kdDebug() << "KonqView::switchView X-KDE-BrowserView-HierarchicalView -> setHierarchicalView" << endl;
setHierarchicalView( true ); // set as hierarchial
}
else
{
setHierarchicalView( false );
}
// Honour "linked view"
prop = m_service->property( "X-KDE-BrowserView-LinkedView");
if ( prop.isValid() && prop.toBool() )
@ -291,14 +291,11 @@ bool KonqView::changeViewMode( const QString &serviceType,
if ( m_serviceType == serviceType && (serviceName.isEmpty() || serviceName == m_service->desktopEntryName()) )
return true;
// Special hack for sidebar views. They are isLockedViewMode(), but we want
// to be able to follow directory changes. So, pretend we changed the view
// mode instead of returning false.
if ( isLockedViewMode() && m_serviceType == "Browser/View" && serviceType == "inode/directory" )
return true;
if ( isLockedViewMode() )
{
//kdDebug(1202) << "This view's mode is locked - can't change" << endl;
return false; // we can't do that if our view mode is locked
}
kdDebug(1202) << "Switching view modes..." << endl;
KTrader::OfferList partServiceOffers, appServiceOffers;
@ -322,12 +319,13 @@ bool KonqView::changeViewMode( const QString &serviceType,
if ( m_service && m_service->desktopEntryPath() == service->desktopEntryPath() )
{
kdDebug( 1202 ) << "KonqView::changeViewMode. Reusing service. Service type set to " << m_serviceType << endl;
if ( m_pMainWindow->currentView() == this )
m_pMainWindow->updateViewModeActions();
if ( m_pMainWindow->currentView() == this )
m_pMainWindow->updateViewModeActions();
}
else
{
m_service = service;
switchView( viewFactory );
}
@ -341,7 +339,6 @@ bool KonqView::changeViewMode( const QString &serviceType,
kdDebug(1202) << "Giving focus to new part " << m_pPart << endl;
m_pMainWindow->viewManager()->setActivePart( m_pPart );
}
return true;
}
@ -874,7 +871,7 @@ void KonqView::setHierarchicalView( bool mode )
{
m_bHierarchicalView=mode;
}
void KonqView::setLinkedView( bool mode )