mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 10:46:35 +01:00
This commit is contained in:
commit
c329879a70
2
.gitignore
vendored
2
.gitignore
vendored
@ -26,3 +26,5 @@ Thumbs.db
|
||||
tests/modeltest
|
||||
*.pdb
|
||||
*.ilk
|
||||
*.kdev4
|
||||
*.swp
|
||||
|
@ -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]=Έναρξη ιδιωτικής περιήγησης
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
BIN
src/lib/data/icons/menu/new-tab.png
Normal file
BIN
src/lib/data/icons/menu/new-tab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 460 B |
Binary file not shown.
Before Width: | Height: | Size: 580 B |
BIN
src/lib/data/icons/menu/tab.png
Normal file
BIN
src/lib/data/icons/menu/tab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 328 B |
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
@ -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());
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 ¤tTimestamp = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
qint64 timestamp = currentTimestamp;
|
||||
|
@ -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 \
|
||||
|
@ -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();
|
||||
|
@ -55,6 +55,7 @@ private:
|
||||
|
||||
LocationBar* m_locationBar;
|
||||
QString m_originalText;
|
||||
bool m_ignoreCurrentChangedSignal;
|
||||
|
||||
static LocationCompleterView* s_view;
|
||||
static LocationCompleterModel* s_model;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 ¤t, 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();
|
||||
}
|
||||
}
|
||||
|
@ -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 ¤t, const QModelIndex &previous);
|
||||
void activateTab(TabPosition pos);
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent(QMouseEvent* event);
|
||||
void mouseReleaseEvent(QMouseEvent* event);
|
||||
|
||||
private:
|
||||
bool m_ignoreNextMouseMove;
|
||||
|
@ -174,6 +174,8 @@ void WebSearchBar::setupEngines()
|
||||
|
||||
void WebSearchBar::searchChanged(const ButtonWithMenu::Item &item)
|
||||
{
|
||||
selectAll();
|
||||
setFocus();
|
||||
setPlaceholderText(item.text);
|
||||
m_completerModel->setStringList(QStringList());
|
||||
|
||||
|
@ -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");
|
||||
|
@ -37,6 +37,7 @@ public:
|
||||
bool addCountryWithAlt;
|
||||
bool showLoadingProgress;
|
||||
int showLocationSuggestions;
|
||||
bool showSwitchTab;
|
||||
|
||||
// SearchEngines
|
||||
bool showSearchSuggestions;
|
||||
|
499
src/lib/other/registerqappassociation.cpp
Normal file
499
src/lib/other/registerqappassociation.cpp
Normal 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;
|
||||
}
|
||||
}
|
115
src/lib/other/registerqappassociation.h
Normal file
115
src/lib/other/registerqappassociation.h
Normal 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
|
@ -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());
|
||||
|
@ -88,6 +88,8 @@ private slots:
|
||||
|
||||
void setNotificationPreviewVisible(bool state);
|
||||
|
||||
void makeQupZillaDefault();
|
||||
|
||||
private:
|
||||
void closeEvent(QCloseEvent* event);
|
||||
|
||||
|
@ -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><b>Launching</b></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><b>Launching</b></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><b>Profiles</b></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><b>Language</b></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 "Shift" 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><b>Shortcuts</b></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">
|
||||
|
@ -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
|
||||
|
@ -109,7 +109,7 @@ private:
|
||||
int m_pinnedTabsCount;
|
||||
|
||||
mutable int m_normalTabWidth;
|
||||
mutable int m_lastTabWidth;
|
||||
mutable int m_activeTabWidth;
|
||||
|
||||
QPoint m_dragStartPosition;
|
||||
};
|
||||
|
@ -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());
|
||||
|
@ -169,6 +169,7 @@ private:
|
||||
bool m_actionsInitialized;
|
||||
|
||||
bool m_disableTouchMocking;
|
||||
bool m_isReloading;
|
||||
};
|
||||
|
||||
#endif // WEBVIEW_H
|
||||
|
@ -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
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></source>
|
||||
<translation><b>ショートカット</b></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>&New Window</source>
|
||||
<translatorcomment>保留</translatorcomment>
|
||||
<translation>新規ウィンドウを開く(&N)</translation>
|
||||
<translation>新しいウィンドウ(&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>&New tab</source>
|
||||
<translation>新しいタブを開く(&N)</translation>
|
||||
<translation>新しいタブ(&N)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Stop Tab</source>
|
||||
|
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></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
@ -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 "Shift" 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><b>Shortcuts</b></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
Loading…
Reference in New Issue
Block a user