mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
add restart action in file menu
This commit is contained in:
parent
0eab02de9b
commit
3196ef8512
11
src/main.cpp
11
src/main.cpp
@ -10,6 +10,7 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QSslSocket>
|
#include <QSslSocket>
|
||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
#include "utils/vutils.h"
|
#include "utils/vutils.h"
|
||||||
#include "vsingleinstanceguard.h"
|
#include "vsingleinstanceguard.h"
|
||||||
@ -233,5 +234,13 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
w.kickOffStartUpTimer(filePaths);
|
w.kickOffStartUpTimer(filePaths);
|
||||||
|
|
||||||
return app.exec();
|
int ret = app.exec();
|
||||||
|
if (ret == RESTART_EXIT_CODE) {
|
||||||
|
// Ask to restart VNote.
|
||||||
|
guard.exit();
|
||||||
|
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1097,6 +1097,12 @@ void VMainWindow::initFileMenu()
|
|||||||
|
|
||||||
fileMenu->addSeparator();
|
fileMenu->addSeparator();
|
||||||
|
|
||||||
|
// Restart.
|
||||||
|
QAction *restartAct = new QAction(tr("Restart"), this);
|
||||||
|
connect(restartAct, &QAction::triggered,
|
||||||
|
this, &VMainWindow::restartVNote);
|
||||||
|
fileMenu->addAction(restartAct);
|
||||||
|
|
||||||
// Exit.
|
// Exit.
|
||||||
QAction *exitAct = new QAction(tr("&Quit"), this);
|
QAction *exitAct = new QAction(tr("&Quit"), this);
|
||||||
exitAct->setToolTip(tr("Quit VNote"));
|
exitAct->setToolTip(tr("Quit VNote"));
|
||||||
@ -3394,3 +3400,8 @@ void VMainWindow::initUpdateTimer()
|
|||||||
m_noteToolBar->update();
|
m_noteToolBar->update();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VMainWindow::restartVNote()
|
||||||
|
{
|
||||||
|
QCoreApplication::exit(RESTART_EXIT_CODE);
|
||||||
|
}
|
||||||
|
@ -46,6 +46,8 @@ class VHistoryList;
|
|||||||
class VExplorer;
|
class VExplorer;
|
||||||
class VTagExplorer;
|
class VTagExplorer;
|
||||||
|
|
||||||
|
#define RESTART_EXIT_CODE 1000
|
||||||
|
|
||||||
enum class PanelViewState
|
enum class PanelViewState
|
||||||
{
|
{
|
||||||
ExpandMode = 0,
|
ExpandMode = 0,
|
||||||
@ -130,6 +132,9 @@ public:
|
|||||||
|
|
||||||
void setCaptainModeEnabled(bool p_enabled);
|
void setCaptainModeEnabled(bool p_enabled);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void restartVNote();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
// Emit when editor related configurations were changed by user.
|
// Emit when editor related configurations were changed by user.
|
||||||
void editorConfigUpdated();
|
void editorConfigUpdated();
|
||||||
|
@ -7,12 +7,15 @@ const QString VSingleInstanceGuard::c_memKey = "vnote_shared_memory";
|
|||||||
const int VSingleInstanceGuard::c_magic = 133191933;
|
const int VSingleInstanceGuard::c_magic = 133191933;
|
||||||
|
|
||||||
VSingleInstanceGuard::VSingleInstanceGuard()
|
VSingleInstanceGuard::VSingleInstanceGuard()
|
||||||
: m_sharedMemory(c_memKey)
|
: m_sharedMemory(c_memKey),
|
||||||
|
m_online(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VSingleInstanceGuard::tryRun()
|
bool VSingleInstanceGuard::tryRun()
|
||||||
{
|
{
|
||||||
|
m_online = false;
|
||||||
|
|
||||||
// If we can attach to the sharedmemory, there is another instance running.
|
// If we can attach to the sharedmemory, there is another instance running.
|
||||||
// In Linux, crashes may cause the shared memory segment remains. In this case,
|
// In Linux, crashes may cause the shared memory segment remains. In this case,
|
||||||
// this will attach to the old segment, then exit, freeing the old segment.
|
// this will attach to the old segment, then exit, freeing the old segment.
|
||||||
@ -31,6 +34,8 @@ bool VSingleInstanceGuard::tryRun()
|
|||||||
str->m_filesBufIdx = 0;
|
str->m_filesBufIdx = 0;
|
||||||
str->m_askedToShow = false;
|
str->m_askedToShow = false;
|
||||||
m_sharedMemory.unlock();
|
m_sharedMemory.unlock();
|
||||||
|
|
||||||
|
m_online = true;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "fail to create shared memory segment";
|
qDebug() << "fail to create shared memory segment";
|
||||||
@ -109,6 +114,11 @@ bool VSingleInstanceGuard::appendFileToBuffer(SharedStruct *p_str, const QString
|
|||||||
QStringList VSingleInstanceGuard::fetchFilesToOpen()
|
QStringList VSingleInstanceGuard::fetchFilesToOpen()
|
||||||
{
|
{
|
||||||
QStringList files;
|
QStringList files;
|
||||||
|
|
||||||
|
if (!m_online) {
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
Q_ASSERT(m_sharedMemory.isAttached());
|
Q_ASSERT(m_sharedMemory.isAttached());
|
||||||
m_sharedMemory.lock();
|
m_sharedMemory.lock();
|
||||||
SharedStruct *str = (SharedStruct *)m_sharedMemory.data();
|
SharedStruct *str = (SharedStruct *)m_sharedMemory.data();
|
||||||
@ -153,15 +163,28 @@ void VSingleInstanceGuard::showInstance()
|
|||||||
|
|
||||||
bool VSingleInstanceGuard::fetchAskedToShow()
|
bool VSingleInstanceGuard::fetchAskedToShow()
|
||||||
{
|
{
|
||||||
bool ret = false;
|
if (!m_online) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Q_ASSERT(m_sharedMemory.isAttached());
|
Q_ASSERT(m_sharedMemory.isAttached());
|
||||||
m_sharedMemory.lock();
|
m_sharedMemory.lock();
|
||||||
SharedStruct *str = (SharedStruct *)m_sharedMemory.data();
|
SharedStruct *str = (SharedStruct *)m_sharedMemory.data();
|
||||||
Q_ASSERT(str->m_magic == c_magic);
|
Q_ASSERT(str->m_magic == c_magic);
|
||||||
ret = str->m_askedToShow;
|
bool ret = str->m_askedToShow;
|
||||||
str->m_askedToShow = false;
|
str->m_askedToShow = false;
|
||||||
m_sharedMemory.unlock();
|
m_sharedMemory.unlock();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VSingleInstanceGuard::exit()
|
||||||
|
{
|
||||||
|
if (!m_online) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_ASSERT(m_sharedMemory.isAttached());
|
||||||
|
m_sharedMemory.detach();
|
||||||
|
m_online = false;
|
||||||
|
}
|
||||||
|
@ -28,6 +28,9 @@ public:
|
|||||||
// Whether this instance is asked to show itself.
|
// Whether this instance is asked to show itself.
|
||||||
bool fetchAskedToShow();
|
bool fetchAskedToShow();
|
||||||
|
|
||||||
|
// A running instance requests to exit.
|
||||||
|
void exit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The count of the entries in the buffer to hold the path of the files to open.
|
// The count of the entries in the buffer to hold the path of the files to open.
|
||||||
enum { FilesBufCount = 1024 };
|
enum { FilesBufCount = 1024 };
|
||||||
@ -53,6 +56,8 @@ private:
|
|||||||
// Returns true if succeeds or false if there is no enough space.
|
// Returns true if succeeds or false if there is no enough space.
|
||||||
bool appendFileToBuffer(SharedStruct *p_str, const QString &p_file);
|
bool appendFileToBuffer(SharedStruct *p_str, const QString &p_file);
|
||||||
|
|
||||||
|
bool m_online;
|
||||||
|
|
||||||
QSharedMemory m_sharedMemory;
|
QSharedMemory m_sharedMemory;
|
||||||
|
|
||||||
static const QString c_memKey;
|
static const QString c_memKey;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user