1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00
This commit is contained in:
stuarch 2012-12-12 17:06:17 +08:00
commit c329879a70
63 changed files with 10371 additions and 6932 deletions

2
.gitignore vendored
View File

@ -26,3 +26,5 @@ Thumbs.db
tests/modeltest
*.pdb
*.ilk
*.kdev4
*.swp

View File

@ -8,6 +8,7 @@ Type=Application
Icon=qupzilla
Categories=Network;WebBrowser;
Comment=A fast and secure web browser
Comment [ca]=Un navegador ràpid i segur
Comment[cs]=Rychlý a bezpečný webový prohlížeč
Comment[de]=Ein schneller und sicherer Web Browser
Comment[el]=Ένας γρήγορος και ασφαλής περιηγητής ιστού
@ -33,6 +34,7 @@ Comment[zh_CN]=安全又快速的浏览器
Comment[ja]=
Comment[fa]=مرورگر سبک و ایمن وب
GenericName=Web Browser
GenericName[ca]=Navegador web
GenericName[cs]=Webový prohlížeč
GenericName[de]=Web Browser
GenericName[el]=Περιηγητής ιστού
@ -65,6 +67,7 @@ X-Ayatana-Desktop-Shortcuts=NewTab;NewWindow;PrivateBrowsing;
[X-NewTab Shortcut Group]
Name=Open new tab
Name[ca]=Obre una nova pestanya
Name[cs]=Otevřít nový panel
Name[de]=Neuen Tab öffnen
Name[el]=Άνοιγμα νέας καρτέλας
@ -94,6 +97,7 @@ TargetEnvironment=Unity
[X-NewWindow Shortcut Group]
Name=Open new window
Name[ca]=Obre una nova finestra
Name[cs]=Otevřít nové okno
Name[de]=Neues Fenster öffnen
Name[el]=Άνοιγμα νέου παράθυρου
@ -123,6 +127,7 @@ TargetEnvironment=Unity
[X-PrivateBrowsing Shortcut Group]
Name=Start private browsing
Name[ca]=Inicia la navegació privada
Name[cs]=Spustit soukromé prohlížení
Name[de]=Privaten Modus starten
Name[el]=Έναρξη ιδιωτικής περιήγησης

View File

