React on the redirection signal from DolphinView to properly update the tab and window titles.

REVIEW: 119697
BUG: 305721
This commit is contained in:
Emmanuel Pescosta 2014-08-13 22:06:28 +02:00
parent 62418c58a5
commit 39d8fb12c1
6 changed files with 58 additions and 26 deletions

View file

@ -136,6 +136,8 @@ DolphinMainWindow::DolphinMainWindow() :
this, SLOT(activeViewChanged(DolphinViewContainer*))); this, SLOT(activeViewChanged(DolphinViewContainer*)));
connect(m_tabWidget, SIGNAL(tabCountChanged(int)), connect(m_tabWidget, SIGNAL(tabCountChanged(int)),
this, SLOT(tabCountChanged(int))); this, SLOT(tabCountChanged(int)));
connect(m_tabWidget, SIGNAL(currentUrlChanged(KUrl)),
this, SLOT(setUrlAsCaption(KUrl)));
setCentralWidget(m_tabWidget); setCentralWidget(m_tabWidget);
setupActions(); setupActions();
@ -236,7 +238,6 @@ void DolphinMainWindow::changeUrl(const KUrl& url)
updatePasteAction(); updatePasteAction();
updateViewActions(); updateViewActions();
updateGoActions(); updateGoActions();
setUrlAsCaption(url);
emit urlChanged(url); emit urlChanged(url);
} }
@ -945,8 +946,6 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
updateGoActions(); updateGoActions();
const KUrl url = viewContainer->url(); const KUrl url = viewContainer->url();
setUrlAsCaption(url);
emit urlChanged(url); emit urlChanged(url);
} }
@ -958,6 +957,22 @@ void DolphinMainWindow::tabCountChanged(int count)
actionCollection()->action("activate_prev_tab")->setEnabled(enableTabActions); actionCollection()->action("activate_prev_tab")->setEnabled(enableTabActions);
} }
void DolphinMainWindow::setUrlAsCaption(const KUrl& url)
{
QString caption;
if (!url.isLocalFile()) {
caption.append(url.protocol() + " - ");
if (url.hasHost()) {
caption.append(url.host() + " - ");
}
}
const QString fileName = url.fileName().isEmpty() ? "/" : url.fileName();
caption.append(fileName);
setCaption(caption);
}
void DolphinMainWindow::setupActions() void DolphinMainWindow::setupActions()
{ {
// setup 'File' menu // setup 'File' menu
@ -1471,22 +1486,6 @@ bool DolphinMainWindow::isKompareInstalled() const
return installed; return installed;
} }
void DolphinMainWindow::setUrlAsCaption(const KUrl& url)
{
QString caption;
if (!url.isLocalFile()) {
caption.append(url.protocol() + " - ");
if (url.hasHost()) {
caption.append(url.host() + " - ");
}
}
const QString fileName = url.fileName().isEmpty() ? "/" : url.fileName();
caption.append(fileName);
setCaption(caption);
}
void DolphinMainWindow::createPanelAction(const KIcon& icon, void DolphinMainWindow::createPanelAction(const KIcon& icon,
const QKeySequence& shortcut, const QKeySequence& shortcut,
QAction* dockAction, QAction* dockAction,

View file

@ -429,6 +429,12 @@ private slots:
*/ */
void tabCountChanged(int count); void tabCountChanged(int count);
/**
* Sets the window caption to url.fileName() if this is non-empty,
* "/" if the URL is "file:///", and url.protocol() otherwise.
*/
void setUrlAsCaption(const KUrl& url);
private: private:
void setupActions(); void setupActions();
void setupDockWidgets(); void setupDockWidgets();
@ -464,12 +470,6 @@ private:
bool isKompareInstalled() const; bool isKompareInstalled() const;
/**
* Sets the window caption to url.fileName() if this is non-empty,
* "/" if the URL is "file:///", and url.protocol() otherwise.
*/
void setUrlAsCaption(const KUrl& url);
/** /**
* Creates an action for showing/hiding a panel, that is accessible * Creates an action for showing/hiding a panel, that is accessible
* in "Configure toolbars..." and "Configure shortcuts...". This is necessary * in "Configure toolbars..." and "Configure shortcuts...". This is necessary

View file

@ -41,6 +41,8 @@ DolphinTabPage::DolphinTabPage(const KUrl& primaryUrl, const KUrl& secondaryUrl,
m_primaryViewContainer = createViewContainer(primaryUrl); m_primaryViewContainer = createViewContainer(primaryUrl);
connect(m_primaryViewContainer->view(), SIGNAL(urlChanged(KUrl)), connect(m_primaryViewContainer->view(), SIGNAL(urlChanged(KUrl)),
this, SIGNAL(activeViewUrlChanged(KUrl))); this, SIGNAL(activeViewUrlChanged(KUrl)));
connect(m_primaryViewContainer->view(), SIGNAL(redirection(KUrl,KUrl)),
this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
m_splitter->addWidget(m_primaryViewContainer); m_splitter->addWidget(m_primaryViewContainer);
m_primaryViewContainer->show(); m_primaryViewContainer->show();
@ -245,14 +247,25 @@ void DolphinTabPage::slotViewActivated()
if (newActiveView != oldActiveView) { if (newActiveView != oldActiveView) {
disconnect(oldActiveView, SIGNAL(urlChanged(KUrl)), disconnect(oldActiveView, SIGNAL(urlChanged(KUrl)),
this, SIGNAL(activeViewUrlChanged(KUrl))); this, SIGNAL(activeViewUrlChanged(KUrl)));
disconnect(oldActiveView, SIGNAL(redirection(KUrl,KUrl)),
this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
connect(newActiveView, SIGNAL(urlChanged(KUrl)), connect(newActiveView, SIGNAL(urlChanged(KUrl)),
this, SIGNAL(activeViewUrlChanged(KUrl))); this, SIGNAL(activeViewUrlChanged(KUrl)));
connect(newActiveView, SIGNAL(redirection(KUrl,KUrl)),
this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
} }
emit activeViewUrlChanged(activeViewContainer()->url()); emit activeViewUrlChanged(activeViewContainer()->url());
emit activeViewChanged(activeViewContainer()); emit activeViewChanged(activeViewContainer());
} }
void DolphinTabPage::slotViewUrlRedirection(const KUrl& oldUrl, const KUrl& newUrl)
{
Q_UNUSED(oldUrl);
emit activeViewUrlChanged(newUrl);
}
DolphinViewContainer* DolphinTabPage::createViewContainer(const KUrl& url) const DolphinViewContainer* DolphinTabPage::createViewContainer(const KUrl& url) const
{ {
DolphinViewContainer* container = new DolphinViewContainer(url, m_splitter); DolphinViewContainer* container = new DolphinViewContainer(url, m_splitter);

View file

@ -133,6 +133,13 @@ private slots:
*/ */
void slotViewActivated(); void slotViewActivated();
/**
* Handles the view url redirection event.
*
* It emits the activeViewUrlChanged signal with the url \a newUrl.
*/
void slotViewUrlRedirection(const KUrl& oldUrl, const KUrl& newUrl);
private: private:
/** /**
* Creates a new view container and does the default initialization. * Creates a new view container and does the default initialization.

View file

@ -295,12 +295,19 @@ void DolphinTabWidget::tabUrlChanged(const KUrl& url)
if (index >= 0) { if (index >= 0) {
tabBar()->setTabText(index, tabName(url)); tabBar()->setTabText(index, tabName(url));
tabBar()->setTabIcon(index, KIcon(KMimeType::iconNameForUrl(url))); tabBar()->setTabIcon(index, KIcon(KMimeType::iconNameForUrl(url)));
// Emit the currentUrlChanged signal if the url of the current tab has been changed.
if (index == currentIndex()) {
emit currentUrlChanged(url);
}
} }
} }
void DolphinTabWidget::currentTabChanged(int index) void DolphinTabWidget::currentTabChanged(int index)
{ {
emit activeViewChanged(tabPageAt(index)->activeViewContainer()); DolphinViewContainer* viewContainer = tabPageAt(index)->activeViewContainer();
emit activeViewChanged(viewContainer);
emit currentUrlChanged(viewContainer->url());
} }
void DolphinTabWidget::tabInserted(int index) void DolphinTabWidget::tabInserted(int index)

View file

@ -72,6 +72,12 @@ signals:
*/ */
void rememberClosedTab(const KUrl& url, const QByteArray& state); void rememberClosedTab(const KUrl& url, const QByteArray& state);
/**
* Is emitted when the url of the current tab has been changed. This signal
* is also emitted when the active view has been changed.
*/
void currentUrlChanged(const KUrl& url);
public slots: public slots:
/** /**
* Opens a new view with the current URL that is part of a tab and activates * Opens a new view with the current URL that is part of a tab and activates