From cdb6d5fbd2bf311cd1e73a4458fc2e5d67e5c022 Mon Sep 17 00:00:00 2001 From: Sunshine Date: Sun, 23 Jan 2022 05:08:55 -1000 Subject: [PATCH] get rid of tray icon, raise window if already running --- .gitignore | 10 +- README.md | 10 +- doer.pro | 80 +++---- inc/mainwindow.h | 52 ----- inc/mainwindow.hpp | 48 ++++ inc/runguard.h | 28 --- inc/traymenu.h | 17 -- modules/modules.pri | 1 + modules/singleinstance/inc/singleinstance.hpp | 27 +++ modules/singleinstance/singleinstance.pri | 16 ++ modules/singleinstance/src/singleinstance.cpp | 94 ++++++++ res/images/tray.png | Bin 26325 -> 0 bytes res/resources.qrc | 14 +- .../default.qss => stylesheets/doer.qss} | 5 +- screenshots/sc1.png | Bin 0 -> 86017 bytes src/main.cpp | 61 ++++-- src/mainwindow.cpp | 207 +++++++----------- src/runguard.cpp | 83 ------- src/traymenu.cpp | 23 -- 19 files changed, 379 insertions(+), 397 deletions(-) delete mode 100644 inc/mainwindow.h create mode 100644 inc/mainwindow.hpp delete mode 100644 inc/runguard.h delete mode 100644 inc/traymenu.h create mode 100644 modules/modules.pri create mode 100644 modules/singleinstance/inc/singleinstance.hpp create mode 100644 modules/singleinstance/singleinstance.pri create mode 100644 modules/singleinstance/src/singleinstance.cpp delete mode 100644 res/images/tray.png rename res/{styles/default.qss => stylesheets/doer.qss} (92%) create mode 100644 screenshots/sc1.png delete mode 100644 src/runguard.cpp delete mode 100644 src/traymenu.cpp diff --git a/.gitignore b/.gitignore index 5103ad6..6d68d5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ -doer +build/ # C++ objects and libs - *.slo *.lo *.o @@ -13,23 +12,25 @@ doer *.dylib # Qt-es - /.qmake.cache /.qmake.stash *.pro.user *.pro.user.* *.qbs.user *.qbs.user.* +.objs/ +.mocs/ *.moc moc_*.cpp moc_*.h +.qrcs/ qrc_*.cpp +.uis/ ui_*.h Makefile* *build-* # QtCreator - *.autosave # QtCtreator Qml @@ -38,4 +39,3 @@ Makefile* # QtCtreator CMake CMakeLists.txt.user - diff --git a/README.md b/README.md index 91a65f0..8605de6 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ # Doer This notepad application is so lightweight it saves and reads text to and from just one file. -With almost no user interface it works great as a place to keep your notes in. +With almost no user interface, it works great as a place to keep your notes in. It was built to replace a giant collection of small paper notes scattered all over my workspace and home. Comes in handy as a to-do list. Can also help you keep those pretty Japanese smileys at hand. -![screenshot](https://cloud.githubusercontent.com/assets/1392048/24592087/2bcfb58e-17de-11e7-8c22-27a804c2f0f0.png) +![Doer](screenshots/sc1.png) ## Customize Placing a file named `doer.qss` into `~/.config/doer/` will serve as a custom stylesheet for the program. -Use [default.qss](res/styles/default.qss) as a reference. +Use [doer.qss](res/stylesheets/doer.qss) as a reference. ## Control @@ -24,8 +24,8 @@ Use [default.qss](res/styles/default.qss) as a reference. ## Build - qmake -qt5 - make clean && make -j 4 + qmake + make -j ## Install diff --git a/doer.pro b/doer.pro index d0ef14b..b3540f2 100644 --- a/doer.pro +++ b/doer.pro @@ -1,70 +1,76 @@ +include($${PWD}/modules/modules.pri) + +PROG_NAME = doer + VERSION_MAJOR = 1 -VERSION_MINOR = 0 +VERSION_MINOR = 2 VERSION_PATCH = 0 -DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\ - "VERSION_MINOR=$$VERSION_MINOR"\ - "VERSION_PATCH=$$VERSION_PATCH" +VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH} + +QT += core gui widgets +CONFIG += c++11 +TEMPLATE = app -VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH} +DESTDIR = build -QT += core gui widgets -CONFIG += c++11 -TEMPLATE = app +INC_DIR = inc +SRC_DIR = src +RES_DIR = res +FORMS_DIR = ui -SRC_DIR = src -INC_DIR = inc -FORMS_DIR = ui +OBJECTS_DIR = .objs +MOC_DIR = .mocs +UI_DIR = .uis +RCC_DIR = .qrcs -OBJECTS_DIR = .objs -MOC_DIR = .mocs -UI_DIR = .uis -RCC_DIR = .qrcs +INCLUDEPATH += $${INC_DIR} -DESTDIR = bin -TARGET = doer +HEADERS += $${INC_DIR}/mainwindow.hpp -INCLUDEPATH += $${INC_DIR} +SOURCES += $${SRC_DIR}/main.cpp \ + $${SRC_DIR}/mainwindow.cpp -SOURCES += src/main.cpp \ - src/mainwindow.cpp \ - src/traymenu.cpp \ - src/runguard.cpp +FORMS += $${FORMS_DIR}/mainwindow.ui -HEADERS += inc/mainwindow.h \ - inc/traymenu.h \ - inc/runguard.h +RESOURCES = $${RES_DIR}/resources.qrc -FORMS += ui/mainwindow.ui +OTHER_FILES += $${RES_DIR}/images/background.png \ + $${RES_DIR}/images/$${PROG_NAME}.svg \ + $${RES_DIR}/stylesheets/doer.qss -RESOURCES = res/resources.qrc +QMAKE_CLEAN += -r $${DESTDIR}/$${PROG_NAME} -OTHER_FILES += dist/$${TARGET}.desktop \ - res/images/background.png \ - res/images/$${TARGET}.svg \ - res/images/tray.png \ - res/styles/default.qss +DEFINES += PROG_NAME=\\\"$${PROG_NAME}\\\" -QMAKE_CLEAN += -r $${DESTDIR}/$${TARGET} +DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR" \ + "VERSION_MINOR=$$VERSION_MINOR" \ + "VERSION_PATCH=$$VERSION_PATCH" \ + +DEFINES += VERSION=\\\"$${VERSION}\\\" + +# CONFIG += debug unix:!mac { isEmpty(PREFIX) { PREFIX = /usr } - BINDIR = $${PREFIX}/bin - DATADIR =$${PREFIX}/share + BINDIR = $${PREFIX}/bin + DATADIR = $${PREFIX}/share + + OTHER_FILES += dist/$${PROG_NAME}.desktop target.path = $${BINDIR} INSTALLS += target desktop.path = $${DATADIR}/applications - eval(desktop.files += dist/$${TARGET}.desktop) + eval(desktop.files += dist/$${PROG_NAME}.desktop) INSTALLS += desktop icon.path = $${DATADIR}/icons/hicolor/scalable/apps - eval(icon.files += res/images/$${TARGET}.svg) + eval(icon.files += $${RES_DIR}/images/$${PROG_NAME}.svg) INSTALLS += icon } diff --git a/inc/mainwindow.h b/inc/mainwindow.h deleted file mode 100644 index 72b5c49..0000000 --- a/inc/mainwindow.h +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "traymenu.h" - - -namespace Ui { - class MainWindow; -} - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow(QWidget *parent = 0); - ~MainWindow(); - -public slots: - void toggleHidden(); - void toggleFullScreen(); - void exitFullScreen(); - void exitFullScreenOrHide(); - void quitApplication(); - -protected: - void closeEvent(QCloseEvent *event); - void resizeEvent(QResizeEvent *event) override; - - bool ready = false; - -private slots: - void on_textArea_textChanged(); - void on_textArea_cursorPositionChanged(); - -private: - Ui::MainWindow *ui; - QSettings *settings; - QSystemTrayIcon *trayIcon; - TrayMenu *trayMenu; - - void bindShortcuts(); - - void setIcon(); - void setStyle(); - - void loadSettings(); -}; diff --git a/inc/mainwindow.hpp b/inc/mainwindow.hpp new file mode 100644 index 0000000..5e95bd2 --- /dev/null +++ b/inc/mainwindow.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include + +#include "singleinstance.hpp" + +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = Q_NULLPTR); + ~MainWindow(); + + bool isAlreadyRunning(void); + +public slots: + void exitFullScreen(void); + void quitApplication(void); + void toggleFullScreen(void); + +protected: + void closeEvent(QCloseEvent *event) override; + void moveEvent(QMoveEvent *event) override; + void resizeEvent(QResizeEvent *event) override; + + bool ready = false; + +private slots: + void on_textArea_cursorPositionChanged(void); + void on_textArea_textChanged(void); + +private: + QSettings *settings; + Ui::MainWindow *ui; + QByteArray windowGeometry; + SingleInstance *singleInstance; + + void applyStyle(void); + void bindShortcuts(void); + void loadSettings(void); +}; diff --git a/inc/runguard.h b/inc/runguard.h deleted file mode 100644 index 4b2d90b..0000000 --- a/inc/runguard.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include -#include -#include - - -class RunGuard -{ - -public: - RunGuard(const QString& key); - ~RunGuard(); - - bool isAnotherRunning(); - bool tryToRun(); - void release(); - -private: - const QString key; - const QString memLockKey; - const QString sharedmemKey; - - QSharedMemory sharedMem; - QSystemSemaphore memLock; - - Q_DISABLE_COPY(RunGuard) -}; diff --git a/inc/traymenu.h b/inc/traymenu.h deleted file mode 100644 index d6d9e5e..0000000 --- a/inc/traymenu.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include - - -class TrayMenu : public QMenu -{ - Q_OBJECT - -public: - explicit TrayMenu(QWidget *parent = 0); - ~TrayMenu(); - -private: - QAction *toggleAction; - QAction *quitAction; -}; diff --git a/modules/modules.pri b/modules/modules.pri new file mode 100644 index 0000000..503af35 --- /dev/null +++ b/modules/modules.pri @@ -0,0 +1 @@ +include($${PWD}/singleinstance/singleinstance.pri) diff --git a/modules/singleinstance/inc/singleinstance.hpp b/modules/singleinstance/inc/singleinstance.hpp new file mode 100644 index 0000000..f1972f4 --- /dev/null +++ b/modules/singleinstance/inc/singleinstance.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include + +class SingleInstance : public QObject +{ + Q_OBJECT + +public: + explicit SingleInstance(QWidget *parent = Q_NULLPTR, QString *progName = new QString()); + ~SingleInstance(); + + bool isAlreadyRunning(const bool raiseExisting = false); + static void raiseWindow(QWidget *window); + +private: + struct SharedData + { + bool needToRaiseExistingWindow = false; + }; + + QSharedMemory *shMem; + QString shmemName; + QString smphorName; +}; diff --git a/modules/singleinstance/singleinstance.pri b/modules/singleinstance/singleinstance.pri new file mode 100644 index 0000000..ba46166 --- /dev/null +++ b/modules/singleinstance/singleinstance.pri @@ -0,0 +1,16 @@ +!win:!mac { + LIBS += -lX11 -lXfixes -lXinerama -lXext -lXcomposite +} + +QT += core +CONFIG += c++11 +TEMPLATE = lib + +INC_DIR = inc +SRC_DIR = src + +INCLUDEPATH += $${PWD}/$${INC_DIR} + +HEADERS += $${PWD}/inc/singleinstance.hpp + +SOURCES += $${PWD}/src/singleinstance.cpp diff --git a/modules/singleinstance/src/singleinstance.cpp b/modules/singleinstance/src/singleinstance.cpp new file mode 100644 index 0000000..a1afd46 --- /dev/null +++ b/modules/singleinstance/src/singleinstance.cpp @@ -0,0 +1,94 @@ +#include + +#include "singleinstance.hpp" + +#if defined(Q_OS_WIN) +#include +#elif !defined(Q_OS_MACOS) +#include +#endif + +SingleInstance::SingleInstance(QWidget *parent, QString *progName) : QObject(parent) +{ + shmemName = progName + QString("_shrdmmr"); + smphorName = progName + QString("_smphr"); +} + +SingleInstance::~SingleInstance() +{ +} + +bool SingleInstance::isAlreadyRunning(const bool raiseExisting) +{ + QSystemSemaphore sem(smphorName, 1); + + // Fix danging memory on Linux + { + QSharedMemory fix(shmemName); + fix.attach(); + } + + shMem = new QSharedMemory(shmemName); + if (shMem->create(sizeof(SharedData))) { // This is the first instance + shMem->attach(); + + sem.acquire(); + memset(shMem->data(), 0, shMem->size()); + sem.release(); + + QTimer* t = new QTimer(this); + connect(t, &QTimer::timeout, this, [this]() { + QSystemSemaphore sem(smphorName, 1); + sem.acquire(); + SharedData* data = reinterpret_cast(shMem->data()); + if (data->needToRaiseExistingWindow) { + SingleInstance::raiseWindow((QWidget*)parent()); + data->needToRaiseExistingWindow = false; + } + + sem.release(); + }); + t->start(0); + } else { // Another instance is already running + shMem->attach(); + + sem.acquire(); + SharedData* data = reinterpret_cast(shMem->data()); + data->needToRaiseExistingWindow = raiseExisting; + + return true; + } + + return false; +} + +void SingleInstance::raiseWindow(QWidget *window) +{ +#if defined(Q_OS_WIN) // Windows + Window winId = window->effectiveWinId(); + + SetWindowPos(winId, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); + SetWindowPos(winId, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); +#elif defined(Q_OS_MACOS) // macOS + window->show(); + window->raise(); + window->activateWindow(); +#else // GNU/Linux, FreeBSD, etc + Window winId = window->effectiveWinId(); + + if (winId > 0) { + Display* disp = XOpenDisplay(nullptr); + + if (disp) { + XWindowAttributes attributes; + + if (XGetWindowAttributes(disp, winId, &attributes)) { + XSetInputFocus(disp, winId, RevertToPointerRoot, CurrentTime); + XRaiseWindow(disp, winId); + } + + XCloseDisplay(disp); + } + } +#endif +} diff --git a/res/images/tray.png b/res/images/tray.png deleted file mode 100644 index e1195eddfc40cc9fe40418db27788107b6510493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26325 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ťSqQ+p|FoQy~ClZMgm`ZFG2zAw`D=> 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 diff --git a/res/resources.qrc b/res/resources.qrc index 9c29e25..1a11138 100644 --- a/res/resources.qrc +++ b/res/resources.qrc @@ -1,8 +1,8 @@ - - - images/background.png - images/doer.svg - images/tray.png - styles/default.qss - + + + + images/background.png + images/doer.svg + stylesheets/doer.qss + diff --git a/res/styles/default.qss b/res/stylesheets/doer.qss similarity index 92% rename from res/styles/default.qss rename to res/stylesheets/doer.qss index afc8f7d..d76ead3 100644 --- a/res/styles/default.qss +++ b/res/stylesheets/doer.qss @@ -6,11 +6,12 @@ QPlainTextEdit { QScrollBar:vertical { border: none; - width: 11px; + background: #141414; margin: 0; + width: 11px; } QScrollBar::handle:vertical { - background: rgba(0, 0, 0, 0.67); + background: #222; min-height: 0; border-radius: 4px; margin: 1px; diff --git a/screenshots/sc1.png b/screenshots/sc1.png new file mode 100644 index 0000000000000000000000000000000000000000..726d999e8340f7375aef423040f9fc9c7ec1e4fc GIT binary patch literal 86017 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 9780f5f..86155b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,29 +1,62 @@ +#include #include +#include -#include "mainwindow.h" -#include "runguard.h" +#include "mainwindow.hpp" -QString getUserName() +MainWindow *mainWindow; + +static void onSignalHandler(int signum) { - QString name = qgetenv("USER"); + if (mainWindow) { + mainWindow->close(); + delete mainWindow; + mainWindow = nullptr; + } - if (name.isEmpty()) - name = qgetenv("USERNAME"); + qDebug() << "Terminated with signal" << signum; - return name; + exit(128 + signum); } -int main(int argc, char **argv) +int main(int argc, char *argv[]) { - RunGuard guard(getUserName() + "-doer-UwNDcyZjc6MjE1tN2Ma3NGIf5OGx"); - - if (!guard.tryToRun()) - return 0; +#if defined(__GNUC__) && defined(Q_OS_LINUX) + signal(SIGHUP, onSignalHandler); + signal(SIGINT, onSignalHandler); + signal(SIGQUIT, onSignalHandler); + signal(SIGILL, onSignalHandler); + signal(SIGABRT, onSignalHandler); + signal(SIGFPE, onSignalHandler); + signal(SIGBUS, onSignalHandler); + signal(SIGSEGV, onSignalHandler); + signal(SIGSYS, onSignalHandler); + signal(SIGPIPE, onSignalHandler); + signal(SIGALRM, onSignalHandler); + signal(SIGTERM, onSignalHandler); + signal(SIGXCPU, onSignalHandler); + signal(SIGXFSZ, onSignalHandler); +#endif + + // Account for running on high-DPI displays + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication a(argc, argv); - MainWindow w; - w.show(); + QApplication::setApplicationName(PROG_NAME); + QApplication::setApplicationDisplayName("Doer"); + QApplication::setApplicationVersion(VERSION); + QApplication::setOrganizationDomain("y2z.github.io"); + QApplication::setOrganizationName("Y2Z"); + + mainWindow = new MainWindow; + + if (mainWindow->isAlreadyRunning()) { + exit(EXIT_FAILURE); + } + + mainWindow->show(); return a.exec(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5cabd31..ed5d32f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,70 +1,79 @@ -#include #include -#include -#include +#include +#include #include +#include +#include -#include "mainwindow.h" +#include "mainwindow.hpp" #include "ui_mainwindow.h" - -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); + QString *progName = new QString(PROG_NAME); + singleInstance = new SingleInstance((QWidget*)this, progName); + loadSettings(); setMinimumSize(240, 360); + setWindowIcon(QIcon(":/images/" PROG_NAME ".svg")); - setIcon(); - - setStyle(); + applyStyle(); ui->textArea->setFrameStyle(QFrame::NoFrame); bindShortcuts(); - trayMenu = new TrayMenu(this); - trayIcon = new QSystemTrayIcon(this); - trayIcon->setContextMenu(trayMenu); - trayIcon->setIcon(QIcon(":/images/tray.png")); - trayIcon->show(); - - QObject::connect(trayIcon, &QSystemTrayIcon::activated, this, - [this](QSystemTrayIcon::ActivationReason reason) { - if (reason == QSystemTrayIcon::Trigger) { - toggleHidden(); - } - }); - ready = true; } -MainWindow::~MainWindow() +MainWindow::~MainWindow(void) { delete ui; } -void MainWindow::loadSettings() +void MainWindow::applyStyle(void) +{ + QString styleSheet; + + QFile styleFile(":/stylesheets/" PROG_NAME ".qss"); + styleFile.open(QFile::ReadOnly); + styleSheet = QLatin1String(styleFile.readAll()); + styleFile.close(); + + QFileInfo settingsFileInfo(settings->fileName()); + QFile customStyleFile(settingsFileInfo.absolutePath() + QDir::separator() + PROG_NAME ".qss"); + if (customStyleFile.open(QFile::ReadOnly)) { + styleSheet += QLatin1String(customStyleFile.readAll()); + customStyleFile.close(); + } + + ui->textArea->setStyleSheet(styleSheet); +} + +void MainWindow::loadSettings(void) { - settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, - "doer", "doer", nullptr); + settings = new QSettings(QSettings::IniFormat, + QSettings::UserScope, + PROG_NAME, + PROG_NAME, + nullptr); if (settings->contains("text")) { - QString content = settings->value("text").toString(); + const QString content = settings->value("text").toString(); ui->textArea->setPlainText(content); } if (settings->contains("cursor")) { - int cursorPosition = settings->value("cursor").toInt(); + const int cursorPosition = settings->value("cursor").toInt(); QTextCursor newCursor = ui->textArea->textCursor(); newCursor.setPosition(cursorPosition); if (settings->contains("cursor_end")) { - int cursorPositionEnd = settings->value("cursor_end").toInt(); + const int cursorPositionEnd = settings->value("cursor_end").toInt(); newCursor.setPosition(cursorPositionEnd, QTextCursor::KeepAnchor); } @@ -79,151 +88,101 @@ void MainWindow::loadSettings() } } -void MainWindow::setIcon() -{ - QIcon windowIcon(":/images/doer.svg"); - - setWindowIcon(windowIcon); -} - -void MainWindow::setStyle() -{ - QString styleSheet; - - QFile styleFile(":/styles/default.qss"); - styleFile.open(QFile::ReadOnly); - styleSheet = QLatin1String(styleFile.readAll()); - styleFile.close(); - - QFileInfo settingsFileInfo(settings->fileName()); - QFile customStyleFile(settingsFileInfo.absolutePath() + "/doer.qss"); - if (customStyleFile.open(QFile::ReadOnly)) { - styleSheet += QLatin1String(customStyleFile.readAll()); - customStyleFile.close(); - } - - ui->textArea->setStyleSheet(styleSheet); -} - -void MainWindow::bindShortcuts() +void MainWindow::bindShortcuts(void) { // Connect the fullscreen shortcut (Ctrl+F) QAction *fullScreenAction = new QAction(this); fullScreenAction->setShortcut(QKeySequence("Ctrl+F")); addAction(fullScreenAction); - connect(fullScreenAction, SIGNAL(triggered()), - this, SLOT(toggleFullScreen())); + connect(fullScreenAction, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); // Connect the fullscreen shortcut (F11) QAction *fullScreenAction2 = new QAction(this); fullScreenAction2->setShortcut(QKeySequence(Qt::Key_F11)); addAction(fullScreenAction2); - connect(fullScreenAction2, SIGNAL(triggered()), - this, SLOT(toggleFullScreen())); + connect(fullScreenAction2, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); // Connect the fullscreen exit shortcut (Esc) QAction *fullScreenExitAction = new QAction(this); fullScreenExitAction->setShortcut(QKeySequence(Qt::Key_Escape)); addAction(fullScreenExitAction); - connect(fullScreenExitAction, SIGNAL(triggered()), - this, SLOT(exitFullScreenOrHide())); + connect(fullScreenExitAction, SIGNAL(triggered()), this, SLOT(exitFullScreen())); // Connect the quit shortcut (Ctrl+Q) QAction *quitAction = new QAction(this); quitAction->setShortcut(QKeySequence("Ctrl+Q")); addAction(quitAction); - connect(quitAction, SIGNAL(triggered()), - this, SLOT(quitApplication())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(quitApplication())); } -void MainWindow::toggleFullScreen() +void MainWindow::exitFullScreen(void) { - if (isFullScreen()) - setWindowState(windowState() & ~Qt::WindowFullScreen); - else - setWindowState(windowState() | Qt::WindowFullScreen); + setWindowState(windowState() & ~Qt::WindowFullScreen); } -void MainWindow::exitFullScreen() +void MainWindow::closeEvent(QCloseEvent *event) { - setWindowState(windowState() & ~Qt::WindowFullScreen); + quitApplication(); + + QMainWindow::closeEvent(event); } -void MainWindow::exitFullScreenOrHide() +void MainWindow::moveEvent(QMoveEvent *event) { - if (isFullScreen()) - setWindowState(windowState() & ~Qt::WindowFullScreen); - else - QTimer::singleShot(0, this, SLOT(hide())); + windowGeometry = saveGeometry(); + + QMainWindow::moveEvent(event); } -void MainWindow::toggleHidden() +void MainWindow::on_textArea_cursorPositionChanged(void) { - if (isVisible()) { - if (isActiveWindow()) { - QTimer::singleShot(0, this, [this]() { - hide(); - }); - } else { - if (isMinimized()) { - setWindowState( - (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive - ); - raise(); - } - activateWindow(); - } - } else { - QTimer::singleShot(0, this, [this]() { - ensurePolished(); - setWindowState(windowState() & ~Qt::WindowMinimized); - show(); - raise(); - activateWindow(); - }); + if (ready) { + const QTextCursor currCursor = ui->textArea->textCursor(); + const int currCursorSelStart = currCursor.selectionStart(); + const int currCursorSelEnd = currCursor.selectionEnd(); + + settings->setValue("cursor", currCursorSelStart); + settings->setValue("cursor_end", currCursorSelEnd); + settings->sync(); } } -void MainWindow::quitApplication() +void MainWindow::on_textArea_textChanged(void) { - QApplication::quit(); + if (ready) { + settings->setValue("text", ui->textArea->toPlainText()); + settings->sync(); + } } -void MainWindow::closeEvent(QCloseEvent *event) +void MainWindow::quitApplication(void) { - if (isVisible()) { - event->ignore(); + settings->setValue("geometry", QString(saveGeometry().toHex())); + settings->sync(); - QTimer::singleShot(0, this, SLOT(hide())); - } else { - quitApplication(); - } + QApplication::quit(); } void MainWindow::resizeEvent(QResizeEvent *event) { - if (ready) { - settings->setValue("geometry", QString(saveGeometry().toHex())); - } + windowGeometry = saveGeometry(); QMainWindow::resizeEvent(event); } -void MainWindow::on_textArea_textChanged() +void MainWindow::toggleFullScreen(void) { - if (ready) { - settings->setValue("text", ui->textArea->toPlainText()); + if (isFullScreen()) { + setWindowState(windowState() & ~Qt::WindowFullScreen); + } else { + setWindowState(windowState() | Qt::WindowFullScreen); } } -void MainWindow::on_textArea_cursorPositionChanged() +bool MainWindow::isAlreadyRunning(void) { - if (ready) { - QTextCursor currCursor = ui->textArea->textCursor(); - int currCursorSelStart = currCursor.selectionStart(); - int currCursorSelEnd = currCursor.selectionEnd(); + const bool raiseExisting = true; + const bool anotherInstanceRunning = singleInstance->isAlreadyRunning(raiseExisting); - settings->setValue("cursor", currCursorSelStart); - settings->setValue("cursor_end", currCursorSelEnd); - } + return anotherInstanceRunning; } diff --git a/src/runguard.cpp b/src/runguard.cpp deleted file mode 100644 index 9543fe6..0000000 --- a/src/runguard.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include - -#include "runguard.h" - - -namespace -{ - -QString generateKeyHash(const QString& key, const QString& salt) -{ - QByteArray data; - - data.append(key.toUtf8()); - data.append(salt.toUtf8()); - data = QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex(); - - return data; -} - -} - -RunGuard::RunGuard(const QString& key) - : key(key) - , memLockKey(generateKeyHash(key, "_memLockKey")) - , sharedmemKey(generateKeyHash(key, "_sharedmemKey")) - , sharedMem(sharedmemKey) - , memLock(memLockKey, 1) -{ - memLock.acquire(); - - { - // Fix for *nix: http://habrahabr.ru/post/173281/ - QSharedMemory fix(sharedmemKey); - fix.attach(); - } - memLock.release(); -} - -RunGuard::~RunGuard() -{ - release(); -} - -bool RunGuard::isAnotherRunning() -{ - if (sharedMem.isAttached()) - return false; - - memLock.acquire(); - const bool isRunning = sharedMem.attach(); - if (isRunning) - sharedMem.detach(); - memLock.release(); - - return isRunning; -} - -bool RunGuard::tryToRun() -{ - if (isAnotherRunning()) // Extra check - return false; - - memLock.acquire(); - const bool result = sharedMem.create(sizeof(quint64)); - memLock.release(); - - if (!result) { - release(); - return false; - } - - return true; -} - -void RunGuard::release() -{ - memLock.acquire(); - - if (sharedMem.isAttached()) - sharedMem.detach(); - - memLock.release(); -} diff --git a/src/traymenu.cpp b/src/traymenu.cpp deleted file mode 100644 index a46f27e..0000000 --- a/src/traymenu.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include - -#include "traymenu.h" - - -TrayMenu::TrayMenu(QWidget *parent) : - QMenu(parent) -{ - toggleAction = new QAction(tr("Toggle"), this); - quitAction = new QAction(tr("Quit"), this); - - connect(toggleAction, SIGNAL(triggered()), parent, SLOT(toggleHidden())); - connect(quitAction, SIGNAL(triggered()), parent, SLOT(quitApplication())); - - addAction(toggleAction); - addAction(quitAction); -} - -TrayMenu::~TrayMenu() -{ - delete toggleAction; - delete quitAction; -}