Compare commits

..

5 Commits

Author SHA1 Message Date
l10n daemon script
3897e48e87 GIT_SILENT made messages (after extraction) 2020-11-01 08:37:09 +01:00
Christoph Feck
4b3caa10f2 GIT_SILENT Update Appstream for new release 2020-10-31 18:29:34 +01:00
Christoph Feck
9483c5ab18 GIT_SILENT Upgrade release service version to 20.08.3. 2020-10-31 17:36:41 +01:00
l10n daemon script
38332f8134 GIT_SILENT made messages (after extraction) 2020-10-31 08:22:21 +01:00
l10n daemon script
9037a2e8c2 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2020-10-29 09:54:15 +01:00
46 changed files with 944 additions and 921 deletions

26
.gitignore vendored
View File

@@ -1,26 +0,0 @@
# Ignore the following files
*~
*.[oa]
*.diff
*.kate-swp
*.kdev4
.kdev_include_paths
*.kdevelop.pcs
*.moc
*.moc.cpp
*.orig
*.user
.*.swp
.swp.*
Doxyfile
Makefile
/build*/
.cmake/
CMakeLists.txt.user*
*.unc-backup*
.clang-format
/compile_commands.json
.clangd
.cache
.idea
/cmake-build*

View File

@@ -1,15 +1,15 @@
cmake_minimum_required(VERSION 3.16)
cmake_minimum_required(VERSION 3.0)
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "21")
set (RELEASE_SERVICE_VERSION_MAJOR "20")
set (RELEASE_SERVICE_VERSION_MINOR "08")
set (RELEASE_SERVICE_VERSION_MICRO "0")
set (RELEASE_SERVICE_VERSION_MICRO "3")
set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(krfb VERSION ${RELEASE_SERVICE_VERSION})
set(QT_MIN_VERSION 5.15.0)
set(KF5_MIN_VERSION 5.83.0)
set(QT_MIN_VERSION 5.10.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})
@@ -20,7 +20,6 @@ include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMInstallIcons)
include(ECMAddAppIcon)
include(ECMSetupVersion)
include(ECMQtDeclareLoggingCategory)
include(FeatureSummary)
include(CheckIncludeFile)
@@ -30,6 +29,7 @@ find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Widgets X11Extr
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
I18n
Completion
Config
CoreAddons
Crash
@@ -77,35 +77,12 @@ include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} )
find_package(LibVNCServer REQUIRED)
pkg_check_modules(PipeWire IMPORTED_TARGET libpipewire-0.3)
add_feature_info(PipeWire PipeWire_FOUND "Required for pipewire screencast plugin")
find_package(gbm)
set_package_properties(gbm PROPERTIES
find_package(PipeWire)
set_package_properties(PipeWire PROPERTIES
TYPE OPTIONAL
PURPOSE "Required for dma-buf support in pipewire screencast plugin."
PURPOSE "Required for pipewire screencast plugin"
)
find_package(EGL)
set_package_properties(EGL PROPERTIES
TYPE OPTIONAL
PURPOSE "Required for dma-buf support in pipewire screencast plugin."
)
find_package(epoxy)
set_package_properties(epoxy PROPERTIES DESCRIPTION "libepoxy"
URL "https://github.com/anholt/libepoxy"
TYPE OPTIONAL
PURPOSE "Required for dma-buf support in pipewire screencast plugin."
)
if(EGL_FOUND AND gbm_FOUND AND epoxy_FOUND)
set (HAVE_DMA_BUF TRUE)
else()
set (HAVE_DMA_BUF FALSE)
endif()
ecm_setup_version(PROJECT
VARIABLE_PREFIX KRFB
VERSION_HEADER "krfb_version.h")
@@ -127,10 +104,4 @@ add_subdirectory(framebuffers)
add_subdirectory(doc)
add_subdirectory(icons)
ecm_qt_install_logging_categories(
EXPORT KRFB
FILE krfb.categories
DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

View File

@@ -1,128 +0,0 @@
{
"version": 2,
"configurePresets": [
{
"name": "dev",
"displayName": "Build as debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "asan",
"displayName": "Build with Asan support.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-asan",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"ECM_ENABLE_SANITIZERS" : "'address;undefined'",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "dev-clang",
"displayName": "dev-clang",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-clang",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
},
"environment": {
"CXX": "clang++",
"CCACHE_DISABLE": "ON"
}
},
{
"name": "unity",
"displayName": "Build with CMake unity support.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-unity",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_UNITY_BUILD": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "release",
"displayName": "Build as release mode.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "profile",
"displayName": "profile",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-profile",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "clazy",
"displayName": "clazy",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-clazy",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
},
"environment": {
"CXX": "clazy",
"CCACHE_DISABLE": "ON"
}
}
],
"buildPresets": [
{
"name": "dev",
"configurePreset": "dev"
},
{
"name": "release",
"configurePreset": "release"
},
{
"name": "dev-clang",
"configurePreset": "dev-clang"
},
{
"name": "asan",
"configurePreset": "asan"
},
{
"name": "unity",
"configurePreset": "unity"
},
{
"name": "clazy",
"configurePreset": "clazy",
"environment": {
"CLAZY_CHECKS" : "level0,level1,detaching-member,ifndef-define-typo,isempty-vs-count,qrequiredresult-candidates,reserve-candidates,signal-with-return-value,unneeded-cast,function-args-by-ref,function-args-by-value,returning-void-expression,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch,old-style-connect,qstring-allocations,container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,qstring-varargs,level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
"CCACHE_DISABLE" : "ON"
}
}
],
"testPresets": [
{
"name": "dev",
"configurePreset": "dev",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": false}
},
{
"name": "asan",
"configurePreset": "asan",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
]
}

View File

@@ -1,2 +0,0 @@
# SPDX-FileCopyrightText: 2021 Laurent Montel <montel@kde.org>
# SPDX-License-Identifier: BSD-3-Clause

View File

@@ -0,0 +1,122 @@
#.rst:
# FindPipeWire
# -------
#
# Try to find PipeWire on a Unix system.
#
# This will define the following variables:
#
# ``PipeWire_FOUND``
# True if (the requested version of) PipeWire is available
# ``PipeWire_VERSION``
# The version of PipeWire
# ``PipeWire_LIBRARIES``
# This can be passed to target_link_libraries() instead of the ``PipeWire::PipeWire``
# target
# ``PipeWire_INCLUDE_DIRS``
# This should be passed to target_include_directories() if the target is not
# used for linking
# ``PipeWire_DEFINITIONS``
# This should be passed to target_compile_options() if the target is not
# used for linking
#
# If ``PipeWire_FOUND`` is TRUE, it will also define the following imported target:
#
# ``PipeWire::PipeWire``
# The PipeWire library
#
# In general we recommend using the imported target, as it is easier to use.
# Bear in mind, however, that if the target is in the link interface of an
# exported library, it must be made available by the package config file.
#=============================================================================
# Copyright 2014 Alex Merry <alex.merry@kde.org>
# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
# Copyright 2018-2020 Jan Grulich <jgrulich@redhat.com>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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.
#=============================================================================
# Use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig QUIET)
pkg_search_module(PKG_PipeWire QUIET libpipewire-0.3 libpipewire-0.2)
pkg_search_module(PKG_Spa QUIET libspa-0.2 libspa-0.1)
set(PipeWire_DEFINITIONS "${PKG_PipeWire_CFLAGS}" "${PKG_Spa_CFLAGS}")
set(PipeWire_VERSION "${PKG_PipeWire_VERSION}")
find_path(PipeWire_INCLUDE_DIRS
NAMES
pipewire/pipewire.h
HINTS
${PKG_PipeWire_INCLUDE_DIRS}
${PKG_PipeWire_INCLUDE_DIRS}/pipewire-0.3
)
find_path(Spa_INCLUDE_DIRS
NAMES
spa/param/props.h
HINTS
${PKG_Spa_INCLUDE_DIRS}
${PKG_Spa_INCLUDE_DIRS}/spa-0.2
)
find_library(PipeWire_LIBRARIES
NAMES
pipewire-0.3
pipewire-0.2
HINTS
${PKG_PipeWire_LIBRARY_DIRS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PipeWire
FOUND_VAR
PipeWire_FOUND
REQUIRED_VARS
PipeWire_LIBRARIES
PipeWire_INCLUDE_DIRS
Spa_INCLUDE_DIRS
VERSION_VAR
PipeWire_VERSION
)
if(PipeWire_FOUND AND NOT TARGET PipeWire::PipeWire)
add_library(PipeWire::PipeWire UNKNOWN IMPORTED)
set_target_properties(PipeWire::PipeWire PROPERTIES
IMPORTED_LOCATION "${PipeWire_LIBRARIES}"
INTERFACE_COMPILE_OPTIONS "${PipeWire_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${PipeWire_INCLUDE_DIRS};${Spa_INCLUDE_DIRS}"
)
endif()
mark_as_advanced(PipeWire_LIBRARIES PipeWire_INCLUDE_DIRS)
include(FeatureSummary)
set_package_properties(PipeWire PROPERTIES
URL "https://www.pipewire.org"
DESCRIPTION "PipeWire - multimedia processing"
)

View File

@@ -1,104 +0,0 @@
#.rst:
# Findgbm
# -------
#
# Try to find gbm on a Unix system.
#
# This will define the following variables:
#
# ``gbm_FOUND``
# True if (the requested version of) gbm is available
# ``gbm_VERSION``
# The version of gbm
# ``gbm_LIBRARIES``
# This can be passed to target_link_libraries() instead of the ``gbm::gbm``
# target
# ``gbm_INCLUDE_DIRS``
# This should be passed to target_include_directories() if the target is not
# used for linking
# ``gbm_DEFINITIONS``
# This should be passed to target_compile_options() if the target is not
# used for linking
#
# If ``gbm_FOUND`` is TRUE, it will also define the following imported target:
#
# ``gbm::gbm``
# The gbm library
#
# In general we recommend using the imported target, as it is easier to use.
# Bear in mind, however, that if the target is in the link interface of an
# exported library, it must be made available by the package config file.
#=============================================================================
# SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
# SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
#
# SPDX-License-Identifier: BSD-3-Clause
#=============================================================================
if(CMAKE_VERSION VERSION_LESS 2.8.12)
message(FATAL_ERROR "CMake 2.8.12 is required by Findgbm.cmake")
endif()
if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Findgbm.cmake")
endif()
if(NOT WIN32)
# Use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig)
pkg_check_modules(PKG_gbm QUIET gbm)
set(gbm_DEFINITIONS ${PKG_gbm_CFLAGS_OTHER})
set(gbm_VERSION ${PKG_gbm_VERSION})
find_path(gbm_INCLUDE_DIR
NAMES
gbm.h
HINTS
${PKG_gbm_INCLUDE_DIRS}
)
find_library(gbm_LIBRARY
NAMES
gbm
HINTS
${PKG_gbm_LIBRARY_DIRS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(gbm
FOUND_VAR
gbm_FOUND
REQUIRED_VARS
gbm_LIBRARY
gbm_INCLUDE_DIR
VERSION_VAR
gbm_VERSION
)
if(gbm_FOUND AND NOT TARGET gbm::gbm)
add_library(gbm::gbm UNKNOWN IMPORTED)
set_target_properties(gbm::gbm PROPERTIES
IMPORTED_LOCATION "${gbm_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${gbm_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${gbm_INCLUDE_DIR}"
)
endif()
mark_as_advanced(gbm_LIBRARY gbm_INCLUDE_DIR)
# compatibility variables
set(gbm_LIBRARIES ${gbm_LIBRARY})
set(gbm_INCLUDE_DIRS ${gbm_INCLUDE_DIR})
set(gbm_VERSION_STRING ${gbm_VERSION})
else()
message(STATUS "Findgbm.cmake cannot find gbm on Windows systems.")
set(gbm_FOUND FALSE)
endif()
include(FeatureSummary)
set_package_properties(gbm PROPERTIES
URL "https://www.mesa3d.org"
DESCRIPTION "Mesa gbm library."
)

View File

@@ -1,2 +1,2 @@
########### install files ###############
kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR krfb)
kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR krfb)

View File

@@ -15,4 +15,4 @@ target_link_libraries (krfb_events_x11
krfbprivate
)
install (TARGETS krfb_events_x11 DESTINATION ${KDE_INSTALL_PLUGINDIR}/krfb/events)
install (TARGETS krfb_events_x11 DESTINATION ${PLUGIN_INSTALL_DIR}/krfb)

View File

@@ -0,0 +1,65 @@
[Desktop Entry]
Encoding=UTF-8
Comment=X11 XFakeInput based event handler for KRfb
Comment[ca]=Gestor d'esdeveniments basat en «XFakeInput» de l'X11 per al KRfb
Comment[ca@valencia]=Gestor d'esdeveniments basat en «XFakeInput» de l'X11 per al KRfb
Comment[da]=X11 XFakeInput baseret hændelseshåndtering til KRfb
Comment[de]=Ereignis-Modul basierend auf X11 XFakeInput für KRfb
Comment[el]=Χειριστής γεγονότων με βάση το X11 XFakeInput για το KRfb
Comment[en_GB]=X11 XFakeInput based event handler for KRfb
Comment[es]=Gestor de eventos basado en XFakeInput de X11 para KRfb
Comment[et]=KRfb X11 XFakeInput'i põhine sündmuste käitleja
Comment[eu]=KRfb-rako «X11 XFakeInput»en oinarritutako gertaera maneiatzailea
Comment[fi]=KRfb:n X11 XFakeInput -pohjainen tapahtumakäsittelijä
Comment[fr]=Gestionnaire d'évènements utilisant XFakeInput de X11 pour KRfb
Comment[gl]=Xestor de eventos para KRfb baseado no XFakeInput de X11
Comment[it]=Gestore eventi basato su XFakeInput di X11 per KRfb
Comment[ko]=X11 XFakeInput 기반 KRfb 이벤트 핸들러
Comment[nl]=Op X11 XFakeInput gebaseerde behandelaar van gebeurtenis voor KRfb
Comment[nn]=X11 XFakeInput-basert hendingshandtering for KRfb
Comment[pl]=Obsługa wydarzeń X11 oparta na XFakeInput dla KRfb
Comment[pt]=Tratamento de eventos baseado no XFakeInput do X11 para o KRfb
Comment[pt_BR]=Manipulador de eventos baseado no XFakeInput do X11 para o KRfb
Comment[sk]=X11 Spracovateľ udalostí založený na XFakeInput pre KRfb
Comment[sl]=Upravljalnik dogodkov za KRfb na podlagi X11 XFakeInput
Comment[sv]=Händelsehanterare för Krfb baserad på X11 XFakeInput
Comment[uk]=Обробник подій для KRfb на основі XFakeInput X11
Comment[x-test]=xxX11 XFakeInput based event handler for KRfbxx
Comment[zh_CN]=基于 X11 XFakeInput 的 KRfb 事件处理器
Comment[zh_TW]=KRfb 基於 X11 XFakeInput 的事件處理器
Name=X11 XFakeInput based event handler for KRfb
Name[ca]=Gestor d'esdeveniments basat en «XFakeInput» de l'X11 per al KRfb
Name[ca@valencia]=Gestor d'esdeveniments basat en «XFakeInput» de l'X11 per al KRfb
Name[da]=X11 XFakeInput baseret hændelseshåndtering til KRfb
Name[de]=Ereignis-Modul basierend auf X11 XFakeInput für KRfb
Name[el]=Χειριστής γεγονότων με βάση το X11 XFakeInput για το KRfb
Name[en_GB]=X11 XFakeInput based event handler for KRfb
Name[es]=Gestor de eventos basado en XFakeInput de X11 para KRfb
Name[et]=KRfb X11 XFakeInput'i põhine sündmuste käitleja
Name[eu]=KRfb-rako «X11 XFakeInput»en oinarritutako gertaera maneiatzailea
Name[fi]=KRfb:n X11 XFakeInput -pohjainen tapahtumakäsittelijä
Name[fr]=Gestionnaire d'évènements utilisant XFakeInput de X11 pour KRfb
Name[gl]=Xestor de eventos para KRfb baseado no XFakeInput de X11
Name[it]=Gestore eventi basato su XFakeInput di X11 per KRfb
Name[ko]=X11 XFakeInput 기반 KRfb 이벤트 핸들러
Name[nl]=Op X11 XFakeInput gebaseerde behandelaar van gebeurtenis voor KRfb
Name[nn]=X11 XFakeInput-basert hendingshandtering for KRfb
Name[pl]=Obsługa wydarzeń X11 oparta na XFakeInput dla KRfb
Name[pt]=Tratamento de eventos baseado no XFakeInput do X11 para o KRfb
Name[pt_BR]=Manipulador de eventos baseado no XFakeInput do X11 para o KRfb
Name[sk]=X11 Spracovateľ udalostí založený na XFakeInput pre KRfb
Name[sl]=Upravljalnik dogodkov za KRfb na podlagi X11 XFakeInput
Name[sv]=Händelsehanterare för Krfb baserad på X11 XFakeInput
Name[uk]=Обробник подій для KRfb на основі XFakeInput X11
Name[x-test]=xxX11 XFakeInput based event handler for KRfbxx
Name[zh_CN]=基于 X11 XFakeInput 的 KRfb 事件处理器
Name[zh_TW]=KRfb 基於 X11 XFakeInput 的事件處理器
Type=Service
ServiceTypes=krfb/events
X-KDE-Library=krfb_events_x11
X-KDE-PluginInfo-Name=x11
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://www.kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

View File

@@ -14,7 +14,6 @@
"Description[fi]": "KRfb:n X11 XFakeInput -pohjainen tapahtumakäsittelijä",
"Description[fr]": "Gestionnaire d'évènements utilisant XFakeInput de X11 pour KRfb",
"Description[gl]": "Xestor de eventos para KRfb baseado no XFakeInput de X11",
"Description[ia]": "Maneator de evento de X11 basate sur XFakeInput per KRfb",
"Description[it]": "Gestore eventi basato su XFakeInput di X11 per KRfb",
"Description[ko]": "X11 XFakeInput 기반 KRfb 이벤트 핸들러",
"Description[nl]": "Op X11 XFakeInput gebaseerde behandelaar van gebeurtenis voor KRfb",
@@ -60,6 +59,9 @@
"Name[x-test]": "xxX11 Event handler for KRfbxx",
"Name[zh_CN]": "X11 KRfb 事件处理器",
"Name[zh_TW]": "KRfb 的 X11 事件處理器",
"ServiceTypes": [
"krfb/events"
],
"Version": "0.1",
"Website": "http://www.kde.org"
}

View File

@@ -44,18 +44,18 @@ public:
EventData();
//keyboard
Display *dpy = nullptr;
signed char modifiers[0x100] = {};
KeyCode keycodes[0x100] = {};
KeyCode leftShiftCode = 0;
KeyCode rightShiftCode = 0;
KeyCode altGrCode = 0;
char modifierState = 0;
Display *dpy;
signed char modifiers[0x100];
KeyCode keycodes[0x100];
KeyCode leftShiftCode;
KeyCode rightShiftCode;
KeyCode altGrCode;
char modifierState;
//mouse
int buttonMask = 0;
int x = 0;
int y = 0;
int buttonMask;
int x;
int y;
private:
void init();

View File

@@ -23,5 +23,5 @@ target_link_libraries (krfb_events_xdp
)
install (TARGETS krfb_events_xdp
DESTINATION ${KDE_INSTALL_PLUGINDIR}/krfb/events
DESTINATION ${PLUGIN_INSTALL_DIR}/krfb
)

View File

@@ -0,0 +1,66 @@
[Desktop Entry]
Encoding=UTF-8
Comment=Xdg-desktop-portal based event handler for KRfb
Comment[ca]=Gestor d'esdeveniments basat en «Xdg-desktop-portal» per al KRfb
Comment[ca@valencia]=Gestor d'esdeveniments basat en «Xdg-desktop-portal» per al KRfb
Comment[da]=Xdg-desktop-portal baseret hændelseshåndtering til KRfb
Comment[de]=Ereignis-Modul basierend auf Xdg-desktop-portal für KRfb
Comment[el]=Χειριστής γεγονότων με βάση το xdg-desktop-portal για το KRfb
Comment[en_GB]=Xdg-desktop-portal based event handler for KRfb
Comment[es]=Gestor de eventos basado en Xdg-desktop-portal para KRfb
Comment[et]=KRfb Xdg-desktop-portal'i põhine sündmuste käitleja
Comment[eu]=KRfb-rako «xdg-desktop-portal»en oinarritutako maneiatzailea
Comment[fi]=KRfb:n XDG-desktop-portal-pohjainen tapahtumakäsittelijä
Comment[fr]=Gestionnaire d'évènements utilisant Xdg-desktop-portal pour KRfb
Comment[gl]=Xestor de eventos para KRfb baseado en Xdg-desktop-portal
Comment[it]=Gestore eventi basato su xdg-desktop-portal per KRfb
Comment[ko]=Xdg-desktop-portal 기반 KRfb 이벤트 핸들러
Comment[nl]=Op Xdg-desktop-portal gebaseerde behandelaar van gebeurtenis voor KRfb
Comment[nn]=Xdg-desktop-portal-basert hendingshandtering for KRfb
Comment[pl]=Obsługa wydarzeń oparta na Xdg-desktop-portal dla KRfb
Comment[pt]=Tratamento de eventos baseado no Xdg-desktop-portal para o KRfb
Comment[pt_BR]=Manipulador de eventos baseado no xdg-desktop-portal para o KRfb
Comment[sk]=Obsluha udalostí založená na Xdg-desktop-portal pre KRfb
Comment[sl]=Upravljalnik dogodkov za KRfb na podlagi namiznega portala Xdg
Comment[sv]=Händelsehanterare för Krfb baserad på xdg-desktop-portal
Comment[uk]=Обробник подій для KRfb на основі Xdg-desktop-portal
Comment[x-test]=xxXdg-desktop-portal based event handler for KRfbxx
Comment[zh_CN]=基于 xdg-desktop-portal 的 KRfb 事件处理器
Comment[zh_TW]=KRfb 基於 Xdg-desktop-portal 的事件處理器
Name=Xdg-desktop-portal based event handler for KRfb
Name[ca]=Gestor d'esdeveniments basat en «Xdg-desktop-portal» per al KRfb
Name[ca@valencia]=Gestor d'esdeveniments basat en «Xdg-desktop-portal» per al KRfb
Name[da]=Xdg-desktop-portal baseret hændelseshåndtering til KRfb
Name[de]=Ereignis-Modul basierend auf Xdg-desktop-portal für KRfb
Name[el]=Χειριστής γεγονότων με βάση το xdg-desktop-portal για το KRfb
Name[en_GB]=Xdg-desktop-portal based event handler for KRfb
Name[es]=Gestor de eventos basado en Xdg-desktop-portal para KRfb
Name[et]=KRfb Xdg-desktop-portal'i põhine sündmuste käitleja
Name[eu]=KRfb-rako «xdg-desktop-portal»en oinarritutako maneiatzailea
Name[fi]=KRfb:n XDG-desktop-portal-pohjainen tapahtumakäsittelijä
Name[fr]=Gestionnaire d'évènements utilisant Xdg-desktop-portal pour KRfb
Name[gl]=Xestor de eventos para KRfb baseado en Xdg-desktop-portal
Name[it]=Gestore eventi basato su xdg-desktop-portal per KRfb
Name[ko]=Xdg-desktop-portal 기반 KRfb 이벤트 핸들러
Name[nl]=Op Xdg-desktop-portal gebaseerde behandelaar van gebeurtenis voor KRfb
Name[nn]=Xdg-desktop-portal-basert hendingshandtering for KRfb
Name[pl]=Obsługa wydarzeń oparta na Xdg-desktop-portal dla KRfb
Name[pt]=Tratamento de eventos baseado no Xdg-desktop-portal para o KRfb
Name[pt_BR]=Manipulador de eventos baseado no xdg-desktop-portal para o KRfb
Name[sk]=Obsluha udalostí založená na Xdg-desktop-portal pre KRfb
Name[sl]=Upravljalnik dogodkov za KRfb na podlagi namiznega portala Xdg
Name[sv]=Händelsehanterare för Krfb baserad på xdg-desktop-portal
Name[uk]=Обробник подій для KRfb на основі Xdg-desktop-portal
Name[x-test]=xxXdg-desktop-portal based event handler for KRfbxx
Name[zh_CN]=基于 xdg-desktop-portal 的 KRfb 事件处理器
Name[zh_TW]=KRfb 基於 Xdg-desktop-portal 的事件處理器
Type=Service
ServiceTypes=krfb/events
X-KDE-Library=krfb_events_xdp
X-KDE-PluginInfo-Name=xdp
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://www.kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

View File

@@ -14,7 +14,6 @@
"Description[fi]": "KRfb:n XDG-desktop-portal-pohjainen tapahtumakäsittelijä",
"Description[fr]": "Gestionnaire d'évènements utilisant Xdg-desktop-portal pour KRfb",
"Description[gl]": "Xestor de eventos para KRfb baseado en Xdg-desktop-portal",
"Description[ia]": "Maneator de evento basate sur Xdg-desktop-portal per KRfb",
"Description[it]": "Gestore eventi basato su xdg-desktop-portal per KRfb",
"Description[ko]": "Xdg-desktop-portal 기반 KRfb 이벤트 핸들러",
"Description[nl]": "Op Xdg-desktop-portal gebaseerde behandelaar van gebeurtenis voor KRfb",
@@ -45,7 +44,6 @@
"Name[fi]": "KRfb:n XDG-desktop-portal-pohjainen tapahtumakäsittelijä",
"Name[fr]": "Gestionnaire d'évènements Xdg-desktop-portal pour KRfb",
"Name[gl]": "Xestor de eventos de Xdg-desktop-portal para KRfb",
"Name[ia]": "Maneator de evento basate sur Xdg-desktop-portal per KRfb",
"Name[it]": "Gestore eventi xdg-desktop-portal per KRfb",
"Name[ko]": "KRfb Xdg-desktop-portal 이벤트 핸들러",
"Name[nl]": "Op Xdg-desktop-portal behandelaar van gebeurtenis voor KRfb",
@@ -60,6 +58,9 @@
"Name[x-test]": "xxXdg-desktop-portal Event handler for KRfbxx",
"Name[zh_CN]": "xdg-desktop-portal KRfb 事件处理器",
"Name[zh_TW]": "KRfb 的 Xdg-desktop-portal 事件處理器",
"ServiceTypes": [
"krfb/events"
],
"Version": "0.1",
"Website": "http://www.kde.org"
}

View File

@@ -36,9 +36,9 @@ public:
EventData();
//mouse
int buttonMask = 0;
int x = 0;
int y = 0;
int buttonMask;
int x;
int y;
QScopedPointer<OrgFreedesktopPortalRemoteDesktopInterface> dbusXdpRemoteDesktopService;
@@ -55,8 +55,10 @@ EventData::EventData()
void EventData::init()
{
dbusXdpRemoteDesktopService.reset(new OrgFreedesktopPortalRemoteDesktopInterface(QStringLiteral("org.freedesktop.portal.Desktop"),
QStringLiteral("/org/freedesktop/portal/desktop"), QDBusConnection::sessionBus()));
buttonMask = 0;
dbusXdpRemoteDesktopService.reset(new OrgFreedesktopPortalRemoteDesktopInterface(QLatin1String("org.freedesktop.portal.Desktop"),
QLatin1String("/org/freedesktop/portal/desktop"), QDBusConnection::sessionBus()));
}
void XdpEventHandler::handleKeyboard(bool down, rfbKeySym keySym)
@@ -69,8 +71,8 @@ void XdpEventHandler::handleKeyboard(bool down, rfbKeySym keySym)
void XdpEventHandler::handlePointer(int buttonMask, int x, int y)
{
const uint streamNodeId = frameBuffer()->customProperty(QStringLiteral("stream_node_id")).toUInt();
const QDBusObjectPath sessionHandle = frameBuffer()->customProperty(QStringLiteral("session_handle")).value<QDBusObjectPath>();
const uint streamNodeId = frameBuffer()->customProperty(QLatin1String("stream_node_id")).toUInt();
const QDBusObjectPath sessionHandle = frameBuffer()->customProperty(QLatin1String("session_handle")).value<QDBusObjectPath>();
if (streamNodeId == 0 || sessionHandle.path().isEmpty()) {
return;

View File

@@ -7,15 +7,6 @@ set (krfb_framebuffer_pw_SRCS
pw_framebufferplugin.cpp
)
ecm_qt_declare_logging_category(krfb_framebuffer_pw_SRCS
HEADER krfb_fb_pipewire_debug.h
IDENTIFIER KRFB_FB_PIPEWIRE
CATEGORY_NAME krfb.framebuffer.pipewire
DESCRIPTION "KRFB PipeWire framebuffer plugin"
EXPORT KRFB
)
qt5_add_dbus_interface(
krfb_framebuffer_pw_SRCS
${CMAKE_SOURCE_DIR}/dbus/xdp_dbus_screencast_interface.xml
@@ -33,22 +24,21 @@ add_library(krfb_framebuffer_pw
${krfb_framebuffer_pw_SRCS}
)
target_link_libraries(krfb_framebuffer_pw
Qt5::Core
Qt5::Gui
Qt5::DBus
KF5::CoreAddons
krfbprivate
PkgConfig::PipeWire
)
if (HAVE_DMA_BUF)
target_link_libraries(krfb_framebuffer_pw
${epoxy_LIBRARIES}
gbm::gbm
)
endif()
check_include_file("linux/dma-buf.h" HAVE_LINUX_DMABUF_H)
if (HAVE_LINUX_DMABUF_H)
target_compile_definitions(krfb_framebuffer_pw PRIVATE -DHAVE_LINUX_DMABUF_H)
endif ()
target_link_libraries (krfb_framebuffer_pw
Qt5::Core
Qt5::Gui
Qt5::DBus
KF5::CoreAddons
krfbprivate
PipeWire::PipeWire
)
install (TARGETS krfb_framebuffer_pw
DESTINATION ${KDE_INSTALL_PLUGINDIR}/krfb/framebuffer
DESTINATION ${PLUGIN_INSTALL_DIR}/krfb
)

View File

@@ -64,6 +64,9 @@
"Name[x-test]": "xxPipeWire Framebuffer for KRfbxx",
"Name[zh_CN]": "KRfb 的 PipeWire 帧缓冲机制",
"Name[zh_TW]": "KRfb 的 PipeWire Framebuffer",
"ServiceTypes": [
"krfb/framebuffer"
],
"Version": "0.1",
"Website": "http://www.kde.org"
}

File diff suppressed because it is too large Load Diff

View File

@@ -24,11 +24,11 @@ class PWFrameBuffer: public FrameBuffer
{
Q_OBJECT
public:
using Stream = struct {
typedef struct {
uint nodeId;
QVariantMap map;
};
using Streams = QList<Stream>;
} Stream;
typedef QList<Stream> Streams;
PWFrameBuffer(WId winid, QObject *parent = nullptr);
virtual ~PWFrameBuffer() override;

View File

@@ -7,14 +7,6 @@ set (krfb_framebuffer_qt_SRCS
qtframebufferplugin.cpp
)
ecm_qt_declare_logging_category(krfb_framebuffer_qt_SRCS
HEADER krfb_fb_qt_debug.h
IDENTIFIER KRFB_FB_QT
CATEGORY_NAME krfb.framebuffer.qt
DESCRIPTION "KRFB Qt framebuffer plugin"
EXPORT KRFB
)
add_library(krfb_framebuffer_qt
MODULE
${krfb_framebuffer_qt_SRCS}
@@ -28,5 +20,5 @@ target_link_libraries (krfb_framebuffer_qt
)
install (TARGETS krfb_framebuffer_qt
DESTINATION ${KDE_INSTALL_PLUGINDIR}/krfb/framebuffer
DESTINATION ${PLUGIN_INSTALL_DIR}/krfb
)

View File

@@ -75,6 +75,9 @@
"Name[x-test]": "xxQt Framebuffer for KRfbxx",
"Name[zh_CN]": "KRfb 的 Qt 帧缓冲",
"Name[zh_TW]": "Krfb 的 Qt Framebuffer",
"ServiceTypes": [
"krfb/framebuffer"
],
"Version": "0.1",
"Website": "https://www.kde.org"
}

View File

@@ -26,7 +26,11 @@ QtFrameBuffer::QtFrameBuffer(WId id, QObject *parent)
if (screen) {
primaryScreen = screen;
fbImage = screen->grabWindow(win).toImage();
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
fb = new char[fbImage.sizeInBytes()];
#else
fb = new char[fbImage.byteCount()];
#endif
} else {
fb = nullptr;
primaryScreen = nullptr;
@@ -104,7 +108,11 @@ void QtFrameBuffer::updateFrameBuffer()
tiles.append(img.rect());
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
memcpy(fb, img.bits(), static_cast<size_t>(img.sizeInBytes()));
#else
memcpy(fb, img.bits(), img.byteCount());
#endif
fbImage = img;
}

View File

@@ -7,14 +7,6 @@ set (krfb_framebuffer_xcb_SRCS
xcb_framebuffer.cpp
)
ecm_qt_declare_logging_category(krfb_framebuffer_xcb_SRCS
HEADER krfb_fb_xcb_debug.h
IDENTIFIER KRFB_FB_XCB
CATEGORY_NAME krfb.framebuffer.xcb
DESCRIPTION "KRFB XCB framebuffer plugin"
EXPORT KRFB
)
add_library(krfb_framebuffer_xcb MODULE ${krfb_framebuffer_xcb_SRCS})
target_link_libraries (krfb_framebuffer_xcb
@@ -32,5 +24,5 @@ target_link_libraries (krfb_framebuffer_xcb
)
install (TARGETS krfb_framebuffer_xcb
DESTINATION ${KDE_INSTALL_PLUGINDIR}/krfb/framebuffer
DESTINATION ${PLUGIN_INSTALL_DIR}/krfb
)

View File

@@ -75,6 +75,9 @@
"Name[x-test]": "xxX11 Framebuffer for KRfbxx",
"Name[zh_CN]": "XRfb 的 X11 帧缓冲",
"Name[zh_TW]": "KRfb 的 X11 Framebuffer",
"ServiceTypes": [
"krfb/framebuffer"
],
"Version": "0.1",
"Website": "https://www.kde.org"
}

View File

@@ -8,7 +8,6 @@
*/
#include "xcb_framebuffer.h"
#include "krfb_fb_xcb_debug.h"
#include <xcb/xcb.h>
#include <xcb/xproto.h>
@@ -24,6 +23,7 @@
#include <QGuiApplication>
#include <QScreen>
#include <QAbstractNativeEventFilter>
#include <QDebug>
class KrfbXCBEventFilter: public QAbstractNativeEventFilter
@@ -68,7 +68,7 @@ KrfbXCBEventFilter::KrfbXCBEventFilter(XCBFrameBuffer *owner):
}
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB) << "xcb framebuffer: XDamage extension version:" <<
qDebug() << "xcb framebuffer: XDamage extension version:" <<
xdamage_version->major_version << "." << xdamage_version->minor_version;
#endif
@@ -105,7 +105,7 @@ bool KrfbXCBEventFilter::nativeEventFilter(const QByteArray &eventType,
if (xdamageBaseEvent == 0) return false; // no xdamage extension
if (eventType == "xcb_generic_event_t") {
auto ev = static_cast<xcb_generic_event_t *>(message);
xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
if ((ev->response_type & 0x7F) == (xdamageBaseEvent + XCB_DAMAGE_NOTIFY)) {
// this is xdamage notification
this->fb_owner->handleXDamageNotify(ev);
@@ -166,8 +166,7 @@ XCBFrameBuffer::XCBFrameBuffer(WId winid, QObject *parent):
qreal scaleFactor = primaryScreen->devicePixelRatio();
d->area = { primaryScreen->geometry().topLeft() * scaleFactor,
primaryScreen->geometry().bottomRight() * scaleFactor };
qCDebug(KRFB_FB_XCB) << "xcb framebuffer: Primary screen: " << primaryScreen->name()
qDebug() << "xcb framebuffer: Primary screen: " << primaryScreen->name()
<< ", geometry: " << primaryScreen->geometry()
<< ", device scaling: " << scaleFactor
<< ", native size: " << d->area
@@ -187,7 +186,7 @@ XCBFrameBuffer::XCBFrameBuffer(WId winid, QObject *parent):
XCB_IMAGE_FORMAT_Z_PIXMAP);
if (d->framebufferImage) {
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB) << "xcb framebuffer: Got primary screen image. bpp: " << d->framebufferImage->bpp
qDebug() << "xcb framebuffer: Got primary screen image. bpp: " << d->framebufferImage->bpp
<< ", size (" << d->framebufferImage->width << d->framebufferImage->height << ")"
<< ", depth: " << d->framebufferImage->depth
<< ", padded width: " << d->framebufferImage->stride;
@@ -215,15 +214,15 @@ XCBFrameBuffer::XCBFrameBuffer(WId winid, QObject *parent):
nullptr); // data = 0
if (d->updateTile) {
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB) << "xcb framebuffer: Successfully created new empty image in native format"
<< "\n size: " << d->updateTile->width << "x" << d->updateTile->height
<< "(stride: " << d->updateTile->stride << ")"
<< "\n bpp, depth: " << d->updateTile->bpp << d->updateTile->depth // 32, 24
<< "\n addr of base, data: " << d->updateTile->base << (void *)d->updateTile->data
<< "\n size: " << d->updateTile->size
<< "\n image byte order = " << d->updateTile->byte_order // == 0 .._LSB_FIRST
<< "\n image bit order = " << d->updateTile->bit_order // == 1 .._MSB_FIRST
<< "\n image plane_mask = " << d->updateTile->plane_mask; // == 16777215 == 0x00FFFFFF
qDebug() << "xcb framebuffer: Successfully created new empty image in native format";
qDebug() << " size: " << d->updateTile->width << "x" << d->updateTile->height
<< "(stride: " << d->updateTile->stride << ")";
qDebug() << " bpp, depth: " << d->updateTile->bpp << d->updateTile->depth; // 32, 24
qDebug() << " addr of base, data: " << d->updateTile->base << (void *)d->updateTile->data;
qDebug() << " size: " << d->updateTile->size;
qDebug() << " image byte order = " << d->updateTile->byte_order; // == 0 .._LSB_FIRST
qDebug() << " image bit order = " << d->updateTile->bit_order; // == 1 .._MSB_FIRST
qDebug() << " image plane_mask = " << d->updateTile->plane_mask; // == 16777215 == 0x00FFFFFF
#endif
// allocate shared memory block only once, make its size large enough
@@ -241,7 +240,7 @@ XCBFrameBuffer::XCBFrameBuffer(WId winid, QObject *parent):
xcb_shm_attach(QX11Info::connection(), d->shminfo.shmseg, d->shminfo.shmid, 0);
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB) << " shm id: " << d->shminfo.shmseg << ", addr: " << (void *)d->shminfo.shmaddr;
qDebug() << " shm id: " << d->shminfo.shmseg << ", addr: " << (void *)d->shminfo.shmaddr;
#endif
// will return 1 on success (yes!)
@@ -277,7 +276,7 @@ XCBFrameBuffer::XCBFrameBuffer(WId winid, QObject *parent):
}
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB) << "xcb framebuffer: XCBFrameBuffer(), xshm base event = " << d->x11EvtFilter->xshmBaseEvent
qDebug() << "xcb framebuffer: XCBFrameBuffer(), xshm base event = " << d->x11EvtFilter->xshmBaseEvent
<< ", xshm base error = " << d->x11EvtFilter->xdamageBaseError
<< ", xdamage base event = " << d->x11EvtFilter->xdamageBaseEvent
<< ", xdamage base error = " << d->x11EvtFilter->xdamageBaseError;
@@ -424,12 +423,10 @@ void XCBFrameBuffer::getServerFormat(rfbPixelFormat &format) {
format.blueMax = root_visualtype->blue_mask >> format.blueShift;
#ifdef _DEBUG
qCDebug(KRFB_FB_XCB,
" Calculated redShift = %d\n"
" Calculated greenShift = %d\n"
" Calculated blueShift = %d\n"
" Calculated max values: R%d G%d B%d",
format.redShift, format.greenShift, format.blueShift
qDebug() << " Calculated redShift =" << (int)format.redShift;
qDebug() << " Calculated greenShift =" << (int)format.greenShift;
qDebug() << " Calculated blueShift =" << (int)format.blueShift;
qDebug( " Calculated max values: R%d G%d B%d",
format.redMax, format.greenMax, format.blueMax);
#endif
} else {
@@ -483,10 +480,10 @@ void XCBFrameBuffer::cleanupRects() {
QRect ri = r.intersected(d->area);
if (tiles.size() > 0) {
for (auto &tile : tiles) {
// if current rect has intersection with tile, unite them
if (ri.intersects(tile)) {
tile |= ri;
for (int i = 0; i < tiles.size(); i++) {
// if current rect has intersection with tiles[i], unite them
if (ri.intersects(tiles[i])) {
tiles[i] |= ri;
inserted = true;
break;
}
@@ -504,25 +501,25 @@ void XCBFrameBuffer::cleanupRects() {
// increase all rectangles size by 30 pixels each side.
// limit coordinates to primary monitor boundaries.
for (auto &tile : tiles) {
tile.adjust(-30, -30, 30, 30);
if (tile.top() < d->area.top()) {
tile.setTop(d->area.top());
for (int i = 0; i < tiles.size(); i++) {
tiles[i].adjust(-30, -30, 30, 30);
if (tiles[i].top() < d->area.top()) {
tiles[i].setTop(d->area.top());
}
if (tile.bottom() > d->area.bottom()) {
tile.setBottom(d->area.bottom());
if (tiles[i].bottom() > d->area.bottom()) {
tiles[i].setBottom(d->area.bottom());
}
//
if (tile.left() < d->area.left()) {
tile.setLeft(d->area.left());
if (tiles[i].left() < d->area.left()) {
tiles[i].setLeft(d->area.left());
}
if (tile.right() > d->area.right()) {
tile.setRight(d->area.right());
if (tiles[i].right() > d->area.right()) {
tiles[i].setRight(d->area.right());
}
// move update rects so that they are positioned relative to
// framebuffer image, not whole screen
tile.moveTo(tile.left() - d->area.left(),
tile.top() - d->area.top());
tiles[i].moveTo(tiles[i].left() - d->area.left(),
tiles[i].top() - d->area.top());
}
}
@@ -682,7 +679,7 @@ void XCBFrameBuffer::stopMonitor() {
void XCBFrameBuffer::handleXDamageNotify(xcb_generic_event_t *xevent) {
auto xdevt = (xcb_damage_notify_event_t *)xevent;
xcb_damage_notify_event_t *xdevt = (xcb_damage_notify_event_t *)xevent;
QRect r((int)xdevt->area.x, (int)xdevt->area.y,
(int)xdevt->area.width, (int)xdevt->area.height);

View File

@@ -36,14 +36,14 @@ set_target_properties (krfbprivate PROPERTIES
)
install (TARGETS krfbprivate
${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
${INSTALL_TARGETS_DEFAULT_ARGS}
LIBRARY NAMELINK_SKIP
)
install (FILES
krfb-framebuffer.desktop
krfb-events.desktop
DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}
DESTINATION ${SERVICETYPES_INSTALL_DIR}
)
#####################################
@@ -66,14 +66,6 @@ set (krfb_SRCS
invitationsrfbclient.cpp
)
ecm_qt_declare_logging_category(krfb_SRCS
HEADER krfbdebug.h
IDENTIFIER KRFB
CATEGORY_NAME krfb.krfb
DESCRIPTION "KRFB Application"
EXPORT KRFB
)
kconfig_add_kcfg_files (krfb_SRCS
krfbconfig.kcfgc
)
@@ -101,6 +93,7 @@ target_link_libraries (krfb
${X11_X11_LIB}
${X11_Xdamage_LIB}
Qt5::Network
KF5::Completion
KF5::CoreAddons
KF5::DBusAddons
KF5::DNSSD
@@ -120,13 +113,13 @@ if (X11_XTest_FOUND)
endif (X11_XTest_FOUND)
install (TARGETS krfb
${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
${INSTALL_TARGETS_DEFAULT_ARGS}
)
########### install files ###############
install (PROGRAMS org.kde.krfb.desktop
DESTINATION ${KDE_INSTALL_APPDIR}
DESTINATION ${XDG_APPS_INSTALL_DIR}
)
install(FILES org.kde.krfb.appdata.xml
@@ -134,6 +127,6 @@ install(FILES org.kde.krfb.appdata.xml
)
install (FILES krfb.notifyrc
DESTINATION ${KDE_INSTALL_DATADIR}/krfb
DESTINATION ${DATA_INSTALL_DIR}/krfb
)

View File

@@ -9,6 +9,3 @@
/* Define if XShm is available */
#cmakedefine HAVE_XSHM 1
/* Define if DMA-BUF support is available */
#cmakedefine01 HAVE_DMA_BUF

View File

@@ -37,9 +37,9 @@ ConnectionDialog<UI>::ConnectionDialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(i18n("New Connection"));
auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
auto mainWidget = new QWidget(this);
auto mainLayout = new QVBoxLayout;
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
QWidget *mainWidget = new QWidget(this);
QVBoxLayout *mainLayout = new QVBoxLayout;
setLayout(mainLayout);
mainLayout->addWidget(mainWidget);
QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);

View File

@@ -23,8 +23,8 @@
#include "eventsplugin.h"
#include "krfbconfig.h"
#include "rfbservermanager.h"
#include "krfbdebug.h"
#include <QDebug>
#include <QGlobalStatic>
#include <KPluginFactory>
@@ -64,7 +64,9 @@ void EventsManager::loadPlugins()
{
//qDebug();
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("krfb/events"));
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("krfb"), [](const KPluginMetaData & md) {
return md.serviceTypes().contains(QStringLiteral("krfb/events"));
});
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
@@ -77,18 +79,18 @@ void EventsManager::loadPlugins()
KPluginFactory *factory = KPluginLoader(data.fileName()).factory();
if (!factory) {
qCDebug(KRFB) << "KPluginFactory could not load the plugin:" << data.fileName();
qDebug() << "KPluginFactory could not load the plugin:" << data.fileName();
continue;
} else {
qCDebug(KRFB) << "found plugin at " << data.fileName();
qDebug() << "found plugin at " << data.fileName();
}
auto plugin = factory->create<EventsPlugin>(this);
EventsPlugin *plugin = factory->create<EventsPlugin>(this);
if (plugin) {
m_plugins.insert(data.pluginId(), plugin);
qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId();
qDebug() << "Loaded plugin with name " << data.pluginId();
} else {
qCDebug(KRFB) << "unable to load plugin for " << data.fileName();
qDebug() << "unable to load plugin for " << data.fileName();
}
unique.insert (data.name());
}
@@ -111,6 +113,6 @@ QSharedPointer<EventHandler> EventsManager::eventHandler()
}
// No valid events plugin found.
qCDebug(KRFB) << "No valid event handlers found. returning null.";
qDebug() << "No valid event handlers found. returning null.";
return QSharedPointer<EventHandler>();
}

View File

@@ -51,7 +51,7 @@ Q_SIGNALS:
protected:
WId win;
char *fb = nullptr;
char *fb;
QList<QRect> tiles;
private:

View File

@@ -22,8 +22,8 @@
#include "framebufferplugin.h"
#include "krfbconfig.h"
#include "krfbdebug.h"
#include <QDebug>
#include <QGlobalStatic>
#include <KPluginFactory>
@@ -63,7 +63,9 @@ void FrameBufferManager::loadPlugins()
{
//qDebug();
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("krfb/framebuffer"));
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("krfb"), [](const KPluginMetaData & md) {
return md.serviceTypes().contains(QStringLiteral("krfb/framebuffer"));
});
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
@@ -76,18 +78,18 @@ void FrameBufferManager::loadPlugins()
KPluginFactory *factory = KPluginLoader(data.fileName()).factory();
if (!factory) {
qCDebug(KRFB) << "KPluginFactory could not load the plugin:" << data.fileName();
qDebug() << "KPluginFactory could not load the plugin:" << data.fileName();
continue;
} else {
qCDebug(KRFB) << "found plugin at " << data.fileName();
qDebug() << "found plugin at " << data.fileName();
}
auto plugin = factory->create<FrameBufferPlugin>(this);
FrameBufferPlugin *plugin = factory->create<FrameBufferPlugin>(this);
if (plugin) {
m_plugins.insert(data.pluginId(), plugin);
qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId();
qDebug() << "Loaded plugin with name " << data.pluginId();
} else {
qCDebug(KRFB) << "unable to load plugin for " << data.fileName();
qDebug() << "unable to load plugin for " << data.fileName();
}
unique.insert (data.name());
}
@@ -116,7 +118,7 @@ QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id)
while (iter != m_plugins.constEnd()) {
if (iter.key() == KrfbConfig::preferredFrameBufferPlugin()) {
qCDebug(KRFB) << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin();
qDebug() << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin();
QSharedPointer<FrameBuffer> frameBuffer(iter.value()->frameBuffer(id));
@@ -131,6 +133,6 @@ QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id)
}
// No valid framebuffer plugin found.
qCDebug(KRFB) << "No valid framebuffer found. returning null.";
qDebug() << "No valid framebuffer found. returning null.";
return QSharedPointer<FrameBuffer>();
}

View File

@@ -34,7 +34,7 @@ class KRFBPRIVATE_EXPORT FrameBufferPlugin : public QObject
Q_OBJECT
public:
explicit FrameBufferPlugin(QObject *parent, const QVariantList &args);
FrameBufferPlugin(QObject *parent, const QVariantList &args);
~FrameBufferPlugin() override;
virtual FrameBuffer *frameBuffer(WId id) = 0;

View File

@@ -24,11 +24,11 @@
#include "krfbconfig.h"
#include "sockethelpers.h"
#include "connectiondialog.h"
#include "krfbdebug.h"
#include <KNotification>
#include <KLocalizedString>
#include <QDebug>
#include <QSocketNotifier>
#include <poll.h>
#include <KConfigGroup>
@@ -41,7 +41,7 @@ struct PendingInvitationsRfbClient::Private
{}
rfbClientPtr client;
QSocketNotifier *notifier = nullptr;
QSocketNotifier *notifier;
bool askOnConnect;
};
@@ -79,7 +79,7 @@ void PendingInvitationsRfbClient::processNewClient()
i18n("Received connection from %1, on hold (waiting for confirmation)",
host));
auto dialog = new InvitationsConnectionDialog(nullptr);
InvitationsConnectionDialog *dialog = new InvitationsConnectionDialog(nullptr);
dialog->setRemoteHost(host);
dialog->setAllowRemoteControl(KrfbConfig::allowDesktopControl());
@@ -115,7 +115,7 @@ void PendingInvitationsRfbClient::onSocketActivated()
//the clientGoneHook which in turn will remove this RfbClient instance
//from the server manager and will call deleteLater() to delete it
if (d->client->sock == -1) {
qCDebug(KRFB) << "disconnected from socket signal";
qDebug() << "disconnected from socket signal";
d->notifier->setEnabled(false);
rfbClientConnectionGone(d->client);
break;
@@ -125,7 +125,7 @@ void PendingInvitationsRfbClient::onSocketActivated()
bool PendingInvitationsRfbClient::checkPassword(const QByteArray & encryptedPassword)
{
qCDebug(KRFB) << "about to start authentication";
qDebug() << "about to start authentication";
if(InvitationsRfbServer::instance->allowUnattendedAccess() && vncAuthCheckPassword(
InvitationsRfbServer::instance->unattendedPassword().toLocal8Bit(),
@@ -141,10 +141,10 @@ bool PendingInvitationsRfbClient::checkPassword(const QByteArray & encryptedPass
void PendingInvitationsRfbClient::dialogAccepted()
{
auto dialog = qobject_cast<InvitationsConnectionDialog *>(sender());
InvitationsConnectionDialog *dialog = qobject_cast<InvitationsConnectionDialog *>(sender());
Q_ASSERT(dialog);
auto client = new InvitationsRfbClient(m_rfbClient, parent());
InvitationsRfbClient *client = new InvitationsRfbClient(m_rfbClient, parent());
client->setControlEnabled(dialog->allowRemoteControl());
accept(client);
}

View File

@@ -22,10 +22,10 @@
#include "invitationsrfbclient.h"
#include "krfbconfig.h"
#include "rfbservermanager.h"
#include "krfbdebug.h"
#include <QTimer>
#include <QApplication>
#include <QHostInfo>
#include <QDebug>
#include <QRandomGenerator>
#include <KLocalizedString>
@@ -33,13 +33,7 @@
#include <KStringHandler>
#include <KWallet/KWallet>
#include <kdnssd_version.h>
#if KDNSSD_VERSION >= QT_VERSION_CHECK(5, 84, 0)
#include <KDNSSD/PublicService>
#else
#include <DNSSD/PublicService>
#endif
#include <dnssd/publicservice.h>
using KWallet::Wallet;
// used for KWallet folder name
@@ -188,7 +182,7 @@ void InvitationsRfbServer::walletOpened(bool opened)
} else {
qCDebug(KRFB) << "Could not open KWallet, Falling back to config file";
qDebug() << "Could not open KWallet, Falling back to config file";
KConfigGroup krfbConfig(KSharedConfig::openConfig(),"Security");
desktopPassword = KStringHandler::obscure(krfbConfig.readEntry(

View File

@@ -63,11 +63,11 @@ private Q_SLOTS:
void walletOpened(bool);
private:
KDNSSD::PublicService *m_publicService = nullptr;
KDNSSD::PublicService *m_publicService;
bool m_allowUnattendedAccess;
QString m_desktopPassword;
QString m_unattendedPassword;
KWallet::Wallet *m_wallet = nullptr;
KWallet::Wallet *m_wallet;
QString readableRandomString(int);
Q_DISABLE_COPY(InvitationsRfbServer)

View File

@@ -14,7 +14,7 @@ Comment[es]=Complementos de eventos para KRfb
Comment[et]=KRfb sündmuste pluginad
Comment[eu]=KRfb-rako gertaeren pluginak
Comment[fi]=KRfb:n tapahtumaliitännäinen
Comment[fr]=Modules externes d'évènements pour Krfb
Comment[fr]=Modules externes d'événements pour Krfb
Comment[gl]=Complementos de eventos para KRfb
Comment[ia]=Plug-ins de evento per KRfb
Comment[it]=Estensioni degli eventi per KRfb

View File

@@ -0,0 +1,7 @@
[org.freedesktop.Telepathy.Client]
Interfaces=org.freedesktop.Telepathy.Client.Handler;
[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.StreamTube
org.freedesktop.Telepathy.Channel.Type.StreamTube.Service s=rfb
org.freedesktop.Telepathy.Channel.Requested b=true

View File

@@ -20,7 +20,6 @@
#include "invitationsrfbserver.h"
#include "krfbconfig.h"
#include "krfb_version.h"
#include "krfbdebug.h"
#include <KAboutData>
#include <KDBusService>
@@ -28,11 +27,12 @@
#include <KMessageBox>
#include <KWindowSystem>
#include <QDebug>
#include <QPixmap>
#include <qwindowdefs.h>
#include <QX11Info>
#include <csignal>
#include <signal.h>
#include <X11/extensions/XTest.h>
#include <QCommandLineParser>
#include <QCommandLineOption>
@@ -59,13 +59,13 @@ static bool checkX11Capabilities()
static void checkOldX11PluginConfig() {
if (KrfbConfig::preferredFrameBufferPlugin() == QStringLiteral("x11")) {
qCDebug(KRFB) << "Detected deprecated configuration: preferredFrameBufferPlugin = x11";
qDebug() << "Detected deprecated configuration: preferredFrameBufferPlugin = x11";
KConfigSkeletonItem *config_item = KrfbConfig::self()->findItem(
QStringLiteral("preferredFrameBufferPlugin"));
if (config_item) {
config_item->setProperty(QStringLiteral("xcb"));
KrfbConfig::self()->save();
qCDebug(KRFB) << " Fixed preferredFrameBufferPlugin from x11 to xcb.";
qDebug() << " Fixed preferredFrameBufferPlugin from x11 to xcb.";
}
}
}
@@ -81,7 +81,7 @@ static void checkWaylandPluginConfig()
if (config_item) {
config_item->setProperty(QStringLiteral("pw"));
KrfbConfig::self()->save();
qCDebug(KRFB) << "Wayland: Fixed preferredFrameBufferPlugin to \"pw\".";
qDebug() << "Wayland: Fixed preferredFrameBufferPlugin to \"pw\".";
}
}
}

View File

@@ -21,6 +21,7 @@
#include <KMessageWidget>
#include <KStandardAction>
#include <KActionCollection>
#include <KLineEdit>
#include <KNewPasswordDialog>
#include <KPluginLoader>
#include <KPluginMetaData>
@@ -47,7 +48,7 @@ public:
class Security: public QWidget, public Ui::Security
{
public:
explicit Security(QWidget *parent = nullptr) : QWidget(parent) {
Security(QWidget *parent = nullptr) : QWidget(parent) {
setupUi(this);
walletWarning = new KMessageWidget(this);
walletWarning->setText(i18n("Storing passwords in config file is insecure!"));
@@ -83,7 +84,10 @@ public:
}
void fillFrameBuffersCombo() {
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("krfb/framebuffer"));
const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(
QStringLiteral("krfb"), [](const KPluginMetaData & md) {
return md.serviceTypes().contains(QStringLiteral("krfb/framebuffer"));
});
QSet<QString> unique;
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
@@ -103,11 +107,11 @@ MainWindow::MainWindow(QWidget *parent)
setAttribute(Qt::WA_DeleteOnClose, false);
m_passwordEditable = false;
m_passwordLineEdit = new QLineEdit(this);
m_passwordLineEdit = new KLineEdit(this);
m_passwordLineEdit->setVisible(false);
m_passwordLineEdit->setAlignment(Qt::AlignHCenter);
auto mainWidget = new QWidget;
QWidget *mainWidget = new QWidget;
m_ui.setupUi(mainWidget);
m_ui.krfbIconLabel->setPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(128));
m_ui.enableUnattendedCheckBox->setChecked(
@@ -252,7 +256,7 @@ void MainWindow::showConfiguration()
return;
}
auto dialog = new KConfigDialog(this, QStringLiteral("settings"), KrfbConfig::self());
KConfigDialog *dialog = new KConfigDialog(this, QStringLiteral("settings"), KrfbConfig::self());
dialog->addPage(new TCP, i18n("Network"), QStringLiteral("network-wired"));
dialog->addPage(new Security, i18n("Security"), QStringLiteral("security-high"));
dialog->addPage(new ConfigFramebuffer, i18n("Screen capture"), QStringLiteral("video-display"));

View File

@@ -15,7 +15,7 @@
#include <KXmlGuiWindow>
class QLineEdit;
class KLineEdit;
class MainWindow : public KXmlGuiWindow
{
@@ -43,7 +43,7 @@ class MainWindow : public KXmlGuiWindow
private:
Ui::MainWidget m_ui;
bool m_passwordEditable;
QLineEdit *m_passwordLineEdit = nullptr;
KLineEdit *m_passwordLineEdit;
};
#endif

View File

@@ -39,32 +39,42 @@
<name xml:lang="x-test">xxKrfbxx</name>
<name xml:lang="zh-CN">Krfb</name>
<name xml:lang="zh-TW">Krfb</name>
<summary>Share your desktop to another computer via VNC</summary>
<summary xml:lang="ca">Comparteix l'escriptori amb un altre ordinador a través de VNC</summary>
<summary xml:lang="ca-valencia">Comparteix l'escriptori amb un altre ordinador a través de VNC</summary>
<summary xml:lang="cs">Sdílejte své pracovní prostředí na jiný počítač pomocí VNC</summary>
<summary xml:lang="de">Verbindung Ihrer Arbeitsfläche zu anderen Rechnern über VNC</summary>
<summary xml:lang="el">Μοιραστείτε την επιφάνεια εργασίας σας με άλλον υπολογιστή μέσω VNC</summary>
<summary xml:lang="en-GB">Share your desktop to another computer via VNC</summary>
<summary xml:lang="es">Compartir su escritorio con otro equipo usando VNC</summary>
<summary xml:lang="et">Oma töölaua jagamine VNC kaudu teise arvutisse</summary>
<summary xml:lang="eu">Partekatu zure mahaigaina beste ordenagailu batekin VNC erabiliz</summary>
<summary xml:lang="fi">Jaa työpöytä toiselle koneelle VNC:n kautta</summary>
<summary xml:lang="fr">Partager votre bureau avec un autre ordinateur grâce à « VNC »</summary>
<summary xml:lang="ia">Compartir tu scriptorio a un altere computator via VNC</summary>
<summary xml:lang="id">Bagikan desktopmu ke komputer lainnya via VNC</summary>
<summary xml:lang="it">Condividi il desktop con un altro computer tramite VNC</summary>
<summary xml:lang="ko">내 데스크톱을 VNC로 다른 컴퓨터와 공유</summary>
<summary xml:lang="nl">Uw bureaublad delen naar een andere computer via VNC</summary>
<summary xml:lang="nn">Del skrivebordet med ei anna maskin via VNC</summary>
<summary xml:lang="pl">Udostępnij swój pulpit innemu komputerowi przez VNC</summary>
<summary xml:lang="pt">Partilhar o seu ecrã com outro computador por VNC</summary>
<summary xml:lang="pt-BR">Compartilhar sua área de trabalho com outro computador via VNC</summary>
<summary xml:lang="sl">Deli namizje z drugim računalnikom prek VNC</summary>
<summary xml:lang="sv">Dela ditt skrivbord med en annan dator via VNC</summary>
<summary xml:lang="uk">Надайте вашу стільницю у спільне користування з іншим комп'ютером за допомогою VNC</summary>
<summary xml:lang="x-test">xxShare your desktop to another computer via VNCxx</summary>
<summary xml:lang="zh-CN">通过 VNC 分享您的桌面到另一台电脑</summary>
<summary>Desktop sharing</summary>
<summary xml:lang="ca">Compartició de l'escriptori</summary>
<summary xml:lang="ca-valencia">Compartició de l'escriptori</summary>
<summary xml:lang="cs">Sdíle pracovní plochy</summary>
<summary xml:lang="da">Skrivebordsdeling</summary>
<summary xml:lang="de">Freigabe der Arbeitsfläche</summary>
<summary xml:lang="el">Κοινή χρήση επιφάνειας εργασίας</summary>
<summary xml:lang="en-GB">Desktop sharing</summary>
<summary xml:lang="es">Compartir el escritorio</summary>
<summary xml:lang="et">Töölaua jagamine</summary>
<summary xml:lang="eu">Mahaigaina partekatzea</summary>
<summary xml:lang="fi">Työpöydän jako</summary>
<summary xml:lang="fr">Partage de bureau</summary>
<summary xml:lang="gl">Compartición do escritorio</summary>
<summary xml:lang="ia">Compartir de scriptorio</summary>
<summary xml:lang="id">Desktop sharing</summary>
<summary xml:lang="it">Condivisione del desktop</summary>
<summary xml:lang="ko">데스크톱 공유</summary>
<summary xml:lang="nl">Bureaublad delen</summary>
<summary xml:lang="nn">Skrivebordsdeling</summary>
<summary xml:lang="pl">Współdzielenie pulpitu</summary>
<summary xml:lang="pt">Partilha do ecrã</summary>
<summary xml:lang="pt-BR">Compartilhamento de tela</summary>
<summary xml:lang="ru">Общий рабочий стол</summary>
<summary xml:lang="sk">Zdieľanie pracovnej plochy</summary>
<summary xml:lang="sl">Souporaba namizja</summary>
<summary xml:lang="sr">Дељење површи</summary>
<summary xml:lang="sr-Latn">Deljenje površi</summary>
<summary xml:lang="sr-ijekavian">Дељење површи</summary>
<summary xml:lang="sr-ijekavianlatin">Deljenje površi</summary>
<summary xml:lang="sv">Skrivbordsdelning</summary>
<summary xml:lang="tr">Masaüstü paylaşımı</summary>
<summary xml:lang="uk">Спільне користування стільницею</summary>
<summary xml:lang="x-test">xxDesktop sharingxx</summary>
<summary xml:lang="zh-CN">桌面共享</summary>
<summary xml:lang="zh-TW">桌面分享</summary>
<description>
<p>Krfb Desktop Sharing is a server application that allows you to share your current session with a user on another machine, who can use a VNC client to view or even control the desktop.</p>
<p xml:lang="ca">El Krfb és una aplicació de servidor que permet compartir la vostra sessió actual amb un usuari en una altra màquina, la qual pot emprar un client VNC per a veure o controlar l'escriptori.</p>
@@ -79,7 +89,6 @@
<p xml:lang="fi">Krfb-työpöytäjako on palvelinsovellus, jolla voit jakaa nykyisen istuntosi toisen koneen käyttäjälle, joka voi VNC-asiakkaalla nähdä tai jopa hallita työpöytääsi.</p>
<p xml:lang="fr">Le partage de bureau Krfb est une application de serveur qui vous permet de partager votre session courante avec un utilisateur sur une autre machine, qui peut utiliser un client VNC pour afficher et même contrôler le bureau.</p>
<p xml:lang="gl">Krfb é unha aplicación de servidor que permite compartir a sesión actual cun usuario que está noutro equipo, que pode usar un cliente VNC para ver ou mesmo controlar o escritorio.</p>
<p xml:lang="ia">Krfb Desktop Sharing es un application de servitor que te permitte compartir tu session currente con un usator sur un altere machina,le qual pote usar un cliente VNC per vider o anque controlar le scriptorio.</p>
<p xml:lang="id">Krfb Desktop Sharing adalah aplikasi server yang memungkinkan kamu untuk berbagi sesimu saat ini dengan pengguna di mesin lain, yang bisa menggunakan klien VNC untuk menampilkan atau bahkan mengendalikan desktop.</p>
<p xml:lang="it">Condivisione del desktop Krfb è un'applicazione server che permette di condividere la sessione attuale con un utente su un'altra macchina, che potrà usare un client VNC per visualizzare ed anche controllare il desktop.</p>
<p xml:lang="ko">Krfb 데스크톱 공유는 현재 세션을 다른 머신의 사용자와 VNC를 통해서 공유하거나 원격 제어를 요청할 수 있는 서버 프로그램입니다.</p>
@@ -122,7 +131,6 @@
<caption xml:lang="fi">Työpöydän jakaminen Krfb:llä</caption>
<caption xml:lang="fr">Partage de bureau grâce à Krfb</caption>
<caption xml:lang="gl">Compartindo o escritorio con Krfb</caption>
<caption xml:lang="ia">Compartir scriptorio con Krfb</caption>
<caption xml:lang="id">Berbagi desktop dengan Krfb</caption>
<caption xml:lang="it">Condivisone del desktop con Krfb</caption>
<caption xml:lang="ko">Krfb로 데스크톱 공유</caption>
@@ -147,9 +155,9 @@
</provides>
<project_group>KDE</project_group>
<releases>
<release version="21.08.0" date="2021-08-12"/>
<release version="21.04.3" date="2021-07-08"/>
<release version="21.04.2" date="2021-06-10"/>
<release version="21.04.1" date="2021-05-13"/>
<release version="20.08.3" date="2020-11-05"/>
<release version="20.08.2" date="2020-10-08"/>
<release version="20.08.1" date="2020-09-03"/>
<release version="20.08.0" date="2020-08-13"/>
</releases>
</component>

View File

@@ -74,32 +74,76 @@ Name[x-test]=xxKrfbxx
Name[zh_CN]=Krfb
Name[zh_HK]=Krfb
Name[zh_TW]=桌面分享_Krfb
GenericName=Desktop Sharing (VNC)
GenericName[ca]=Compartició de l'escriptori (VNC)
GenericName[ca@valencia]=Compartició de l'escriptori (VNC)
GenericName[cs]=Sdílení pracovní plochy (VNC)
GenericName[da]=Skrivebordsdeling (VNC)
GenericName[de]=Arbeitsflächen-Freigabe (VNC)
GenericName[el]=Κοινή χρήση επιφάνειας εργασίας (VNC)
GenericName[en_GB]=Desktop Sharing (VNC)
GenericName[es]=Escritorio compartido (VNC)
GenericName[et]=Töölaua jagamine (VNC)
GenericName[eu]=Mahaigaina partekatzea (VNC)
GenericName[fi]=Työpöydän jakaminen (VNC)
GenericName[fr]=Partage de bureaux (VNC)
GenericName[ia]=Compartir de scriptorio (VNC)
GenericName[it]=Condivisione del desktop (VNC)
GenericName[ko]=데스크톱 공유(VNC)
GenericName[nl]=Bureaublad delen (VNC)
GenericName[nn]=Skrivebordsdeling (VNC)
GenericName[pl]=Współdzielenie pulpitu (VNC)
GenericName[pt]=Partilha do Ecrã (VNC)
GenericName[pt_BR]=Compartilhamento de ambiente de trabalho (VNC)
GenericName[sl]=Souporaba namizja (VNC)
GenericName[sv]=Skrivbordsdelning (VNC)
GenericName[uk]=Спільні стільниці (VNC)
GenericName[x-test]=xxDesktop Sharing (VNC)xx
GenericName[zh_CN]=桌面共享 (VNC)
GenericName=Desktop Sharing
GenericName[ar]=مشاركة سطح المكتب
GenericName[bg]=Споделяне на работния плот
GenericName[bn]=ডেস্কটপ ভাগাভাগি
GenericName[br]=Rannañ ar vurev
GenericName[bs]=Dijeljenje radne površine
GenericName[ca]=Compartir l'escriptori
GenericName[ca@valencia]=Compartir l'escriptori
GenericName[cs]=Sdílení pracovní plochy
GenericName[cy]=Rhannu Penbwrdd
GenericName[da]=Skrivebordsdeling
GenericName[de]=Arbeitsfläche freigeben
GenericName[el]=Κοινή χρήση επιφάνειας εργασίας
GenericName[en_GB]=Desktop Sharing
GenericName[eo]=Tabula komunigado
GenericName[es]=Escritorio compartido
GenericName[et]=Töölaua jagamine
GenericName[eu]=Mahaigaina partekatzea
GenericName[fa]=اشتراک رومیزی
GenericName[fi]=Työpöydän jakaminen
GenericName[fr]=Partage de bureaux
GenericName[ga]=Roinnt Deisce
GenericName[gl]=Compartimento de escritorio
GenericName[he]=שיתוף שולחנות עבודה
GenericName[hi]=डेस्कटॉप साझेदारी
GenericName[hne]=डेस्कटाप साझेदारी
GenericName[hr]=Dijeljenje radne površine
GenericName[hu]=Munkaasztal-megosztás
GenericName[ia]=Compartir de scriptorio
GenericName[id]=Desktop Sharing
GenericName[is]=Skjáborðsmiðlun
GenericName[it]=Condivisione del desktop
GenericName[ja]=デスクトップ共有
GenericName[kk]=Үстелді ортақтастыру
GenericName[km]=ការ​ចែក​រំលែក​ផ្ទៃ​តុ
GenericName[ko]=데스크톱 공유
GenericName[lt]=Dalinimasis darbalaukiu
GenericName[lv]=Darbvirsmas koplietošana
GenericName[ml]=പണിയിടം പങ്കുവെക്കല്‍
GenericName[mr]=डेस्कटॉप शेअरींग
GenericName[nb]=Delte skrivebord
GenericName[nds]=Schriefdisch-Freegaav
GenericName[ne]=डेस्कटप साझेदारी
GenericName[nl]=Bureaublad delen
GenericName[nn]=Skrivebordsdeling
GenericName[pa]=ਡੈਸਕਟਾਪ ਸ਼ੇਅਰਿੰਗ
GenericName[pl]=Współdzielenie pulpitu
GenericName[pt]=Partilha do Ecrã
GenericName[pt_BR]=Compartilhamento de ambiente de trabalho
GenericName[ro]=Partajare birou
GenericName[ru]=Общий рабочий стол
GenericName[si]=වැඩතල හවුල්
GenericName[sk]=Zdieľanie pracovnej plochy
GenericName[sl]=Souporaba namizja
GenericName[sr]=Дељење површи
GenericName[sr@ijekavian]=Дијељење површи
GenericName[sr@ijekavianlatin]=Dijeljenje površi
GenericName[sr@latin]=Deljenje površi
GenericName[sv]=Dela ut skrivbordet
GenericName[th]=ใช้งานพื้นที่ทำงานร่วมกัน
GenericName[tr]=Masaüstü Paylaşımı
GenericName[ug]=ئۈستەلئۈستىنى ھەمبەھىرلەش
GenericName[uk]=Спільні стільниці
GenericName[uz]=Ish stoli bilan boʻlishish
GenericName[uz@cyrillic]=Иш столи билан бўлишиш
GenericName[vi]=Chia sẻ màn hình nền
GenericName[x-test]=xxDesktop Sharingxx
GenericName[zh_CN]=桌面共享
GenericName[zh_HK]=桌面分享
GenericName[zh_TW]=桌面分享
Comment=Desktop Sharing
Comment[af]=Werkskerm Deeling
Comment[ar]=مشاركة سطح المكتب

View File

@@ -23,6 +23,7 @@
#include "sockethelpers.h"
#include "eventsmanager.h"
#include <QSocketNotifier>
#include <QDebug>
#include <poll.h>
#include <strings.h> //for bzero()

View File

@@ -19,11 +19,11 @@
*/
#include "rfbserver.h"
#include "rfbservermanager.h"
#include "krfbdebug.h"
#include <QSocketNotifier>
#include <QApplication>
#include <QClipboard>
#include <QPointer>
#include <QDebug>
#include <QX11Info>
struct RfbServer::Private
@@ -92,7 +92,7 @@ bool RfbServer::start()
if (!d->screen) {
d->screen = RfbServerManager::instance()->newScreen();
if (!d->screen) {
qCDebug(KRFB) << "Unable to get rbfserver screen";
qDebug() << "Unable to get rbfserver screen";
return false;
}
@@ -125,14 +125,14 @@ bool RfbServer::start()
d->screen->authPasswdData = (void *)nullptr;
}
qCDebug(KRFB) << "Starting server. Listen port:" << listeningPort()
qDebug() << "Starting server. Listen port:" << listeningPort()
<< "Listen Address:" << listeningAddress()
<< "Password enabled:" << passwordRequired();
rfbInitServer(d->screen);
if (!rfbIsActive(d->screen)) {
qCDebug(KRFB) << "Failed to start server";
qDebug() << "Failed to start server";
rfbShutdownServer(d->screen, false);
return false;
};
@@ -253,7 +253,7 @@ void RfbServer::pendingClientFinished(RfbClient *client)
rfbNewClientAction RfbServer::newClientHook(rfbClientPtr cl)
{
//qDebug() << "New client";
auto server = static_cast<RfbServer*>(cl->screen->screenData);
RfbServer *server = static_cast<RfbServer*>(cl->screen->screenData);
PendingRfbClient *pendingClient = server->newClient(cl);
connect(pendingClient, &PendingRfbClient::finished,
@@ -266,7 +266,7 @@ rfbNewClientAction RfbServer::newClientHook(rfbClientPtr cl)
void RfbServer::clientGoneHook(rfbClientPtr cl)
{
//qDebug() << "client gone";
auto client = static_cast<RfbClient*>(cl->clientData);
RfbClient *client = static_cast<RfbClient*>(cl->clientData);
RfbServerManager::instance()->removeClient(client);
client->deleteLater();
@@ -275,7 +275,7 @@ void RfbServer::clientGoneHook(rfbClientPtr cl)
//static
rfbBool RfbServer::passwordCheck(rfbClientPtr cl, const char *encryptedPassword, int len)
{
auto client = static_cast<PendingRfbClient*>(cl->clientData);
PendingRfbClient *client = static_cast<PendingRfbClient*>(cl->clientData);
Q_ASSERT(client);
return client->checkPassword(QByteArray::fromRawData(encryptedPassword, len));
}
@@ -283,14 +283,14 @@ rfbBool RfbServer::passwordCheck(rfbClientPtr cl, const char *encryptedPassword,
//static
void RfbServer::keyboardHook(rfbBool down, rfbKeySym keySym, rfbClientPtr cl)
{
auto client = static_cast<RfbClient*>(cl->clientData);
RfbClient *client = static_cast<RfbClient*>(cl->clientData);
client->handleKeyboardEvent(down ? true : false, keySym);
}
//static
void RfbServer::pointerHook(int bm, int x, int y, rfbClientPtr cl)
{
auto client = static_cast<RfbClient*>(cl->clientData);
RfbClient *client = static_cast<RfbClient*>(cl->clientData);
client->handleMouseEvent(bm, x, y);
}

View File

@@ -29,6 +29,7 @@
#include <QDesktopWidget>
#include <QGlobalStatic>
#include <QHostInfo>
#include <QDebug>
#include <KLocalizedString>
#include <KUser>

View File

@@ -28,13 +28,14 @@
QString peerAddress(int sock)
{
const int ADDR_SIZE = 50;
struct sockaddr sa = {};
struct sockaddr sa;
socklen_t salen = sizeof(struct sockaddr);
if (getpeername(sock, &sa, &salen) == 0) {
if (sa.sa_family == AF_INET) {
auto si = (struct sockaddr_in *)&sa;
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return QString::fromLatin1(inet_ntoa(si->sin_addr));
}
@@ -52,11 +53,12 @@ QString peerAddress(int sock)
unsigned short peerPort(int sock)
{
struct sockaddr sa = {};
struct sockaddr sa;
socklen_t salen = sizeof(struct sockaddr);
if (getpeername(sock, &sa, &salen) == 0) {
auto si = (struct sockaddr_in *)&sa;
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return ntohs(si->sin_port);
}
@@ -65,13 +67,14 @@ unsigned short peerPort(int sock)
QString localAddress(int sock)
{
const int ADDR_SIZE = 50;
struct sockaddr sa = {};
struct sockaddr sa;
socklen_t salen = sizeof(struct sockaddr);
if (getsockname(sock, &sa, &salen) == 0) {
if (sa.sa_family == AF_INET) {
auto si = (struct sockaddr_in *)&sa;
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return QString::fromLatin1(inet_ntoa(si->sin_addr));
}
@@ -89,11 +92,12 @@ QString localAddress(int sock)
unsigned short localPort(int sock)
{
struct sockaddr sa = {};
struct sockaddr sa;
socklen_t salen = sizeof(struct sockaddr);
if (getsockname(sock, &sa, &salen) == 0) {
auto si = (struct sockaddr_in *)&sa;
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return ntohs(si->sin_port);
}