1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of Qt Creator.
7**
8** Commercial License Usage
9** Licensees holding valid commercial Qt licenses may use this file in
10** accordance with the commercial license agreement provided with the
11** Software or, alternatively, in accordance with the terms contained in
12** a written agreement between you and The Qt Company. For licensing terms
13** and conditions see https://www.qt.io/terms-conditions. For further
14** information use the contact form at https://www.qt.io/contact-us.
15**
16** GNU General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU
18** General Public License version 3 as published by the Free Software
19** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20** included in the packaging of this file. Please review the following
21** information to ensure the GNU General Public License requirements will
22** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23**
24****************************************************************************/
25
26#include <QApplication>
27
28QT_FORWARD_DECLARE_CLASS(QSharedMemory)
29
30namespace SharedTools {
31
32class QtLocalPeer;
33
34class QtSingleApplication : public QApplication
35{
36 Q_OBJECT
37
38public:
39 QtSingleApplication(const QString &id, int &argc, char **argv);
40 ~QtSingleApplication();
41
42 bool isRunning(qint64 pid = -1);
43
44 void setActivationWindow(QWidget* aw, bool activateOnMessage = true);
45 QWidget* activationWindow() const;
46 bool event(QEvent *event);
47
48 QString applicationId() const;
49 void setBlock(bool value);
50
51 bool sendMessage(const QString &message, int timeout = 5000, qint64 pid = -1);
52 void activateWindow();
53
54Q_SIGNALS:
55 void messageReceived(const QString &message, QObject *socket);
56 void fileOpenRequest(const QString &file);
57
58private:
59 QString instancesFileName(const QString &appId);
60
61 qint64 firstPeer;
62 QSharedMemory *instances;
63 QtLocalPeer *pidPeer;
64 QWidget *actWin;
65 QString appId;
66 bool block;
67};
68
69} // namespace SharedTools
70