From 1eb6548ed2d9f43295a25c5fce0849c7ace063e9 Mon Sep 17 00:00:00 2001 From: Oleg Shparber Date: Sun, 4 Aug 2024 13:45:42 -0400 Subject: [PATCH] fix(ui): fix Unix build when X11 is not available Fixes #1645. --- src/libs/ui/qxtglobalshortcut/CMakeLists.txt | 8 ++ .../qxtglobalshortcut/qxtglobalshortcut.cpp | 5 +- .../qxtglobalshortcut_mac.cpp | 8 ++ .../qxtglobalshortcut_noop.cpp | 98 +++++++++++++++++++ .../qxtglobalshortcut/qxtglobalshortcut_p.h | 1 + .../qxtglobalshortcut_win.cpp | 7 ++ .../qxtglobalshortcut_x11.cpp | 6 ++ 7 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_noop.cpp diff --git a/src/libs/ui/qxtglobalshortcut/CMakeLists.txt b/src/libs/ui/qxtglobalshortcut/CMakeLists.txt index f1c6a051..476c2f58 100644 --- a/src/libs/ui/qxtglobalshortcut/CMakeLists.txt +++ b/src/libs/ui/qxtglobalshortcut/CMakeLists.txt @@ -12,11 +12,19 @@ elseif(UNIX) list(APPEND QxtGlobalShortcut_SOURCES qxtglobalshortcut_x11.cpp ) + else() + list(APPEND QxtGlobalShortcut_SOURCES + qxtglobalshortcut_noop.cpp + ) endif() elseif(WIN32) list(APPEND QxtGlobalShortcut_SOURCES qxtglobalshortcut_win.cpp ) +else() + list(APPEND QxtGlobalShortcut_SOURCES + qxtglobalshortcut_noop.cpp + ) endif() add_library(QxtGlobalShortcut STATIC ${QxtGlobalShortcut_SOURCES}) diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut.cpp b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut.cpp index d7723a57..d9a998da 100644 --- a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut.cpp +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut.cpp @@ -54,7 +54,6 @@ #include "qxtglobalshortcut_p.h" #include -#include #ifndef Q_OS_MACOS int QxtGlobalShortcutPrivate::ref = 0; @@ -247,9 +246,7 @@ bool QxtGlobalShortcut::isEnabled() const */ bool QxtGlobalShortcut::isSupported() { - return QGuiApplication::platformName() == QLatin1String("windows") - || QGuiApplication::platformName() == QLatin1String("xcb") - || QGuiApplication::platformName() == QLatin1String("cocoa"); + return QxtGlobalShortcutPrivate::isSupported(); } void QxtGlobalShortcut::setEnabled(bool enabled) diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_mac.cpp b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_mac.cpp index 98d4f797..b46912b4 100644 --- a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_mac.cpp +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_mac.cpp @@ -52,11 +52,13 @@ #include "qxtglobalshortcut_p.h" +#include #include #include #include +namespace { typedef QPair Identifier; static QMap keyRefs; static QHash keyIDs; @@ -76,6 +78,12 @@ OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, return noErr; } +} // namespace + +bool QxtGlobalShortcutPrivate::isSupported() +{ + return QGuiApplication::platformName() == QLatin1String("cocoa"); +} bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &eventType, void *message, NativeEventFilterResult *result) diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_noop.cpp b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_noop.cpp new file mode 100644 index 00000000..bbfa3592 --- /dev/null +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_noop.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2024 Oleg Shparber +** Contact: https://go.zealdocs.org/l/contact +** +** This file is part of Zeal. +** +** Zeal is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** Zeal is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with Zeal. If not, see . +** +****************************************************************************/ +/**************************************************************************** +** Copyright (c) 2006 - 2011, the LibQxt project. +** See the Qxt AUTHORS file for a list of authors and copyright holders. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** * Neither the name of the LibQxt project nor the +** names of its contributors may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** +*****************************************************************************/ + +#include "qxtglobalshortcut_p.h" + +bool QxtGlobalShortcutPrivate::isSupported() +{ + return false; +} + +bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &eventType, + void *message, + NativeEventFilterResult *result) +{ + Q_UNUSED(eventType) + Q_UNUSED(message) + Q_UNUSED(result) + + return false; +} + +quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) +{ + Q_UNUSED(modifiers) + + return 0; +} + +quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) +{ + Q_UNUSED(key) + + return 0; +} + +bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) +{ + Q_UNUSED(nativeKey) + Q_UNUSED(nativeMods) + + return false; +} + +bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) +{ + Q_UNUSED(nativeKey) + Q_UNUSED(nativeMods) + + return false; +} diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_p.h b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_p.h index 6fc90a3c..17b687e6 100644 --- a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_p.h +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_p.h @@ -87,6 +87,7 @@ class QxtGlobalShortcutPrivate : public QAbstractNativeEventFilter bool nativeEventFilter(const QByteArray &eventType, void *message, NativeEventFilterResult *result) override; + static bool isSupported(); static bool activateShortcut(quint32 nativeKey, quint32 nativeMods); private: diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_win.cpp b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_win.cpp index db21da07..fad7ab5e 100644 --- a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_win.cpp +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_win.cpp @@ -52,8 +52,15 @@ #include "qxtglobalshortcut_p.h" +#include + #include +bool QxtGlobalShortcutPrivate::isSupported() +{ + return QGuiApplication::platformName() == QLatin1String("windows"); +} + bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &eventType, void *message, NativeEventFilterResult *result) { diff --git a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_x11.cpp b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_x11.cpp index 7a832ad2..b5aea8b1 100644 --- a/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_x11.cpp +++ b/src/libs/ui/qxtglobalshortcut/qxtglobalshortcut_x11.cpp @@ -52,6 +52,7 @@ #include "qxtglobalshortcut_p.h" +#include #include #include #include @@ -72,6 +73,11 @@ constexpr quint32 maskModifiers[] = { }; } // namespace +bool QxtGlobalShortcutPrivate::isSupported() +{ + return QGuiApplication::platformName() == QLatin1String("xcb"); +} + bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &eventType, void *message, NativeEventFilterResult *result) {