parent
b3bd08c5e4
commit
ef06ed567a
8 changed files with 220 additions and 5 deletions
@ -0,0 +1,99 @@ |
||||
/* ============================================================
|
||||
* Falkon - Qt web browser |
||||
* Copyright (C) 2018 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 "closedwindowsmanager.h" |
||||
#include "mainapplication.h" |
||||
#include "tabbedwebview.h" |
||||
#include "qztools.h" |
||||
|
||||
#include <QAction> |
||||
|
||||
ClosedWindowsManager::ClosedWindowsManager(QObject *parent) |
||||
: QObject(parent) |
||||
{ |
||||
} |
||||
|
||||
bool ClosedWindowsManager::isClosedWindowAvailable() const |
||||
{ |
||||
return !m_closedWindows.isEmpty(); |
||||
} |
||||
|
||||
QVector<ClosedWindowsManager::Window> ClosedWindowsManager::closedWindows() const |
||||
{ |
||||
return m_closedWindows; |
||||
} |
||||
|
||||
void ClosedWindowsManager::saveWindow(BrowserWindow *window) |
||||
{ |
||||
if (mApp->isPrivate()) { |
||||
return; |
||||
} |
||||
|
||||
Window closedWindow; |
||||
closedWindow.icon = window->weView()->icon(); |
||||
closedWindow.title = window->weView()->title(); |
||||
closedWindow.windowState = BrowserWindow::SavedWindow(window); |
||||
m_closedWindows.prepend(closedWindow); |
||||
} |
||||
|
||||
ClosedWindowsManager::Window ClosedWindowsManager::takeLastClosedWindow() |
||||
{ |
||||
Window window; |
||||
if (!m_closedWindows.isEmpty()) { |
||||
window = m_closedWindows.takeFirst(); |
||||
} |
||||
return window; |
||||
} |
||||
|
||||
ClosedWindowsManager::Window ClosedWindowsManager::takeClosedWindowAt(int index) |
||||
{ |
||||
Window window; |
||||
if (QzTools::containsIndex(m_closedWindows, index)) { |
||||
window = m_closedWindows.takeAt(index); |
||||
} |
||||
return window; |
||||
} |
||||
|
||||
void ClosedWindowsManager::restoreClosedWindow() |
||||
{ |
||||
Window window; |
||||
QAction *act = qobject_cast<QAction*>(sender()); |
||||
if (act) { |
||||
window = takeClosedWindowAt(act->data().toInt()); |
||||
} else { |
||||
window = takeLastClosedWindow(); |
||||
} |
||||
|
||||
if (!window.isValid()) { |
||||
return; |
||||
} |
||||
|
||||
mApp->createWindow(Qz::BW_OtherRestoredWindow)->restoreWindow(window.windowState); |
||||
} |
||||
|
||||
void ClosedWindowsManager::restoreAllClosedWindows() |
||||
{ |
||||
const int count = m_closedWindows.count(); |
||||
for (int i = 0; i < count; ++i) { |
||||
restoreClosedWindow(); |
||||
} |
||||
} |
||||
|
||||
void ClosedWindowsManager::clearClosedWindows() |
||||
{ |
||||
m_closedWindows.clear(); |
||||
} |
||||
@ -0,0 +1,63 @@ |
||||
/* ============================================================
|
||||
* Falkon - Qt web browser |
||||
* Copyright (C) 2018 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/>.
|
||||
* ============================================================ */ |
||||
#pragma once |
||||
|
||||
#include <QObject> |
||||
#include <QVector> |
||||
|
||||
#include "qzcommon.h" |
||||
#include "browserwindow.h" |
||||
|
||||
class QUPZILLA_EXPORT ClosedWindowsManager : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
struct Window { |
||||
QIcon icon; |
||||
QString title; |
||||
BrowserWindow::SavedWindow windowState; |
||||
|
||||
bool isValid() const { |
||||
return windowState.isValid(); |
||||
} |
||||
}; |
||||
|
||||
explicit ClosedWindowsManager(QObject *parent = nullptr); |
||||
|
||||
bool isClosedWindowAvailable() const; |
||||
QVector<Window> closedWindows() const; |
||||
|
||||
void saveWindow(BrowserWindow *window); |
||||
|
||||
// Takes window that was most recently closed
|
||||
Window takeLastClosedWindow(); |
||||
// Takes window at given index
|
||||
Window takeClosedWindowAt(int index); |
||||
|
||||
public slots: |
||||
void restoreClosedWindow(); |
||||
void restoreAllClosedWindows(); |
||||
void clearClosedWindows(); |
||||
|
||||
private: |
||||
QVector<Window> m_closedWindows; |
||||
}; |
||||
|
||||
// Hint to Qt to use std::realloc on item moving
|
||||
Q_DECLARE_TYPEINFO(ClosedWindowsManager::Window, Q_MOVABLE_TYPE); |
||||
Loading…
Reference in new issue