mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-20 08:51:24 +00:00
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:
parent
7a7875c3af
commit
0cdc5974a8
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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 )
|
||||
|
|
Loading…
Reference in a new issue