diff --git a/src/app/qupzilla.cpp b/src/app/qupzilla.cpp index acdaf0e6..39dd8167 100644 --- a/src/app/qupzilla.cpp +++ b/src/app/qupzilla.cpp @@ -1,1597 +1,1599 @@ /* ============================================================ * QupZilla - WebKit based browser * Copyright (C) 2010-2012 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ============================================================ */ #include "qupzilla.h" #include "tabwidget.h" #include "tabbar.h" #include "webpage.h" #include "webview.h" #include "lineedit.h" #include "historymodel.h" #include "locationbar.h" #include "searchtoolbar.h" #include "websearchbar.h" #include "downloadmanager.h" #include "cookiejar.h" #include "cookiemanager.h" #include "bookmarksmanager.h" #include "bookmarkstoolbar.h" #include "clearprivatedata.h" #include "sourceviewer.h" #include "siteinfo.h" #include "preferences.h" #include "networkmanager.h" #include "autofillmodel.h" #include "networkmanagerproxy.h" #include "rssmanager.h" #include "mainapplication.h" #include "aboutdialog.h" #include "pluginproxy.h" #include "qtwin.h" #include "ui_closedialog.h" #include "adblockmanager.h" #include "clickablelabel.h" #include "docktitlebarwidget.h" #include "sidebar.h" #include "iconprovider.h" #include "progressbar.h" #include "adblockicon.h" #include "closedtabsmanager.h" #include "statusbarmessage.h" #include "locationbarsettings.h" #include "browsinglibrary.h" #include "navigationbar.h" #include "pagescreen.h" #include "webinspectordockwidget.h" #include "bookmarksimportdialog.h" #include "globalfunctions.h" #include "webhistorywrapper.h" #include "enhancedmenu.h" #include "settings.h" const QString QupZilla::VERSION = "1.1.5"; const QString QupZilla::BUILDTIME = __DATE__" "__TIME__; const QString QupZilla::AUTHOR = "David Rosca"; const QString QupZilla::COPYRIGHT = "2010-2012"; const QString QupZilla::WWWADDRESS = "http://www.qupzilla.com"; const QString QupZilla::WIKIADDRESS = "https://github.com/nowrep/QupZilla/wiki"; const QString QupZilla::WEBKITVERSION = qWebKitVersion(); const QIcon QupZilla::qupzillaIcon() { QIcon i; i.addFile(":icons/exeicons/qupzilla16.png"); i.addFile(":icons/exeicons/qupzilla32.png"); i.addFile(":icons/exeicons/qupzilla48.png"); i.addFile(":icons/exeicons/qupzilla64.png"); i.addFile(":icons/exeicons/qupzilla128.png"); i.addFile(":icons/exeicons/qupzilla256.png"); return i; } QupZilla::QupZilla(StartBehaviour behaviour, QUrl startUrl) : QMainWindow(0) , m_historyMenuChanged(true) , m_bookmarksMenuChanged(true) , m_isClosing(false) , m_startingUrl(startUrl) , m_startBehaviour(behaviour) , m_menuBookmarksAction(0) #ifdef Q_WS_MAC , m_macMenuBar(new QMenuBar()) #endif , m_actionPrivateBrowsing(0) , m_statusBarMessage(new StatusBarMessage(this)) , m_usingTransparentBackground(false) { setObjectName("mainwindow"); setAttribute(Qt::WA_DeleteOnClose); setWindowTitle("QupZilla"); setUpdatesEnabled(false); m_activeProfil = mApp->getActiveProfilPath(); m_activeLanguage = mApp->getActiveLanguage(); setupUi(); setupMenu(); QTimer::singleShot(0, this, SLOT(postLaunch())); connect(mApp, SIGNAL(message(MainApplication::MessageType, bool)), this, SLOT(receiveMessage(MainApplication::MessageType, bool))); } void QupZilla::postLaunch() { loadSettings(); m_tabWidget->restorePinnedTabs(); //Open tab from command line argument bool addTab = true; QStringList arguments = qApp->arguments(); for (int i = 0; i < qApp->arguments().count(); i++) { QString arg = arguments.at(i); if (arg.startsWith("-url=")) { m_tabWidget->addView(QUrl(arg.replace("-url=", ""))); addTab = false; } } Settings settings; settings.beginGroup("Web-URL-Settings"); int afterLaunch = settings.value("afterLaunch", 1).toInt(); settings.endGroup(); settings.beginGroup("SessionRestore"); bool startingAfterCrash = settings.value("isCrashed", false).toBool(); settings.endGroup(); QUrl startUrl; switch (afterLaunch) { case 0: startUrl = QUrl(""); break; case 2: startUrl = QUrl("qupzilla:speeddial"); break; case 1: case 3: startUrl = m_homepage; break; default: break; } switch (m_startBehaviour) { case FirstAppWindow: if (startingAfterCrash || (addTab && afterLaunch == 3)) { addTab = !mApp->restoreStateSlot(this); } break; case NewWindow: addTab = true; break; case OtherRestoredWindow: addTab = false; break; } if (!m_startingUrl.isEmpty()) { startUrl = WebView::guessUrlFromString(m_startingUrl.toString()); addTab = true; } if (addTab) { int index = m_tabWidget->addView(startUrl, tr("New tab"), TabWidget::CleanPage); m_tabWidget->setCurrentIndex(index); if (startUrl.isEmpty() || startUrl.toString() == "qupzilla:speeddial") { locationBar()->setFocus(); } } if (m_tabWidget->getTabBar()->normalTabsCount() <= 0) { //Something went really wrong .. add one tab m_tabWidget->addView(m_homepage); } aboutToShowHistoryMenu(false); aboutToHideHistoryMenu(); aboutToShowBookmarksMenu(); setUpdatesEnabled(true); emit startingCompleted(); } void QupZilla::setupUi() { int locationBarWidth; int websearchBarWidth; Settings settings; settings.beginGroup("Browser-View-Settings"); if (settings.value("WindowMaximised", false).toBool()) { resize(800, 550); setWindowState(Qt::WindowMaximized); } else { setGeometry(settings.value("WindowGeometry", QRect(20, 20, 800, 550)).toRect()); if (m_startBehaviour == NewWindow) { // Moving window +40 x,y to be visible that this is new window QPoint p = pos(); p.setX(p.x() + 40); p.setY(p.y() + 40); move(p); } } locationBarWidth = settings.value("LocationBarWidth", 480).toInt(); websearchBarWidth = settings.value("WebSearchBarWidth", 140).toInt(); QWidget* widget = new QWidget(this); widget->setCursor(Qt::ArrowCursor); setCentralWidget(widget); m_mainLayout = new QVBoxLayout(widget); m_mainLayout->setContentsMargins(0, 0, 0, 0); m_mainLayout->setSpacing(0); m_mainSplitter = new QSplitter(this); m_mainSplitter->setObjectName("sidebar-splitter"); m_mainSplitter->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); m_tabWidget = new TabWidget(this); m_superMenu = new QMenu(this); m_navigationBar = new NavigationBar(this); m_navigationBar->setSplitterSizes(locationBarWidth, websearchBarWidth); m_bookmarksToolbar = new BookmarksToolbar(this); m_mainSplitter->addWidget(m_tabWidget); m_mainLayout->addWidget(m_navigationBar); m_mainLayout->addWidget(m_bookmarksToolbar); m_mainLayout->addWidget(m_mainSplitter); m_mainSplitter->setCollapsible(0, false); statusBar()->setObjectName("mainwindow-statusbar"); statusBar()->setCursor(Qt::ArrowCursor); m_progressBar = new ProgressBar(statusBar()); m_privateBrowsing = new QLabel(this); m_privateBrowsing->setPixmap(QPixmap(":/icons/locationbar/privatebrowsing.png")); m_privateBrowsing->setVisible(false); m_privateBrowsing->setToolTip(tr("Private Browsing Enabled")); m_adblockIcon = new AdBlockIcon(this); m_ipLabel = new QLabel(this); m_ipLabel->setObjectName("statusbar-ip-label"); m_ipLabel->setToolTip(tr("IP Address of current page")); statusBar()->insertPermanentWidget(0, m_progressBar); statusBar()->insertPermanentWidget(1, m_ipLabel); statusBar()->insertPermanentWidget(2, m_privateBrowsing); statusBar()->insertPermanentWidget(3, m_adblockIcon); } QMenuBar* QupZilla::menuBar() const { #ifdef Q_WS_MAC return m_macMenuBar; #else return QMainWindow::menuBar(); #endif } void QupZilla::setupMenu() { // Standard actions - needed on Mac to be placed correctly in "application" menu m_actionAbout = new QAction(QIcon(":/icons/qupzilla.png"), tr("&About QupZilla"), 0); m_actionAbout->setMenuRole(QAction::AboutRole); connect(m_actionAbout, SIGNAL(triggered()), this, SLOT(aboutQupZilla())); m_actionPreferences = new QAction(QIcon(":/icons/faenza/settings.png"), tr("Pr&eferences"), 0); m_actionPreferences->setMenuRole(QAction::PreferencesRole); m_actionPreferences->setShortcut(QKeySequence("Ctrl+P")); connect(m_actionPreferences, SIGNAL(triggered()), this, SLOT(showPreferences())); m_actionQuit = new QAction(QIcon::fromTheme("application-exit"), tr("Quit"), 0); m_actionQuit->setMenuRole(QAction::QuitRole); m_actionQuit->setShortcut(QKeySequence("Ctrl+Q")); connect(m_actionQuit, SIGNAL(triggered()), this, SLOT(quitApp())); menuBar()->setObjectName("mainwindow-menubar"); menuBar()->setCursor(Qt::ArrowCursor); m_menuTools = new QMenu(tr("&Tools")); m_menuHelp = new QMenu(tr("&Help")); m_menuBookmarks = new Menu(tr("&Bookmarks")); m_menuHistory = new Menu(tr("Hi&story")); connect(m_menuHistory, SIGNAL(aboutToShow()), this, SLOT(aboutToShowHistoryMenu())); connect(m_menuHistory, SIGNAL(aboutToHide()), this, SLOT(aboutToHideHistoryMenu())); connect(m_menuBookmarks, SIGNAL(aboutToShow()), this, SLOT(aboutToShowBookmarksMenu())); connect(m_menuBookmarks, SIGNAL(menuMiddleClicked(Menu*)), this, SLOT(loadFolderBookmarks(Menu*))); connect(m_menuHelp, SIGNAL(aboutToShow()), this, SLOT(aboutToShowHelpMenu())); connect(m_menuTools, SIGNAL(aboutToShow()), this, SLOT(aboutToShowToolsMenu())); m_menuFile = new QMenu(tr("&File")); m_menuFile->addAction(QIcon::fromTheme("window-new"), tr("&New Window"), this, SLOT(newWindow()))->setShortcut(QKeySequence("Ctrl+N")); m_menuFile->addAction(QIcon(":/icons/menu/popup.png"), tr("New Tab"), this, SLOT(addTab()))->setShortcut(QKeySequence("Ctrl+T")); m_menuFile->addAction(tr("Open Location"), this, SLOT(openLocation()))->setShortcut(QKeySequence("Ctrl+L")); m_menuFile->addAction(QIcon::fromTheme("document-open"), tr("Open &File"), this, SLOT(openFile()))->setShortcut(QKeySequence("Ctrl+O")); m_menuFile->addAction(tr("Close Tab"), m_tabWidget, SLOT(closeTab()))->setShortcut(QKeySequence("Ctrl+W")); m_actionCloseWindow = m_menuFile->addAction(QIcon::fromTheme("window-close"), tr("Close Window"), this, SLOT(close())); m_actionCloseWindow->setShortcut(QKeySequence("Ctrl+Shift+W")); m_menuFile->addSeparator(); m_menuFile->addAction(QIcon::fromTheme("document-save"), tr("&Save Page As..."), this, SLOT(savePage()))->setShortcut(QKeySequence("Ctrl+S")); m_menuFile->addAction(tr("Save Page Screen"), this, SLOT(savePageScreen())); m_menuFile->addAction(tr("Send Link..."), this, SLOT(sendLink())); m_menuFile->addAction(QIcon::fromTheme("document-print"), tr("&Print"), this, SLOT(printPage())); m_menuFile->addSeparator(); m_menuFile->addSeparator(); m_menuFile->addAction(tr("Import bookmarks..."), this, SLOT(showBookmarkImport())); m_menuFile->addAction(m_actionQuit); #ifdef Q_WS_MAC // Add standard actions to File Menu (as it won't be ever cleared) and Mac menubar should move them to "application" menu m_menuFile->addAction(m_actionAbout); m_menuFile->addAction(m_actionPreferences); #endif menuBar()->addMenu(m_menuFile); connect(m_menuFile, SIGNAL(aboutToShow()), this, SLOT(aboutToShowFileMenu())); connect(m_menuFile, SIGNAL(aboutToHide()), this, SLOT(aboutToHideFileMenu())); m_menuEdit = new QMenu(tr("&Edit")); m_menuEdit->addAction(QIcon::fromTheme("edit-undo"), tr("&Undo"))->setShortcut(QKeySequence("Ctrl+Z")); m_menuEdit->addAction(QIcon::fromTheme("edit-redo"), tr("&Redo"))->setShortcut(QKeySequence("Ctrl+Shift+Z")); m_menuEdit->addSeparator(); m_menuEdit->addAction(QIcon::fromTheme("edit-cut"), tr("&Cut"))->setShortcut(QKeySequence("Ctrl+X")); m_menuEdit->addAction(QIcon::fromTheme("edit-copy"), tr("C&opy"), this, SLOT(copy()))->setShortcut(QKeySequence("Ctrl+C")); m_menuEdit->addAction(QIcon::fromTheme("edit-paste"), tr("&Paste"))->setShortcut(QKeySequence("Ctrl+V")); m_menuEdit->addAction(QIcon::fromTheme("edit-delete"), tr("&Delete"))->setShortcut(QKeySequence("Del")); m_menuEdit->addSeparator(); m_menuEdit->addAction(QIcon::fromTheme("edit-select-all"), tr("Select &All"), this, SLOT(selectAll()))->setShortcut(QKeySequence("Ctrl+A")); m_menuEdit->addAction(QIcon::fromTheme("edit-find"), tr("&Find"), this, SLOT(searchOnPage()))->setShortcut(QKeySequence("Ctrl+F")); m_menuEdit->addSeparator(); #ifdef Q_WS_X11 m_menuEdit->addAction(m_actionPreferences); #endif menuBar()->addMenu(m_menuEdit); connect(m_menuEdit, SIGNAL(aboutToShow()), this, SLOT(aboutToShowEditMenu())); connect(m_menuEdit, SIGNAL(aboutToHide()), this, SLOT(aboutToHideEditMenu())); aboutToHideEditMenu(); m_menuView = new QMenu(tr("&View")); m_actionShowToolbar = new QAction(tr("&Navigation Toolbar"), this); m_actionShowToolbar->setCheckable(true); connect(m_actionShowToolbar, SIGNAL(triggered(bool)), this, SLOT(showNavigationToolbar())); m_actionShowBookmarksToolbar = new QAction(tr("&Bookmarks Toolbar"), this); m_actionShowBookmarksToolbar->setCheckable(true); connect(m_actionShowBookmarksToolbar, SIGNAL(triggered(bool)), this, SLOT(showBookmarksToolbar())); m_actionShowStatusbar = new QAction(tr("Sta&tus Bar"), this); m_actionShowStatusbar->setCheckable(true); connect(m_actionShowStatusbar, SIGNAL(triggered(bool)), this, SLOT(showStatusbar())); m_actionShowMenubar = new QAction(tr("&Menu Bar"), this); m_actionShowMenubar->setCheckable(true); connect(m_actionShowMenubar, SIGNAL(triggered(bool)), this, SLOT(showMenubar())); m_actionShowFullScreen = new QAction(tr("&Fullscreen"), this); m_actionShowFullScreen->setCheckable(true); m_actionShowFullScreen->setShortcut(QKeySequence("F11")); connect(m_actionShowFullScreen, SIGNAL(triggered(bool)), this, SLOT(fullScreen(bool))); m_actionStop = new QAction(IconProvider::standardIcon(QStyle::SP_BrowserStop), tr("&Stop"), this); connect(m_actionStop, SIGNAL(triggered()), this, SLOT(stop())); m_actionStop->setShortcut(QKeySequence("Esc")); m_actionReload = new QAction(IconProvider::standardIcon(QStyle::SP_BrowserReload), tr("&Reload"), this); connect(m_actionReload, SIGNAL(triggered()), this, SLOT(reload())); m_actionReload->setShortcut(QKeySequence("F5")); QAction* actionEncoding = new QAction(tr("Character &Encoding"), this); m_menuEncoding = new QMenu(this); actionEncoding->setMenu(m_menuEncoding); connect(m_menuEncoding, SIGNAL(aboutToShow()), this, SLOT(aboutToShowEncodingMenu())); m_actionShowBookmarksSideBar = new QAction(tr("Bookmarks"), this); m_actionShowBookmarksSideBar->setCheckable(true); m_actionShowBookmarksSideBar->setShortcut(QKeySequence("Ctrl+B")); connect(m_actionShowBookmarksSideBar, SIGNAL(triggered()), this, SLOT(showBookmarksSideBar())); m_actionShowHistorySideBar = new QAction(tr("History"), this); m_actionShowHistorySideBar->setCheckable(true); m_actionShowHistorySideBar->setShortcut(QKeySequence("Ctrl+H")); connect(m_actionShowHistorySideBar, SIGNAL(triggered()), this, SLOT(showHistorySideBar())); QMenu* toolbarsMenu = new QMenu(tr("Toolbars")); toolbarsMenu->addAction(m_actionShowMenubar); toolbarsMenu->addAction(m_actionShowToolbar); toolbarsMenu->addAction(m_actionShowBookmarksToolbar); QMenu* sidebarsMenu = new QMenu(tr("Sidebars")); sidebarsMenu->addAction(m_actionShowBookmarksSideBar); sidebarsMenu->addAction(m_actionShowHistorySideBar); m_menuView->addMenu(toolbarsMenu); m_menuView->addMenu(sidebarsMenu); m_menuView->addAction(m_actionShowStatusbar); m_menuView->addSeparator(); m_menuView->addAction(m_actionStop); m_menuView->addAction(m_actionReload); m_menuView->addSeparator(); m_menuView->addAction(QIcon::fromTheme("zoom-in"), tr("Zoom &In"), this, SLOT(zoomIn()))->setShortcut(QKeySequence("Ctrl++")); m_menuView->addAction(QIcon::fromTheme("zoom-out"), tr("Zoom &Out"), this, SLOT(zoomOut()))->setShortcut(QKeySequence("Ctrl+-")); m_menuView->addAction(QIcon::fromTheme("zoom-original"), tr("Reset"), this, SLOT(zoomReset()))->setShortcut(QKeySequence("Ctrl+0")); m_menuView->addSeparator(); m_menuView->addAction(actionEncoding); m_menuView->addSeparator(); m_menuView->addAction(QIcon::fromTheme("text-html"), tr("&Page Source"), this, SLOT(showSource()))->setShortcut(QKeySequence("Ctrl+U")); m_menuView->addAction(m_actionShowFullScreen); menuBar()->addMenu(m_menuView); connect(m_menuView, SIGNAL(aboutToShow()), this, SLOT(aboutToShowViewMenu())); connect(m_menuView, SIGNAL(aboutToHide()), this, SLOT(aboutToHideViewMenu())); menuBar()->addMenu(m_menuHistory); menuBar()->addMenu(m_menuBookmarks); menuBar()->addMenu(m_menuTools); menuBar()->addMenu(m_menuHelp); menuBar()->setContextMenuPolicy(Qt::CustomContextMenu); m_menuClosedTabs = new QMenu(tr("Closed Tabs")); connect(m_menuClosedTabs, SIGNAL(aboutToShow()), this, SLOT(aboutToShowClosedTabsMenu())); aboutToShowToolsMenu(); aboutToShowHelpMenu(); m_actionRestoreTab = new QAction(QIcon::fromTheme("user-trash"), tr("Restore &Closed Tab"), this); m_actionRestoreTab->setShortcut(QKeySequence("Ctrl+Shift+T")); connect(m_actionRestoreTab, SIGNAL(triggered()), m_tabWidget, SLOT(restoreClosedTab())); addAction(m_actionRestoreTab); - QShortcut* reloadByPassCacheAction = new QShortcut(QKeySequence("Shift+F5"), this); + QShortcut* reloadByPassCacheAction = new QShortcut(QKeySequence("Ctrl+F5"), this); + QShortcut* reloadByPassCacheAction2 = new QShortcut(QKeySequence("Ctrl+Shift+R"), this); connect(reloadByPassCacheAction, SIGNAL(activated()), this, SLOT(reloadByPassCache())); + connect(reloadByPassCacheAction2, SIGNAL(activated()), this, SLOT(reloadByPassCache())); QShortcut* reloadAction = new QShortcut(QKeySequence("Ctrl+R"), this); connect(reloadAction, SIGNAL(activated()), this, SLOT(reload())); QShortcut* backAction = new QShortcut(QKeySequence("Alt+Left"), this); connect(backAction, SIGNAL(activated()), this, SLOT(goBack())); QShortcut* forwardAction = new QShortcut(QKeySequence("Alt+Right"), this); connect(forwardAction, SIGNAL(activated()), this, SLOT(goNext())); // Make shortcuts available even in fullscreen (menu hidden) QList actions = menuBar()->actions(); foreach(QAction * action, actions) { if (action->menu()) { actions += action->menu()->actions(); } addAction(action); } m_superMenu->addMenu(m_menuFile); m_superMenu->addMenu(m_menuEdit); m_superMenu->addMenu(m_menuView); m_superMenu->addMenu(m_menuHistory); m_superMenu->addMenu(m_menuBookmarks); m_superMenu->addMenu(m_menuTools); m_superMenu->addMenu(m_menuHelp); } void QupZilla::loadSettings() { Settings settings; //Url settings settings.beginGroup("Web-URL-Settings"); m_homepage = settings.value("homepage", "qupzilla:start").toUrl(); m_newtab = settings.value("newTabUrl", "qupzilla:speeddial").toUrl(); settings.endGroup(); QWebSettings* websettings = mApp->webSettings(); websettings->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); //Browser Window settings settings.beginGroup("Browser-View-Settings"); m_menuTextColor = settings.value("menuTextColor", QColor(Qt::black)).value(); bool showStatusBar = settings.value("showStatusBar", true).toBool(); bool showHomeIcon = settings.value("showHomeButton", true).toBool(); bool showBackForwardIcons = settings.value("showBackForwardButtons", true).toBool(); bool showBookmarksToolbar = settings.value("showBookmarksToolbar", true).toBool(); bool showNavigationToolbar = settings.value("showNavigationToolbar", true).toBool(); bool showMenuBar = settings.value("showMenubar", true).toBool(); bool showAddTab = settings.value("showAddTabButton", false).toBool(); bool makeTransparent = settings.value("useTransparentBackground", false).toBool(); m_sideBarWidth = settings.value("SideBarWidth", 250).toInt(); m_webViewWidth = settings.value("WebViewWidth", 390).toInt(); QString activeSideBar = settings.value("SideBar", "None").toString(); settings.endGroup(); bool adBlockEnabled = settings.value("AdBlock/enabled", true).toBool(); m_adblockIcon->setEnabled(adBlockEnabled); statusBar()->setVisible(showStatusBar); m_bookmarksToolbar->setVisible(showBookmarksToolbar); m_navigationBar->setVisible(showNavigationToolbar); menuBar()->setVisible(showMenuBar); m_navigationBar->buttonSuperMenu()->setVisible(!showMenuBar); m_navigationBar->buttonHome()->setVisible(showHomeIcon); m_navigationBar->buttonBack()->setVisible(showBackForwardIcons); m_navigationBar->buttonNext()->setVisible(showBackForwardIcons); m_navigationBar->buttonAddTab()->setVisible(showAddTab); if (activeSideBar != "None") { if (activeSideBar == "Bookmarks") { m_actionShowBookmarksSideBar->trigger(); } else if (activeSideBar == "History") { m_actionShowHistorySideBar->trigger(); } } //Private browsing m_actionPrivateBrowsing->setChecked(mApp->webSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)); m_privateBrowsing->setVisible(mApp->webSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)); #ifdef Q_WS_WIN if (m_usingTransparentBackground && !makeTransparent) { QtWin::enableBlurBehindWindow(this, false); m_usingTransparentBackground = false; } #endif if (!makeTransparent) { return; } //Opacity #ifdef Q_WS_X11 setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_NoSystemBackground, false); QPalette pal = palette(); QColor bg = pal.window().color(); bg.setAlpha(180); pal.setColor(QPalette::Window, bg); setPalette(pal); ensurePolished(); // workaround Oxygen filling the background setAttribute(Qt::WA_StyledBackground, false); #endif if (QtWin::isCompositionEnabled()) { QtWin::extendFrameIntoClientArea(this); setContentsMargins(0, 0, 0, 0); m_usingTransparentBackground = true; } } void QupZilla::setWindowTitle(const QString &t) { if (mApp->webSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { QMainWindow::setWindowTitle(t + tr(" (Private Browsing)")); } else { QMainWindow::setWindowTitle(t); } } void QupZilla::receiveMessage(MainApplication::MessageType mes, bool state) { switch (mes) { case MainApplication::SetAdBlockIconEnabled: m_adblockIcon->setEnabled(state); break; case MainApplication::CheckPrivateBrowsing: m_privateBrowsing->setVisible(state); m_actionPrivateBrowsing->setChecked(state); weView()->titleChanged(); break; case MainApplication::ReloadSettings: loadSettings(); m_tabWidget->loadSettings(); LocationBarSettings::instance()->loadSettings(); break; case MainApplication::HistoryStateChanged: m_historyMenuChanged = true; break; case MainApplication::BookmarksChanged: m_bookmarksMenuChanged = true; break; case MainApplication::StartPrivateBrowsing: startPrivate(state); break; default: qWarning("Unresolved message sent! This could never happen!"); break; } } void QupZilla::aboutToShowFileMenu() { m_actionCloseWindow->setEnabled(mApp->windowCount() > 1); } void QupZilla::aboutToHideFileMenu() { m_actionCloseWindow->setEnabled(true); } void QupZilla::aboutToShowBookmarksMenu() { if (!m_bookmarksMenuChanged) { if (m_menuBookmarksAction) { m_menuBookmarksAction->setVisible(m_bookmarksToolbar->isVisible()); } return; } m_bookmarksMenuChanged = false; m_menuBookmarks->clear(); m_menuBookmarks->addAction(tr("Bookmark &This Page"), this, SLOT(bookmarkPage()))->setShortcut(QKeySequence("Ctrl+D")); m_menuBookmarks->addAction(tr("Bookmark &All Tabs"), this, SLOT(bookmarkAllTabs())); m_menuBookmarks->addAction(IconProvider::fromTheme("user-bookmarks"), tr("Organize &Bookmarks"), this, SLOT(showBookmarksManager()))->setShortcut(QKeySequence("Ctrl+Shift+O")); m_menuBookmarks->addSeparator(); QSqlQuery query; query.exec("SELECT title, url, icon FROM bookmarks WHERE folder='bookmarksMenu'"); while (query.next()) { QString title = query.value(0).toString(); QUrl url = query.value(1).toUrl(); QIcon icon = IconProvider::iconFromBase64(query.value(2).toByteArray()); if (title.length() > 40) { title.truncate(40); title += ".."; } Action* act = new Action(icon, title); act->setData(url); connect(act, SIGNAL(triggered()), this, SLOT(loadActionUrl())); connect(act, SIGNAL(middleClicked()), this, SLOT(loadActionUrlInNewNotSelectedTab())); m_menuBookmarks->addAction(act); } Menu* menuBookmarks = new Menu(_bookmarksToolbar, m_menuBookmarks); menuBookmarks->setIcon(QIcon(style()->standardIcon(QStyle::SP_DirOpenIcon))); query.exec("SELECT title, url, icon FROM bookmarks WHERE folder='bookmarksToolbar'"); while (query.next()) { QString title = query.value(0).toString(); QUrl url = query.value(1).toUrl(); QIcon icon = IconProvider::iconFromBase64(query.value(2).toByteArray()); if (title.length() > 40) { title.truncate(40); title += ".."; } Action* act = new Action(icon, title); act->setData(url); connect(act, SIGNAL(triggered()), this, SLOT(loadActionUrl())); connect(act, SIGNAL(middleClicked()), this, SLOT(loadActionUrlInNewNotSelectedTab())); menuBookmarks->addAction(act); } if (menuBookmarks->isEmpty()) { menuBookmarks->addAction(tr("Empty")); } m_menuBookmarksAction = m_menuBookmarks->addMenu(menuBookmarks); query.exec("SELECT name FROM folders"); while (query.next()) { QString folderName = query.value(0).toString(); Menu* tempFolder = new Menu(folderName, m_menuBookmarks); tempFolder->setIcon(QIcon(style()->standardIcon(QStyle::SP_DirOpenIcon))); QSqlQuery query2; query2.exec("SELECT title, url, icon FROM bookmarks WHERE folder='" + folderName + "'"); while (query2.next()) { QString title = query2.value(0).toString(); QUrl url = query2.value(1).toUrl(); QIcon icon = IconProvider::iconFromBase64(query2.value(2).toByteArray()); if (title.length() > 40) { title.truncate(40); title += ".."; } Action* act = new Action(icon, title); act->setData(url); connect(act, SIGNAL(triggered()), this, SLOT(loadActionUrl())); connect(act, SIGNAL(middleClicked()), this, SLOT(loadActionUrlInNewNotSelectedTab())); tempFolder->addAction(act); } if (tempFolder->isEmpty()) { tempFolder->addAction(tr("Empty")); } m_menuBookmarks->addMenu(tempFolder); } m_menuBookmarksAction->setVisible(m_bookmarksToolbar->isVisible()); } void QupZilla::aboutToShowHistoryMenu(bool loadHistory) { if (!weView()) { return; } if (!m_historyMenuChanged) { if (!m_menuHistory || m_menuHistory->actions().count() < 3) { return; } m_menuHistory->actions().at(0)->setEnabled(WebHistoryWrapper::canGoBack(weView()->history())); m_menuHistory->actions().at(1)->setEnabled(WebHistoryWrapper::canGoForward(weView()->history())); return; } m_historyMenuChanged = false; if (!loadHistory) { m_historyMenuChanged = true; } m_menuHistory->clear(); m_menuHistory->addAction(IconProvider::standardIcon(QStyle::SP_ArrowBack), tr("&Back"), this, SLOT(goBack()))->setShortcut(QKeySequence("Ctrl+Left")); m_menuHistory->addAction(IconProvider::standardIcon(QStyle::SP_ArrowForward), tr("&Forward"), this, SLOT(goNext()))->setShortcut(QKeySequence("Ctrl+Right")); m_menuHistory->addAction(IconProvider::fromTheme("go-home"), tr("&Home"), this, SLOT(goHome()))->setShortcut(QKeySequence("Alt+Home")); m_menuHistory->actions().at(0)->setEnabled(WebHistoryWrapper::canGoBack(weView()->history())); m_menuHistory->actions().at(1)->setEnabled(WebHistoryWrapper::canGoForward(weView()->history())); m_menuHistory->addAction(QIcon(":/icons/menu/history.png"), tr("Show &All History"), this, SLOT(showHistoryManager()))->setShortcut(QKeySequence("Ctrl+Shift+H")); m_menuHistory->addSeparator(); if (loadHistory) { QSqlQuery query; query.exec("SELECT title, url FROM history ORDER BY date DESC LIMIT 10"); while (query.next()) { QUrl url = query.value(1).toUrl(); QString title = query.value(0).toString(); if (title.length() > 40) { title.truncate(40); title += ".."; } Action* act = new Action(_iconForUrl(url), title); act->setData(url); connect(act, SIGNAL(triggered()), this, SLOT(loadActionUrl())); connect(act, SIGNAL(middleClicked()), this, SLOT(loadActionUrlInNewNotSelectedTab())); m_menuHistory->addAction(act); } m_menuHistory->addSeparator(); } m_menuHistory->addMenu(m_menuClosedTabs); } void QupZilla::aboutToHideHistoryMenu() { if (!m_menuHistory || m_menuHistory->actions().count() < 3) { return; } m_menuHistory->actions().at(0)->setEnabled(true); m_menuHistory->actions().at(1)->setEnabled(true); } void QupZilla::aboutToShowClosedTabsMenu() { m_menuClosedTabs->clear(); int i = 0; foreach(ClosedTabsManager::Tab tab, m_tabWidget->closedTabsManager()->allClosedTabs()) { QString title = tab.title; if (title.length() > 40) { title.truncate(40); title += ".."; } m_menuClosedTabs->addAction(_iconForUrl(tab.url), title, m_tabWidget, SLOT(restoreClosedTab()))->setData(i); i++; } m_menuClosedTabs->addSeparator(); if (i == 0) { m_menuClosedTabs->addAction(tr("Empty"))->setEnabled(false); } else { m_menuClosedTabs->addAction(tr("Restore All Closed Tabs"), m_tabWidget, SLOT(restoreAllClosedTabs())); m_menuClosedTabs->addAction(tr("Clear list"), m_tabWidget, SLOT(clearClosedTabsList())); } } void QupZilla::aboutToShowHelpMenu() { m_menuHelp->clear(); mApp->plugins()->populateHelpMenu(m_menuHelp); m_menuHelp->addSeparator(); #ifndef Q_WS_MAC m_menuHelp->addAction(QIcon(":/icons/menu/qt.png"), tr("About &Qt"), qApp, SLOT(aboutQt())); m_menuHelp->addAction(m_actionAbout); m_menuHelp->addSeparator(); #endif QAction* infoAction = new QAction(QIcon(":/icons/menu/informations.png"), tr("Informations about application"), m_menuHelp); infoAction->setData(QUrl("qupzilla:about")); infoAction->setShortcut(QKeySequence(QKeySequence::HelpContents)); connect(infoAction, SIGNAL(triggered()), this, SLOT(loadActionUrlInNewTab())); m_menuHelp->addAction(infoAction); m_menuHelp->addAction(tr("Report &Issue"), this, SLOT(loadActionUrlInNewTab()))->setData(QUrl("qupzilla:reportbug")); } void QupZilla::aboutToShowToolsMenu() { m_menuTools->clear(); m_menuTools->addAction(tr("&Web Search"), this, SLOT(webSearch()))->setShortcut(QKeySequence("Ctrl+K")); m_menuTools->addAction(QIcon::fromTheme("dialog-information"), tr("Page &Info"), this, SLOT(showPageInfo()))->setShortcut(QKeySequence("Ctrl+I")); m_menuTools->addSeparator(); m_menuTools->addAction(tr("&Download Manager"), this, SLOT(showDownloadManager()))->setShortcut(QKeySequence("Ctrl+Y")); m_menuTools->addAction(tr("&Cookies Manager"), this, SLOT(showCookieManager())); m_menuTools->addAction(tr("&AdBlock"), AdBlockManager::instance(), SLOT(showDialog())); m_menuTools->addAction(QIcon(":/icons/menu/rss.png"), tr("RSS &Reader"), this, SLOT(showRSSManager())); m_menuTools->addAction(QIcon::fromTheme("edit-clear"), tr("Clear Recent &History"), this, SLOT(showClearPrivateData())); m_actionPrivateBrowsing = new QAction(tr("&Private Browsing"), this); m_actionPrivateBrowsing->setShortcut(QKeySequence("Ctrl+Shift+P")); m_actionPrivateBrowsing->setCheckable(true); m_actionPrivateBrowsing->setChecked(mApp->webSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)); connect(m_actionPrivateBrowsing, SIGNAL(triggered(bool)), this, SLOT(startPrivate(bool))); m_menuTools->addAction(m_actionPrivateBrowsing); m_menuTools->addSeparator(); mApp->plugins()->populateToolsMenu(m_menuTools); #if !defined(Q_WS_X11) && !defined(Q_WS_MAC) m_menuTools->addAction(m_actionPreferences); #endif } void QupZilla::aboutToShowViewMenu() { if (!weView()) { return; } m_actionShowToolbar->setChecked(m_navigationBar->isVisible()); m_actionShowMenubar->setChecked(menuBar()->isVisible()); m_actionShowStatusbar->setChecked(statusBar()->isVisible()); m_actionShowBookmarksToolbar->setChecked(m_bookmarksToolbar->isVisible()); if (!m_sideBar.data()) { m_actionShowBookmarksSideBar->setChecked(false); m_actionShowHistorySideBar->setChecked(false); // m_actionShowRssSideBar->setChecked(false); } else { SideBar::SideWidget actWidget = m_sideBar.data()->activeWidget(); m_actionShowBookmarksSideBar->setChecked(actWidget == SideBar::Bookmarks); m_actionShowHistorySideBar->setChecked(actWidget == SideBar::History); // m_actionShowRssSideBar->setChecked(actWidget == SideBar::RSS); } } void QupZilla::aboutToHideViewMenu() { if (m_mainLayout->count() == 4) { SearchToolBar* search = qobject_cast(m_mainLayout->itemAt(3)->widget()); if (!search) { return; } m_actionStop->setEnabled(false); } } void QupZilla::aboutToShowEditMenu() { foreach(QAction * act, m_menuEdit->actions()) { act->setEnabled(true); } } void QupZilla::aboutToHideEditMenu() { foreach(QAction * act, m_menuEdit->actions()) { act->setEnabled(false); } m_menuEdit->actions().at(9)->setEnabled(true); #ifdef Q_WS_X11 m_menuEdit->actions().at(11)->setEnabled(true); #endif } void QupZilla::aboutToShowEncodingMenu() { m_menuEncoding->clear(); QMenu* menuISO = new QMenu("ISO", this); QMenu* menuUTF = new QMenu("UTF", this); QMenu* menuWindows = new QMenu("Windows", this); QMenu* menuIscii = new QMenu("Iscii", this); QMenu* menuOther = new QMenu(tr("Other"), this); QList available = QTextCodec::availableCodecs(); qSort(available); QString activeCodec = mApp->webSettings()->defaultTextEncoding(); foreach(QByteArray name, available) { if (QTextCodec::codecForName(name)->aliases().contains(name)) { continue; } QAction* action = new QAction(name == "System" ? tr("Default") : name, this); action->setData(name); action->setCheckable(true); connect(action, SIGNAL(triggered()), this, SLOT(changeEncoding())); if (activeCodec.compare(name, Qt::CaseInsensitive) == 0) { action->setChecked(true); } if (name.startsWith("ISO")) { menuISO->addAction(action); } else if (name.startsWith("UTF")) { menuUTF->addAction(action); } else if (name.startsWith("windows")) { menuWindows->addAction(action); } else if (name.startsWith("Iscii")) { menuIscii->addAction(action); } else if (name == "System") { m_menuEncoding->addAction(action); } else { menuOther->addAction(action); } } m_menuEncoding->addSeparator(); if (!menuISO->isEmpty()) { m_menuEncoding->addMenu(menuISO); } if (!menuUTF->isEmpty()) { m_menuEncoding->addMenu(menuUTF); } if (!menuWindows->isEmpty()) { m_menuEncoding->addMenu(menuWindows); } if (!menuIscii->isEmpty()) { m_menuEncoding->addMenu(menuIscii); } if (!menuOther->isEmpty()) { m_menuEncoding->addMenu(menuOther); } } void QupZilla::changeEncoding() { if (QAction* action = qobject_cast(sender())) { mApp->webSettings()->setDefaultTextEncoding(action->data().toString()); reload(); } } void QupZilla::bookmarkPage() { mApp->browsingLibrary()->bookmarksManager()->addBookmark(weView()); } void QupZilla::addBookmark(const QUrl &url, const QString &title, const QIcon &icon) { mApp->browsingLibrary()->bookmarksManager()->insertBookmark(url, title, icon); } void QupZilla::bookmarkAllTabs() { mApp->browsingLibrary()->bookmarksManager()->insertAllTabs(); } void QupZilla::goHome() { loadAddress(m_homepage); } void QupZilla::copy() { if (!weView()->selectedText().isEmpty()) { QApplication::clipboard()->setText(weView()->selectedText()); } } void QupZilla::goHomeInNewTab() { m_tabWidget->addView(m_homepage, tr("New tab"), TabWidget::NewSelectedTab); } void QupZilla::loadActionUrl() { if (QAction* action = qobject_cast(sender())) { loadAddress(action->data().toUrl()); } } void QupZilla::loadActionUrlInNewTab() { if (QAction* action = qobject_cast(sender())) { m_tabWidget->addView(action->data().toUrl()); } } void QupZilla::loadActionUrlInNewNotSelectedTab() { if (QAction* action = qobject_cast(sender())) { m_tabWidget->addView(action->data().toUrl(), tr("New tab"), TabWidget::NewNotSelectedTab); } } void QupZilla::loadFolderBookmarks(Menu* menu) { QString folder = BookmarksModel::fromTranslatedFolder(menu->title()); if (folder.isEmpty()) { return; } foreach(Bookmark b, mApp->bookmarksModel()->folderBookmarks(folder)) { tabWidget()->addView(b.url, b.title, TabWidget::NewNotSelectedTab); } } void QupZilla::loadAddress(const QUrl &url) { weView()->load(url); locationBar()->setText(url.toEncoded()); } void QupZilla::urlEnter() { if (locationBar()->text().isEmpty()) { return; } loadAddress(QUrl(WebView::guessUrlFromString(locationBar()->text()))); weView()->setFocus(); } void QupZilla::showCookieManager() { CookieManager* m = mApp->cookieManager(); m->refreshTable(); m->show(); } void QupZilla::showHistoryManager() { mApp->browsingLibrary()->showHistory(this); } void QupZilla::showRSSManager() { mApp->browsingLibrary()->showRSS(this); } void QupZilla::showBookmarksManager() { mApp->browsingLibrary()->showBookmarks(this); } void QupZilla::showClearPrivateData() { ClearPrivateData clear(this, this); clear.exec(); } void QupZilla::showDownloadManager() { mApp->downManager()->show(); } void QupZilla::showPreferences() { Preferences* prefs = new Preferences(this, this); prefs->show(); } void QupZilla::showSource(QWebFrame* frame, const QString &selectedHtml) { if (!frame) { frame = weView()->page()->mainFrame(); } SourceViewer* source = new SourceViewer(frame, selectedHtml); qz_centerWidgetToParent(source, this); source->show(); } void QupZilla::showPageInfo() { SiteInfo* info = new SiteInfo(this, this); info->setAttribute(Qt::WA_DeleteOnClose); info->show(); } void QupZilla::showBookmarksToolbar() { bool status = m_bookmarksToolbar->isVisible(); m_bookmarksToolbar->setVisible(!status); Settings settings; settings.setValue("Browser-View-Settings/showBookmarksToolbar", !status); } void QupZilla::showBookmarksSideBar() { addSideBar(); if (m_sideBar.data()->activeWidget() != SideBar::Bookmarks) { m_sideBar.data()->showBookmarks(); } else { m_sideBar.data()->close(); } } void QupZilla::showHistorySideBar() { addSideBar(); if (m_sideBar.data()->activeWidget() != SideBar::History) { m_sideBar.data()->showHistory(); } else { m_sideBar.data()->close(); } } void QupZilla::addSideBar() { if (m_sideBar.data()) { return; } m_sideBar = new SideBar(this); m_mainSplitter->insertWidget(0, m_sideBar.data()); m_mainSplitter->setCollapsible(0, false); m_mainSplitter->setSizes(QList() << m_sideBarWidth << m_webViewWidth); } void QupZilla::saveSideBarWidth() { // That +1 is important here, without it, the sidebar width would // decrease by 1 pixel every close m_sideBarWidth = m_mainSplitter->sizes().at(0) + 1; m_webViewWidth = width() - m_sideBarWidth; } void QupZilla::showNavigationToolbar() { if (!menuBar()->isVisible() && !m_actionShowToolbar->isChecked()) { showMenubar(); } bool status = m_navigationBar->isVisible(); m_navigationBar->setVisible(!status); Settings settings; settings.setValue("Browser-View-Settings/showNavigationToolbar", !status); } void QupZilla::showMenubar() { if (!m_navigationBar->isVisible() && !m_actionShowMenubar->isChecked()) { showNavigationToolbar(); } menuBar()->setVisible(!menuBar()->isVisible()); m_navigationBar->buttonSuperMenu()->setVisible(!menuBar()->isVisible()); Settings settings; settings.setValue("Browser-View-Settings/showMenubar", menuBar()->isVisible()); } void QupZilla::showStatusbar() { bool status = statusBar()->isVisible(); statusBar()->setVisible(!status); Settings settings; settings.setValue("Browser-View-Settings/showStatusbar", !status); } void QupZilla::showWebInspector() { #ifdef Q_WS_WIN weView()->triggerPageAction(QWebPage::InspectElement); #else if (m_webInspectorDock.data()) { m_webInspectorDock.data()->setPage(weView()->webPage()); m_webInspectorDock.data()->show(); return; } m_webInspectorDock = new WebInspectorDockWidget(this); connect(m_tabWidget, SIGNAL(currentChanged(int)), m_webInspectorDock.data(), SLOT(tabChanged())); addDockWidget(Qt::BottomDockWidgetArea, m_webInspectorDock.data()); #endif } void QupZilla::showBookmarkImport() { BookmarksImportDialog* b = new BookmarksImportDialog(this); b->show(); } void QupZilla::refreshHistory() { m_navigationBar->refreshHistory(); } void QupZilla::currentTabChanged() { WebView* view = weView(); if (!view) { return; } setWindowTitle(view->title() + " - QupZilla"); m_ipLabel->setText(view->getIp()); view->setFocus(); updateLoadingActions(); // Setting correct tab order (LocationBar -> WebSearchBar -> WebView) setTabOrder(locationBar(), m_navigationBar->searchLine()); setTabOrder(m_navigationBar->searchLine(), view); } void QupZilla::updateLoadingActions() { WebView* view = weView(); if (!view) { return; } bool isLoading = view->isLoading(); m_ipLabel->setVisible(!isLoading); m_progressBar->setVisible(isLoading); m_actionStop->setEnabled(isLoading); m_actionReload->setEnabled(!isLoading); if (isLoading) { m_progressBar->setValue(view->getLoading()); m_navigationBar->showStopButton(); } else { m_navigationBar->showReloadButton(); } } void QupZilla::aboutQupZilla() { AboutDialog about(this); about.exec(); } void QupZilla::webSearch() { m_navigationBar->searchLine()->setFocus(); m_navigationBar->searchLine()->selectAll(); } void QupZilla::searchOnPage() { if (m_mainLayout->count() == 4) { SearchToolBar* search = qobject_cast(m_mainLayout->itemAt(3)->widget()); if (!search) { return; } search->searchLine()->setFocus(); return; } SearchToolBar* search = new SearchToolBar(this); m_mainLayout->insertWidget(3, search); search->searchLine()->setFocus(); } void QupZilla::openFile() { QString filePath = QFileDialog::getOpenFileName(this, tr("Open file..."), QDir::homePath(), "(*.html *.htm *.jpg *.png)"); if (!filePath.isEmpty()) { loadAddress(QUrl::fromLocalFile(filePath)); } } void QupZilla::openLocation() { locationBar()->setFocus(); locationBar()->selectAll(); } void QupZilla::showNavigationWithFullscreen() { bool state; if (m_navigationVisible) { state = !m_navigationBar->isVisible(); } else { state = !m_tabWidget->getTabBar()->isVisible(); } if (m_navigationVisible) { m_navigationBar->setVisible(state); } m_tabWidget->getTabBar()->updateVisibilityWithFullscreen(state); if (m_bookmarksToolBarVisible) { m_bookmarksToolbar->setVisible(state); } } void QupZilla::fullScreen(bool make) { if (make) { m_menuBarVisible = menuBar()->isVisible(); m_statusBarVisible = statusBar()->isVisible(); m_navigationVisible = m_navigationBar->isVisible(); m_bookmarksToolBarVisible = m_bookmarksToolbar->isVisible(); setWindowState(windowState() | Qt::WindowFullScreen); menuBar()->hide(); statusBar()->hide(); bookmarksToolbar()->hide(); m_navigationBar->hide(); m_tabWidget->getTabBar()->hide(); } else { setWindowState(windowState() & ~Qt::WindowFullScreen); menuBar()->setVisible(m_menuBarVisible); statusBar()->setVisible(m_statusBarVisible); m_bookmarksToolbar->setVisible(m_bookmarksToolBarVisible); m_navigationBar->setVisible(m_navigationVisible); m_tabWidget->showTabBar(); } m_actionShowFullScreen->setChecked(make); m_navigationBar->buttonExitFullscreen()->setVisible(make); emit setWebViewMouseTracking(make); } void QupZilla::savePage() { QNetworkRequest request(weView()->url()); DownloadManager* dManager = mApp->downManager(); dManager->download(request, weView()->webPage(), false); } void QupZilla::sendLink() { QUrl url = QUrl("mailto:?body=" + weView()->url().toString()); QDesktopServices::openUrl(url); } void QupZilla::printPage(QWebFrame* frame) { QPrintPreviewDialog* dialog = new QPrintPreviewDialog(this); dialog->resize(800, 750); if (!frame) { connect(dialog, SIGNAL(paintRequested(QPrinter*)), weView(), SLOT(print(QPrinter*))); } else { connect(dialog, SIGNAL(paintRequested(QPrinter*)), frame, SLOT(print(QPrinter*))); } dialog->exec(); dialog->deleteLater(); } void QupZilla::savePageScreen() { PageScreen* p = new PageScreen(weView(), this); p->show(); } void QupZilla::startPrivate(bool state) { static bool askedThisSession = false; Settings settings; bool askNow = settings.value("Browser-View-Settings/AskOnPrivate", true).toBool(); if (state && askNow && !askedThisSession) { QString title = tr("Are you sure you want to turn on private browsing?"); QString text1 = tr("When private browsing is turned on, some actions concerning your privacy will be disabled:"); QStringList actions; actions.append(tr("Webpages are not added to the history.")); actions.append(tr("Current cookies cannot be accessed.")); actions.append(tr("Your session is not stored.")); QString text2 = tr("Until you close the window, you can still click the Back and Forward " "buttons to return to the webpages you have opened."); QString message = QString(QLatin1String("%1

