mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
#ifndef VSINGLEINSTANCEGUARD_H
|
|
#define VSINGLEINSTANCEGUARD_H
|
|
|
|
#include <QString>
|
|
#include <QSharedMemory>
|
|
#include <QStringList>
|
|
|
|
class VSingleInstanceGuard
|
|
{
|
|
public:
|
|
VSingleInstanceGuard();
|
|
|
|
// Return ture if this is the only instance of VNote.
|
|
bool tryRun();
|
|
|
|
// There is already another instance running.
|
|
// Call this to ask that instance to open external files passed in
|
|
// via command line arguments.
|
|
void openExternalFiles(const QStringList &p_files);
|
|
|
|
// Ask another instance to show itself.
|
|
void showInstance();
|
|
|
|
// Fetch files from shared memory to open.
|
|
// Will clear the shared memory.
|
|
QStringList fetchFilesToOpen();
|
|
|
|
// Whether this instance is asked to show itself.
|
|
bool fetchAskedToShow();
|
|
|
|
// A running instance requests to exit.
|
|
void exit();
|
|
|
|
private:
|
|
// The count of the entries in the buffer to hold the path of the files to open.
|
|
enum { FilesBufCount = 1024 };
|
|
|
|
struct SharedStruct {
|
|
// A magic number to identify if this struct is initialized
|
|
int m_magic;
|
|
|
|
// Next empty entry in m_filesBuf.
|
|
int m_filesBufIdx;
|
|
|
|
// File paths to be opened.
|
|
// Encoded in this way with 2 bytes for each size part.
|
|
// [size of file1][file1][size of file2][file 2]
|
|
// Unicode representation of QString.
|
|
ushort m_filesBuf[FilesBufCount];
|
|
|
|
// Whether other instances ask to show the legal instance.
|
|
bool m_askedToShow;
|
|
};
|
|
|
|
// Append @p_file to the shared struct files buffer.
|
|
// Returns true if succeeds or false if there is no enough space.
|
|
bool appendFileToBuffer(SharedStruct *p_str, const QString &p_file);
|
|
|
|
bool m_online;
|
|
|
|
QSharedMemory m_sharedMemory;
|
|
|
|
static const QString c_memKey;
|
|
static const int c_magic;
|
|
};
|
|
|
|
#endif // VSINGLEINSTANCEGUARD_H
|