Skip to content

Instantly share code, notes, and snippets.

@Chocimier
Last active August 29, 2015 13:57
Show Gist options
  • Save Chocimier/9690918 to your computer and use it in GitHub Desktop.
Save Chocimier/9690918 to your computer and use it in GitHub Desktop.
diff --git a/src/core/WindowsManager.cpp b/src/core/WindowsManager.cpp
index d5e022e..6dab16d 100644
--- a/src/core/WindowsManager.cpp
+++ b/src/core/WindowsManager.cpp
@@ -1,6 +1,7 @@
/**************************************************************************
* Otter Browser: Web browser controlled by the user, not vice-versa.
* Copyright (C) 2013 - 2014 Michal Dutkiewicz aka Emdek <michal@emdek.pl>
+* Copyright (C) 2014 Piotr Wójcik <chocimier@tlen.pl>
*
* 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
@@ -46,43 +47,45 @@ WindowsManager::WindowsManager(MdiWidget *mdi, TabBarWidget *tabBar, StatusBarWi
}
void WindowsManager::open(const QUrl &url, OpenHints hints)
-{
- const bool privateWindow = (m_isPrivate || (hints & PrivateOpen));
-
- if (hints & NewWindowOpen)
- {
- emit requestedNewWindow(privateWindow, (hints & BackgroundOpen), url);
+ {
+ const bool privateWindow = (m_isPrivate || (hints & PrivateOpen));
+ Window *window = m_mdi->getActiveWindow();
- return;
+ if (hints & NewWindowOpen)
+ {
+ emit requestedNewWindow(privateWindow, (hints & BackgroundOpen), url);
+ }
+ else if (url.isEmpty() || (hints & NewTabOpen))
+ {
+ openNewTab(privateWindow, (hints & BackgroundOpen), url);
}
-
- Window *window = NULL;
-
- if (!url.isEmpty())
+ else if (window && ((hints & CurrentTabOpen) || (window->getType() == QLatin1String("web") && window->getUrl().scheme() == QLatin1String("about") && window->isUrlEmpty())))
{
- window = m_mdi->getActiveWindow();
-
- if (window && window->getType() == QLatin1String("web") && window->getUrl().scheme() == QLatin1String("about") && window->isUrlEmpty())
+ if (window->isPrivate() == privateWindow)
+ {
+ window->getContentsWidget()->setHistory(WindowHistoryInformation());
+ window->setUrl(url, false);
+ }
+ else
{
- if (window->isPrivate() == privateWindow)
- {
- window->getContentsWidget()->setHistory(WindowHistoryInformation());
- window->setUrl(url, false);
-
- return;
- }
-
closeWindow(m_tabBar->currentIndex());
+ openNewTab(privateWindow, (hints & BackgroundOpen), url);
}
}
+ else
+ {
+ openNewTab(privateWindow, (hints & BackgroundOpen), url);
+ }
+}
- window = new Window(privateWindow, NULL, m_mdi);
-
- addWindow(window, (hints & BackgroundOpen));
-
+void WindowsManager::openNewTab(bool privateWindow, bool background, QUrl url)
+{
+ Window *window = new Window(privateWindow, NULL, m_mdi);
+ addWindow(window, background);
window->setUrl((url.isEmpty() ? QUrl(SettingsManager::getValue(QLatin1String("Browser/StartPage")).toString()) : url), false);
}
+
void WindowsManager::search(const QString &query, const QString &engine)
{
Window *window = m_mdi->getActiveWindow();
diff --git a/src/core/WindowsManager.h b/src/core/WindowsManager.h
index 5d298f1..6234d08 100644
--- a/src/core/WindowsManager.h
+++ b/src/core/WindowsManager.h
@@ -159,6 +159,7 @@ public slots:
void setZoom(int zoom);
protected:
+ void openNewTab(bool privateWindow, bool background, QUrl url);
int getWindowIndex(Window *window) const;
protected slots:
diff --git a/src/core/WindowsManager.cpp b/src/core/WindowsManager.cpp
index 6dab16d..963f22e 100644
--- a/src/core/WindowsManager.cpp
+++ b/src/core/WindowsManager.cpp
@@ -59,7 +59,7 @@ void WindowsManager::open(const QUrl &url, OpenHints hints)
{
openNewTab(privateWindow, (hints & BackgroundOpen), url);
}
- else if (window && ((hints & CurrentTabOpen) || (window->getType() == QLatin1String("web") && window->getUrl().scheme() == QLatin1String("about") && window->isUrlEmpty())))
+ else if (window && ((hints & CurrentTabOpen) || (window->getType() == QLatin1String("web") && ((window->getUrl().scheme() == QLatin1String("about") && window->isUrlEmpty()) || url.scheme() == QLatin1String("javascript")))))
{
if (window->isPrivate() == privateWindow)
{
diff --git a/src/modules/backends/web/qtwebkit/QtWebKitWebWidget.cpp b/src/modules/backends/web/qtwebkit/QtWebKitWebWidget.cpp
index c02073c..8b76482 100644
--- a/src/modules/backends/web/qtwebkit/QtWebKitWebWidget.cpp
+++ b/src/modules/backends/web/qtwebkit/QtWebKitWebWidget.cpp
@@ -858,7 +858,7 @@ void QtWebKitWebWidget::setUrl(const QUrl &url, bool typed)
{
if (url.scheme() == QLatin1String("javascript"))
{
- evaluateJavaScript(url.path());
+ evaluateJavaScript(url.toDisplayString(QUrl::RemoveScheme | QUrl::DecodeReserved));
return;
}
diff --git a/src/ui/AddressWidget.cpp b/src/ui/AddressWidget.cpp
index 9ef7b09..f3056f2 100644
--- a/src/ui/AddressWidget.cpp
+++ b/src/ui/AddressWidget.cpp
@@ -372,7 +372,7 @@ void AddressWidget::setUrl(const QUrl &url)
{
updateBookmark();
- if (m_window)
+ if (m_window && url.scheme() != QLatin1String("javascript"))
{
setText((url.scheme() == QLatin1String("about") && m_window->isUrlEmpty()) ? QString() : url.toString());
setIcon(m_window->getIcon());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment