diff --git a/CMakeLists.txt b/CMakeLists.txt index 8101598..8d824ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,107 +1,107 @@ cmake_minimum_required(VERSION 3.0) # KDE Application Version, managed by release script set (KDE_APPLICATIONS_VERSION_MAJOR "19") set (KDE_APPLICATIONS_VERSION_MINOR "11") -set (KDE_APPLICATIONS_VERSION_MICRO "70") +set (KDE_APPLICATIONS_VERSION_MICRO "0") set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") project(krfb VERSION ${KDE_APPLICATIONS_VERSION}) set(QT_MIN_VERSION 5.6.0) set(KF5_MIN_VERSION 5.31.0) find_package(ECM ${KF5_MIN_VERSION} NO_MODULE REQUIRED) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMInstallIcons) include(ECMAddAppIcon) include(ECMSetupVersion) include(FeatureSummary) include(CheckIncludeFile) check_include_file("linux/input.h" HAVE_LINUX_INPUT_H) find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Widgets X11Extras) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS I18n Completion Config CoreAddons Crash DBusAddons DNSSD DocTools Notifications Wallet WidgetsAddons WindowSystem XmlGui ) find_package(X11 REQUIRED) find_package(XCB REQUIRED COMPONENTS XCB RENDER SHAPE XFIXES DAMAGE SHM IMAGE ) if(WIN32) set(CMAKE_REQUIRED_LIBRARIES ${KDEWIN32_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${KDEWIN32_INCLUDES}) endif(WIN32) add_definitions( -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050600 -DQT_USE_QSTRINGBUILDER -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_FROM_BYTEARRAY -DQT_STRICT_ITERATORS -DQT_NO_URL_CAST_FROM_STRING -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT ) include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) find_package(LibVNCServer REQUIRED) find_package(PipeWire) set_package_properties(PipeWire PROPERTIES TYPE OPTIONAL PURPOSE "Required for pipewire screencast plugin" ) ecm_setup_version(PROJECT VARIABLE_PREFIX KRFB VERSION_HEADER "krfb_version.h") include_directories ("${CMAKE_CURRENT_BINARY_DIR}/krfb" "${CMAKE_CURRENT_SOURCE_DIR}/krfb" "${CMAKE_CURRENT_SOURCE_DIR}/krfb/ui" ) if(Q_WS_X11) if(NOT X11_XTest_FOUND) message(FATAL_ERROR "krfb requires the libXtst (https://xorg.freedesktop.org) to be built") endif(NOT X11_XTest_FOUND) endif(Q_WS_X11) add_subdirectory(events) add_subdirectory(krfb) add_subdirectory(framebuffers) add_subdirectory(doc) add_subdirectory(icons) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/krfb/trayicon.cpp b/krfb/trayicon.cpp index 3eeb456..02387b9 100644 --- a/krfb/trayicon.cpp +++ b/krfb/trayicon.cpp @@ -1,145 +1,146 @@ /* Copyright (C) 2010 Collabora Ltd @author George Kiagiadakis Copyright (C) 2001-2002 Tim Jansen This program 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 2 of the License, or (at your option) any later version. This program 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 Lesser General Public License along with this program. If not, see . */ #include "trayicon.h" #include "mainwindow.h" #include "rfbservermanager.h" #include "rfbclient.h" +#include #include #include #include #include #include #include #include #include #include #include class ClientActions { public: ClientActions(RfbClient *client, QMenu *menu, QAction *before); virtual ~ClientActions(); private: QMenu *m_menu; QAction *m_title; QAction *m_disconnectAction; QAction *m_enableControlAction; QAction *m_separator; }; ClientActions::ClientActions(RfbClient* client, QMenu* menu, QAction* before) : m_menu(menu) { m_title = m_menu->insertSection(before, client->name()); m_disconnectAction = new QAction(i18n("Disconnect"), m_menu); m_menu->insertAction(before, m_disconnectAction); QObject::connect(m_disconnectAction, &QAction::triggered, client, &RfbClient::closeConnection); if (client->controlCanBeEnabled()) { m_enableControlAction = new KToggleAction(i18n("Enable Remote Control"), m_menu); m_enableControlAction->setChecked(client->controlEnabled()); m_menu->insertAction(before, m_enableControlAction); QObject::connect(m_enableControlAction, &KToggleAction::triggered, client, &RfbClient::setControlEnabled); QObject::connect(client, &RfbClient::controlEnabledChanged, m_enableControlAction, &KToggleAction::setChecked); } else { m_enableControlAction = nullptr; } m_separator = m_menu->insertSeparator(before); } ClientActions::~ClientActions() { m_menu->removeAction(m_title); delete m_title; m_menu->removeAction(m_disconnectAction); delete m_disconnectAction; if (m_enableControlAction) { m_menu->removeAction(m_enableControlAction); delete m_enableControlAction; } m_menu->removeAction(m_separator); delete m_separator; } //********** TrayIcon::TrayIcon(QWidget *mainWindow) : KStatusNotifierItem(mainWindow) { setIconByPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(22, 22, QIcon::Disabled)); setToolTipTitle(i18n("Desktop Sharing - disconnected")); setCategory(KStatusNotifierItem::ApplicationStatus); connect(RfbServerManager::instance(), &RfbServerManager::clientConnected, this, &TrayIcon::onClientConnected); connect(RfbServerManager::instance(), &RfbServerManager::clientDisconnected, this, &TrayIcon::onClientDisconnected); m_aboutAction = KStandardAction::aboutApp(this, SLOT(showAbout()), this); contextMenu()->addAction(m_aboutAction); } void TrayIcon::onClientConnected(RfbClient* client) { if (m_clientActions.isEmpty()) { //first client connected setIconByName(QStringLiteral("krfb")); setToolTipTitle(i18n("Desktop Sharing - connected with %1", client->name())); setStatus(KStatusNotifierItem::Active); } else { //Nth client connected, N != 1 setToolTipTitle(i18n("Desktop Sharing - connected")); } m_clientActions[client] = new ClientActions(client, contextMenu(), m_aboutAction); } void TrayIcon::onClientDisconnected(RfbClient* client) { ClientActions *actions = m_clientActions.take(client); delete actions; if (m_clientActions.isEmpty()) { setIconByPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(22, 22, QIcon::Disabled)); setToolTipTitle(i18n("Desktop Sharing - disconnected")); setStatus(KStatusNotifierItem::Passive); } else if (m_clientActions.size() == 1) { //clients number dropped back to 1 RfbClient *client = m_clientActions.constBegin().key(); setToolTipTitle(i18n("Desktop Sharing - connected with %1", client->name())); } } void TrayIcon::showAbout() { KHelpMenu menu; menu.aboutApplication(); }