diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2011-02-01 17:32:57 +0100 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2011-02-01 17:32:57 +0100 |
commit | 7a1aaf4d1e86d45691e981e92d99a817849240fd (patch) | |
tree | 1cadcb489da6f17a81c63989a25e2076e7899e49 /src/mainwindow.cpp | |
parent | If a cached suggestion is older than one week, it is downloaded again, allowi... (diff) | |
download | rekonq-7a1aaf4d1e86d45691e981e92d99a817849240fd.tar.xz |
User Agent Switcher.
This patch should implement the UA switcher ability for rekonq.
This is a first implementation, but it seems working quite well.
It is based on KDE UA management and should be fully compatible with konqueror's one i.e.
it should be possible using alternatively rekonq and konqueror sharing the same setting.
Anyway, this is a different implementation from the konqueror's one. Simpler and based on the idea
of a future moving to a plugin.
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r-- | src/mainwindow.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ece11cc3..a93157a6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -52,6 +52,8 @@ #include "webpage.h" #include "webtab.h" #include "zoombar.h" +#include "useragentinfo.h" +#include "useragentwidget.h" // Ui Includes #include "ui_cleardata.h" @@ -71,6 +73,7 @@ #include <KPushButton> #include <KStandardDirs> #include <KToggleFullScreenAction> +#include <KProtocolManager> #include <KParts/Part> #include <KParts/BrowserExtension> @@ -102,6 +105,7 @@ MainWindow::MainWindow() , m_analyzerPanel(0) , m_historyBackMenu(0) , m_encodingMenu(new KMenu(this)) + , m_userAgentMenu(new KMenu(this)) , m_bookmarksBar(0) , m_popup(new KPassivePopup(this)) , m_hidePopup(new QTimer(this)) @@ -243,6 +247,7 @@ void MainWindow::updateToolsMenu() m_toolsMenu->addAction(action); m_toolsMenu->addAction(actionByName(QL1S("encodings"))); + m_toolsMenu->addAction(actionByName(QL1S("useragent"))); m_toolsMenu->addSeparator(); @@ -524,6 +529,16 @@ void MainWindow::setupActions() a->setMenu(m_encodingMenu); connect(m_encodingMenu, SIGNAL(aboutToShow()), this, SLOT(populateEncodingMenu())); connect(m_encodingMenu, SIGNAL(triggered(QAction *)), this, SLOT(setEncoding(QAction *))); + + // --- User Agent + a = new KAction(KIcon("preferences-web-browser-identification"), i18n("Browser Identification"), this); + actionCollection()->addAction(QL1S("useragent"), a); + a->setMenu(m_userAgentMenu); + connect(m_userAgentMenu, SIGNAL(aboutToShow()), this, SLOT(populateUserAgentMenu())); + + a = new KAction(KIcon("preferences-web-browser-identification"), i18n("Browser Identification"), this); + actionCollection()->addAction(QL1S("UserAgentSettings"), a); + connect(a, SIGNAL(triggered(bool)), this, SLOT(showUserAgentSettings())); } @@ -1344,6 +1359,22 @@ void MainWindow::setEncoding(QAction *qa) } +void MainWindow::setUserAgent() +{ + QAction *sender = static_cast<QAction *>(QObject::sender()); + + QString info; + QString desc = sender->text(); + int uaIndex = sender->data().toInt(); + + KUrl url = currentTab()->url(); + UserAgentInfo uaInfo; + kDebug() << "SETTING USER AGENT"; + uaInfo.setUserAgentForHost(uaIndex, url.host()); + currentTab()->page()->triggerAction(QWebPage::Reload); +} + + void MainWindow::populateEncodingMenu() { QStringList codecs; @@ -1402,6 +1433,51 @@ void MainWindow::populateEncodingMenu() } +void MainWindow::populateUserAgentMenu() +{ + kDebug() << "populating user agent menu..."; + bool defaultUA = true; + KUrl url = currentTab()->url(); + + QAction *a, *defaultAction; + + m_userAgentMenu->clear(); + + defaultAction = new QAction( i18nc("Default rekonq user agent", "Default"), this); + defaultAction->setData(-1); + defaultAction->setCheckable(true); + connect(defaultAction, SIGNAL(triggered(bool)), this, SLOT(setUserAgent())); + + m_userAgentMenu->addAction(defaultAction); + m_userAgentMenu->addSeparator(); + + UserAgentInfo uaInfo; + QStringList UAlist = uaInfo.availableUserAgents(); + int uaIndex = uaInfo.uaIndexForHost(currentTab()->url().host()); + + for (int i = 0; i < UAlist.count(); ++i) + { + QString uaDesc = UAlist.at(i); + + a = new QAction(uaDesc, this); + a->setData(i); + a->setCheckable(true); + connect(a, SIGNAL(triggered(bool)), this, SLOT(setUserAgent())); + + if(i == uaIndex) + { + a->setChecked(true); + defaultUA = false; + } + m_userAgentMenu->addAction(a); + } + defaultAction->setChecked(defaultUA); + + m_userAgentMenu->addSeparator(); + m_userAgentMenu->addAction( actionByName("UserAgentSettings") ); +} + + void MainWindow::enableNetworkAnalysis(bool b) { currentTab()->page()->enableNetworkAnalyzer(b); @@ -1474,3 +1550,17 @@ void MainWindow::setupBookmarksAndToolsShortcuts() connect(actionByName(QL1S("rekonq_tools")), SIGNAL(triggered()), toolsButton, SLOT(showMenu())); } } + + +void MainWindow::showUserAgentSettings() +{ + QPointer<KDialog> dialog = new KDialog(this); + dialog->setCaption(i18nc("@title:window", "User Agent Settings")); + dialog->setButtons(KDialog::Ok); + + UserAgentWidget widget; + dialog->setMainWidget(&widget); + dialog->exec(); + + dialog->deleteLater(); +} |