%2

  • %3

%4

")).arg(title, text1, actions.join(QLatin1String("
  • ")), text2); QMessageBox::StandardButton button = QMessageBox::question(this, tr("Start Private Browsing"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if (button != QMessageBox::Yes) { return; } askedThisSession = true; } mApp->togglePrivateBrowsingMode(state); } void QupZilla::resizeEvent(QResizeEvent* event) { m_bookmarksToolbar->setMaximumWidth(width()); QMainWindow::resizeEvent(event); } void QupZilla::keyPressEvent(QKeyEvent* event) { switch (event->key()) { case Qt::Key_Back: weView()->back(); event->accept(); break; case Qt::Key_Forward: weView()->forward(); event->accept(); break; case Qt::Key_Stop: weView()->stop(); event->accept(); break; case Qt::Key_Refresh: weView()->reload(); event->accept(); break; case Qt::Key_HomePage: goHome(); event->accept(); break; case Qt::Key_Favorites: showBookmarksManager(); event->accept(); break; case Qt::Key_Search: searchOnPage(); event->accept(); break; case Qt::Key_F6: case Qt::Key_OpenUrl: openLocation(); event->accept(); break; case Qt::Key_History: showHistoryManager(); event->accept(); break; case Qt::Key_AddFavorite: bookmarkPage(); event->accept(); break; case Qt::Key_News: showRSSManager(); event->accept(); break; case Qt::Key_Tools: showPreferences(); event->accept(); break; case Qt::Key_Tab: if (event->modifiers() == Qt::ControlModifier) { m_tabWidget->createKeyPressEvent(event); } break; case Qt::Key_Backtab: if (event->modifiers() == (Qt::ControlModifier + Qt::ShiftModifier)) { m_tabWidget->createKeyPressEvent(event); } break; default: QMainWindow::keyPressEvent(event); return; } } void QupZilla::mousePressEvent(QMouseEvent* event) { switch (event->button()) { case Qt::XButton1: weView()->back(); break; case Qt::XButton2: weView()->forward(); break; default: QMainWindow::mousePressEvent(event); break; } } void QupZilla::closeEvent(QCloseEvent* event) { if (mApp->isClosing()) { return; } m_isClosing = true; mApp->saveStateSlot(); mApp->aboutToCloseWindow(this); #ifndef Q_WS_MAC if (mApp->windowCount() == 0) { if (quitApp()) { disconnectObjects(); event->accept(); } else { event->ignore(); } return; } #endif disconnectObjects(); event->accept(); } void QupZilla::disconnectObjects() { // Disconnecting all important widgets before deleting this window // so it cannot happen that slots will be invoked after the object // is deleted. // We have to do it this way, because ~QObject is deleting all child // objects with plain delete - not deleteLater(). // // Also using own disconnectObjects() method, not default disconnect() // because we need to retain connections to destroyed(QObject*) signal // in order to avoid crashes for example with setting stylesheets // (QStyleSheet backend is holding list of all widgets) m_tabWidget->disconnectObjects(); m_tabWidget->getTabBar()->disconnectObjects(); foreach(WebTab * tab, m_tabWidget->allTabs()) { tab->disconnectObjects(); tab->view()->disconnectObjects(); tab->view()->webPage()->disconnectObjects(); } } bool QupZilla::quitApp() { if (m_sideBar.data()) { saveSideBarWidth(); } Settings settings; int afterLaunch = settings.value("Web-URL-Settings/afterLaunch", 1).toInt(); bool askOnClose = settings.value("Browser-Tabs-Settings/AskOnClosing", false).toBool(); settings.beginGroup("Browser-View-Settings"); settings.setValue("WindowMaximised", windowState().testFlag(Qt::WindowMaximized)); settings.setValue("WindowGeometry", geometry()); settings.setValue("LocationBarWidth", m_navigationBar->splitter()->sizes().at(0)); settings.setValue("WebSearchBarWidth", m_navigationBar->splitter()->sizes().at(1)); if (m_sideBar.data()) { saveSideBarWidth(); } settings.setValue("SideBarWidth", m_sideBarWidth); settings.setValue("WebViewWidth", m_webViewWidth); if (askOnClose && afterLaunch != 3 && m_tabWidget->count() > 1) { QDialog* dialog = new QDialog(this); Ui_CloseDialog* ui = new Ui_CloseDialog(); ui->setupUi(dialog); ui->textLabel->setText(tr("There are still %1 open tabs and your session won't be stored. Are you sure to quit QupZilla?").arg(m_tabWidget->count())); ui->iconLabel->setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning)); if (dialog->exec() != QDialog::Accepted) { return false; } if (ui->dontAskAgain->isChecked()) { settings.setValue("Browser-Tabs-Settings/AskOnClosing", false); } } QTimer::singleShot(0, mApp, SLOT(quitApplication())); return true; } QupZilla::~QupZilla() { }