summaryrefslogtreecommitdiff
path: root/src/application.h
blob: 307e2fd678d1d9b73f2619fc0ef5f48c5a018447 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* ============================================================
 *     The rekonq project
 * ============================================================
 * SPDX-License-Identifier: GPL-2.0-or-later
 * Copyright (C) 2012-2013 by Andrea Diamantini <adjam7 at gmail dot com>
 * SPDX-License-Identifier: GPL-3.0-only
 * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net>
 * ============================================================
 * Description: Application Entry Point
 * ============================================================ */

#pragma once

#include "rekonq.hpp"
#include <SingleApplication>

// Forward Declarations
class RekonqWindow;

class WebTab;
class WebPage;

typedef QList< QWeakPointer<RekonqWindow> > RekonqWindowList;
typedef QList<WebTab *> WebAppList;

// ---------------------------------------------------------------------------------------------------------------

#define rApp Application::instance()

/**
  * Rekonq Application class
  */
class Application : public SingleApplication {
  Q_OBJECT

public:
  Application(int argc, char **argv);
  ~Application() override;

  int newInstance();
  static Application *instance() { return (qobject_cast<Application *>(QCoreApplication::instance())); }

  RekonqWindow *rekonqWindow(const QString &activityID = QString());
  RekonqWindowList rekonqWindowList();

  /**
   * @returns the list of windows associated with activity whose id is @param activityID
   * @param activityID the ID of the activity  (if empty, it is interpreted as the current activity)
   * @note If activities are disabled, returns the function returns the list of all tabs.
   */
  RekonqWindowList tabsForActivity(const QString &activityID = QString());

  /**
   * @returns the true if there are windows associated with activity whose id is @param activityID
   * @param activityID the ID of the activity  (if empty, it is interpreted as the current activity)
   * @note If activities are disabled, returns true if there are any tabs.
   */
  bool haveWindowsForActivity(const QString &activityID = QString());

  WebAppList webAppList();

  void bookmarksToolbarToggled(bool);

public Q_SLOTS:
    /**
     * Save application's configuration
     *
     * @see ReKonfig::self()->writeConfig();
     */
    void saveConfiguration() const;

    /**
     * @short load url
     *
     * @param url The url to load
     * @param type the type where loading the url. @see Rekonq::OpenType
     */
    void loadUrl(const KUrl& url,
                 const Rekonq::OpenType& type = Rekonq::CurrentTab
                );

    RekonqWindow *newWindow(bool withTab = true, bool PrivateBrowsingMode = false);
    RekonqWindow *newWindow(WebPage *pg);

    WebTab *newWebApp();

    void createWebAppShortcut(const QString & urlString = QString(), const QString & titleString = QString());

protected:
    // This is used to track which window was activated most recently
    bool eventFilter(QObject *watched, QEvent *event);

Q_SIGNALS:
    void toggleBookmarksToolbar(bool);

private:
    void setWindowInfo(RekonqWindow *);
    
private Q_SLOTS:
    void updateConfiguration();

    // clear private data
    void clearPrivateData();

    void queryQuit();

    void newPrivateBrowsingWindow();

    void pageCreated(WebPage *);

private:
    RekonqWindowList m_rekonqWindows;
    WebAppList m_webApps;
    
#ifdef HAVE_KACTIVITIES
    ActivityTabsMap m_activityRekonqWindowsMap;
    KActivities::Consumer *m_activityConsumer;
#endif
};