mirror of
https://github.com/deskflow/deskflow.git
synced 2026-07-04 21:04:59 +08:00
Some checks failed
CodeQL Analysis / analyze (push) Has been cancelled
Continuous Integration / lint-reuse (push) Has been cancelled
SonarCloud Analysis / analyze (push) Has been cancelled
Continuous Integration / ci-passed (push) Has been cancelled
Continuous Integration / test-results (push) Has been cancelled
Continuous Integration / lint-clang (push) Has been cancelled
Continuous Integration / analyze-valgrind (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[arch:amd64 config-args:-G Ninja name:windows-2022-x64 runs-on:windows-2022 timeout:30 vcpkg-triplet:x64-windows-release]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[arch:arm64 config-args:-G Ninja name:windows-2022-arm64 runs-on:windows-11-arm timeout:30 vcpkg-triplet:arm64-windows]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk name:macos-14-arm64 runs-on:macos-14 timeout:10]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk name:macos-14-x64 runs-on:macos-14-large timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_DEV_DOCS=ON container:archlinux:latest like:arch name:archlinux-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:debian:trixie-slim like:debian name:debian-13-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:debian:trixie-slim like:debian name:debian-13-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:41 like:fedora name:fedora-41-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:41 like:fedora name:fedora-41-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:42 like:fedora name:fedora-42-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:42 like:fedora name:fedora-42-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:opensuse/tumbleweed:latest like:suse name:opensuse-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:opensuse/tumbleweed:latest like:suse name:opensuse-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:ubuntu:25.04 like:debian name:ubuntu-25.04-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:ubuntu:25.04 like:debian name:ubuntu-25.04-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / unix-${{ matrix.distro.name }} (map[name:freebsd]) (push) Has been cancelled
Continuous Integration / flatpak-${{matrix.flatpak.arch}} (map[arch:aarch64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Continuous Integration / flatpak-${{matrix.flatpak.arch}} (map[arch:x86_64 runs-on:ubuntu-latest]) (push) Has been cancelled
Continuous Integration / release (push) Has been cancelled
Continuous Integration / winget-publish (push) Has been cancelled
100 lines
2.4 KiB
C++
100 lines
2.4 KiB
C++
/*
|
|
* Deskflow -- mouse and keyboard sharing utility
|
|
* SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello <sithlord48@gmail.com>
|
|
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
|
|
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
|
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
|
*/
|
|
|
|
#include "CoreArgParser.h"
|
|
|
|
#include "arch/Arch.h"
|
|
#include "base/EventQueue.h"
|
|
#include "base/Log.h"
|
|
#include "common/ExitCodes.h"
|
|
#include "deskflow/ClientApp.h"
|
|
#include "deskflow/ServerApp.h"
|
|
|
|
#if SYSAPI_WIN32
|
|
#include "arch/win32/ArchMiscWindows.h"
|
|
#include <QCoreApplication>
|
|
#endif
|
|
|
|
#include <QFileInfo>
|
|
#include <QSharedMemory>
|
|
#include <QTextStream>
|
|
#include <iostream>
|
|
|
|
void showHelp(const CoreArgParser &parser)
|
|
{
|
|
QTextStream(stdout) << parser.helpText();
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
#if SYSAPI_WIN32
|
|
// HACK to make sure settings gets the correct qApp path
|
|
QCoreApplication m(argc, argv);
|
|
m.deleteLater();
|
|
|
|
ArchMiscWindows::setInstanceWin32(GetModuleHandle(nullptr));
|
|
#endif
|
|
|
|
Arch arch;
|
|
arch.init();
|
|
|
|
Log log;
|
|
|
|
QStringList args;
|
|
for (int i = 0; i < argc; i++)
|
|
args.append(argv[i]);
|
|
|
|
CoreArgParser parser(args);
|
|
|
|
// Print any parser errors
|
|
if (!parser.errorText().isEmpty()) {
|
|
QTextStream(stdout) << parser.errorText() << "\n";
|
|
}
|
|
|
|
if (parser.help()) {
|
|
showHelp(parser);
|
|
return s_exitSuccess;
|
|
}
|
|
|
|
if (parser.version()) {
|
|
QTextStream(stdout) << parser.versionText();
|
|
return s_exitSuccess;
|
|
}
|
|
|
|
// Before we check any more args we need to check for a duplicate process.
|
|
// Create a shared memory segment with a unique key
|
|
// This is to prevent a new instance from running if one is already running
|
|
QSharedMemory sharedMemory("deskflow-core");
|
|
|
|
// Attempt to attach first and detach in order to clean up stale shm chunks
|
|
// This can happen if the previous instance was killed or crashed
|
|
if (sharedMemory.attach())
|
|
sharedMemory.detach();
|
|
|
|
// If we can create 1 byte of SHM we are the only instance
|
|
if (!sharedMemory.create(1)) {
|
|
LOG_WARN("an instance of deskflow core is already running");
|
|
return s_exitDuplicate;
|
|
}
|
|
|
|
parser.parse();
|
|
|
|
EventQueue events;
|
|
const auto processName = QFileInfo(argv[0]).fileName();
|
|
|
|
if (parser.serverMode()) {
|
|
ServerApp app(&events, processName);
|
|
return app.run();
|
|
} else if (parser.clientMode()) {
|
|
ClientApp app(&events, processName);
|
|
return app.run();
|
|
}
|
|
|
|
return s_exitSuccess;
|
|
}
|