From 3ace62f90d48015fec1bd37ad216466fb666061d Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 22 Dec 2017 23:00:45 +0100 Subject: Single instance check works again - In Debug builds, startup time is calculated --- src/browser.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/browser.cpp') diff --git a/src/browser.cpp b/src/browser.cpp index 7a169e9..7d39035 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -19,6 +19,8 @@ Browser::Browser(int &argc, char *argv[]) : { setApplicationName("smolbote"); setWindowIcon(QIcon(":/icon.svg")); + + connect(this, &Browser::messageAvailable, this, &Browser::createSession); } Browser::~Browser() @@ -94,6 +96,41 @@ MainWindow *Browser::createWindow() return window; } +MainWindow *Browser::createSession(const SessionParam ¶ms) +{ + MainWindow *window = nullptr; + if(params.newWindow || m_windows.isEmpty()) { + window = createWindow(); + window->setProfile(profile(params.profile)); + } else { + // reverse-iterate through windows to check for window with the same profile + for(auto it = m_windows.rbegin(); it != m_windows.rend(); ++it) { + if((*it)->profile()->storageName() == params.profile) { + window = *it; + break; + } + } + // if none is found, create one + if(window == nullptr) { + window = createWindow(); + window->setProfile(profile(params.profile)); + } + } + + Q_CHECK_PTR(window); + + if(params.urls.isEmpty()) { + // no URLs were given + window->newTab(QUrl::fromUserInput(m_config->value("profile.homepage").value().c_str())); + } else { + for(const QUrl &url : params.urls) { + window->newTab(url); + } + } + + return window; +} + std::shared_ptr Browser::profile(const QString name) { return m_profiles[name]; -- cgit v1.2.1