diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 6a570791e..4f9dc5157 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -77,13 +77,21 @@ QSettings::Status Settings::setupSettings() { if (QFile(app_path_file).exists()) { s_instance = new Settings(app_path, QSettings::IniFormat, qApp); - QWebSettings::setIconDatabasePath(app_path + QDir::separator() + APP_CFG_WEB_PATH); + + QString web_path = app_path + QDir::separator() + APP_CFG_WEB_PATH; + QDir(web_path).mkpath(web_path); + QWebSettings::setIconDatabasePath(web_path); + qDebug("Initializing settings in %s.", qPrintable(QDir::toNativeSeparators(app_path))); } else { s_instance = new Settings(home_path_file, QSettings::IniFormat, qApp); - QWebSettings::setIconDatabasePath(home_path + QDir::separator() + APP_CFG_WEB_PATH); + + QString web_path = home_path + QDir::separator() + APP_CFG_WEB_PATH; + QDir(web_path).mkpath(web_path); + QWebSettings::setIconDatabasePath(web_path); + qDebug("Initializing settings in %s.", qPrintable(QDir::toNativeSeparators(home_path_file))); } diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index dc45da8a9..cd196d731 100644 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -22,11 +22,13 @@ FormMain::FormMain(QWidget *parent) : QMainWindow(parent), m_ui(new Ui::FormMain // Prepare main window and tabs. prepareMenus(); - m_ui->m_tabWidget->initializeTabs(); // Establish connections. createConnections(); + // Prepare tabs. + m_ui->m_tabWidget->initializeTabs(); + setupIcons(); } @@ -165,6 +167,19 @@ void FormMain::createConnections() { // General connections. connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(cleanupResources())); + + // Menu "Web browser" connections. + connect(m_ui->m_tabWidget, SIGNAL(currentChanged(int)), + this, SLOT(loadWebBrowserMenu(int))); +} + +void FormMain::loadWebBrowserMenu(int index) { + WebBrowser *active_browser = m_ui->m_tabWidget->widget(index)->webBrowser(); + + m_ui->m_menuWebBrowser->clear(); + if (active_browser != NULL) { + m_ui->m_menuWebBrowser->addActions(active_browser->globalMenu()); + } } void FormMain::closeEvent(QCloseEvent *event) { diff --git a/src/gui/formmain.h b/src/gui/formmain.h index 588465e69..cbec1652c 100644 --- a/src/gui/formmain.h +++ b/src/gui/formmain.h @@ -64,6 +64,8 @@ class FormMain : public QMainWindow { // Used for last-minute cleanups. void cleanupResources(); + void loadWebBrowserMenu(int index); + // Displays various dialogs. void showSettings(); void showAbout(); diff --git a/src/gui/formmain.ui b/src/gui/formmain.ui index af005af84..637e5267a 100644 --- a/src/gui/formmain.ui +++ b/src/gui/formmain.ui @@ -36,7 +36,7 @@ 0 0 800 - 19 + 21 @@ -66,8 +66,14 @@ + + + Web browser + + + diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index ed08e968b..680dbcb21 100644 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -28,6 +28,22 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form m_ui->m_treeLanguages->setColumnCount(5); m_ui->m_treeLanguages->setHeaderHidden(false); + m_ui->m_treeLanguages->setHeaderLabels(QStringList() + << tr("Language") + << tr("Code") + << tr("Version") + << tr("Author") + << tr("Email")); + + m_ui->m_treeSkins->setColumnCount(4); + m_ui->m_treeSkins->setHeaderHidden(false); + + m_ui->m_treeSkins->setHeaderLabels(QStringList() + << tr("Name") + << tr("Version") + << tr("Author") + << tr("Email")); + #if QT_VERSION >= 0x050000 // Setup languages. m_ui->m_treeLanguages->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); @@ -56,19 +72,6 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form m_ui->m_treeSkins->header()->setResizeMode(3, QHeaderView::ResizeToContents); #endif - m_ui->m_treeLanguages->setHeaderLabels(QStringList() - << tr("Language") - << tr("Code") - << tr("Version") - << tr("Author") - << tr("Email")); - - m_ui->m_treeSkins->setHeaderLabels(QStringList() - << tr("Name") - << tr("Version") - << tr("Author") - << tr("Email")); - // Establish needed connections. connect(m_ui->m_buttonBox, SIGNAL(accepted()), this, SLOT(saveSettings())); diff --git a/src/gui/formsettings.ui b/src/gui/formsettings.ui index 70bb67d5b..223c8a38f 100644 --- a/src/gui/formsettings.ui +++ b/src/gui/formsettings.ui @@ -189,11 +189,6 @@ false - - - 1 - - diff --git a/src/gui/tabcontent.h b/src/gui/tabcontent.h index b362ee490..db14cb10d 100644 --- a/src/gui/tabcontent.h +++ b/src/gui/tabcontent.h @@ -25,7 +25,7 @@ class TabContent : public QWidget { // This can be used for obtaining the menu from the instance and so on. virtual WebBrowser *webBrowser() = 0; - private: + protected: int m_index; }; diff --git a/src/gui/tabwidget.cpp b/src/gui/tabwidget.cpp index 82949e878..b6adb8dc1 100644 --- a/src/gui/tabwidget.cpp +++ b/src/gui/tabwidget.cpp @@ -160,7 +160,7 @@ int TabWidget::addBrowser(bool move_after_current, this, SLOT(changeIcon(int,QIcon))); // Setup the tab index. - browser->setTabIndex(final_index); + browser->setIndex(final_index); // Load initial web page if desired. if (initial_url.isValid()) { @@ -195,6 +195,6 @@ void TabWidget::fixContentsAfterMove(int from, int to) { void TabWidget::fixContentsIndexes(int starting_index, int ending_index) { for ( ; starting_index <= ending_index; starting_index++) { TabContent *content = static_cast(widget(starting_index)); - content->webBrowser()->setTabIndex(starting_index); + content->webBrowser()->setIndex(starting_index); } } diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 3cfafc89b..bd3fd7f8f 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -25,12 +25,13 @@ WebBrowser::WebBrowser(QWidget *parent) m_toolBar(new QToolBar(tr("Navigation panel"), this)), m_webView(new BaseWebView(this)), m_txtLocation(new LocationLineEdit(this)), - m_tabIndex(-1), m_actionBack(m_webView->pageAction(QWebPage::Back)), m_actionForward(m_webView->pageAction(QWebPage::Forward)), m_actionReload(m_webView->pageAction(QWebPage::Reload)), m_actionStop(m_webView->pageAction(QWebPage::Stop)) { + m_index = -1; + // Add this new instance to the global list of web browsers. // NOTE: This is used primarily for dynamic icon theme switching. m_runningWebBrowsers.append(this); @@ -94,33 +95,24 @@ void WebBrowser::createConnections() { } void WebBrowser::onIconChanged() { - emit iconChanged(m_tabIndex, m_webView->icon()); + emit iconChanged(m_index, m_webView->icon()); } void WebBrowser::onTitleChanged(const QString &new_title) { if (new_title.isEmpty()) { - emit titleChanged(m_tabIndex, tr("No title")); + emit titleChanged(m_index, tr("No title")); } else { - emit titleChanged(m_tabIndex, new_title); + emit titleChanged(m_index, new_title); } - emit iconChanged(m_tabIndex, QIcon()); + emit iconChanged(m_index, QIcon()); } void WebBrowser::updateUrl(const QUrl &url) { m_txtLocation->setText(url.toString()); } -int WebBrowser::tabIndex() const { - return m_tabIndex; -} - -void WebBrowser::setTabIndex(int tab_index) { - m_tabIndex = tab_index; -} - - void WebBrowser::navigateToUrl(const QUrl &url) { if (url.isValid()) { m_webView->load(url); @@ -149,8 +141,12 @@ WebBrowser *WebBrowser::webBrowser() { return this; } -QMenu *WebBrowser::globalMenu() { - return NULL; +QList WebBrowser::globalMenu() { + QList browser_menu; + + browser_menu.append(m_actionReload); + + return browser_menu; } QIcon WebBrowser::icon() { diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index a559927aa..e25d37670 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -38,7 +38,7 @@ class WebBrowser : public TabContent { WebBrowser *webBrowser(); // Returns global menu for this web browser. - QMenu *globalMenu(); + QList globalMenu(); // Returns pointer to global network access manager // for web browsers. @@ -49,10 +49,6 @@ class WebBrowser : public TabContent { // Returns list of all running web browsers. static QList runningWebBrowsers(); - // Tab index getter/setter. - int tabIndex() const; - void setTabIndex(int tab_index); - public slots: // Switches visibility of navigation bar. void setNavigationBarVisible(bool visible); @@ -84,7 +80,6 @@ class WebBrowser : public TabContent { QToolBar *m_toolBar; BaseWebView *m_webView; LocationLineEdit *m_txtLocation; - int m_tabIndex; QAction *m_actionBack; QAction *m_actionForward;