@ -50,6 +50,7 @@
#include "useragentmanager.h"
#include "restoremanager.h"
#include "proxystyle.h"
#include "registerqappassociation.h"
#ifdef Q_OS_MAC
#include <QFileOpenEvent>
@ -93,6 +94,7 @@ MainApplication::MainApplication(int &argc, char** argv)
, m_isRestoring(false)
, m_startingAfterCrash(false)
, m_databaseConnected(false)
, m_registerQAppAssociation(0)
{
#if defined(Q_WS_X11) && !defined(NO_SYSTEM_DATAPATH)
DATADIR = USE_DATADIR;
@ -254,10 +256,17 @@ MainApplication::MainApplication(int &argc, char** argv)
int afterLaunch = settings.value("Web-URL-Settings/afterLaunch", 1).toInt();
settings.setValue("SessionRestore/isRunning", true);
#ifndef PORTABLE_BUILD
bool alwaysCheckDefaultBrowser = settings.value("Web-Browser-Settings/CheckDefaultBrowser", DEFAULT_CHECK_DEFAULTBROWSER).toBool();
if (alwaysCheckDefaultBrowser) {
alwaysCheckDefaultBrowser = checkDefaultWebBrowser();
settings.setValue("Web-Browser-Settings/CheckDefaultBrowser", alwaysCheckDefaultBrowser);
}
#endif
if (checkUpdates) {
new Updater(qupzilla);
}
if (m_startingAfterCrash || afterLaunch == 3) {
m_restoreManager = new RestoreManager(m_activeProfil + "session.dat");
}
@ -665,6 +674,7 @@ void MainApplication::saveSettings()
m_networkmanager->saveCertificates();
m_plugins->shutdown();
qIconProvider->saveIconsToDatabase();
clearTempPath();
AdBlockManager::instance()->save();
QFile::remove(currentProfilePath() + "WebpageIcons.db");
@ -807,12 +817,46 @@ void MainApplication::reloadUserStyleSheet()
settings.endGroup();
}
bool MainApplication::checkDefaultWebBrowser()
{
bool showAgain = true;
if (!associationManager()->isDefaultForAllCapabilities()) {
CheckMessageBox notDefaultDialog(&showAgain, getWindow());
notDefaultDialog.setWindowTitle(tr("Default Browser"));
notDefaultDialog.setMessage(tr("QupZilla is not currently your default browser. Would you like to make it your default browser?"));
notDefaultDialog.setPixmap(style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap(32, 32));
notDefaultDialog.setShowAgainText(tr("Always perform this check when starting QupZilla."));
if (notDefaultDialog.exec() == QDialog::Accepted) {
associationManager()->registerAllAssociation();
}
}
return showAgain;
}
RegisterQAppAssociation* MainApplication::associationManager()
{
if (!m_registerQAppAssociation) {
QString desc = tr("QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.");
QString fileIconPath = QApplication::applicationFilePath() + ",1";
QString appIconPath = QApplication::applicationFilePath() + ",0";
m_registerQAppAssociation = new RegisterQAppAssociation("QupZilla", QApplication::applicationFilePath(), appIconPath, desc, this);
m_registerQAppAssociation->addCapability(".html", "QupZilla.HTML", "HTML File", fileIconPath, RegisterQAppAssociation::FileAssociation);
m_registerQAppAssociation->addCapability(".htm", "QupZilla.HTM", "HTM File", fileIconPath, RegisterQAppAssociation::FileAssociation);
m_registerQAppAssociation->addCapability("http", "QupZilla.HTTP", "URL:HyperText Transfer Protocol", appIconPath, RegisterQAppAssociation::UrlAssociation);
m_registerQAppAssociation->addCapability("https", "QupZilla.HTTPS", "URL:HyperText Transfer Protocol with Privacy", appIconPath, RegisterQAppAssociation::UrlAssociation);
}
return m_registerQAppAssociation;
}
QUrl MainApplication::userStyleSheet(const QString &filePath) const
{
// Set default white background for all sites
// Fixes issue with dark themes when sites don't set background
QString userStyle = AdBlockManager::instance()->elementHidingRules() + "{ display:none !important;}";
QString userStyle /*= "body{background-color:white;}"*/;
userStyle += AdBlockManager::instance()->elementHidingRules() + "{ display:none !important;}";
QFile file(filePath);
if (!filePath.isEmpty() && file.open(QFile::ReadOnly)) {
@ -992,6 +1036,27 @@ QString MainApplication::currentStyle() const
return m_proxyStyle->baseStyle()->objectName();
}
void MainApplication::clearTempPath()
{
QString path = PROFILEDIR + "tmp/";
QDir dir(path);
if (dir.exists()) {
qz_removeDir(path);
}
}
QString MainApplication::tempPath() const
{
QString path = PROFILEDIR + "tmp/";
QDir dir(path);
if (!dir.exists()) {
dir.mkdir(path);
}
return path;
}
MainApplication::~MainApplication()
{
delete m_uaManager;

View File

@ -49,6 +49,7 @@ class SearchEnginesManager;
class DatabaseWriter;
class UserAgentManager;
class ProxyStyle;
class RegisterQAppAssociation;
class QT_QUPZILLA_EXPORT MainApplication : public QtSingleApplication
{
@ -83,9 +84,11 @@ public:
bool checkSettingsDir();
void destroyRestoreManager();
void clearTempPath();
void setProxyStyle(ProxyStyle* style);
QString currentStyle() const;
QString tempPath() const;
QupZilla* getWindow();
CookieManager* cookieManager();
@ -106,6 +109,7 @@ public:
DatabaseWriter* dbWriter() { return m_dbWriter; }
UserAgentManager* uaManager() { return m_uaManager; }
RestoreManager* restoreManager() { return m_restoreManager; }
RegisterQAppAssociation* associationManager();
#ifdef Q_OS_MAC
bool event(QEvent* e);
@ -121,6 +125,7 @@ public slots:
void startPrivateBrowsing();
void reloadUserStyleSheet();
bool checkDefaultWebBrowser();
signals:
void message(Qz::AppMessageType mes, bool state);
@ -173,6 +178,8 @@ private:
bool m_databaseConnected;
QList<PostLaunchAction> m_postLaunchActions;
RegisterQAppAssociation* m_registerQAppAssociation;
};
#endif // MAINAPPLICATION_H

View File

@ -309,7 +309,14 @@ void QupZilla::setupMenu()
m_actionQuit = new QAction(QIcon::fromTheme("application-exit"), tr("Quit"), 0);
m_actionQuit->setMenuRole(QAction::QuitRole);
m_actionQuit->setShortcut(QKeySequence(QKeySequence::Quit));
QKeySequence quitSequence = QKeySequence(QKeySequence::Quit);
#ifdef Q_WS_X11
// QKeySequence::Quit returns a non-empty sequence on X11 only when running Gnome or Kde
if (quitSequence.isEmpty()) {
quitSequence = QKeySequence(Qt::CTRL + Qt::Key_Q);
}
#endif
m_actionQuit->setShortcut(quitSequence);
connect(m_actionQuit, SIGNAL(triggered()), this, SLOT(quitApp()));
/*************
@ -317,7 +324,7 @@ void QupZilla::setupMenu()
*************/
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(QIcon(":/icons/menu/new-tab.png"), tr("New Tab"), this, SLOT(addTab()))->setShortcut(QKeySequence("Ctrl+T"));
m_menuFile->addAction(QIcon::fromTheme("document-open-remote"), 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"));
@ -582,9 +589,13 @@ void QupZilla::loadSettings()
m_webViewWidth = settings.value("WebViewWidth", 2000).toInt();
const QString &activeSideBar = settings.value("SideBar", "None").toString();
settings.endGroup();
bool adBlockEnabled = settings.value("AdBlock/enabled", true).toBool();
m_adblockIcon->setEnabled(adBlockEnabled);
settings.beginGroup("Shortcuts");
m_useTabNumberShortcuts = settings.value("useTabNumberShortcuts", true).toBool();
m_useSpeedDialNumberShortcuts = settings.value("useSpeedDialNumberShortcuts", true).toBool();
settings.endGroup();
m_adblockIcon->setEnabled(settings.value("AdBlock/enabled", true).toBool());
statusBar()->setVisible(showStatusBar);
m_bookmarksToolbar->setVisible(showBookmarksToolbar);
@ -1727,14 +1738,14 @@ void QupZilla::keyPressEvent(QKeyEvent* event)
}
if (number != -1) {
if (event->modifiers() & Qt::AltModifier) {
if (event->modifiers() & Qt::AltModifier && m_useTabNumberShortcuts) {
if (number == 9) {
number = m_tabWidget->count();
}
m_tabWidget->setCurrentIndex(number - 1);
return;
}
if (event->modifiers() & Qt::ControlModifier) {
if (event->modifiers() & Qt::ControlModifier && m_useSpeedDialNumberShortcuts) {
const QUrl &url = mApp->plugins()->speedDial()->urlForShortcut(number - 1);
if (url.isValid()) {
loadAddress(url);

View File

@ -283,8 +283,12 @@ private:
int m_webViewWidth;
bool m_usingTransparentBackground;
//Used for F11 FullScreen remember visibility
//of menubar and statusbar
// Shortcuts
bool m_useTabNumberShortcuts;
bool m_useSpeedDialNumberShortcuts;
// Used for F11 FullScreen remember visibility
// of menubar and statusbar
bool m_menuBarVisible;
bool m_statusBarVisible;
bool m_navigationVisible;

View File

@ -96,8 +96,10 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Qz::NewTabPositionFlags)
#ifdef Q_OS_WIN
#define DEFAULT_CHECK_UPDATES true
#define DEFAULT_CHECK_DEFAULTBROWSER true
#else
#define DEFAULT_CHECK_UPDATES false
#define DEFAULT_CHECK_DEFAULTBROWSER false
#endif
#ifdef Q_OS_WIN

View File

@ -19,7 +19,7 @@
<file>icons/locationbar/unknownpage.png</file>
<file>icons/menu/history.png</file>
<file>icons/menu/history_entry.png</file>
<file>icons/menu/popup.png</file>
<file>icons/menu/new-tab.png</file>
<file>icons/menu/qt.png</file>
<file>icons/menu/rss.png</file>
<file>icons/other/about.png</file>
@ -68,5 +68,7 @@
<file>icons/sites/wikipedia.png</file>
<file>icons/sites/yahoo.png</file>
<file>icons/sites/youtube.png</file>
<file>icons/preferences/preferences-desktop-keyboard-shortcuts.png</file>
<file>icons/menu/tab.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -78,7 +78,7 @@ void DesktopNotificationsFactory::showNotification(const QPixmap &icon, const QS
break;
case DesktopNative:
#if defined(Q_WS_X11) && !defined(DISABLE_DBUS)
QFile tmp(QDir::tempPath() + "/qupzilla_notif.png");
QFile tmp(mApp->tempPath() + "/qupzilla_notif.png");
tmp.open(QFile::WriteOnly);
icon.save(tmp.fileName());
@ -105,7 +105,7 @@ void DesktopNotificationsFactory::showNotification(const QPixmap &icon, const QS
void DesktopNotificationsFactory::nativeNotificationPreview()
{
#if defined(Q_WS_X11) && !defined(DISABLE_DBUS)
QFile tmp(QDir::tempPath() + "/qupzilla_notif.png");
QFile tmp(mApp->tempPath() + "/qupzilla_notif.png");
tmp.open(QFile::WriteOnly);
QPixmap(":icons/preferences/dialog-question.png").save(tmp.fileName());

View File

@ -182,7 +182,7 @@ void DownloadFileHelper::optionsDialogAccepted(int finish)
}
}
else {
fileNameChoosed(QDir::tempPath() + "/" + m_h_fileName, true);
fileNameChoosed(mApp->tempPath() + "/" + m_h_fileName, true);
}
}
@ -210,7 +210,7 @@ void DownloadFileHelper::fileNameChoosed(const QString &name, bool fileNameAutoG
m_fileName = qz_ensureUniqueFilename(m_fileName);
}
if (!m_path.contains(QDir::tempPath())) {
if (!m_path.contains(mApp->tempPath())) {
m_lastDownloadPath = m_path;
}

View File

@ -450,11 +450,14 @@ void HistoryModel::init()
return;
}
const qint64 &minTimestamp = query.value(0).toLongLong();
if (minTimestamp <= 0) {
return;
}
const QDate &today = QDate::currentDate();
const QDate &week = today.addDays(1 - today.dayOfWeek());
const QDate &month = QDate(today.year(), today.month(), 1);
const qint64 &minTimestamp = query.value(0).toLongLong();
const qint64 &currentTimestamp = QDateTime::currentMSecsSinceEpoch();
qint64 timestamp = currentTimestamp;

View File

@ -188,7 +188,8 @@ SOURCES += \
session/restoremanager.cpp \
network/schemehandlers/qupzillaschemehandler.cpp \
network/schemehandlers/adblockschemehandler.cpp \
network/schemehandlers/fileschemehandler.cpp
network/schemehandlers/fileschemehandler.cpp \
other/registerqappassociation.cpp
HEADERS += \
webview/tabpreview.h \
@ -324,7 +325,6 @@ HEADERS += \
tools/focusselectlineedit.h \
navigation/completer/locationcompleterdelegate.h \
navigation/completer/locationcompleter.h \
navigation/completer/locationcompletermodel.h \
navigation/completer/locationcompleterview.h \
history/history.h \
history/historymodel.h \
@ -345,7 +345,8 @@ HEADERS += \
network/schemehandlers/schemehandler.h \
network/schemehandlers/qupzillaschemehandler.h \
network/schemehandlers/adblockschemehandler.h \
network/schemehandlers/fileschemehandler.h
network/schemehandlers/fileschemehandler.h \
other/registerqappassociation.h
FORMS += \
preferences/autofillmanager.ui \

View File

@ -27,6 +27,7 @@ LocationCompleterModel* LocationCompleter::s_model = 0;
LocationCompleter::LocationCompleter(QObject* parent)
: QObject(parent)
, m_locationBar(0)
, m_ignoreCurrentChangedSignal(false)
{
if (!s_view) {
s_model = new LocationCompleterModel;
@ -63,6 +64,10 @@ void LocationCompleter::showMostVisited()
void LocationCompleter::currentChanged(const QModelIndex &index)
{
if (m_ignoreCurrentChangedSignal) {
return;
}
QString completion = index.data().toString();
if (completion.isEmpty()) {
@ -77,6 +82,7 @@ void LocationCompleter::popupClosed()
disconnect(s_view->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(currentChanged(QModelIndex)));
disconnect(s_view, SIGNAL(clicked(QModelIndex)), this, SIGNAL(completionActivated()));
disconnect(s_view, SIGNAL(closed()), this, SLOT(popupClosed()));
disconnect(s_view, SIGNAL(aboutToActivateTab(TabPosition)), m_locationBar, SLOT(clear()));
}
void LocationCompleter::showPopup()
@ -102,6 +108,7 @@ void LocationCompleter::showPopup()
connect(s_view->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(currentChanged(QModelIndex)));
connect(s_view, SIGNAL(clicked(QModelIndex)), this, SIGNAL(completionActivated()));
connect(s_view, SIGNAL(closed()), this, SLOT(popupClosed()));
connect(s_view, SIGNAL(aboutToActivateTab(TabPosition)), m_locationBar, SLOT(clear()));
adjustPopupSize();
}
@ -114,7 +121,9 @@ void LocationCompleter::adjustPopupSize()
popupHeight += 2 * s_view->frameWidth();
s_view->resize(s_view->width(), popupHeight);
m_ignoreCurrentChangedSignal = true;
s_view->setCurrentIndex(QModelIndex());
m_ignoreCurrentChangedSignal = false;
s_view->show();
m_originalText = m_locationBar->text();

View File

@ -55,6 +55,7 @@ private:
LocationBar* m_locationBar;
QString m_originalText;
bool m_ignoreCurrentChangedSignal;
static LocationCompleterView* s_view;
static LocationCompleterModel* s_model;

View File

@ -28,6 +28,7 @@ LocationCompleterDelegate::LocationCompleterDelegate(LocationCompleterView* pare
: QStyledItemDelegate(parent)
, m_rowHeight(0)
, m_padding(0)
, m_drawSwitchToTab(true)
, m_view(parent)
{
}
@ -109,8 +110,20 @@ void LocationCompleterDelegate::paint(QPainter* painter, const QStyleOptionViewI
QRect linkRect(titleRect.x(), infoYPos, titleRect.width(), opt.fontMetrics.height());
QString link(opt.fontMetrics.elidedText(index.data(Qt::DisplayRole).toString(), Qt::ElideRight, linkRect.width()));
painter->setFont(opt.font);
TabPosition pos = index.data(LocationCompleterModel::TabPositionRole).value<TabPosition>();
if (m_drawSwitchToTab && pos.windowIndex != -1) {
const QIcon tabIcon = QIcon(":icons/menu/tab.png");
QRect iconRect(linkRect);
iconRect.setWidth(m_padding + 16 + m_padding);
tabIcon.paint(painter, iconRect);
drawHighlightedTextLine(linkRect, link, searchText, painter, style, opt, colorLinkRole);
QRect textRect(linkRect);
textRect.setX(textRect.x() + m_padding + 16 + m_padding);
drawTextLine(textRect, tr("Switch to tab"), painter, style, opt, colorLinkRole);
}
else {
drawHighlightedTextLine(linkRect, link, searchText, painter, style, opt, colorLinkRole);
}
// Draw line at the very bottom of item if the item is not highlighted
if (!(opt.state & QStyle::State_Selected)) {
@ -288,3 +301,9 @@ QSize LocationCompleterDelegate::sizeHint(const QStyleOptionViewItem &option, co
return QSize(200, m_rowHeight);
}
void LocationCompleterDelegate::drawSwitchToTab(bool enable)
{
m_drawSwitchToTab = enable;
}

View File

@ -32,6 +32,8 @@ public:
void paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
void drawSwitchToTab(bool enable);
private:
void drawHighlightedTextLine(const QRect &rect, QString text, const QString &searchText,
QPainter* painter, const QStyle* style, const QStyleOptionViewItemV4 &option,
@ -45,6 +47,7 @@ private:
mutable int m_rowHeight;
mutable int m_padding;
bool m_drawSwitchToTab;
LocationCompleterView* m_view;
};

View File

@ -19,6 +19,8 @@
#include "iconprovider.h"
#include "qzsettings.h"
#include "mainapplication.h"
#include "qupzilla.h"
#include "tabwidget.h"
#include <QSqlQuery>
@ -37,6 +39,7 @@ bool countBiggerThan(const QStandardItem* i1, const QStandardItem* i2)
void LocationCompleterModel::refreshCompletions(const QString &string)
{
if (m_lastCompletion == string) {
refreshTabPositions();
return;
}
@ -70,6 +73,9 @@ void LocationCompleterModel::refreshCompletions(const QString &string)
item->setData(query.value(3), CountRole);
item->setData(QVariant(true), BookmarkRole);
item->setData(string, SearchStringRole);
if (qzSettings->showSwitchTab) {
item->setData(QVariant::fromValue<TabPosition>(tabPositionForUrl(url)), TabPositionRole);
}
urlList.append(url);
itemList.append(item);
@ -93,6 +99,9 @@ void LocationCompleterModel::refreshCompletions(const QString &string)
item->setData(query.value(3), CountRole);
item->setData(QVariant(false), BookmarkRole);
item->setData(string, SearchStringRole);
if (qzSettings->showSwitchTab) {
item->setData(QVariant::fromValue<TabPosition>(tabPositionForUrl(url)), TabPositionRole);
}
itemList.append(item);
}
@ -120,6 +129,9 @@ void LocationCompleterModel::showMostVisited()
item->setData(query.value(0), IdRole);
item->setData(query.value(2), TitleRole);
item->setData(QVariant(false), BookmarkRole);
if (qzSettings->showSwitchTab) {
item->setData(QVariant::fromValue<TabPosition>(tabPositionForUrl(url)), TabPositionRole);
}
appendRow(item);
}
@ -186,3 +198,43 @@ QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, const
return sqlQuery;
}
TabPosition LocationCompleterModel::tabPositionForUrl(const QUrl &url) const
{
return tabPositionForEncodedUrl(url.toEncoded());
}
TabPosition LocationCompleterModel::tabPositionForEncodedUrl(const QString &encodedUrl) const
{
QList<QupZilla*> windows = mApp->mainWindows();
int currentWindowIdx = windows.indexOf(mApp->getWindow());
windows.prepend(mApp->getWindow());
for (int win = 0; win < windows.count(); ++win) {
QupZilla* mainWin = windows.at(win);
QList<WebTab*> tabs = mainWin->tabWidget()->allTabs();
for (int tab = 0; tab < tabs.count(); ++tab) {
if (tabs[tab]->url().toEncoded() == encodedUrl) {
TabPosition pos;
pos.windowIndex = win == 0 ? currentWindowIdx : win - 1;
pos.tabIndex = tab;
return pos;
}
}
}
return TabPosition();
}
void LocationCompleterModel::refreshTabPositions()
{
if (!qzSettings->showSwitchTab) {
return;
}
for (int row = 0; row < rowCount(); ++row) {
QStandardItem* aItem = item(row);
if (!aItem) {
continue;
}
aItem->setData(QVariant::fromValue<TabPosition>(tabPositionForEncodedUrl(aItem->text())), TabPositionRole);
}
}

View File

@ -20,9 +20,21 @@
#include <QStandardItemModel>
#include "qz_namespace.h"
class QSqlQuery;
class QUrl;
struct TabPosition {
int windowIndex;
int tabIndex;
TabPosition()
: windowIndex(-1)
, tabIndex(-1)
{}
};
Q_DECLARE_METATYPE(TabPosition)
class LocationCompleterModel : public QStandardItemModel
{
public:
@ -31,17 +43,14 @@ public:
BookmarkRole = Qt::UserRole + 2,
IdRole = Qt::UserRole + 3,
SearchStringRole = Qt::UserRole + 4,
CountRole = Qt::UserRole + 5
CountRole = Qt::UserRole + 5,
TabPositionRole = Qt::UserRole + 6
};
explicit LocationCompleterModel(QObject* parent = 0);
void refreshCompletions(const QString &string);
void showMostVisited();
signals:
public slots:
private:
enum Type {
HistoryAndBookmarks = 0,
@ -52,9 +61,11 @@ private:
QSqlQuery createQuery(const QString &searchString, const QString &orderBy, const QList<QUrl> &alreadyFound,
int limit, bool bookmarks = false, bool exactMatch = false);
TabPosition tabPositionForUrl(const QUrl &url) const;
TabPosition tabPositionForEncodedUrl(const QString &encodedUrl) const;
void refreshTabPositions();
QString m_lastCompletion;
};
#endif // LOCATIONCOMPLETERMODEL_H

View File

@ -17,8 +17,13 @@
* ============================================================ */
#include "locationcompleterview.h"
#include "locationcompletermodel.h"
#include "locationcompleterdelegate.h"
#include "mainapplication.h"
#include "qupzilla.h"
#include "history.h"
#include "tabwidget.h"
#include "qzsettings.h"
#include "tabbedwebview.h"
#include <QKeyEvent>
#include <QApplication>
@ -63,6 +68,20 @@ bool LocationCompleterView::eventFilter(QObject* object, QEvent* event)
}
switch (keyEvent->key()) {
case Qt::Key_Return:
case Qt::Key_Enter:
if (qzSettings->showSwitchTab && !(keyEvent->modifiers() & Qt::ShiftModifier)) {
QModelIndex idx = selectionModel()->currentIndex();
if (idx.isValid()) {
TabPosition pos = idx.data(LocationCompleterModel::TabPositionRole).value<TabPosition>();
if (pos.windowIndex != -1) {
activateTab(pos);
return true;
}
}
}
break;
case Qt::Key_End:
case Qt::Key_Home:
if (keyEvent->modifiers() & Qt::ControlModifier) {
@ -134,12 +153,35 @@ bool LocationCompleterView::eventFilter(QObject* object, QEvent* event)
case Qt::Key_PageUp:
case Qt::Key_PageDown:
return false;
case Qt::Key_Shift:
// don't switch if there is no hovered or selected index to not disturb typing
if (qzSettings->showSwitchTab && (selectionModel()->currentIndex().isValid() || m_hoveredIndex.isValid())) {
static_cast<LocationCompleterDelegate*>(itemDelegate())->drawSwitchToTab(false);
viewport()->update();
return true;
}
break;
} // switch (keyEvent->key())
(static_cast<QObject*>(focusProxy()))->event(keyEvent);
return true;
}
case QEvent::KeyRelease: {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
switch (keyEvent->key()) {
case Qt::Key_Shift:
if (qzSettings->showSwitchTab) {
static_cast<LocationCompleterDelegate*>(itemDelegate())->drawSwitchToTab(true);
viewport()->update();
return true;
}
}
}
case QEvent::Show:
m_ignoreNextMouseMove = true;
break;
@ -170,6 +212,9 @@ void LocationCompleterView::close()
QListView::hide();
verticalScrollBar()->setValue(0);
if (qzSettings->showSwitchTab) {
static_cast<LocationCompleterDelegate*>(itemDelegate())->drawSwitchToTab(true);
}
}
void LocationCompleterView::currentChanged(const QModelIndex &current, const QModelIndex &previous)
@ -203,3 +248,37 @@ void LocationCompleterView::mouseMoveEvent(QMouseEvent* event)
QListView::mouseMoveEvent(event);
}
void LocationCompleterView::mouseReleaseEvent(QMouseEvent* event)
{
if (qzSettings->showSwitchTab && !(event->modifiers() & Qt::ShiftModifier) && m_hoveredIndex.isValid()) {
TabPosition pos = m_hoveredIndex.data(LocationCompleterModel::TabPositionRole).value<TabPosition>();
if (pos.windowIndex != -1) {
event->accept();
activateTab(pos);
}
else {
QListView::mouseReleaseEvent(event);
}
}
else {
QListView::mouseReleaseEvent(event);
}
}
void LocationCompleterView::activateTab(TabPosition pos)
{
QupZilla* win = mApp->mainWindows().at(pos.windowIndex);
if (mApp->getWindow() != win || mApp->getWindow()->tabWidget()->currentIndex() != pos.tabIndex) {
emit aboutToActivateTab(pos);
close();
win->tabWidget()->setCurrentIndex(pos.tabIndex);
win->show();
win->activateWindow();
win->raise();
}
else {
close();
win->weView()->setFocus();
}
}

View File

@ -21,6 +21,7 @@
#include <QListView>
#include "qz_namespace.h"
#include "locationcompletermodel.h"
class QT_QUPZILLA_EXPORT LocationCompleterView : public QListView
{
@ -34,15 +35,18 @@ public:
signals:
void closed();
void aboutToActivateTab(TabPosition pos);
public slots:
void close();
private slots:
void currentChanged(const QModelIndex &current, const QModelIndex &previous);
void activateTab(TabPosition pos);
protected:
void mouseMoveEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);
private:
bool m_ignoreNextMouseMove;

View File

@ -174,6 +174,8 @@ void WebSearchBar::setupEngines()
void WebSearchBar::searchChanged(const ButtonWithMenu::Item &item)
{
selectAll();
setFocus();
setPlaceholderText(item.text);
m_completerModel->setStringList(QStringList());

View File

@ -32,6 +32,7 @@ void QzSettings::loadSettings()
addCountryWithAlt = settings.value("AddCountryDomainWithAltKey", true).toBool();
showLoadingProgress = settings.value("ShowLoadingProgress", false).toBool();
showLocationSuggestions = settings.value("showSuggestions", 0).toInt();
showSwitchTab = settings.value("showSwitchTab", true).toBool();
settings.endGroup();
settings.beginGroup("SearchEngines");

View File

@ -37,6 +37,7 @@ public:
bool addCountryWithAlt;
bool showLoadingProgress;
int showLocationSuggestions;
bool showSwitchTab;
// SearchEngines
bool showSearchSuggestions;

View File

@ -0,0 +1,499 @@
/* ============================================================
* Copyright (C) 2012 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
* This file is part of QupZilla - WebKit based browser 2010-2012
* by David Rosca <nowrep@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "registerqappassociation.h"
#ifdef Q_OS_WIN
#include "ShlObj.h"
#include <QMessageBox>
#endif
#include <QStringList>
#include <QSettings>
#include <QDir>
RegisterQAppAssociation::RegisterQAppAssociation(QObject* parent) :
QObject(parent)
{
setPerMachineRegisteration(false);
}
RegisterQAppAssociation::RegisterQAppAssociation(const QString &appRegisteredName, const QString &appPath, const QString &appIcon,
const QString &appDesc, QObject* parent)
: QObject(parent)
{
setPerMachineRegisteration(false);
setAppInfo(appRegisteredName, appPath, appIcon, appDesc);
}
RegisterQAppAssociation::~RegisterQAppAssociation()
{
}
void RegisterQAppAssociation::addCapability(const QString &assocName, const QString &progId,
const QString &desc, const QString &iconPath, AssociationType type)
{
_assocDescHash.insert(progId, QPair<QString, QString>(desc, QDir::toNativeSeparators(iconPath)));
switch (type) {
case FileAssociation:
_fileAssocHash.insert(assocName, progId);
break;
case UrlAssociation:
_urlAssocHash.insert(assocName, progId);
break;
default:
break;
}
}
void RegisterQAppAssociation::removeCapability(const QString &assocName)
{
_fileAssocHash.remove(assocName);
_urlAssocHash.remove(assocName);
}
void RegisterQAppAssociation::setAppInfo(const QString &appRegisteredName, const QString &appPath,
const QString &appIcon, const QString &appDesc)
{
_appRegisteredName = appRegisteredName;
_appPath = QDir::toNativeSeparators(appPath);
_appIcon = QDir::toNativeSeparators(appIcon);
_appDesc = appDesc;
}
bool RegisterQAppAssociation::isPerMachineRegisteration()
{
#ifdef Q_OS_WIN
return (_UserRootKey == "HKEY_LOCAL_MACHINE");
#else
return false;
#endif
}
void RegisterQAppAssociation::setPerMachineRegisteration(bool enable)
{
#ifdef Q_OS_WIN
if (enable) {
_UserRootKey = "HKEY_LOCAL_MACHINE";
}
else {
_UserRootKey = "HKEY_CURRENT_USER";
}
#else
Q_UNUSED(enable)
#endif
}
#ifdef Q_OS_WIN
bool RegisterQAppAssociation::registerAppCapabilities()
{
if (!isVistaOrNewer()) {
return true;
}
// Vista and newer
QSettings regLocalMachine("HKEY_LOCAL_MACHINE", QSettings::NativeFormat);
QString capabilitiesKey = regLocalMachine.value("Software/RegisteredApplications/" + _appRegisteredName).toString();
if (capabilitiesKey.isEmpty()) {
regLocalMachine.setValue("Software/RegisteredApplications/" + _appRegisteredName,
QString("Software\\" + _appRegisteredName + "\\Capabilities"));
capabilitiesKey = regLocalMachine.value("Software/RegisteredApplications/" + _appRegisteredName).toString();
if (capabilitiesKey.isEmpty()) {
QMessageBox::warning(0, tr("Warning!"),
tr("There are some problems. Please, reinstall QupZilla.\n"
"Maybe relaunch with administrator right do a magic for you! ;)"));
return false;
}
}
capabilitiesKey.replace("\\", "/");
QHash<QString, QPair<QString, QString> >::const_iterator it = _assocDescHash.constBegin();
while (it != _assocDescHash.constEnd()) {
createProgId(it.key());
++it;
}
regLocalMachine.setValue(capabilitiesKey + "/ApplicationDescription", _appDesc);
regLocalMachine.setValue(capabilitiesKey + "/ApplicationIcon", _appIcon);
regLocalMachine.setValue(capabilitiesKey + "/ApplicationName", _appRegisteredName);
QHash<QString, QString>::const_iterator i = _fileAssocHash.constBegin();
while (i != _fileAssocHash.constEnd()) {
regLocalMachine.setValue(capabilitiesKey + "/FileAssociations/" + i.key(), i.value());
++i;
}
i = _urlAssocHash.constBegin();
while (i != _urlAssocHash.constEnd()) {
regLocalMachine.setValue(capabilitiesKey + "/URLAssociations/" + i.key(), i.value());
++i;
}
regLocalMachine.setValue(capabilitiesKey + "/Startmenu/StartMenuInternet", _appPath);
return true;
}
bool RegisterQAppAssociation::isVistaOrNewer()
{
return (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA &&
QSysInfo::windowsVersion() <= QSysInfo::WV_NT_based);
}
#endif
void RegisterQAppAssociation::registerAssociation(const QString &assocName, AssociationType type)
{
#ifdef Q_OS_WIN
if (isVistaOrNewer()) { // Vista and newer
IApplicationAssociationRegistration* pAAR;
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration,
NULL,
CLSCTX_INPROC,
__uuidof(IApplicationAssociationRegistration),
(void**)&pAAR);
if (SUCCEEDED(hr)) {
switch (type) {
case FileAssociation:
hr = pAAR->SetAppAsDefault(_appRegisteredName.toStdWString().c_str(),
assocName.toStdWString().c_str(),
AT_FILEEXTENSION);
break;
case UrlAssociation: {
QSettings regCurrentUserRoot("HKEY_CURRENT_USER", QSettings::NativeFormat);
QString currentUrlDefault =
regCurrentUserRoot.value("Software/Microsoft/Windows/Shell/Associations/UrlAssociations/"
+ assocName + "/UserChoice/Progid").toString();
hr = pAAR->SetAppAsDefault(_appRegisteredName.toStdWString().c_str(),
assocName.toStdWString().c_str(),
AT_URLPROTOCOL);
if (SUCCEEDED(hr)
&& !currentUrlDefault.isEmpty()
&& currentUrlDefault != _urlAssocHash.value(assocName)) {
regCurrentUserRoot.setValue("Software/Classes"
+ assocName
+ "/shell/open/command/backup_progid", currentUrlDefault);
}
}
break;
default:
break;
}
pAAR->Release();
}
}
else { // Older than Vista
QSettings regUserRoot(_UserRootKey, QSettings::NativeFormat);
regUserRoot.beginGroup("Software/Classes");
QSettings regClassesRoot("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
switch (type) {
case FileAssociation: {
QString progId = _fileAssocHash.value(assocName);
createProgId(progId);
QString currentDefault = regClassesRoot.value(assocName + "/Default").toString();
if (!currentDefault.isEmpty()
&& currentDefault != progId
&& regUserRoot.value(assocName + "/backup_val").toString() != progId) {
regUserRoot.setValue(assocName + "/backup_val", currentDefault);
}
regUserRoot.setValue(assocName + "/.", progId);
}
break;
case UrlAssociation: {
QString progId = _urlAssocHash.value(assocName);
createProgId(progId);
QString currentDefault = regClassesRoot.value(assocName + "/shell/open/command/Default").toString();
QString command = "\"" + _appPath + "\" \"%1\"";
if (!currentDefault.isEmpty()
&& currentDefault != command
&& regUserRoot.value(assocName + "/shell/open/command/backup_val").toString() != command) {
regUserRoot.setValue(assocName + "/shell/open/command/backup_val", currentDefault);
}
regUserRoot.setValue(assocName + "/shell/open/command/.", command);
regUserRoot.setValue(assocName + "/URL Protocol", "");
break;
}
default:
break;
}
regUserRoot.endGroup();
}
#else
Q_UNUSED(assocName)
Q_UNUSED(type)
#endif
}
void RegisterQAppAssociation::registerAllAssociation()
{
#ifdef Q_OS_WIN
if (isVistaOrNewer() && !registerAppCapabilities()) {
return;
}
#endif
QHash<QString, QString>::const_iterator i = _fileAssocHash.constBegin();
while (i != _fileAssocHash.constEnd()) {
registerAssociation(i.key(), FileAssociation);
++i;
}
i = _urlAssocHash.constBegin();
while (i != _urlAssocHash.constEnd()) {
registerAssociation(i.key(), UrlAssociation);
++i;
}
#ifdef Q_OS_WIN
if (!isVistaOrNewer()) {
// On Windows Vista or newer for updating icons 'pAAR->SetAppAsDefault()'
// calls 'SHChangeNotify()'. Thus, we just need care about older Windows.
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0 , 0);
}
#endif
}
void RegisterQAppAssociation::createProgId(const QString &progId)
{
#ifdef Q_OS_WIN
QSettings regUserRoot(_UserRootKey, QSettings::NativeFormat);
regUserRoot.beginGroup("Software/Classes");
QPair<QString, QString> pair = _assocDescHash.value(progId);
regUserRoot.setValue(progId + "/.", pair.first);
regUserRoot.setValue(progId + "/shell/.", "open");
regUserRoot.setValue(progId + "/DefaultIcon/.", pair.second);
regUserRoot.setValue(progId + "/shell/open/command/.", QString("\"" + _appPath + "\" \"%1\""));
regUserRoot.endGroup();
#else
Q_UNUSED(progId)
#endif
}
bool RegisterQAppAssociation::isDefaultApp(const QString &assocName, AssociationType type)
{
#ifdef Q_OS_WIN
if (isVistaOrNewer()) {
QSettings regCurrentUserRoot("HKEY_CURRENT_USER", QSettings::NativeFormat);
switch (type) {
case FileAssociation: {
regCurrentUserRoot.beginGroup("Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts");
if (regCurrentUserRoot.childGroups().contains(assocName, Qt::CaseInsensitive)) {
return (_fileAssocHash.value(assocName)
== regCurrentUserRoot.value(assocName + "/UserChoice/Progid"));
}
else {
regCurrentUserRoot.endGroup();
return false;
}
break;
}
case UrlAssociation: {
regCurrentUserRoot.beginGroup("Software/Microsoft/Windows/Shell/Associations/UrlAssociations");
if (regCurrentUserRoot.childGroups().contains(assocName, Qt::CaseInsensitive)) {
return (_urlAssocHash.value(assocName)
== regCurrentUserRoot.value(assocName + "/UserChoice/Progid"));
}
else {
regCurrentUserRoot.endGroup();
return false;
}
}
break;
default:
break;
}
}
else {
QSettings regClassesRoot("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
{
if (!regClassesRoot.childGroups().contains(assocName, Qt::CaseInsensitive)) {
return false;
}
}
switch (type) {
case FileAssociation: {
return (_fileAssocHash.value(assocName)
== regClassesRoot.value(assocName + "/Default"));
}
break;
case UrlAssociation: {
QString currentDefault = regClassesRoot.value(assocName + "/shell/open/command/Default").toString();
currentDefault.remove("\"");
currentDefault.remove("%1");
currentDefault = currentDefault.trimmed();
return (_appPath == currentDefault);
}
break;
default:
break;
}
}
#else
Q_UNUSED(assocName)
Q_UNUSED(type)
#endif
return false;
}
bool RegisterQAppAssociation::isDefaultForAllCapabilities()
{
bool result = true;
QHash<QString, QString>::const_iterator i = _fileAssocHash.constBegin();
while (i != _fileAssocHash.constEnd()) {
bool res = isDefaultApp(i.key(), FileAssociation);
result &= res;
++i;
}
i = _urlAssocHash.constBegin();
while (i != _urlAssocHash.constEnd()) {
bool res = isDefaultApp(i.key(), UrlAssociation);
result &= res;
++i;
}
return result;
}
/***************************************/
/******** CheckMessageBox Class ********/
/***************************************/
CheckMessageBox::CheckMessageBox(bool* defaultShowAgainState, QWidget* parent, Qt::WindowFlags f)
: QDialog(parent, f | Qt::MSWindowsFixedSizeDialogHint),
_showAgainState(defaultShowAgainState)
{
setupUi();
if (defaultShowAgainState) {
showAgainCheckBox->setChecked(*defaultShowAgainState);
}
else {
showAgainCheckBox->hide();
disconnect(showAgainCheckBox, SIGNAL(toggled(bool)), this, SLOT(showAgainStateChanged(bool)));
}
}
CheckMessageBox::CheckMessageBox(const QString &msg, const QPixmap &pixmap,
const QString &str, bool* defaultShowAgainState,
QWidget* parent, Qt::WindowFlags f)
: QDialog(parent, f | Qt::MSWindowsFixedSizeDialogHint),
_showAgainState(defaultShowAgainState)
{
setupUi();
setMessage(msg);
setPixmap(pixmap);
if (defaultShowAgainState) {
setShowAgainText(str);
}
}
CheckMessageBox::~CheckMessageBox()
{
}
void CheckMessageBox::setMessage(const QString &msg)
{
messageLabel->setText(msg);
}
void CheckMessageBox::setShowAgainText(const QString &str)
{
showAgainCheckBox->setText(str);
}
void CheckMessageBox::setPixmap(const QPixmap &pixmap)
{
pixmapLabel->setPixmap(pixmap);
}
void CheckMessageBox::setupUi()
{
setObjectName(QString::fromUtf8("CheckMessageBox"));
gridLayout = new QGridLayout(this);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
horizontalLayout = new QHBoxLayout();
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
verticalLayout_2 = new QVBoxLayout();
verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
pixmapLabel = new QLabel(this);
pixmapLabel->setObjectName(QString::fromUtf8("pixmapLabel"));
verticalLayout_2->addWidget(pixmapLabel);
verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
verticalLayout_2->addItem(verticalSpacer);
horizontalLayout->addLayout(verticalLayout_2);
verticalLayout = new QVBoxLayout();
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
messageLabel = new QLabel(this);
messageLabel->setObjectName(QString::fromUtf8("messageLabel"));
messageLabel->setWordWrap(true);
verticalLayout->addWidget(messageLabel);
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
verticalLayout->addItem(horizontalSpacer);
showAgainCheckBox = new QCheckBox(this);
showAgainCheckBox->setObjectName(QString::fromUtf8("showAgainCheckBox"));
verticalLayout->addWidget(showAgainCheckBox);
horizontalLayout->addLayout(verticalLayout);
gridLayout->addLayout(horizontalLayout, 0, 0, 1, 1);
buttonBox = new QDialogButtonBox(this);
buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::No | QDialogButtonBox::Yes);
gridLayout->addWidget(buttonBox, 1, 0, 1, 1);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
if (_showAgainState) {
showAgainCheckBox->setChecked(*_showAgainState);
connect(showAgainCheckBox, SIGNAL(toggled(bool)), this, SLOT(showAgainStateChanged(bool)));
}
else {
showAgainCheckBox->hide();
}
}
void CheckMessageBox::showAgainStateChanged(bool checked)
{
if (_showAgainState) {
*_showAgainState = checked;
}
}

View File

@ -0,0 +1,115 @@
/* ============================================================
* Copyright (C) 2012 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
* This file is part of QupZilla - WebKit based browser 2010-2012
* by David Rosca <nowrep@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef REGISTERQAPPASSOCIATION_H
#define REGISTERQAPPASSOCIATION_H
#include <QHash>
#include <QPair>
#include "qz_namespace.h"
class QT_QUPZILLA_EXPORT RegisterQAppAssociation : public QObject
{
Q_OBJECT
public:
explicit RegisterQAppAssociation(QObject* parent = 0);
explicit RegisterQAppAssociation(const QString &appRegisteredName, const QString &appPath,
const QString &appIcon = "", const QString &appDesc = "", QObject* parent = 0);
~RegisterQAppAssociation();
enum AssociationType {
FileAssociation,
UrlAssociation
};
void addCapability(const QString &assocName, const QString &progId,
const QString &desc, const QString &iconPath, AssociationType type);
void removeCapability(const QString &assocName);
void setAppInfo(const QString &appRegisteredName, const QString &appPath,
const QString &appIcon = "", const QString &appDesc = "");
bool isPerMachineRegisteration();
void setPerMachineRegisteration(bool enable);
#ifdef Q_OS_WIN
bool registerAppCapabilities();
bool isVistaOrNewer();
#endif
void registerAssociation(const QString &assocName, AssociationType type);
void createProgId(const QString &progId);
bool isDefaultApp(const QString &assocName, AssociationType type);
bool isDefaultForAllCapabilities();
void registerAllAssociation();
private:
QString _appRegisteredName;
QString _appPath;
QString _appIcon;
QString _appDesc;
#ifdef Q_OS_WIN
QString _UserRootKey;
#endif
QHash<QString, QString> _fileAssocHash; // (extention, progId)
QHash<QString, QString> _urlAssocHash; // (protocol, progId)
QHash<QString, QPair<QString, QString> > _assocDescHash; // (progId, (desc, icon))
};
#include <QDialog>
#include <QLabel>
#include <QGridLayout>
#include <QCheckBox>
#include <QDialogButtonBox>
class QT_QUPZILLA_EXPORT CheckMessageBox : public QDialog
{
Q_OBJECT
public:
CheckMessageBox(bool* defaultShowAgainState = 0, QWidget* parent = 0, Qt::WindowFlags f = 0);
CheckMessageBox(const QString &msg, const QPixmap &pixmap,
const QString &str, bool* defaultShowAgainState,
QWidget* parent = 0, Qt::WindowFlags f = 0);
~CheckMessageBox();
void setMessage(const QString &msg);
void setShowAgainText(const QString &str);
void setPixmap(const QPixmap &pixmap);
private:
void setupUi();
bool* _showAgainState;
QGridLayout* gridLayout;
QHBoxLayout* horizontalLayout;
QVBoxLayout* verticalLayout_2;
QLabel* pixmapLabel;
QSpacerItem* verticalSpacer;
QVBoxLayout* verticalLayout;
QLabel* messageLabel;
QSpacerItem* horizontalSpacer;
QCheckBox* showAgainCheckBox;
QDialogButtonBox* buttonBox;
private slots:
void showAgainStateChanged(bool checked);
};
#endif // REGISTERQAPPASSOCIATION_H

View File

@ -43,6 +43,7 @@
#include "tabbedwebview.h"
#include "clearprivatedata.h"
#include "useragentdialog.h"
#include "registerqappassociation.h"
#include <QSettings>
#include <QInputDialog>
@ -66,12 +67,13 @@ Preferences::Preferences(QupZilla* mainClass, QWidget* parent)
ui->listWidget->item(2)->setIcon(QIcon::fromTheme("tab-new-background", QIcon(":/icons/preferences/applications-internet.png")));
ui->listWidget->item(3)->setIcon(QIcon::fromTheme("preferences-system-network", QIcon(":/icons/preferences/applications-webbrowsers.png")));
ui->listWidget->item(4)->setIcon(QIcon::fromTheme("preferences-desktop-font", QIcon(":/icons/preferences/applications-fonts.png")));
ui->listWidget->item(5)->setIcon(QIcon::fromTheme("download", QIcon(":/icons/preferences/mail-inbox.png")));
ui->listWidget->item(6)->setIcon(QIcon::fromTheme("user-identity", QIcon(":/icons/preferences/dialog-password.png")));
ui->listWidget->item(7)->setIcon(QIcon::fromTheme("preferences-system-firewall", QIcon(":/icons/preferences/preferences-system-firewall.png")));
ui->listWidget->item(8)->setIcon(QIcon::fromTheme("preferences-desktop-notification", QIcon(":/icons/preferences/dialog-question.png")));
ui->listWidget->item(9)->setIcon(QIcon::fromTheme("preferences-plugin", QIcon(":/icons/preferences/extension.png")));
ui->listWidget->item(10)->setIcon(QIcon::fromTheme("applications-system", QIcon(":/icons/preferences/applications-system.png")));
ui->listWidget->item(5)->setIcon(QIcon::fromTheme("preferences-desktop-keyboard-shortcuts", QIcon(":/icons/preferences/preferences-desktop-keyboard-shortcuts.png")));
ui->listWidget->item(6)->setIcon(QIcon::fromTheme("download", QIcon(":/icons/preferences/mail-inbox.png")));
ui->listWidget->item(7)->setIcon(QIcon::fromTheme("user-identity", QIcon(":/icons/preferences/dialog-password.png")));
ui->listWidget->item(8)->setIcon(QIcon::fromTheme("preferences-system-firewall", QIcon(":/icons/preferences/preferences-system-firewall.png")));
ui->listWidget->item(9)->setIcon(QIcon::fromTheme("preferences-desktop-notification", QIcon(":/icons/preferences/dialog-question.png")));
ui->listWidget->item(10)->setIcon(QIcon::fromTheme("preferences-plugin", QIcon(":/icons/preferences/extension.png")));
ui->listWidget->item(11)->setIcon(QIcon::fromTheme("applications-system", QIcon(":/icons/preferences/applications-system.png")));
}
else {
ui->listWidget->item(0)->setIcon(QIcon::fromTheme("preferences-desktop", QIcon(":/icons/preferences/preferences-desktop.png")));
@ -79,12 +81,13 @@ Preferences::Preferences(QupZilla* mainClass, QWidget* parent)
ui->listWidget->item(2)->setIcon(QIcon::fromTheme("applications-internet", QIcon(":/icons/preferences/applications-internet.png")));
ui->listWidget->item(3)->setIcon(QIcon::fromTheme("applications-webbrowsers", QIcon(":/icons/preferences/applications-webbrowsers.png")));
ui->listWidget->item(4)->setIcon(QIcon::fromTheme("applications-fonts", QIcon(":/icons/preferences/applications-fonts.png")));
ui->listWidget->item(5)->setIcon(QIcon::fromTheme("mail-inbox", QIcon(":/icons/preferences/mail-inbox.png")));
ui->listWidget->item(6)->setIcon(QIcon::fromTheme("dialog-password", QIcon(":/icons/preferences/dialog-password.png")));
ui->listWidget->item(7)->setIcon(QIcon::fromTheme("preferences-system-firewall", QIcon(":/icons/preferences/preferences-system-firewall.png")));
ui->listWidget->item(8)->setIcon(QIcon::fromTheme("dialog-question", QIcon(":/icons/preferences/dialog-question.png")));
ui->listWidget->item(9)->setIcon(QIcon::fromTheme("extension", QIcon(":/icons/preferences/extension.png")));
ui->listWidget->item(10)->setIcon(QIcon::fromTheme("applications-system", QIcon(":/icons/preferences/applications-system.png")));
ui->listWidget->item(5)->setIcon(QIcon::fromTheme("preferences-desktop-keyboard-shortcuts", QIcon(":/icons/preferences/preferences-desktop-keyboard-shortcuts.png")));
ui->listWidget->item(6)->setIcon(QIcon::fromTheme("mail-inbox", QIcon(":/icons/preferences/mail-inbox.png")));
ui->listWidget->item(7)->setIcon(QIcon::fromTheme("dialog-password", QIcon(":/icons/preferences/dialog-password.png")));
ui->listWidget->item(8)->setIcon(QIcon::fromTheme("preferences-system-firewall", QIcon(":/icons/preferences/preferences-system-firewall.png")));
ui->listWidget->item(9)->setIcon(QIcon::fromTheme("dialog-question", QIcon(":/icons/preferences/dialog-question.png")));
ui->listWidget->item(10)->setIcon(QIcon::fromTheme("extension", QIcon(":/icons/preferences/extension.png")));
ui->listWidget->item(11)->setIcon(QIcon::fromTheme("applications-system", QIcon(":/icons/preferences/applications-system.png")));
}
Settings settings;
@ -99,7 +102,24 @@ Preferences::Preferences(QupZilla* mainClass, QWidget* parent)
ui->afterLaunch->setCurrentIndex(afterLaunch);
ui->checkUpdates->setChecked(settings.value("Web-Browser-Settings/CheckUpdates", DEFAULT_CHECK_UPDATES).toBool());
ui->dontLoadTabsUntilSelected->setChecked(settings.value("Web-Browser-Settings/LoadTabsOnActivation", false).toBool());
#ifdef Q_OS_WIN
ui->checkDefaultBrowser->setChecked(settings.value("Web-Browser-Settings/CheckDefaultBrowser", DEFAULT_CHECK_DEFAULTBROWSER).toBool());
if (mApp->associationManager()->isDefaultForAllCapabilities()) {
ui->checkNowDefaultBrowser->setText(tr("QupZilla is default"));
ui->checkNowDefaultBrowser->setEnabled(false);
}
else {
ui->checkNowDefaultBrowser->setText(tr("Make QupZilla default"));
ui->checkNowDefaultBrowser->setEnabled(true);
connect(ui->checkNowDefaultBrowser, SIGNAL(clicked()), this, SLOT(makeQupZillaDefault()));
}
#else // just Windows
ui->hSpacerDefaultBrowser->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->hLayoutDefaultBrowser->invalidate();
delete ui->hLayoutDefaultBrowser;
delete ui->checkDefaultBrowser;
delete ui->checkNowDefaultBrowser;
#endif
ui->newTabFrame->setVisible(false);
if (m_newTabUrl.isEmpty()) {
ui->newTab->setCurrentIndex(0);
@ -195,6 +215,7 @@ Preferences::Preferences(QupZilla* mainClass, QWidget* parent)
//AddressBar
settings.beginGroup("AddressBar");
ui->addressbarCompletion->setCurrentIndex(settings.value("showSuggestions", 0).toInt());
ui->completionShowSwitchTab->setChecked(settings.value("showSwitchTab", true).toBool());
ui->selectAllOnFocus->setChecked(settings.value("SelectAllTextOnDoubleClick", true).toBool());
ui->selectAllOnClick->setChecked(settings.value("SelectAllTextOnClick", false).toBool());
ui->addCountryWithAlt->setChecked(settings.value("AddCountryDomainWithAltKey", true).toBool());
@ -326,6 +347,12 @@ Preferences::Preferences(QupZilla* mainClass, QWidget* parent)
ui->sizeMinimumLogical->setValue(settings.value("MinimumLogicalFontSize", mApp->webSettings()->fontSize(QWebSettings::MinimumLogicalFontSize)).toInt());
settings.endGroup();
//KEYBOARD SHORTCUTS
settings.beginGroup("Shortcuts");
ui->switchTabsAlt->setChecked(settings.value("useTabNumberShortcuts", true).toBool());
ui->loadSpeedDialsCtrl->setChecked(settings.value("useSpeedDialNumberShortcuts", true).toBool());
settings.endGroup();
//PLUGINS
m_pluginsList = new PluginsManager(this);
ui->pluginsFrame->addWidget(m_pluginsList);
@ -448,8 +475,8 @@ void Preferences::showStackedPage(QListWidgetItem* item)
ui->caption->setText("<b>" + item->text() + "</b>");
ui->stackedWidget->setCurrentIndex(index);
setNotificationPreviewVisible(index == 8);
if (index == 9) {
setNotificationPreviewVisible(index == 9);
if (index == 10) {
m_pluginsList->load();
}
}
@ -481,6 +508,16 @@ void Preferences::setNotificationPreviewVisible(bool state)
}
}
void Preferences::makeQupZillaDefault()
{
#ifdef Q_OS_WIN
disconnect(ui->checkNowDefaultBrowser, SIGNAL(clicked()), this, SLOT(makeQupZillaDefault()));
mApp->associationManager()->registerAllAssociation();
ui->checkNowDefaultBrowser->setText(tr("QupZilla is default"));
ui->checkNowDefaultBrowser->setEnabled(false);
#endif
}
void Preferences::allowCacheChanged(bool state)
{
ui->cacheFrame->setEnabled(state);
@ -837,6 +874,12 @@ void Preferences::saveSettings()
settings.setValue("MinimumLogicalFontSize", ui->sizeMinimumLogical->value());
settings.endGroup();
//KEYBOARD SHORTCUTS
settings.beginGroup("Shortcuts");
settings.setValue("useTabNumberShortcuts", ui->switchTabsAlt->isChecked());
settings.setValue("useSpeedDialNumberShortcuts", ui->loadSpeedDialsCtrl->isChecked());
settings.endGroup();
//BROWSING
settings.beginGroup("Web-Browser-Settings");
settings.setValue("allowFlash", ui->allowPlugins->isChecked());
@ -854,7 +897,9 @@ void Preferences::saveSettings()
settings.setValue("LoadTabsOnActivation", ui->dontLoadTabsUntilSelected->isChecked());
settings.setValue("DefaultZoom", ui->defaultZoom->value());
settings.setValue("XSSAuditing", ui->xssAuditing->isChecked());
#ifdef Q_OS_WIN
settings.setValue("CheckDefaultBrowser", ui->checkDefaultBrowser->isChecked());
#endif
//Cache
settings.setValue("maximumCachedPages", ui->pagesInCache->value());
settings.setValue("AllowLocalCache", ui->allowCache->isChecked());
@ -894,6 +939,7 @@ void Preferences::saveSettings()
//AddressBar
settings.beginGroup("AddressBar");
settings.setValue("showSuggestions", ui->addressbarCompletion->currentIndex());
settings.setValue("showSwitchTab", ui->completionShowSwitchTab->isChecked());
settings.setValue("SelectAllTextOnDoubleClick", ui->selectAllOnFocus->isChecked());
settings.setValue("SelectAllTextOnClick", ui->selectAllOnClick->isChecked());
settings.setValue("AddCountryDomainWithAltKey", ui->addCountryWithAlt->isChecked());

View File

@ -88,6 +88,8 @@ private slots:
void setNotificationPreviewVisible(bool state);
void makeQupZillaDefault();
private:
void closeEvent(QCloseEvent* event);

View File

@ -117,6 +117,11 @@
<string>Fonts</string>
</property>
</item>
<item>
<property name="text">
<string>Keyboard Shortcuts</string>
</property>
</item>
<item>
<property name="text">
<string>Downloads</string>
@ -157,13 +162,88 @@
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="stackedWidgetPage1">
<widget class="QWidget" name="generalPage">
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_24">
<property name="text">
<string>&lt;b&gt;Launching&lt;/b&gt;</string>
<item row="4" column="2">
<widget class="QFrame" name="newTabFrame">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="newTabUrl"/>
</item>
<item>
<widget class="QToolButton" name="newTabUseCurrent">
<property name="text">
<string>Use current</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="12" column="1" colspan="3">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>20</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="cannotDeleteActiveProfileLabel">
<property name="text">
<string>Note: You cannot delete active profile.</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="createProfile">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Create New</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="deleteProfile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
@ -182,6 +262,16 @@
</property>
</spacer>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_24">
<property name="text">
<string>&lt;b&gt;Launching&lt;/b&gt;</string>
</property>
</widget>
</item>
<item row="11" column="2">
<widget class="QComboBox" name="startProfile"/>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
@ -265,105 +355,20 @@
</item>
</widget>
</item>
<item row="8" column="0" colspan="2">
<item row="9" column="0" colspan="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>&lt;b&gt;Profiles&lt;/b&gt;</string>
</property>
</widget>
</item>
<item row="10" column="1">
<item row="11" column="1">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Startup profile:</string>
</property>
</widget>
</item>
<item row="10" column="2">
<widget class="QComboBox" name="startProfile"/>
</item>
<item row="11" column="1" colspan="3">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>20</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="cannotDeleteActiveProfileLabel">
<property name="text">
<string>Note: You cannot delete active profile.</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="createProfile">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Create New</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="deleteProfile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="2">
<widget class="QFrame" name="newTabFrame">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="newTabUrl"/>
</item>
<item>
<widget class="QToolButton" name="newTabUseCurrent">
<property name="text">
<string>Use current</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="QCheckBox" name="checkUpdates">
<property name="text">
@ -371,35 +376,35 @@
</property>
</widget>
</item>
<item row="9" column="1">
<item row="10" column="1">
<widget class="QLabel" name="label_45">
<property name="text">
<string>Active profile:</string>
</property>
</widget>
</item>
<item row="9" column="2">
<item row="10" column="2">
<widget class="QLabel" name="activeProfile">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="17" column="1" colspan="2">
<item row="18" column="1" colspan="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>In order to change language, you must restart browser.</string>
</property>
</widget>
</item>
<item row="13" column="0" colspan="3">
<item row="14" column="0" colspan="3">
<widget class="QLabel" name="label_11">
<property name="text">
<string>&lt;b&gt;Language&lt;/b&gt;</string>
</property>
</widget>
</item>
<item row="14" column="1">
<item row="15" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLabel" name="label_16">
@ -422,7 +427,7 @@
</item>
</layout>
</item>
<item row="14" column="2">
<item row="15" column="2">
<widget class="QComboBox" name="languages"/>
</item>
<item row="5" column="1" colspan="2">
@ -432,7 +437,7 @@
</property>
</widget>
</item>
<item row="7" column="0">
<item row="8" column="0">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -445,9 +450,43 @@
</property>
</spacer>
</item>
<item row="7" column="1" colspan="2">
<layout class="QHBoxLayout" name="hLayoutDefaultBrowser">
<item>
<widget class="QCheckBox" name="checkDefaultBrowser">
<property name="text">
<string>Check to see if QupZilla is the default browser on startup</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="checkNowDefaultBrowser">
<property name="text">
<string>Check Now</string>
</property>
</widget>
</item>
<item>
<spacer name="hSpacerDefaultBrowser">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage2">
<widget class="QWidget" name="appearancePage">
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget_2">
@ -608,14 +647,14 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage3">
<widget class="QWidget" name="tabsPage">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QTabWidget" name="tabWidget_3">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_6">
<widget class="QWidget" name="tabsBehaviourPage">
<attribute name="title">
<string>Tabs behavior</string>
</attribute>
@ -731,7 +770,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_7">
<widget class="QWidget" name="addressBarBehaviourPage">
<attribute name="title">
<string>Address Bar behavior</string>
</attribute>
@ -793,6 +832,16 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="completionShowSwitchTab">
<property name="toolTip">
<string>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</string>
</property>
<property name="text">
<string>Propose to switch tab if completed url is already loaded.</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showLoadingInAddressBar">
<property name="text">
@ -924,7 +973,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage4">
<widget class="QWidget" name="browsingPage">
<layout class="QGridLayout" name="gridLayout_9">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
@ -1513,7 +1562,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<widget class="QWidget" name="fontsPage">
<layout class="QGridLayout" name="gridLayout_15">
<item row="0" column="0" rowspan="2" colspan="3">
<widget class="QLabel" name="label_27">
@ -1705,7 +1754,45 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="downloadPage">
<widget class="QWidget" name="shortcutsPage">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>&lt;b&gt;Shortcuts&lt;/b&gt;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<spacer name="verticalSpacer_13">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="switchTabsAlt">
<property name="text">
<string>Switch to tabs with Alt + number of tab</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="loadSpeedDialsCtrl">
<property name="text">
<string>Load speed dials with Ctrl + number of speed dial</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="downloadsPage">
<layout class="QGridLayout" name="gridLayout_10">
<item row="0" column="0" colspan="4">
<widget class="QLabel" name="label_23">
@ -1864,7 +1951,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage5">
<widget class="QWidget" name="passwordManagerPage">
<layout class="QGridLayout" name="gridLayout_11">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_20">
@ -1926,7 +2013,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage6">
<widget class="QWidget" name="privacyPage">
<layout class="QGridLayout" name="gridLayout_12">
<item row="26" column="1" colspan="4">
<widget class="QCheckBox" name="jscanAccessClipboard">
@ -2111,7 +2198,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page_3">
<widget class="QWidget" name="notificationsPage">
<layout class="QGridLayout" name="gridLayout_17">
<item row="0" column="0" colspan="4">
<widget class="QLabel" name="label_41">
@ -2238,7 +2325,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page">
<widget class="QWidget" name="extensionsPage">
<layout class="QGridLayout" name="gridLayout_14">
<item row="0" column="0" colspan="2">
<widget class="QFrame" name="horizontalFrame">
@ -2257,7 +2344,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetPage7">
<widget class="QWidget" name="otherPage">
<layout class="QGridLayout" name="gridLayout_13">
<item row="9" column="0" colspan="4">
<widget class="QLabel" name="label_9">

View File

@ -46,7 +46,7 @@ TabBar::TabBar(QupZilla* mainClass, TabWidget* tabWidget)
, m_clickedTab(0)
, m_pinnedTabsCount(0)
, m_normalTabWidth(0)
, m_lastTabWidth(0)
, m_activeTabWidth(0)
{
setObjectName("tabbar");
setContextMenuPolicy(Qt::CustomContextMenu);
@ -120,7 +120,7 @@ void TabBar::contextMenuRequested(const QPoint &position)
m_clickedTab = index;
QMenu menu;
menu.addAction(QIcon(":/icons/menu/popup.png"), tr("&New tab"), p_QupZilla, SLOT(addTab()));
menu.addAction(QIcon(":/icons/menu/new-tab.png"), tr("&New tab"), p_QupZilla, SLOT(addTab()));
menu.addSeparator();
if (index != -1) {
WebTab* webTab = qobject_cast<WebTab*>(m_tabWidget->widget(m_clickedTab));
@ -174,15 +174,19 @@ QSize TabBar::tabSizeHint(int index) const
}
static int PINNED_TAB_WIDTH = -1;
static int MINIMUM_ACTIVE_TAB_WIDTH = -1;
if (PINNED_TAB_WIDTH == -1) {
PINNED_TAB_WIDTH = 16 + style()->pixelMetric(QStyle::PM_TabBarTabHSpace, 0, this);
MINIMUM_ACTIVE_TAB_WIDTH = PINNED_TAB_WIDTH + style()->pixelMetric(QStyle::PM_TabCloseIndicatorWidth, 0, this);
// just a hack: we want to be sure buttonAddTab and buttonListTabs can't cover the active tab
MINIMUM_ACTIVE_TAB_WIDTH = qMax(MINIMUM_ACTIVE_TAB_WIDTH, 6 + m_tabWidget->buttonListTabs()->width() + m_tabWidget->buttonAddTab()->width());
}
QSize size = QTabBar::tabSizeHint(index);
WebTab* webTab = qobject_cast<WebTab*>(m_tabWidget->widget(index));
TabBar* tabBar = const_cast <TabBar*>(this);
bool adjustingLastTab = false;
bool adjustingActiveTab = false;
if (webTab && webTab->isPinned()) {
size.setWidth(PINNED_TAB_WIDTH);
@ -200,24 +204,41 @@ QSize TabBar::tabSizeHint(int index) const
// to try avoid overflowing tabs into tabbar buttons
int maxWidthForTab = availableWidth / normalTabsCount;
m_activeTabWidth = maxWidthForTab;
if (m_activeTabWidth < MINIMUM_ACTIVE_TAB_WIDTH) {
maxWidthForTab = (availableWidth - MINIMUM_ACTIVE_TAB_WIDTH) / (normalTabsCount - 1);
m_activeTabWidth = MINIMUM_ACTIVE_TAB_WIDTH;
adjustingActiveTab = true;
}
if (maxWidthForTab < PINNED_TAB_WIDTH) {
// FIXME: It overflows now
m_normalTabWidth = PINNED_TAB_WIDTH;
size.setWidth(m_normalTabWidth);
if (index == currentIndex()) {
size.setWidth(m_activeTabWidth);
}
else {
size.setWidth(m_normalTabWidth);
}
}
else {
m_normalTabWidth = maxWidthForTab;
// Fill any empty space (we've got from rounding) with last tab
if (index == count() - 1) {
m_lastTabWidth = (availableWidth - maxWidthForTab * normalTabsCount) + maxWidthForTab;
adjustingLastTab = true;
size.setWidth(m_lastTabWidth);
// Fill any empty space (we've got from rounding) with active tab
if (index == currentIndex()) {
if (adjustingActiveTab) {
m_activeTabWidth = (availableWidth - MINIMUM_ACTIVE_TAB_WIDTH
- maxWidthForTab * (normalTabsCount - 1)) + m_activeTabWidth;
}
else {
m_activeTabWidth = (availableWidth - maxWidthForTab * normalTabsCount) + maxWidthForTab;
}
adjustingActiveTab = true;
size.setWidth(m_activeTabWidth);
}
else {
m_lastTabWidth = maxWidthForTab;
size.setWidth(m_lastTabWidth);
size.setWidth(m_normalTabWidth);
}
if (tabsClosable()) {
@ -230,17 +251,28 @@ QSize TabBar::tabSizeHint(int index) const
}
else {
int maxWidthForTab = availableWidth / normalTabsCount;
m_activeTabWidth = maxWidthForTab;
if (m_activeTabWidth < MINIMUM_ACTIVE_TAB_WIDTH) {
maxWidthForTab = (availableWidth - MINIMUM_ACTIVE_TAB_WIDTH) / (normalTabsCount - 1);
m_activeTabWidth = MINIMUM_ACTIVE_TAB_WIDTH;
adjustingActiveTab = true;
}
m_normalTabWidth = maxWidthForTab;
// Fill any empty space (we've got from rounding) with last tab
if (index == count() - 1) {
m_lastTabWidth = (availableWidth - maxWidthForTab * normalTabsCount) + maxWidthForTab;
adjustingLastTab = true;
size.setWidth(m_lastTabWidth);
// Fill any empty space (we've got from rounding) with active tab
if (index == currentIndex()) {
if (adjustingActiveTab) {
m_activeTabWidth = (availableWidth - MINIMUM_ACTIVE_TAB_WIDTH
- maxWidthForTab * (normalTabsCount - 1)) + m_activeTabWidth;
}
else {
m_activeTabWidth = (availableWidth - maxWidthForTab * normalTabsCount) + maxWidthForTab;
}
adjustingActiveTab = true;
size.setWidth(m_activeTabWidth);
}
else {
m_lastTabWidth = maxWidthForTab;
size.setWidth(m_lastTabWidth);
size.setWidth(m_normalTabWidth);
}
// Restore close buttons according to preferences
@ -255,10 +287,10 @@ QSize TabBar::tabSizeHint(int index) const
}
}
if (index == count() - 1) {
if (index == currentIndex()) {
int xForAddTabButton = (PINNED_TAB_WIDTH * m_pinnedTabsCount) + (count() - m_pinnedTabsCount) * (m_normalTabWidth);
if (adjustingLastTab) {
xForAddTabButton += m_lastTabWidth - m_normalTabWidth;
if (adjustingActiveTab) {
xForAddTabButton += m_activeTabWidth - m_normalTabWidth;
}
// RTL Support

View File

@ -109,7 +109,7 @@ private:
int m_pinnedTabsCount;
mutable int m_normalTabWidth;
mutable int m_lastTabWidth;
mutable int m_activeTabWidth;
QPoint m_dragStartPosition;
};

View File

@ -54,6 +54,7 @@ WebView::WebView(QWidget* parent)
, m_actionStop(0)
, m_actionsInitialized(false)
, m_disableTouchMocking(false)
, m_isReloading(false)
{
connect(this, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted()));
connect(this, SIGNAL(loadProgress(int)), this, SLOT(slotLoadProgress(int)));
@ -137,6 +138,16 @@ void WebView::setPage(QWebPage* page)
connect(m_page, SIGNAL(privacyChanged(bool)), this, SIGNAL(privacyChanged(bool)));
mApp->plugins()->emitWebPageCreated(m_page);
/* Set white background by default.
Fixes issue with dark themes.
See #602
*/
QPalette pal = palette();
pal.setBrush(QPalette::Base, Qt::white);
page->setPalette(pal);
}
void WebView::load(const QUrl &url)
@ -284,6 +295,7 @@ void WebView::zoomReset()
void WebView::reload()
{
m_isReloading = true;
if (QWebView::url().isEmpty() && !m_aboutToLoadUrl.isEmpty()) {
load(m_aboutToLoadUrl);
return;
@ -347,12 +359,13 @@ void WebView::slotLoadFinished()
m_actionReload->setEnabled(true);
}
if (m_lastUrl != url()) {
if (!m_isReloading) {
mApp->history()->addHistoryEntry(this);
}
mApp->autoFill()->completePage(page());
m_isReloading = false;
m_lastUrl = url();
}
@ -379,12 +392,19 @@ void WebView::slotIconChanged()
void WebView::slotUrlChanged(const QUrl &url)
{
// Disable touch mocking on all google pages as it just makes it buggy
if (url.host().contains(QLatin1String("google"))) {
m_disableTouchMocking = true;
static QStringList exceptions;
if (exceptions.isEmpty()) {
exceptions << "google." << "twitter.";
}
else {
m_disableTouchMocking = false;
// Disable touch mocking on pages known not to work properly
const QString &host = url.host();
m_disableTouchMocking = false;
foreach(const QString & site, exceptions) {
if (host.contains(site)) {
m_disableTouchMocking = true;
}
}
}
@ -786,7 +806,7 @@ void WebView::createPageContextMenu(QMenu* menu, const QPoint &pos)
m_clickedFrame = frameAtPos;
QMenu* frameMenu = new QMenu(tr("This frame"));
frameMenu->addAction(tr("Show &only this frame"), this, SLOT(loadClickedFrame()));
frameMenu->addAction(QIcon(":/icons/menu/popup.png"), tr("Show this frame in new &tab"), this, SLOT(loadClickedFrameInNewTab()));
frameMenu->addAction(QIcon(":/icons/menu/new-tab.png"), tr("Show this frame in new &tab"), this, SLOT(loadClickedFrameInNewTab()));
frameMenu->addSeparator();
frameMenu->addAction(qIconProvider->standardIcon(QStyle::SP_BrowserReload), tr("&Reload"), this, SLOT(reloadClickedFrame()));
frameMenu->addAction(QIcon::fromTheme("document-print"), tr("Print frame"), this, SLOT(printClickedFrame()));
@ -827,7 +847,7 @@ void WebView::createLinkContextMenu(QMenu* menu, const QWebHitTestResult &hitTes
}
menu->addSeparator();
menu->addAction(QIcon(":/icons/menu/popup.png"), tr("Open link in new &tab"), this, SLOT(userDefinedOpenUrlInNewTab()))->setData(hitTest.linkUrl());
menu->addAction(QIcon(":/icons/menu/new-tab.png"), tr("Open link in new &tab"), this, SLOT(userDefinedOpenUrlInNewTab()))->setData(hitTest.linkUrl());
menu->addAction(QIcon::fromTheme("window-new"), tr("Open link in new &window"), this, SLOT(openUrlInNewWindow()))->setData(hitTest.linkUrl());
menu->addSeparator();
menu->addAction(qIconProvider->fromTheme("user-bookmarks"), tr("B&ookmark link"), this, SLOT(bookmarkLink()))->setData(hitTest.linkUrl());

View File

@ -169,6 +169,7 @@ private:
bool m_actionsInitialized;
bool m_disableTouchMocking;
bool m_isReloading;
};
#endif // WEBVIEW_H

View File

@ -66,7 +66,7 @@ void GM_AddScriptDialog::showSource()
return;
}
const QString &tmpFileName = qz_ensureUniqueFilename(QDir::tempPath() + "/tmp-userscript.js");
const QString &tmpFileName = qz_ensureUniqueFilename(mApp->tempPath() + "/tmp-userscript.js");
if (QFile::copy(m_script->fileName(), tmpFileName)) {
int index = qz->tabWidget()->addView(QUrl::fromLocalFile(tmpFileName), Qz::NT_SelectedTabAtTheEnd);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1521,6 +1521,32 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2429,6 +2455,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3324,6 +3390,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1543,6 +1543,32 @@
<translation>نمایش اطلاعات درباره صفحه</translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2468,6 +2494,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3373,6 +3439,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation>پنجره %1</translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

View File

@ -1539,6 +1539,32 @@
<translation>Információk megjelenítése erről az oldalról</translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2460,6 +2486,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3365,6 +3431,18 @@ RSS ikonnal jelölt oldalcímekről hozzá lehet adni híroldalakat.</translatio
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1571,6 +1571,32 @@
<translation></translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation>QupZillaは現在既定のブラウザに設定されていません</translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation>QupZillaの起動時に毎回既定のブラウザか確認する</translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation>QupZillaは新しいQupZillaはGPL version3()WebkitとQtフレームワークをもとに作成されています</translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2525,6 +2551,46 @@
<source>Show Reload / Stop buttons</source>
<translation>/</translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation>QupZillaがデフォルトブラウザか起動時に確認する</translation>
</message>
<message>
<source>Check Now</source>
<translation></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation>Shihtキーを押したときに</translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation>&lt;b&gt;&lt;/b&gt;</translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation>Altキーと数字キーで切り替え</translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation>Ctrlキーと数字キーでスピードダイアルの項目を読み込む</translation>
</message>
<message>
<source>QupZilla is default</source>
<translation>QupZilllaは既定のブラウザです</translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation>QupZillaを規定にする</translation>
</message>
</context>
<context>
<name>QObject</name>
@ -2610,11 +2676,11 @@
<message>
<source>&amp;New Window</source>
<translatorcomment></translatorcomment>
<translation>(&amp;N)</translation>
<translation>(&amp;N)</translation>
</message>
<message>
<source>New Tab</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Open Location</source>
@ -3445,6 +3511,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation>%1 </translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation>QupZillaを再インストールしてください(^_^)</translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>
@ -3972,7 +4050,7 @@ After adding or removing certificate paths, it is neccessary to restart QupZilla
<name>TabBar</name>
<message>
<source>&amp;New tab</source>
<translation>(&amp;N)</translation>
<translation>(&amp;N)</translation>
</message>
<message>
<source>&amp;Stop Tab</source>

View File

@ -1539,6 +1539,32 @@
<translation> </translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2460,6 +2486,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3364,6 +3430,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1539,6 +1539,32 @@ nu a putut fi găsit!</translation>
<translation>Afișează informații desprea această pagină</translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2462,6 +2488,46 @@ nu a putut fi găsit!</translation>
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3366,6 +3432,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

View File

@ -1543,6 +1543,32 @@
<translation>Zobraziť informácie o tejto stránke</translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2468,6 +2494,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3373,6 +3439,18 @@ Prosím pridajte nejaké kliknutím na RSS ikonku v navigačnom paneli na strán
<translation>Okno %1</translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1545,6 +1545,32 @@
<translation>Показати інформацію про цю сторінку</translation>
</message>
</context>
<context>
<name>LocationCompleterDelegate</name>
<message>
<source>Switch to tab</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainApplication</name>
<message>
<source>Default Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is not currently your default browser. Would you like to make it your default browser?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always perform this check when starting QupZilla.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is a new, fast and secure open-source WWW browser. QupZilla is licensed under GPL version 3 or (at your option) any later version. It is based on WebKit core and Qt Framework.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationBar</name>
<message>
@ -2470,6 +2496,46 @@
<source>Show Reload / Stop buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Keyboard Shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check to see if QupZilla is the default browser on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Check Now</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press &quot;Shift&quot; to not switch the tab but load the url in the current tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Propose to switch tab if completed url is already loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;b&gt;Shortcuts&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switch to tabs with Alt + number of tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load speed dials with Ctrl + number of speed dial</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>QupZilla is default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Make QupZilla default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -3379,6 +3445,18 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</sou
<translation>Вікно %1</translation>
</message>
</context>
<context>
<name>RegisterQAppAssociation</name>
<message>
<source>Warning!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>There are some problems. Please, reinstall QupZilla.
Maybe relaunch with administrator right do a magic for you! ;)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SSLManager</name>
<message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff