├── .flatpak-manifest.json ├── .flatpak-manifest.json.license ├── .gitlab-ci.yml ├── .kde-ci.yml ├── .reuse └── dep5 ├── CMakeLists.txt ├── LICENSES ├── BSD-3-Clause.txt ├── CC0-1.0.txt ├── LGPL-2.0-or-later.txt └── LicenseRef-KDE-Accepted-GPL.txt ├── Messages.sh ├── README.md ├── icons ├── CMakeLists.txt ├── sc-apps-xwaylandvideobridge.svg └── sc-apps-xwaylandvideobridge.svg.license ├── po ├── ar │ └── xwaylandvideobridge.po ├── ca │ └── xwaylandvideobridge.po ├── ca@valencia │ └── xwaylandvideobridge.po ├── cs │ └── xwaylandvideobridge.po ├── de │ └── xwaylandvideobridge.po ├── en_GB │ └── xwaylandvideobridge.po ├── eo │ └── xwaylandvideobridge.po ├── es │ └── xwaylandvideobridge.po ├── eu │ └── xwaylandvideobridge.po ├── fi │ └── xwaylandvideobridge.po ├── fr │ └── xwaylandvideobridge.po ├── gl │ └── xwaylandvideobridge.po ├── it │ └── xwaylandvideobridge.po ├── ja │ └── xwaylandvideobridge.po ├── ka │ └── xwaylandvideobridge.po ├── ko │ └── xwaylandvideobridge.po ├── nl │ └── xwaylandvideobridge.po ├── nn │ └── xwaylandvideobridge.po ├── pl │ └── xwaylandvideobridge.po ├── pt │ └── xwaylandvideobridge.po ├── pt_BR │ └── xwaylandvideobridge.po ├── ro │ └── xwaylandvideobridge.po ├── sk │ └── xwaylandvideobridge.po ├── sl │ └── xwaylandvideobridge.po ├── sv │ └── xwaylandvideobridge.po ├── tr │ └── xwaylandvideobridge.po ├── uk │ └── xwaylandvideobridge.po ├── zh_CN │ └── xwaylandvideobridge.po └── zh_TW │ └── xwaylandvideobridge.po └── src ├── CMakeLists.txt ├── contentswindow.cpp ├── contentswindow.h ├── main.cpp ├── org.freedesktop.portal.ScreenCast.xml ├── org.kde.xwaylandvideobridge.appdata.xml ├── org.kde.xwaylandvideobridge.desktop ├── org.kde.xwaylandvideobridge.desktop.license ├── version.h.in ├── x11recordingnotifier.cpp ├── x11recordingnotifier.h ├── xwaylandvideobridge.cpp └── xwaylandvideobridge.h /.flatpak-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "org.kde.xwaylandvideobridge", 3 | "branch": "master", 4 | "runtime": "org.kde.Platform", 5 | "runtime-version": "5.15-22.08", 6 | "sdk": "org.kde.Sdk", 7 | "command": "xwaylandvideobridge", 8 | "tags": ["nightly"], 9 | "desktop-file-name-suffix": " (Nightly)", 10 | "finish-args": ["--share=ipc", "--device=all", "--socket=x11", "--talk-name=org.kde.StatusNotifierWatcher", "--own-name=org.kde.StatusNotifierItem-2-2", "--env=QT_LOGGING_DEBUG=*.debug=true qt.qpa.input*.debug=false"], 11 | 12 | "modules": [ 13 | { 14 | "config-opts": [ "-DENABLE_TESTING=OFF" ], 15 | "name": "kpipewire", 16 | "buildsystem": "cmake-ninja", 17 | "sources": [ { "type": "git", "url": "https://invent.kde.org/plasma/kpipewire.git", "commit": "Plasma/5.27" } ] 18 | }, 19 | { 20 | "name": "xwaylandvideobridge", 21 | "buildsystem": "cmake-ninja", 22 | "sources": [ 23 | { 24 | "type": "dir", 25 | "path": "." 26 | } 27 | ] 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /.flatpak-manifest.json.license: -------------------------------------------------------------------------------- 1 | SPDX-License-Identifier: BSD-3-Clause 2 | SPDX-FileCopyrightText: 2023 David Edmundson 3 | SPDX-FileCopyrightText: 2023 Aleix Pol 4 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: None 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | include: 5 | - project: sysadmin/ci-utilities 6 | file: 7 | - /gitlab-templates/reuse-lint.yml 8 | - /gitlab-templates/linux.yml 9 | - /gitlab-templates/linux-qt6.yml 10 | - /gitlab-templates/flatpak.yml 11 | - /gitlab-templates/xml-lint.yml 12 | - /gitlab-templates/yaml-lint.yml 13 | -------------------------------------------------------------------------------- /.kde-ci.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: None 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | Dependencies: 5 | - 'on': ['Linux/Qt6', 'FreeBSD/Qt6'] 6 | 'require': 7 | 'frameworks/extra-cmake-modules': '@latest-kf6' 8 | 'frameworks/kcoreaddons': '@latest-kf6' 9 | 'frameworks/ki18n': '@latest-kf6' 10 | 'frameworks/kwindowsystem': '@latest-kf6' 11 | 'frameworks/kcrash': '@latest-kf6' 12 | 'plasma/kpipewire': '@latest-kf6' 13 | 14 | - 'on': ['Linux/Qt5', 'FreeBSD/Qt5'] 15 | 'require': 16 | 'frameworks/extra-cmake-modules': '@stable' 17 | 'frameworks/kcoreaddons': '@stable' 18 | 'frameworks/ki18n': '@stable' 19 | 'frameworks/kwindowsystem': '@stable' 20 | 'frameworks/kcrash': '@stable' 21 | 'plasma/kpipewire': '@latest' 22 | 23 | Options: 24 | require-passing-tests-on: ['Linux'] 25 | -------------------------------------------------------------------------------- /.reuse/dep5: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: Screen Record 3 | Upstream-Contact: Aleix Pol Gonzalez 4 | Source: https://kde.org 5 | 6 | # Sample paragraph, commented out: 7 | # 8 | # Files: src/* 9 | # Copyright: $YEAR $NAME <$CONTACT> 10 | # License: ... 11 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: BSD-3-Clause 2 | # SPDX-FileCopyrightText: 2023 David Edmundson 3 | # SPDX-FileCopyrightText: 2023 Aleix Pol 4 | 5 | cmake_minimum_required(VERSION 3.16) 6 | 7 | project(xwaylandvideobridge) 8 | 9 | set(PROJECT_VERSION "0.4.0") 10 | set(QT_MIN_VERSION "5.15.0") 11 | set(KF_MIN_VERSION "5.83.0") 12 | 13 | find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) 14 | set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) 15 | 16 | include(KDEInstallDirs) 17 | include(KDECMakeSettings) 18 | include(KDECompilerSettings NO_POLICY_SCOPE) 19 | include(ECMInstallIcons) 20 | include(ECMQtDeclareLoggingCategory) 21 | include(FeatureSummary) 22 | 23 | set(CMAKE_CXX_STANDARD 20) 24 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 25 | 26 | if(QT_MAJOR_VERSION STREQUAL "6") 27 | set(REQUIRED_QT_VERSION "6.4") 28 | set(KF_MIN_VERSION "5.240.0") 29 | set(KF_MAJOR_VERSION "6") 30 | else() 31 | set(KF_MAJOR_VERSION "5") 32 | endif() 33 | 34 | 35 | find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Quick DBus Widgets) 36 | if(QT_MAJOR_VERSION STREQUAL "5") 37 | find_package(Qt5X11Extras ${QT_MIN_VERSION} REQUIRED) 38 | endif() 39 | 40 | find_package(KF${QT_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS 41 | CoreAddons 42 | I18n 43 | WindowSystem 44 | Crash 45 | ) 46 | 47 | find_package(XCB COMPONENTS REQUIRED XCB COMPOSITE EVENT RECORD XFIXES) 48 | 49 | find_package(KPipeWire REQUIRED) 50 | 51 | add_subdirectory(src) 52 | add_subdirectory(icons) 53 | 54 | # Make it possible to use the po files fetched by the fetch-translations step 55 | ki18n_install(po) 56 | 57 | feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) 58 | -------------------------------------------------------------------------------- /LICENSES/BSD-3-Clause.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) . All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. 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. 8 | 9 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | 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 THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 12 | -------------------------------------------------------------------------------- /LICENSES/CC0-1.0.txt: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /LICENSES/LGPL-2.0-or-later.txt: -------------------------------------------------------------------------------- 1 | GNU LIBRARY GENERAL PUBLIC LICENSE 2 | 3 | Version 2, June 1991 4 | 5 | Copyright (C) 1991 Free Software Foundation, Inc. 6 | 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 7 | 8 | Everyone is permitted to copy and distribute verbatim copies of this license 9 | document, but changing it is not allowed. 10 | 11 | [This is the first released version of the library GPL. It is numbered 2 12 | because it goes with version 2 of the ordinary GPL.] 13 | 14 | Preamble 15 | 16 | The licenses for most software are designed to take away your freedom to share 17 | and change it. By contrast, the GNU General Public Licenses are intended to 18 | guarantee your freedom to share and change free software--to make sure the 19 | software is free for all its users. 20 | 21 | This license, the Library General Public License, applies to some specially 22 | designated Free Software Foundation software, and to any other libraries whose 23 | authors decide to use it. You can use it for your libraries, too. 24 | 25 | When we speak of free software, we are referring to freedom, not price. Our 26 | General Public Licenses are designed to make sure that you have the freedom 27 | to distribute copies of free software (and charge for this service if you 28 | wish), that you receive source code or can get it if you want it, that you 29 | can change the software or use pieces of it in new free programs; and that 30 | you know you can do these things. 31 | 32 | To protect your rights, we need to make restrictions that forbid anyone to 33 | deny you these rights or to ask you to surrender the rights. These restrictions 34 | translate to certain responsibilities for you if you distribute copies of 35 | the library, or if you modify it. 36 | 37 | For example, if you distribute copies of the library, whether gratis or for 38 | a fee, you must give the recipients all the rights that we gave you. You must 39 | make sure that they, too, receive or can get the source code. If you link 40 | a program with the library, you must provide complete object files to the 41 | recipients so that they can relink them with the library, after making changes 42 | to the library and recompiling it. And you must show them these terms so they 43 | know their rights. 44 | 45 | Our method of protecting your rights has two steps: (1) copyright the library, 46 | and (2) offer you this license which gives you legal permission to copy, distribute 47 | and/or modify the library. 48 | 49 | Also, for each distributor's protection, we want to make certain that everyone 50 | understands that there is no warranty for this free library. If the library 51 | is modified by someone else and passed on, we want its recipients to know 52 | that what they have is not the original version, so that any problems introduced 53 | by others will not reflect on the original authors' reputations. 54 | 55 | Finally, any free program is threatened constantly by software patents. We 56 | wish to avoid the danger that companies distributing free software will individually 57 | obtain patent licenses, thus in effect transforming the program into proprietary 58 | software. To prevent this, we have made it clear that any patent must be licensed 59 | for everyone's free use or not licensed at all. 60 | 61 | Most GNU software, including some libraries, is covered by the ordinary GNU 62 | General Public License, which was designed for utility programs. This license, 63 | the GNU Library General Public License, applies to certain designated libraries. 64 | This license is quite different from the ordinary one; be sure to read it 65 | in full, and don't assume that anything in it is the same as in the ordinary 66 | license. 67 | 68 | The reason we have a separate public license for some libraries is that they 69 | blur the distinction we usually make between modifying or adding to a program 70 | and simply using it. Linking a program with a library, without changing the 71 | library, is in some sense simply using the library, and is analogous to running 72 | a utility program or application program. However, in a textual and legal 73 | sense, the linked executable is a combined work, a derivative of the original 74 | library, and the ordinary General Public License treats it as such. 75 | 76 | Because of this blurred distinction, using the ordinary General Public License 77 | for libraries did not effectively promote software sharing, because most developers 78 | did not use the libraries. We concluded that weaker conditions might promote 79 | sharing better. 80 | 81 | However, unrestricted linking of non-free programs would deprive the users 82 | of those programs of all benefit from the free status of the libraries themselves. 83 | This Library General Public License is intended to permit developers of non-free 84 | programs to use free libraries, while preserving your freedom as a user of 85 | such programs to change the free libraries that are incorporated in them. 86 | (We have not seen how to achieve this as regards changes in header files, 87 | but we have achieved it as regards changes in the actual functions of the 88 | Library.) The hope is that this will lead to faster development of free libraries. 89 | 90 | The precise terms and conditions for copying, distribution and modification 91 | follow. Pay close attention to the difference between a "work based on the 92 | library" and a "work that uses the library". The former contains code derived 93 | from the library, while the latter only works together with the library. 94 | 95 | Note that it is possible for a library to be covered by the ordinary General 96 | Public License rather than by this special one. 97 | 98 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 99 | 100 | 0. This License Agreement applies to any software library which contains a 101 | notice placed by the copyright holder or other authorized party saying it 102 | may be distributed under the terms of this Library General Public License 103 | (also called "this License"). Each licensee is addressed as "you". 104 | 105 | A "library" means a collection of software functions and/or data prepared 106 | so as to be conveniently linked with application programs (which use some 107 | of those functions and data) to form executables. 108 | 109 | The "Library", below, refers to any such software library or work which has 110 | been distributed under these terms. A "work based on the Library" means either 111 | the Library or any derivative work under copyright law: that is to say, a 112 | work containing the Library or a portion of it, either verbatim or with modifications 113 | and/or translated straightforwardly into another language. (Hereinafter, translation 114 | is included without limitation in the term "modification".) 115 | 116 | "Source code" for a work means the preferred form of the work for making modifications 117 | to it. For a library, complete source code means all the source code for all 118 | modules it contains, plus any associated interface definition files, plus 119 | the scripts used to control compilation and installation of the library. 120 | 121 | Activities other than copying, distribution and modification are not covered 122 | by this License; they are outside its scope. The act of running a program 123 | using the Library is not restricted, and output from such a program is covered 124 | only if its contents constitute a work based on the Library (independent of 125 | the use of the Library in a tool for writing it). Whether that is true depends 126 | on what the Library does and what the program that uses the Library does. 127 | 128 | 1. You may copy and distribute verbatim copies of the Library's complete source 129 | code as you receive it, in any medium, provided that you conspicuously and 130 | appropriately publish on each copy an appropriate copyright notice and disclaimer 131 | of warranty; keep intact all the notices that refer to this License and to 132 | the absence of any warranty; and distribute a copy of this License along with 133 | the Library. 134 | 135 | You may charge a fee for the physical act of transferring a copy, and you 136 | may at your option offer warranty protection in exchange for a fee. 137 | 138 | 2. You may modify your copy or copies of the Library or any portion of it, 139 | thus forming a work based on the Library, and copy and distribute such modifications 140 | or work under the terms of Section 1 above, provided that you also meet all 141 | of these conditions: 142 | 143 | a) The modified work must itself be a software library. 144 | 145 | b) You must cause the files modified to carry prominent notices stating that 146 | you changed the files and the date of any change. 147 | 148 | c) You must cause the whole of the work to be licensed at no charge to all 149 | third parties under the terms of this License. 150 | 151 | d) If a facility in the modified Library refers to a function or a table of 152 | data to be supplied by an application program that uses the facility, other 153 | than as an argument passed when the facility is invoked, then you must make 154 | a good faith effort to ensure that, in the event an application does not supply 155 | such function or table, the facility still operates, and performs whatever 156 | part of its purpose remains meaningful. 157 | 158 | (For example, a function in a library to compute square roots has a purpose 159 | that is entirely well-defined independent of the application. Therefore, Subsection 160 | 2d requires that any application-supplied function or table used by this function 161 | must be optional: if the application does not supply it, the square root function 162 | must still compute square roots.) 163 | 164 | These requirements apply to the modified work as a whole. If identifiable 165 | sections of that work are not derived from the Library, and can be reasonably 166 | considered independent and separate works in themselves, then this License, 167 | and its terms, do not apply to those sections when you distribute them as 168 | separate works. But when you distribute the same sections as part of a whole 169 | which is a work based on the Library, the distribution of the whole must be 170 | on the terms of this License, whose permissions for other licensees extend 171 | to the entire whole, and thus to each and every part regardless of who wrote 172 | it. 173 | 174 | Thus, it is not the intent of this section to claim rights or contest your 175 | rights to work written entirely by you; rather, the intent is to exercise 176 | the right to control the distribution of derivative or collective works based 177 | on the Library. 178 | 179 | In addition, mere aggregation of another work not based on the Library with 180 | the Library (or with a work based on the Library) on a volume of a storage 181 | or distribution medium does not bring the other work under the scope of this 182 | License. 183 | 184 | 3. You may opt to apply the terms of the ordinary GNU General Public License 185 | instead of this License to a given copy of the Library. To do this, you must 186 | alter all the notices that refer to this License, so that they refer to the 187 | ordinary GNU General Public License, version 2, instead of to this License. 188 | (If a newer version than version 2 of the ordinary GNU General Public License 189 | has appeared, then you can specify that version instead if you wish.) Do not 190 | make any other change in these notices. 191 | 192 | Once this change is made in a given copy, it is irreversible for that copy, 193 | so the ordinary GNU General Public License applies to all subsequent copies 194 | and derivative works made from that copy. 195 | 196 | This option is useful when you wish to copy part of the code of the Library 197 | into a program that is not a library. 198 | 199 | 4. You may copy and distribute the Library (or a portion or derivative of 200 | it, under Section 2) in object code or executable form under the terms of 201 | Sections 1 and 2 above provided that you accompany it with the complete corresponding 202 | machine-readable source code, which must be distributed under the terms of 203 | Sections 1 and 2 above on a medium customarily used for software interchange. 204 | 205 | If distribution of object code is made by offering access to copy from a designated 206 | place, then offering equivalent access to copy the source code from the same 207 | place satisfies the requirement to distribute the source code, even though 208 | third parties are not compelled to copy the source along with the object code. 209 | 210 | 5. A program that contains no derivative of any portion of the Library, but 211 | is designed to work with the Library by being compiled or linked with it, 212 | is called a "work that uses the Library". Such a work, in isolation, is not 213 | a derivative work of the Library, and therefore falls outside the scope of 214 | this License. 215 | 216 | However, linking a "work that uses the Library" with the Library creates an 217 | executable that is a derivative of the Library (because it contains portions 218 | of the Library), rather than a "work that uses the library". The executable 219 | is therefore covered by this License. Section 6 states terms for distribution 220 | of such executables. 221 | 222 | When a "work that uses the Library" uses material from a header file that 223 | is part of the Library, the object code for the work may be a derivative work 224 | of the Library even though the source code is not. Whether this is true is 225 | especially significant if the work can be linked without the Library, or if 226 | the work is itself a library. The threshold for this to be true is not precisely 227 | defined by law. 228 | 229 | If such an object file uses only numerical parameters, data structure layouts 230 | and accessors, and small macros and small inline functions (ten lines or less 231 | in length), then the use of the object file is unrestricted, regardless of 232 | whether it is legally a derivative work. (Executables containing this object 233 | code plus portions of the Library will still fall under Section 6.) 234 | 235 | Otherwise, if the work is a derivative of the Library, you may distribute 236 | the object code for the work under the terms of Section 6. Any executables 237 | containing that work also fall under Section 6, whether or not they are linked 238 | directly with the Library itself. 239 | 240 | 6. As an exception to the Sections above, you may also compile or link a "work 241 | that uses the Library" with the Library to produce a work containing portions 242 | of the Library, and distribute that work under terms of your choice, provided 243 | that the terms permit modification of the work for the customer's own use 244 | and reverse engineering for debugging such modifications. 245 | 246 | You must give prominent notice with each copy of the work that the Library 247 | is used in it and that the Library and its use are covered by this License. 248 | You must supply a copy of this License. If the work during execution displays 249 | copyright notices, you must include the copyright notice for the Library among 250 | them, as well as a reference directing the user to the copy of this License. 251 | Also, you must do one of these things: 252 | 253 | a) Accompany the work with the complete corresponding machine-readable source 254 | code for the Library including whatever changes were used in the work (which 255 | must be distributed under Sections 1 and 2 above); and, if the work is an 256 | executable linked with the Library, with the complete machine-readable "work 257 | that uses the Library", as object code and/or source code, so that the user 258 | can modify the Library and then relink to produce a modified executable containing 259 | the modified Library. (It is understood that the user who changes the contents 260 | of definitions files in the Library will not necessarily be able to recompile 261 | the application to use the modified definitions.) 262 | 263 | b) Accompany the work with a written offer, valid for at least three years, 264 | to give the same user the materials specified in Subsection 6a, above, for 265 | a charge no more than the cost of performing this distribution. 266 | 267 | c) If distribution of the work is made by offering access to copy from a designated 268 | place, offer equivalent access to copy the above specified materials from 269 | the same place. 270 | 271 | d) Verify that the user has already received a copy of these materials or 272 | that you have already sent this user a copy. 273 | 274 | For an executable, the required form of the "work that uses the Library" must 275 | include any data and utility programs needed for reproducing the executable 276 | from it. However, as a special exception, the source code distributed need 277 | not include anything that is normally distributed (in either source or binary 278 | form) with the major components (compiler, kernel, and so on) of the operating 279 | system on which the executable runs, unless that component itself accompanies 280 | the executable. 281 | 282 | It may happen that this requirement contradicts the license restrictions of 283 | other proprietary libraries that do not normally accompany the operating system. 284 | Such a contradiction means you cannot use both them and the Library together 285 | in an executable that you distribute. 286 | 287 | 7. You may place library facilities that are a work based on the Library side-by-side 288 | in a single library together with other library facilities not covered by 289 | this License, and distribute such a combined library, provided that the separate 290 | distribution of the work based on the Library and of the other library facilities 291 | is otherwise permitted, and provided that you do these two things: 292 | 293 | a) Accompany the combined library with a copy of the same work based on the 294 | Library, uncombined with any other library facilities. This must be distributed 295 | under the terms of the Sections above. 296 | 297 | b) Give prominent notice with the combined library of the fact that part of 298 | it is a work based on the Library, and explaining where to find the accompanying 299 | uncombined form of the same work. 300 | 301 | 8. You may not copy, modify, sublicense, link with, or distribute the Library 302 | except as expressly provided under this License. Any attempt otherwise to 303 | copy, modify, sublicense, link with, or distribute the Library is void, and 304 | will automatically terminate your rights under this License. However, parties 305 | who have received copies, or rights, from you under this License will not 306 | have their licenses terminated so long as such parties remain in full compliance. 307 | 308 | 9. You are not required to accept this License, since you have not signed 309 | it. However, nothing else grants you permission to modify or distribute the 310 | Library or its derivative works. These actions are prohibited by law if you 311 | do not accept this License. Therefore, by modifying or distributing the Library 312 | (or any work based on the Library), you indicate your acceptance of this License 313 | to do so, and all its terms and conditions for copying, distributing or modifying 314 | the Library or works based on it. 315 | 316 | 10. Each time you redistribute the Library (or any work based on the Library), 317 | the recipient automatically receives a license from the original licensor 318 | to copy, distribute, link with or modify the Library subject to these terms 319 | and conditions. You may not impose any further restrictions on the recipients' 320 | exercise of the rights granted herein. You are not responsible for enforcing 321 | compliance by third parties to this License. 322 | 323 | 11. If, as a consequence of a court judgment or allegation of patent infringement 324 | or for any other reason (not limited to patent issues), conditions are imposed 325 | on you (whether by court order, agreement or otherwise) that contradict the 326 | conditions of this License, they do not excuse you from the conditions of 327 | this License. If you cannot distribute so as to satisfy simultaneously your 328 | obligations under this License and any other pertinent obligations, then as 329 | a consequence you may not distribute the Library at all. For example, if a 330 | patent license would not permit royalty-free redistribution of the Library 331 | by all those who receive copies directly or indirectly through you, then the 332 | only way you could satisfy both it and this License would be to refrain entirely 333 | from distribution of the Library. 334 | 335 | If any portion of this section is held invalid or unenforceable under any 336 | particular circumstance, the balance of the section is intended to apply, 337 | and the section as a whole is intended to apply in other circumstances. 338 | 339 | It is not the purpose of this section to induce you to infringe any patents 340 | or other property right claims or to contest validity of any such claims; 341 | this section has the sole purpose of protecting the integrity of the free 342 | software distribution system which is implemented by public license practices. 343 | Many people have made generous contributions to the wide range of software 344 | distributed through that system in reliance on consistent application of that 345 | system; it is up to the author/donor to decide if he or she is willing to 346 | distribute software through any other system and a licensee cannot impose 347 | that choice. 348 | 349 | This section is intended to make thoroughly clear what is believed to be a 350 | consequence of the rest of this License. 351 | 352 | 12. If the distribution and/or use of the Library is restricted in certain 353 | countries either by patents or by copyrighted interfaces, the original copyright 354 | holder who places the Library under this License may add an explicit geographical 355 | distribution limitation excluding those countries, so that distribution is 356 | permitted only in or among countries not thus excluded. In such case, this 357 | License incorporates the limitation as if written in the body of this License. 358 | 359 | 13. The Free Software Foundation may publish revised and/or new versions of 360 | the Library General Public License from time to time. Such new versions will 361 | be similar in spirit to the present version, but may differ in detail to address 362 | new problems or concerns. 363 | 364 | Each version is given a distinguishing version number. If the Library specifies 365 | a version number of this License which applies to it and "any later version", 366 | you have the option of following the terms and conditions either of that version 367 | or of any later version published by the Free Software Foundation. If the 368 | Library does not specify a license version number, you may choose any version 369 | ever published by the Free Software Foundation. 370 | 371 | 14. If you wish to incorporate parts of the Library into other free programs 372 | whose distribution conditions are incompatible with these, write to the author 373 | to ask for permission. For software which is copyrighted by the Free Software 374 | Foundation, write to the Free Software Foundation; we sometimes make exceptions 375 | for this. Our decision will be guided by the two goals of preserving the free 376 | status of all derivatives of our free software and of promoting the sharing 377 | and reuse of software generally. 378 | 379 | NO WARRANTY 380 | 381 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 382 | THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE 383 | STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY 384 | "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, 385 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 386 | FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE 387 | OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 388 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 389 | 390 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 391 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 392 | THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 393 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE 394 | OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA 395 | OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES 396 | OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH 397 | HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 398 | 399 | END OF TERMS AND CONDITIONS 400 | 401 | How to Apply These Terms to Your New Libraries 402 | 403 | If you develop a new library, and you want it to be of the greatest possible 404 | use to the public, we recommend making it free software that everyone can 405 | redistribute and change. You can do so by permitting redistribution under 406 | these terms (or, alternatively, under the terms of the ordinary General Public 407 | License). 408 | 409 | To apply these terms, attach the following notices to the library. It is safest 410 | to attach them to the start of each source file to most effectively convey 411 | the exclusion of warranty; and each file should have at least the "copyright" 412 | line and a pointer to where the full notice is found. 413 | 414 | one line to give the library's name and an idea of what it does. 415 | Copyright (C) year name of author 416 | 417 | This library is free software; you can redistribute it and/or modify it under 418 | the terms of the GNU Library General Public License as published by the Free 419 | Software Foundation; either version 2 of the License, or (at your option) 420 | any later version. 421 | 422 | This library is distributed in the hope that it will be useful, but WITHOUT 423 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 424 | FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for 425 | more details. 426 | 427 | You should have received a copy of the GNU Library General Public License 428 | along with this library; if not, write to the Free Software Foundation, Inc., 429 | 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 430 | 431 | Also add information on how to contact you by electronic and paper mail. 432 | 433 | You should also get your employer (if you work as a programmer) or your school, 434 | if any, to sign a "copyright disclaimer" for the library, if necessary. Here 435 | is a sample; alter the names: 436 | 437 | Yoyodyne, Inc., hereby disclaims all copyright interest in 438 | the library `Frob' (a library for tweaking knobs) written 439 | by James Random Hacker. 440 | 441 | signature of Ty Coon, 1 April 1990 442 | Ty Coon, President of Vice 443 | 444 | That's all there is to it! 445 | -------------------------------------------------------------------------------- /LICENSES/LicenseRef-KDE-Accepted-GPL.txt: -------------------------------------------------------------------------------- 1 | This library is free software; you can redistribute it and/or 2 | modify it under the terms of the GNU General Public License as 3 | published by the Free Software Foundation; either version 3 of 4 | the license or (at your option) at any later version that is 5 | accepted by the membership of KDE e.V. (or its successor 6 | approved by the membership of KDE e.V.), which shall act as a 7 | proxy as defined in Section 14 of version 3 of the license. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | -------------------------------------------------------------------------------- /Messages.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # SPDX-License-Identifier: BSD-3-Clause 3 | # SPDX-FileCopyrightText: 2023 Aleix Pol 4 | 5 | $EXTRACTRC `find . -name \*.ui -o -name \*.rc -o -name \*.kcfg` >> rc.cpp 6 | $XGETTEXT `find . -name \*.cpp` -o $podir/xwaylandvideobridge.pot 7 | rm -f rc.cpp 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # XWayland Video Bridge 8 | 9 | # About 10 | 11 | By design, X11 applications can't access window or screen contents for wayland clients. This is fine in principle, but it breaks screen sharing in tools like Discord, MS Teams, Skype, etc and more. 12 | 13 | This tool allows us to share specific windows to X11 clients, but within the control of the user at all times. 14 | 15 | # How to use 16 | 17 | xwaylandvideobridge should autostart on login. It will run in the background. Next time you try to share a window a prompt will appear. 18 | The previously selected window should now be available for sharing. The title will always be "Wayland to X11 bridge" no matter what window is selected. 19 | 20 | The system tray icon provides finer control. 21 | 22 | # Use outside Plasma 23 | 24 | This should work on any desktop that supports the Xdg desktop portals and pipewire streaming and have a working system tray. 25 | 26 | # Future 27 | 28 | Ideally this should be more automatic, but this tool aims purely to serve as a stop-gap whilst we wait for these clients to get native wayland support and for the surrounding wayland protocols to be better. How much more it gets developed depends on feedback and how the surrounding ecosystem evolves. 29 | 30 | # Release Process 31 | 32 | - Check it works 33 | - appstream-metainfo-release-update --version 0.3.0 -d today ./src/org.kde.xwaylandvideobridge.appdata.xml 34 | - Update set(PROJECT_VERSION "0.3.0") in CMakeLists.txt 35 | - In Releaseme mkdir xwaylandvideobridge; cd xwaylandvideobridge; ../tarme.rb --origin trunk --version 0.3.0 xwaylandvideobridge 36 | - scp xwaylandvideobridge ftpadmin@tinami.kde.org: and move to right place 37 | - Write a blog post and put on kde-announce 38 | -------------------------------------------------------------------------------- /icons/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: BSD-3-Clause 2 | # SPDX-FileCopyrightText: 2023 Aleix Pol 3 | 4 | ecm_install_icons( 5 | ICONS 6 | sc-apps-xwaylandvideobridge.svg 7 | DESTINATION ${KDE_INSTALL_ICONDIR} 8 | THEME hicolor 9 | ) 10 | 11 | ecm_install_icons(ICONS ${xwaylandvideobridge_ICONS} DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor) 12 | -------------------------------------------------------------------------------- /icons/sc-apps-xwaylandvideobridge.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 33 | 35 | 42 | 51 | 54 | 57 | 61 | 62 | 71 | 74 | 77 | 81 | 82 | 91 | 94 | 97 | 101 | 102 | 112 | 115 | 118 | 122 | 123 | 131 | 134 | 137 | 141 | 142 | 152 | 155 | 158 | 162 | 163 | 171 | 174 | 177 | 181 | 182 | 192 | 195 | 198 | 202 | 203 | 213 | 216 | 219 | 223 | 224 | 234 | 237 | 240 | 244 | 245 | 255 | 258 | 261 | 265 | 266 | 274 | 277 | 280 | 284 | 285 | 293 | 296 | 299 | 303 | 304 | 305 | 310 | 317 | 322 | 327 | 332 | 337 | 342 | 347 | 352 | 357 | 362 | 367 | 372 | 379 | 382 | 389 | 395 | 400 | 401 | 404 | 411 | 416 | 421 | 426 | 431 | 436 | 441 | 442 | 446 | 447 | -------------------------------------------------------------------------------- /icons/sc-apps-xwaylandvideobridge.svg.license: -------------------------------------------------------------------------------- 1 | SPDX-License-Identifier: BSD-3-Clause 2 | SPDX-FileCopyrightText: 2023 David Edmundson 3 | SPDX-FileCopyrightText: 2023 Aleix Pol 4 | -------------------------------------------------------------------------------- /po/ar/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2024 This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # SPDX-FileCopyrightText: 2024 Zayed Al-Saidi 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2024-06-26 22:40+0400\n" 11 | "Last-Translator: Zayed Al-Saidi \n" 12 | "Language-Team: ar\n" 13 | "Language: ar\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " 18 | "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" 19 | "X-Generator: Lokalize 23.08.5\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "زايد السعيدي" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "zayed.alsaidi@gmail.com" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "جسر تسجيل ويلاند إلى أكس" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "جسر فيديو ويلاند_اكس" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "يوفر دفق بث بوابة XDG لسطح المكتب لتطبيقات اكس11" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "(ج) 2022 أليكس بول جونزاليس" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "المؤلف" 55 | 56 | #~ msgid "Quit" 57 | #~ msgstr "أنهِ" 58 | -------------------------------------------------------------------------------- /po/ca/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Translation of xwaylandvideobridge.po to Catalan 2 | # Copyright (C) 2023 This_file_is_part_of_KDE 3 | # This file is distributed under the license LGPL version 2.1 or 4 | # version 3 or later versions approved by the membership of KDE e.V. 5 | # or the same license as the source of its messages in English. 6 | # 7 | # Josep M. Ferrer , 2023. 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: xwaylandvideobridge\n" 11 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 12 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 13 | "PO-Revision-Date: 2023-04-06 17:22+0100\n" 14 | "Last-Translator: Josep M. Ferrer \n" 15 | "Language-Team: Catalan \n" 16 | "Language: ca\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 21 | "X-Generator: Lokalize 20.12.0\n" 22 | 23 | #, kde-format 24 | msgctxt "NAME OF TRANSLATORS" 25 | msgid "Your names" 26 | msgstr "Josep M. Ferrer" 27 | 28 | #, kde-format 29 | msgctxt "EMAIL OF TRANSLATORS" 30 | msgid "Your emails" 31 | msgstr "txemaq@gmail.com" 32 | 33 | #: src/contentswindow.cpp:51 34 | #, kde-format 35 | msgid "Wayland to X Recording bridge" 36 | msgstr "Pont d'enregistrament Wayland a X" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Xwayland Video Bridge" 41 | msgstr "Pont de vídeo de l'Xwayland" 42 | 43 | #: src/main.cpp:44 44 | #, kde-format 45 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 46 | msgstr "" 47 | "Ofereix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a " 48 | "les aplicacions X11" 49 | 50 | #: src/main.cpp:45 51 | #, kde-format 52 | msgid "(C) 2022 Aleix Pol Gonzalez" 53 | msgstr "(C) 2022 Aleix Pol Gonzalez" 54 | 55 | #: src/main.cpp:47 src/main.cpp:48 56 | #, kde-format 57 | msgid "Author" 58 | msgstr "Autor" 59 | 60 | #~ msgid "Quit" 61 | #~ msgstr "Surt" 62 | -------------------------------------------------------------------------------- /po/ca@valencia/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Translation of xwaylandvideobridge.po to Catalan (Valencian) 2 | # Copyright (C) 2023 This_file_is_part_of_KDE 3 | # This file is distributed under the license LGPL version 2.1 or 4 | # version 3 or later versions approved by the membership of KDE e.V. 5 | # or the same license as the source of its messages in English. 6 | # 7 | # Josep M. Ferrer , 2023. 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: xwaylandvideobridge\n" 11 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 12 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 13 | "PO-Revision-Date: 2023-04-06 17:22+0100\n" 14 | "Last-Translator: Josep M. Ferrer \n" 15 | "Language-Team: Catalan \n" 16 | "Language: ca@valencia\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 21 | "X-Generator: Lokalize 20.12.0\n" 22 | 23 | #, kde-format 24 | msgctxt "NAME OF TRANSLATORS" 25 | msgid "Your names" 26 | msgstr "Josep M. Ferrer" 27 | 28 | #, kde-format 29 | msgctxt "EMAIL OF TRANSLATORS" 30 | msgid "Your emails" 31 | msgstr "txemaq@gmail.com" 32 | 33 | #: src/contentswindow.cpp:51 34 | #, kde-format 35 | msgid "Wayland to X Recording bridge" 36 | msgstr "Pont de gravació Wayland a X" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Xwayland Video Bridge" 41 | msgstr "Pont de vídeo d'XWayland" 42 | 43 | #: src/main.cpp:44 44 | #, kde-format 45 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 46 | msgstr "" 47 | "Oferix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a " 48 | "les aplicacions X11" 49 | 50 | #: src/main.cpp:45 51 | #, kde-format 52 | msgid "(C) 2022 Aleix Pol Gonzalez" 53 | msgstr "(C) 2022 Aleix Pol Gonzalez" 54 | 55 | #: src/main.cpp:47 src/main.cpp:48 56 | #, kde-format 57 | msgid "Author" 58 | msgstr "Autoria" 59 | 60 | #~ msgid "Quit" 61 | #~ msgstr "Ix" 62 | -------------------------------------------------------------------------------- /po/cs/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2024 This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # SPDX-FileCopyrightText: 2023, 2024 Vit Pelcak 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2024-06-25 10:54+0200\n" 11 | "Last-Translator: Vit Pelcak \n" 12 | "Language-Team: Czech \n" 13 | "Language: cs\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 18 | "X-Generator: Lokalize 24.05.1\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Vít Pelčák" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "vit@pelcak.org" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Propojení videa Xwayland" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Autor" 54 | -------------------------------------------------------------------------------- /po/de/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # German translations for xwaylandvideobridge package. 2 | # Copyright (C) 2023 This file is copyright: 3 | # This file is distributed under the same license as the xwaylandvideobridge package. 4 | # Frederik Schwarzer , 2023. 5 | # SPDX-FileCopyrightText: 2024 Flori G 6 | # 7 | # Automatically generated, 2023. 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: xwaylandvideobridge\n" 11 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 12 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 13 | "PO-Revision-Date: 2024-10-03 00:06+0200\n" 14 | "Last-Translator: Flori G \n" 15 | "Language-Team: German \n" 16 | "Language: de\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | "X-Generator: Lokalize 24.08.1\n" 22 | 23 | #, kde-format 24 | msgctxt "NAME OF TRANSLATORS" 25 | msgid "Your names" 26 | msgstr "Deutsches KDE-Übersetzerteam" 27 | 28 | #, kde-format 29 | msgctxt "EMAIL OF TRANSLATORS" 30 | msgid "Your emails" 31 | msgstr "kde-i18n-de@kde.org" 32 | 33 | #: src/contentswindow.cpp:51 34 | #, kde-format 35 | msgid "Wayland to X Recording bridge" 36 | msgstr "Aufnahmebrücke von Wayland nach X" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Xwayland Video Bridge" 41 | msgstr "Xwayland-Video-Brücke" 42 | 43 | #: src/main.cpp:44 44 | #, kde-format 45 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 46 | msgstr "" 47 | "Stellt X11-Anwendungen Bildschirmaufnahme-Streams vom XDG-Desktop-Portal zur " 48 | "Verfügung" 49 | 50 | #: src/main.cpp:45 51 | #, kde-format 52 | msgid "(C) 2022 Aleix Pol Gonzalez" 53 | msgstr "Copyright 2022 Aleix Pol Gonzalez" 54 | 55 | #: src/main.cpp:47 src/main.cpp:48 56 | #, kde-format 57 | msgid "Author" 58 | msgstr "Autor" 59 | 60 | #~ msgid "Quit" 61 | #~ msgstr "Beenden" 62 | -------------------------------------------------------------------------------- /po/en_GB/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Steve Allewell , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-08 11:13+0100\n" 11 | "Last-Translator: Steve Allewell \n" 12 | "Language-Team: British English\n" 13 | "Language: en_GB\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 18 | "X-Generator: Lokalize 23.03.70\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Steve Allewell" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "steve.allewell@gmail.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland to X Recording bridge" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland Video Bridge" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Author" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "Quit" 57 | -------------------------------------------------------------------------------- /po/eo/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # translation of xwaylandvideobridge.pot to esperanto 2 | # Copyright (C) 2023 Free Software Foundation, Inc. 3 | # This file is distributed under the same license as the xwaylandvideobridge package. 4 | # Oliver Kellogg \n" 13 | "Language-Team: Esperanto \n" 14 | "Language: eo\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Oliver Kellogg" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "okellogg@users.sourceforge.net" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland al X-Registraĵa ponto" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland Video-Ponto" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "Oferti \"XDG Desktop Portals\" ekranregistraĵajn fluojn al X11-aplikoj" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Aŭtoro" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "Ĉesigi" 57 | -------------------------------------------------------------------------------- /po/es/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Spanish translations for xwaylandvideobridge.po package. 2 | # Copyright (C) 2023 This file is copyright: 3 | # This file is distributed under the same license as the xwaylandvideobridge package. 4 | # 5 | # Automatically generated, 2023. 6 | # Eloy Cuadra , 2023. 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: xwaylandvideobridge\n" 10 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 11 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 12 | "PO-Revision-Date: 2023-04-08 00:13+0200\n" 13 | "Last-Translator: Eloy Cuadra \n" 14 | "Language-Team: Spanish \n" 15 | "Language: es\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 20 | "X-Generator: Lokalize 23.03.90\n" 21 | 22 | #, kde-format 23 | msgctxt "NAME OF TRANSLATORS" 24 | msgid "Your names" 25 | msgstr "Eloy Cuadra" 26 | 27 | #, kde-format 28 | msgctxt "EMAIL OF TRANSLATORS" 29 | msgid "Your emails" 30 | msgstr "ecuadra@eloihr.net" 31 | 32 | #: src/contentswindow.cpp:51 33 | #, kde-format 34 | msgid "Wayland to X Recording bridge" 35 | msgstr "Pasarela de grabación de Wayland a X" 36 | 37 | #: src/main.cpp:44 38 | #, kde-format 39 | msgid "Xwayland Video Bridge" 40 | msgstr "Pasarela de vídeo Xwayland" 41 | 42 | #: src/main.cpp:44 43 | #, kde-format 44 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 45 | msgstr "" 46 | "Ofrecer emisiones de vídeo de los portales de escritorio XDG a las " 47 | "aplicaciones de X11" 48 | 49 | #: src/main.cpp:45 50 | #, kde-format 51 | msgid "(C) 2022 Aleix Pol Gonzalez" 52 | msgstr "© 2022 Aleix Pol Gonzalez" 53 | 54 | #: src/main.cpp:47 src/main.cpp:48 55 | #, kde-format 56 | msgid "Author" 57 | msgstr "Autor" 58 | 59 | #~ msgid "Quit" 60 | #~ msgstr "Salir" 61 | -------------------------------------------------------------------------------- /po/eu/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Translation for xwaylandvideobridge.po to Euskara/Basque (eu). 2 | # Copyright (C) 2023 This file is copyright: 3 | # This file is distributed under the same license as the xwaylandvideobridge package. 4 | # KDE euskaratzeko proiektuko arduraduna . 5 | # 6 | # Translators: 7 | # Iñigo Salvador Azurmendi , 2023. 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: xwaylandvideobridge\n" 11 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 12 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 13 | "PO-Revision-Date: 2023-04-14 00:30+0200\n" 14 | "Last-Translator: Iñigo Salvador Azurmendi \n" 15 | "Language-Team: Basque \n" 16 | "Language: eu\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | "X-Generator: Lokalize 22.12.3\n" 22 | 23 | #, kde-format 24 | msgctxt "NAME OF TRANSLATORS" 25 | msgid "Your names" 26 | msgstr "Iñigo Salvador Azurmendi" 27 | 28 | #, kde-format 29 | msgctxt "EMAIL OF TRANSLATORS" 30 | msgid "Your emails" 31 | msgstr "xalba@ni.eus" 32 | 33 | #: src/contentswindow.cpp:51 34 | #, kde-format 35 | msgid "Wayland to X Recording bridge" 36 | msgstr "«Wayland»etik «X»ra grabatzeko zubia" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Xwayland Video Bridge" 41 | msgstr "Xwayland bideo zubia" 42 | 43 | #: src/main.cpp:44 44 | #, kde-format 45 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 46 | msgstr "" 47 | "Eskaini XDG mahaigain atarien pantaila-grabazio korronteak X11 aplikazioei" 48 | 49 | #: src/main.cpp:45 50 | #, kde-format 51 | msgid "(C) 2022 Aleix Pol Gonzalez" 52 | msgstr "(C) 2022 Aleix Pol Gonzalez" 53 | 54 | #: src/main.cpp:47 src/main.cpp:48 55 | #, kde-format 56 | msgid "Author" 57 | msgstr "Egilea" 58 | 59 | #~ msgid "Quit" 60 | #~ msgstr "Irten" 61 | -------------------------------------------------------------------------------- /po/fi/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # Tommi Nieminen , 2023. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-05-08 13:50+0300\n" 11 | "Last-Translator: Tommi Nieminen \n" 12 | "Language-Team: Finnish \n" 13 | "Language: fi\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | 19 | #, kde-format 20 | msgctxt "NAME OF TRANSLATORS" 21 | msgid "Your names" 22 | msgstr "Tommi Nieminen" 23 | 24 | #, kde-format 25 | msgctxt "EMAIL OF TRANSLATORS" 26 | msgid "Your emails" 27 | msgstr "translator@legisign.org" 28 | 29 | #: src/contentswindow.cpp:51 30 | #, kde-format 31 | msgid "Wayland to X Recording bridge" 32 | msgstr "Waylandistä X:ään -talletussilta" 33 | 34 | #: src/main.cpp:44 35 | #, kde-format 36 | msgid "Xwayland Video Bridge" 37 | msgstr "Xwayland-videosilta" 38 | 39 | #: src/main.cpp:44 40 | #, kde-format 41 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 42 | msgstr "Tarjoa XDG-työpöytäportaalin näytöntoistovirtoja X11-sovelluksiin" 43 | 44 | #: src/main.cpp:45 45 | #, kde-format 46 | msgid "(C) 2022 Aleix Pol Gonzalez" 47 | msgstr "© 2022 Aleix Pol Gonzalez" 48 | 49 | #: src/main.cpp:47 src/main.cpp:48 50 | #, kde-format 51 | msgid "Author" 52 | msgstr "Tekijä" 53 | 54 | #~ msgid "Quit" 55 | #~ msgstr "Lopeta" 56 | -------------------------------------------------------------------------------- /po/fr/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Xavier Besnard 2 | # Xavier Besnard , 2023. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: xwaylandvideobridge\n" 6 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 7 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 8 | "PO-Revision-Date: 2023-12-20 09:28+0100\n" 9 | "Last-Translator: Xavier Besnard \n" 10 | "Language-Team: French \n" 11 | "Language: fr\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 16 | "X-Generator: Lokalize 23.08.4\n" 17 | 18 | #, kde-format 19 | msgctxt "NAME OF TRANSLATORS" 20 | msgid "Your names" 21 | msgstr "Xavier Besnard" 22 | 23 | #, kde-format 24 | msgctxt "EMAIL OF TRANSLATORS" 25 | msgid "Your emails" 26 | msgstr "xavier.besnard@kde.org" 27 | 28 | #: src/contentswindow.cpp:51 29 | #, kde-format 30 | msgid "Wayland to X Recording bridge" 31 | msgstr "Wayland vers un pont d'enregistrement pour X" 32 | 33 | #: src/main.cpp:44 34 | #, kde-format 35 | msgid "Xwayland Video Bridge" 36 | msgstr "Pont vidéo XWayland" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 41 | msgstr "" 42 | "Proposer des flux de diffusion d'écrans pour des portails e bureaux « XDG » " 43 | "vers les applications sous X11" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Auteur" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "Quitter" 57 | -------------------------------------------------------------------------------- /po/gl/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # Adrián Chaves (Gallaecio) , 2023. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-30 10:45+0200\n" 11 | "Last-Translator: Adrián Chaves (Gallaecio) \n" 12 | "Language-Team: Galician \n" 13 | "Language: gl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 18 | "X-Generator: Lokalize 23.04.0\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Adrian Chaves (Gallaecio)" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "adrian@chaves.gal" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Ponte de gravación de Wayland a X" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Ponte de vídeo de XWayland" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | "Ofrecer aos portais de escritorio de XDG fluxos de emisión de pantalla de " 45 | "aplicacións de X11" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "© 2022 Aleix Pol González" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "Autor" 56 | 57 | #~ msgid "Quit" 58 | #~ msgstr "Saír" 59 | -------------------------------------------------------------------------------- /po/it/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # Vincenzo Reale , 2023. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-07 08:23+0200\n" 11 | "Last-Translator: Vincenzo Reale \n" 12 | "Language-Team: Italian \n" 13 | "Language: it\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Lokalize 22.12.3\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Vincenzo Reale" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "smart2128vr@gmail.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Bridge di registrazione da Wayland a X" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Bridge video XWayland" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | "Offri i flussi di trasmissione dello schermo dei portali desktop XDG alle " 45 | "applicazioni X11" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "(C) 2022 Aleix Pol Gonzalez" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "Autore" 56 | 57 | #~ msgid "Quit" 58 | #~ msgstr "Esci" 59 | -------------------------------------------------------------------------------- /po/ja/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: xwaylandvideobridge\n" 4 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 5 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 6 | "PO-Revision-Date: 2023-04-06 00:04-0700\n" 7 | "Last-Translator: Japanese KDE translation team \n" 8 | "Language-Team: Japanese \n" 9 | "Language: ja\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=1; plural=0;\n" 14 | "X-Accelerator-Marker: &\n" 15 | "X-Text-Markup: kde4\n" 16 | 17 | #, kde-format 18 | msgctxt "NAME OF TRANSLATORS" 19 | msgid "Your names" 20 | msgstr "" 21 | 22 | #, kde-format 23 | msgctxt "EMAIL OF TRANSLATORS" 24 | msgid "Your emails" 25 | msgstr "" 26 | 27 | #: src/contentswindow.cpp:51 28 | #, kde-format 29 | msgid "Wayland to X Recording bridge" 30 | msgstr "" 31 | 32 | #: src/main.cpp:44 33 | #, kde-format 34 | msgid "Xwayland Video Bridge" 35 | msgstr "" 36 | 37 | #: src/main.cpp:44 38 | #, kde-format 39 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 40 | msgstr "" 41 | 42 | #: src/main.cpp:45 43 | #, kde-format 44 | msgid "(C) 2022 Aleix Pol Gonzalez" 45 | msgstr "" 46 | 47 | #: src/main.cpp:47 src/main.cpp:48 48 | #, kde-format 49 | msgid "Author" 50 | msgstr "" 51 | -------------------------------------------------------------------------------- /po/ka/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR This file is copyright: 3 | # This file is distributed under the same license as the xwaylandvideobridge package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: xwaylandvideobridge\n" 9 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 10 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 11 | "PO-Revision-Date: 2023-04-07 05:05+0200\n" 12 | "Last-Translator: Temuri Doghonadze \n" 13 | "Language-Team: Georgian \n" 14 | "Language: ka\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | "X-Generator: Poedit 3.2.2\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "Temuri Doghonadze" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "Temuri.doghonadze@gmail.com" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "Wayland-დან X-მდე ჩაწერის ხიდი" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "Xwayland-ის ვიდეოხიდი" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "" 45 | "X11-ის აპებისთვის XDG Desktop Portals-ის screencast ნაკადების შეთავაზება" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "(C) 2022 Aleix Pol Gonzalez" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "ავტორი" 56 | 57 | #~ msgid "Quit" 58 | #~ msgstr "გასვლა" 59 | -------------------------------------------------------------------------------- /po/ko/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # Shinjo Park , 2023. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-08-06 20:58+0200\n" 11 | "Last-Translator: Shinjo Park \n" 12 | "Language-Team: Korean \n" 13 | "Language: ko\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=1; plural=0;\n" 18 | "X-Generator: Lokalize 22.12.3\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "박신조" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "kde@peremen.name" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland to X 녹화 브리지" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland 비디오 브리지" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "XDG 데스크톱 포털에 X11 앱으로 스크린캐스트 제공" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "작성자" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "끝내기" 57 | -------------------------------------------------------------------------------- /po/nl/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Freek de Kruijf , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-06 10:40+0200\n" 11 | "Last-Translator: Freek de Kruijf \n" 12 | "Language-Team: \n" 13 | "Language: nl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 18 | "X-Generator: Lokalize 22.12.3\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Freek de Kruijf - 2023" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "freekdekruijf@kde.nl" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland naar X-opname-bridge" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland video-bridge" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | "XDG schermfilmstreams van bureaubladportalen bieden aan X11 toepassingen" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "(C) 2022 Aleix Pol Gonzalez" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "Auteur" 55 | 56 | #~ msgid "Quit" 57 | #~ msgstr "Afsluiten" 58 | -------------------------------------------------------------------------------- /po/nn/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Translation of xwaylandvideobridge to Norwegian Nynorsk 2 | # 3 | # Karl Ove Hufthammer , 2023. 4 | msgid "" 5 | msgstr "" 6 | "Project-Id-Version: xwaylandvideobridge\n" 7 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 8 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 9 | "PO-Revision-Date: 2023-08-01 21:40+0200\n" 10 | "Last-Translator: Karl Ove Hufthammer \n" 11 | "Language-Team: Norwegian Nynorsk \n" 12 | "Language: nn\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 17 | "X-Generator: Lokalize 23.04.3\n" 18 | "X-Environment: kde\n" 19 | "X-Accelerator-Marker: &\n" 20 | "X-Text-Markup: kde4\n" 21 | 22 | #, kde-format 23 | msgctxt "NAME OF TRANSLATORS" 24 | msgid "Your names" 25 | msgstr "Karl Ove Hufthammer" 26 | 27 | #, kde-format 28 | msgctxt "EMAIL OF TRANSLATORS" 29 | msgid "Your emails" 30 | msgstr "karl@huftis.org" 31 | 32 | #: src/contentswindow.cpp:51 33 | #, kde-format 34 | msgid "Wayland to X Recording bridge" 35 | msgstr "Opptaksbru for Wayland til X" 36 | 37 | #: src/main.cpp:44 38 | #, kde-format 39 | msgid "Xwayland Video Bridge" 40 | msgstr "Xwayland-videobru" 41 | 42 | #: src/main.cpp:44 43 | #, kde-format 44 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 45 | msgstr "Tilbyr XDG Desktop Portals-skjermkastings­straumar til X11-program" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "© 2022 Aleix Pol Gonzalez" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "Opphavsperson" 56 | -------------------------------------------------------------------------------- /po/pl/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Łukasz Wojniłowicz , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-10-15 11:51+0200\n" 11 | "Last-Translator: Łukasz Wojniłowicz \n" 12 | "Language-Team: Polish \n" 13 | "Language: pl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " 18 | "|| n%100>=20) ? 1 : 2);\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Łukasz Wojniłowicz" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "lukasz.wojnilowicz@gmail.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Mostek nagrywania Wayland na X" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Mostek obrazu Xwayland" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "Daj strumienie Portali Pulpitu XDG aplikacjom X11" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Autor" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "Zakończ" 57 | -------------------------------------------------------------------------------- /po/pt/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: xwaylandvideobridge\n" 4 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 5 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 6 | "PO-Revision-Date: 2023-04-06 10:25+0100\n" 7 | "Last-Translator: José Nuno Coelho Pires \n" 8 | "Language-Team: Portuguese \n" 9 | "Language: pt\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "X-POFile-SpellExtra: Wayland Xwayland Aleix Pol Gonzalez XDG Desktop\n" 14 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 15 | "X-POFile-SpellExtra: Portals\n" 16 | 17 | #, kde-format 18 | msgctxt "NAME OF TRANSLATORS" 19 | msgid "Your names" 20 | msgstr "José Nuno Pires" 21 | 22 | #, kde-format 23 | msgctxt "EMAIL OF TRANSLATORS" 24 | msgid "Your emails" 25 | msgstr "zepires@gmail.com" 26 | 27 | #: src/contentswindow.cpp:51 28 | #, kde-format 29 | msgid "Wayland to X Recording bridge" 30 | msgstr "Interface de gravação do Wayland para o X" 31 | 32 | #: src/main.cpp:44 33 | #, kde-format 34 | msgid "Xwayland Video Bridge" 35 | msgstr "Interface de Vídeo para o Xwayland" 36 | 37 | #: src/main.cpp:44 38 | #, kde-format 39 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 40 | msgstr "" 41 | "Disponibiliza transmissões do XDG Desktop Portals para as aplicações de X11" 42 | 43 | #: src/main.cpp:45 44 | #, kde-format 45 | msgid "(C) 2022 Aleix Pol Gonzalez" 46 | msgstr "(C) 2022 Aleix Pol Gonzalez" 47 | 48 | #: src/main.cpp:47 src/main.cpp:48 49 | #, kde-format 50 | msgid "Author" 51 | msgstr "Autoria" 52 | 53 | #~ msgid "Quit" 54 | #~ msgstr "Sair" 55 | -------------------------------------------------------------------------------- /po/pt_BR/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Luiz Fernando Ranghetti , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-07-05 17:15-0300\n" 11 | "Last-Translator: Luiz Fernando Ranghetti \n" 12 | "Language-Team: Brazilian Portuguese \n" 13 | "Language: pt_BR\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 18 | "X-Generator: Lokalize 22.12.3\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Luiz Fernando Ranghetti" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "elchevive@opensuse.org" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland para ponte de gravação X" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Ponte de vídeo Xwayland" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | "Oferece fluxos de screencast do XDG Desktop Portals para aplicativos X11" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "(C) 2022 Aleix Pol Gonzalez" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "Autor" 55 | 56 | #~ msgid "Quit" 57 | #~ msgstr "Sair" 58 | -------------------------------------------------------------------------------- /po/ro/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # Sergiu Bivol , 2024. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2024-02-25 19:17+0000\n" 11 | "Last-Translator: Sergiu Bivol \n" 12 | "Language-Team: Romanian \n" 13 | "Language: ro\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " 18 | "20)) ? 1 : 2;\n" 19 | "X-Generator: Lokalize 21.12.3\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "Sergiu Bivol" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "sergiu@cip.md" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "Punte de înregistrare dinspre Wayland spre X" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "Punte video XWayland" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "" 45 | "Oferă fluxuri de captură a ecranului XDG Desktop Portal pentru aplicații X11" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "(C) 2022 Aleix Pol Gonzalez" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "Autor" 56 | 57 | #~ msgid "Quit" 58 | #~ msgstr "Termină" 59 | -------------------------------------------------------------------------------- /po/sk/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # translation of xwaylandvideobridge.po to Slovak 2 | # Roman Paholík , 2023. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: xwaylandvideobridge\n" 6 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 7 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 8 | "PO-Revision-Date: 2023-04-07 08:07+0200\n" 9 | "Last-Translator: Roman Paholik \n" 10 | "Language-Team: Slovak \n" 11 | "Language: sk\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "X-Generator: Lokalize 22.12.3\n" 16 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 17 | 18 | #, kde-format 19 | msgctxt "NAME OF TRANSLATORS" 20 | msgid "Your names" 21 | msgstr "Roman Paholík" 22 | 23 | #, kde-format 24 | msgctxt "EMAIL OF TRANSLATORS" 25 | msgid "Your emails" 26 | msgstr "wizzardsk@gmail.com" 27 | 28 | #: src/contentswindow.cpp:51 29 | #, kde-format 30 | msgid "Wayland to X Recording bridge" 31 | msgstr "" 32 | 33 | #: src/main.cpp:44 34 | #, kde-format 35 | msgid "Xwayland Video Bridge" 36 | msgstr "Xwayland video most" 37 | 38 | #: src/main.cpp:44 39 | #, kde-format 40 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 41 | msgstr "" 42 | 43 | #: src/main.cpp:45 44 | #, kde-format 45 | msgid "(C) 2022 Aleix Pol Gonzalez" 46 | msgstr "(C) 2022 Aleix Pol Gonzalez" 47 | 48 | #: src/main.cpp:47 src/main.cpp:48 49 | #, kde-format 50 | msgid "Author" 51 | msgstr "Autor" 52 | 53 | #~ msgid "Quit" 54 | #~ msgstr "Ukončiť" 55 | -------------------------------------------------------------------------------- /po/sl/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Matjaž Jeran , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-07 08:03+0200\n" 11 | "Last-Translator: Matjaž Jeran \n" 12 | "Language-Team: Slovenian \n" 13 | "Language: sl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" 18 | "%100==4 ? 3 : 0);\n" 19 | "X-Generator: Lokalize 22.12.3\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "Matjaž Jeran" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "matjaz.jeran@amis.net" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "Premostitev snemalnika Wayland na X" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "Xwayland Video Bridge" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "Nudi portalom namizja XDG zaslonske tokove aplikacijam X11" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "(C) 2022 Aleix Pol Gonzalez" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "Avtor" 55 | 56 | #~ msgid "Quit" 57 | #~ msgstr "Zapusti" 58 | -------------------------------------------------------------------------------- /po/sv/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Stefan Asserhäll , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-08-18 11:17+0200\n" 11 | "Last-Translator: Stefan Asserhäll \n" 12 | "Language-Team: Swedish \n" 13 | "Language: sv\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 18 | "X-Generator: Lokalize 23.04.3\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Stefan Asserhäll" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "stefan.asserhall@gmail.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland till X inspelningsbrygga" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland videobrygga" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "" 44 | "Tillhandahåll XDG-skrivbordsportalens skärmsändningsströmmar till X11-program" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "© 2022 Aleix Pol Gonzalez" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "Upphovsman" 55 | 56 | #~ msgid "Quit" 57 | #~ msgstr "Avsluta" 58 | -------------------------------------------------------------------------------- /po/tr/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2024 This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # SPDX-FileCopyrightText: 2023, 2024 Emir SARI 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2024-09-23 15:31+0300\n" 11 | "Last-Translator: Emir SARI \n" 12 | "Language-Team: Turkish \n" 13 | "Language: tr\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 18 | "X-Generator: Lokalize 24.11.70\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Emir SARI" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "emir_sari@icloud.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland’den X’e Kayıt Köprüsü" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland Video Köprüsü" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "X11 uygulamalarına XDG Masaüstü Portalları ekran yayını akışları sun" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "© 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "Yazar" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "Çık" 57 | -------------------------------------------------------------------------------- /po/uk/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # Yuri Chornoivan , 2023. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-04-06 07:45+0300\n" 11 | "Last-Translator: Yuri Chornoivan \n" 12 | "Language-Team: Ukrainian \n" 13 | "Language: uk\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 18 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 19 | "X-Generator: Lokalize 20.12.0\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "Юрій Чорноіван" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "yurchor@ukr.net" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "Місток запису від Wayland до X" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "Відеомісток Xwayland" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "" 45 | "Надає змогу порталам стільниці XDG транслювати потоки даних до програм X11" 46 | 47 | #: src/main.cpp:45 48 | #, kde-format 49 | msgid "(C) 2022 Aleix Pol Gonzalez" 50 | msgstr "© Aleix Pol Gonzalez, 2022" 51 | 52 | #: src/main.cpp:47 src/main.cpp:48 53 | #, kde-format 54 | msgid "Author" 55 | msgstr "Автор" 56 | 57 | #~ msgid "Quit" 58 | #~ msgstr "Вийти" 59 | -------------------------------------------------------------------------------- /po/zh_CN/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: kdeorg\n" 4 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 5 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 6 | "PO-Revision-Date: 2024-04-22 16:06\n" 7 | "Last-Translator: \n" 8 | "Language-Team: Chinese Simplified\n" 9 | "Language: zh_CN\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=1; plural=0;\n" 14 | "X-Crowdin-Project: kdeorg\n" 15 | "X-Crowdin-Project-ID: 269464\n" 16 | "X-Crowdin-Language: zh-CN\n" 17 | "X-Crowdin-File: /kf5-trunk/messages/xwaylandvideobridge/xwaylandvideobridge." 18 | "pot\n" 19 | "X-Crowdin-File-ID: 42107\n" 20 | 21 | #, kde-format 22 | msgctxt "NAME OF TRANSLATORS" 23 | msgid "Your names" 24 | msgstr "Tyson Tan" 25 | 26 | #, kde-format 27 | msgctxt "EMAIL OF TRANSLATORS" 28 | msgid "Your emails" 29 | msgstr "tds00@qq.com" 30 | 31 | #: src/contentswindow.cpp:51 32 | #, kde-format 33 | msgid "Wayland to X Recording bridge" 34 | msgstr "Wayland 到 X 录像桥接程序" 35 | 36 | #: src/main.cpp:44 37 | #, kde-format 38 | msgid "Xwayland Video Bridge" 39 | msgstr "Xwayland 视频桥接程序" 40 | 41 | #: src/main.cpp:44 42 | #, kde-format 43 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 44 | msgstr "将 XDG 桌面门户屏幕录像视频流提供给 X11 应用程序" 45 | 46 | #: src/main.cpp:45 47 | #, kde-format 48 | msgid "(C) 2022 Aleix Pol Gonzalez" 49 | msgstr "(C) 2022 Aleix Pol Gonzalez" 50 | 51 | #: src/main.cpp:47 src/main.cpp:48 52 | #, kde-format 53 | msgid "Author" 54 | msgstr "作者" 55 | -------------------------------------------------------------------------------- /po/zh_TW/xwaylandvideobridge.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2023 This file is copyright: 2 | # This file is distributed under the same license as the xwaylandvideobridge package. 3 | # 4 | # SPDX-FileCopyrightText: 2023 Kisaragi Hiu 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: xwaylandvideobridge\n" 8 | "Report-Msgid-Bugs-To: https://bugs.kde.org\n" 9 | "POT-Creation-Date: 2024-12-31 01:55+0000\n" 10 | "PO-Revision-Date: 2023-12-24 05:04+0900\n" 11 | "Last-Translator: Kisaragi Hiu \n" 12 | "Language-Team: Traditional Chinese \n" 13 | "Language: zh_TW\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=1; plural=0;\n" 18 | "X-Generator: Lokalize 23.08.4\n" 19 | 20 | #, kde-format 21 | msgctxt "NAME OF TRANSLATORS" 22 | msgid "Your names" 23 | msgstr "Kisaragi Hiu" 24 | 25 | #, kde-format 26 | msgctxt "EMAIL OF TRANSLATORS" 27 | msgid "Your emails" 28 | msgstr "mail@kisaragi-hiu.com" 29 | 30 | #: src/contentswindow.cpp:51 31 | #, kde-format 32 | msgid "Wayland to X Recording bridge" 33 | msgstr "Wayland 到 X 的錄製橋接" 34 | 35 | #: src/main.cpp:44 36 | #, kde-format 37 | msgid "Xwayland Video Bridge" 38 | msgstr "Xwayland 影像橋接" 39 | 40 | #: src/main.cpp:44 41 | #, kde-format 42 | msgid "Offer XDG Desktop Portals screencast streams to X11 apps" 43 | msgstr "提供 XDG Desktop Portals 螢幕錄製串流給 X11 應用程式" 44 | 45 | #: src/main.cpp:45 46 | #, kde-format 47 | msgid "(C) 2022 Aleix Pol Gonzalez" 48 | msgstr "(C) 2022 Aleix Pol Gonzalez" 49 | 50 | #: src/main.cpp:47 src/main.cpp:48 51 | #, kde-format 52 | msgid "Author" 53 | msgstr "作者" 54 | 55 | #~ msgid "Quit" 56 | #~ msgstr "離開" 57 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: BSD-3-Clause 2 | # SPDX-FileCopyrightText: 2023 David Edmundson 3 | # SPDX-FileCopyrightText: 2023 Aleix Pol 4 | 5 | add_executable(xwaylandvideobridge) 6 | 7 | qt_add_dbus_interface( 8 | XDP_SRCS 9 | org.freedesktop.portal.ScreenCast.xml 10 | xdp_dbus_screencast_interface 11 | ) 12 | 13 | ecm_qt_install_logging_categories(EXPORT XWAYLANDVIDEOBRIDGE FILE xwaylandvideobridge.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) 14 | ecm_qt_declare_logging_category(XDP_SRCS HEADER xwaylandvideobridge_debug.h IDENTIFIER XWAYLANDBRIDGE CATEGORY_NAME org.kde.xwaylandvideobridge DESCRIPTION "Xwayland Video Bridge" EXPORT XWAYLANDVIDEOBRIDGE) 15 | 16 | target_sources(xwaylandvideobridge PRIVATE 17 | main.cpp 18 | xwaylandvideobridge.cpp xwaylandvideobridge.h 19 | contentswindow.cpp contentswindow.h 20 | x11recordingnotifier.cpp x11recordingnotifier.h 21 | ${XDP_SRCS} 22 | ) 23 | 24 | configure_file(version.h.in version.h) 25 | 26 | target_link_libraries(xwaylandvideobridge 27 | KF${QT_MAJOR_VERSION}::I18n 28 | KF${QT_MAJOR_VERSION}::CoreAddons 29 | KF${QT_MAJOR_VERSION}::WindowSystem 30 | KF${QT_MAJOR_VERSION}::Crash 31 | Qt${QT_MAJOR_VERSION}::Quick 32 | Qt${QT_MAJOR_VERSION}::DBus 33 | Qt${QT_MAJOR_VERSION}::Widgets 34 | K::KPipeWireRecord 35 | XCB::XCB 36 | XCB::COMPOSITE 37 | XCB::RECORD 38 | ) 39 | 40 | if(QT_MAJOR_VERSION STREQUAL "6") 41 | target_link_libraries(xwaylandvideobridge Qt6::GuiPrivate) 42 | elseif(QT_MAJOR_VERSION STREQUAL "5") 43 | target_link_libraries(xwaylandvideobridge Qt5::X11Extras) 44 | endif() 45 | 46 | install(TARGETS xwaylandvideobridge ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) 47 | install(PROGRAMS org.kde.xwaylandvideobridge.desktop DESTINATION ${KDE_INSTALL_APPDIR}) 48 | install(FILES org.kde.xwaylandvideobridge.desktop DESTINATION ${KDE_INSTALL_AUTOSTARTDIR}) 49 | install(FILES org.kde.xwaylandvideobridge.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) 50 | -------------------------------------------------------------------------------- /src/contentswindow.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 David Edmundson 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | * SPDX-FileCopyrightText: 2023 David Edmundson 6 | * SPDX-FileCopyrightText: 2023 Aleix Pol 7 | */ 8 | 9 | #include "contentswindow.h" 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 16 | #include 17 | #else 18 | #include 19 | #endif 20 | 21 | struct MotifHints 22 | { 23 | u_int32_t flags = 0; 24 | u_int32_t functions = 0; 25 | u_int32_t decorations = 0; 26 | int32_t inputMode = 0; 27 | u_int32_t status = 0; 28 | }; 29 | 30 | struct GtkFrameExtents 31 | { 32 | uint32_t left = 0; 33 | uint32_t right = 0; 34 | uint32_t top = 0; 35 | uint32_t bottom = 0; 36 | }; 37 | 38 | static xcb_atom_t intern_atom(xcb_connection_t *c, const char *name) 39 | { 40 | xcb_atom_t atom = XCB_NONE; 41 | QScopedPointer reply(xcb_intern_atom_reply(c, xcb_intern_atom(c, false, strlen(name), name), nullptr)); 42 | if (reply) { 43 | atom = reply->atom; 44 | } 45 | return atom; 46 | } 47 | 48 | ContentsWindow::ContentsWindow() 49 | { 50 | resize(QSize(100, 100)); 51 | setTitle(i18n("Wayland to X Recording bridge")); 52 | 53 | setOpacity(0); 54 | setFlag(Qt::Dialog); 55 | setFlag(Qt::WindowDoesNotAcceptFocus); 56 | setFlag(Qt::WindowTransparentForInput); 57 | #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 58 | KX11Extras::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher); 59 | #else 60 | KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher); 61 | #endif 62 | 63 | // remove decoration. We can't use the Qt helper as we need our window type to remain something 64 | // that keeps us valid for streams 65 | MotifHints hints; 66 | hints.flags = 2; 67 | xcb_atom_t motif_hints_atom = intern_atom(QX11Info::connection(), "_MOTIF_WM_HINTS"); 68 | xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, winId(), motif_hints_atom, motif_hints_atom, 32, 5, (const void *)&hints); 69 | 70 | handleResize(); 71 | } 72 | 73 | void ContentsWindow::resize(const QSize &size) 74 | { 75 | if (size.isEmpty()) { 76 | return; 77 | } 78 | QQuickWindow::resize(size); 79 | handleResize(); 80 | } 81 | 82 | void ContentsWindow::handleResize() 83 | { 84 | // In theory this isn't needed - we're transparent for input, but a bug in either Xorg or kwin means 85 | // that it doesn't. If we forward to X it falls to the X window underneath, but kwin still "knows" theres 86 | // an xwayland surface there and sends to X and not the right client 87 | // Solvable by either kwin checking event mask or Xserver setting a null input_region based on the event mask 88 | 89 | // but I want things now! so instead do a hack of moving things offscreen 90 | // hopefully drop for a Plasma 6 91 | 92 | // if we blindly just set oursevles to offscreen, kwin will try to position us back 93 | // if we set override-redirect screencast clients skip us. 94 | 95 | // frames can be offscreen though, so lets make the whole window part of the frame and then 96 | // put that bit of "frame" offscreen 97 | 98 | // Don't let window manager devs see this 99 | GtkFrameExtents frame; 100 | frame.top = height() - 1; 101 | frame.left = width() -1 ; 102 | setX(-width() + 1); // unforutnately we still need 1px on screen to get callbacks 103 | 104 | xcb_atom_t gtk_frame_extent_atom = intern_atom(QX11Info::connection(), "_GTK_FRAME_EXTENTS"); 105 | xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, winId(), gtk_frame_extent_atom, XCB_ATOM_CARDINAL, 32, 4, (const void *)&frame); 106 | } 107 | -------------------------------------------------------------------------------- /src/contentswindow.h: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 3 | * SPDX-FileCopyrightText: 2023 Aleix Pol 4 | */ 5 | 6 | #pragma once 7 | 8 | #include 9 | #include 10 | 11 | class ContentsWindow : public QQuickWindow 12 | { 13 | Q_OBJECT 14 | public: 15 | ContentsWindow(); 16 | 17 | //shadow super class 18 | void resize(const QSize &size); 19 | private: 20 | void handleResize(); 21 | }; 22 | 23 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * App to render feeds coming from xdg-desktop-portal 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | * SPDX-FileCopyrightText: 2023 David Edmundson 6 | * SPDX-FileCopyrightText: 2023 Aleix Pol 7 | */ 8 | 9 | #include "xwaylandvideobridge.h" 10 | #include "version.h" 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | #include 18 | #include 19 | #include 20 | 21 | int main(int argc, char **argv) 22 | { 23 | if (qgetenv("XDG_SESSION_TYPE") == "x11") { 24 | return 0; 25 | } 26 | qputenv("QT_QPA_PLATFORM", "xcb"); 27 | qputenv("QT_XCB_GL_INTEGRATION", "xcb_egl"); 28 | 29 | qputenv("QT_QPA_UPDATE_IDLE_TIME", "0"); 30 | qputenv("QSG_RENDER_LOOP", "basic"); 31 | QApplication app(argc, argv); // widgets are needed just for the SNI. 32 | #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 33 | app.setAttribute(Qt::AA_UseHighDpiPixmaps); 34 | #endif 35 | 36 | auto disableSessionManagement = [](QSessionManager &sm) { 37 | sm.setRestartHint(QSessionManager::RestartNever); 38 | }; 39 | QObject::connect(&app, &QGuiApplication::commitDataRequest, disableSessionManagement); 40 | QObject::connect(&app, &QGuiApplication::saveStateRequest, disableSessionManagement); 41 | 42 | KLocalizedString::setApplicationDomain("xwaylandvideobridge"); 43 | { 44 | KAboutData about("xwaylandvideobridge", i18n("Xwayland Video Bridge"), version, i18n("Offer XDG Desktop Portals screencast streams to X11 apps"), 45 | KAboutLicense::GPL, i18n("(C) 2022 Aleix Pol Gonzalez")); 46 | 47 | about.addAuthor("Aleix Pol Gonzalez", i18n("Author"), "aleixpol@kde.org" ); 48 | about.addAuthor("David Edmundson", i18n("Author"), "davidedmundson@kde.org" ); 49 | 50 | KAboutData::setApplicationData(about); 51 | QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("xwaylandvideobridge"), app.windowIcon())); 52 | 53 | KCrash::initialize(); 54 | 55 | QCommandLineParser parser; 56 | about.setupCommandLine(&parser); 57 | parser.process(app); 58 | about.processCommandLine(&parser); 59 | 60 | new XwaylandVideoBridge(&app); 61 | } 62 | return app.exec(); 63 | } 64 | -------------------------------------------------------------------------------- /src/org.freedesktop.portal.ScreenCast.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 16 | 17 | 59 | 60 | 61 | 62 | 63 | 64 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 293 | 294 | 308 | 309 | 310 | 311 | 312 | -------------------------------------------------------------------------------- /src/org.kde.xwaylandvideobridge.appdata.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | org.kde.xwaylandvideobridge.desktop 9 | CC0-1.0 10 | LicenseRef-KDE-Accepted-GPL 11 | Xwayland Video Bridge 12 | جسر فيديو ويلاند_اكس 13 | Pont de vídeo de l'Xwayland 14 | Pont de vídeo d'XWayland 15 | Propojení videa Xwayland 16 | Xwayland-Video-Brücke 17 | Xwayland Video Bridge 18 | Xwayland Video-Ponto 19 | Pasarela de vídeo Xwayland 20 | Xwayland bideo zubia 21 | Xwayland-videosilta 22 | Pont vidéo XWayland 23 | Ponte de vídeo de XWayland 24 | Bridge video Xwayland 25 | Xwayland-ის ვიდეოხიდი 26 | Xwayland 비디오 브리지 27 | Xwayland video-bridge 28 | Xwayland-videobru 29 | Mostek obrazu Xwayland 30 | Interface de Vídeo para o Xwayland 31 | Ponte de vídeo Xwayland 32 | Punte video XWayland 33 | Xwayland video most 34 | Xwayland Video Bridge 35 | Xwayland videobrygga 36 | Xwayland Video Köprüsü 37 | Відеомісток Xwayland 38 | xxXwayland Video Bridgexx 39 | Xwayland 视频桥接程序 40 | Xwayland 影像橋接 41 | Offer XDG Desktop Portals screencast streams to X11 apps 42 | يوفر دفق بث بوابة XDG لسطح المكتب لتطبيقات اكس11 43 | Ofereix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a les aplicacions X11 44 | Oferix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a les aplicacions X11 45 | Stellt X11-Anwendungen XDG-Desktop-Portal-Bildschirmaufnahme-Streams zur Verfügung 46 | Offer XDG Desktop Portals screencast streams to X11 apps 47 | Oferti "XDG Desktop Portals" ekranregistraĵajn fluojn al X11-aplikoj 48 | Ofrecer emisiones de vídeo de los portales de escritorio XDG a las aplicaciones de X11 49 | Eskaini XDG mahaigain atarien pantaila-grabazio korronteak X11 aplikazioei 50 | Tarjoa XDG-työpöytäportaalin näytöntoistovirtoja X11-sovelluksiin 51 | Proposer des flux de diffusion d'écrans pour des portails e bureaux « XDG » vers les applications sous X11 52 | Ofrecer aos portais de escritorio de XDG fluxos de emisión de pantalla de aplicacións de X11. 53 | Menawarkan streaming screencast Portal Desktop XDG ke aplikasi X11 54 | Offri i flussi di trasmissione dello schermo dei portali desktop XDG alle applicazioni X11 55 | X11-ის აპებისთვის XDG Desktop Portals-ის screencast ნაკადების შეთავაზება 56 | XDG 데스크톱 포털에 X11 앱으로 스크린캐스트 제공 57 | XDG schermfilmstreams van bureaubladportalen bieden aan X11 toepassingen 58 | Tilbyr XDG Desktop Portals-skjermkastings­straumar til X11-program 59 | Daj strumienie Portali Pulpitu XDG aplikacjom X11 60 | Disponibiliza transmissões do XDG Desktop Portals para as aplicações de X11 61 | Oferece fluxos de screencast do XDG Desktop Portals para aplicativos X11 62 | Oferă fluxuri de captură a ecranului XDG Desktop Portal pentru aplicații X11 63 | Nudi portalom namizja XDG zaslonske tokove aplikacijam X11 64 | Tillhandahåll XDG-skrivbordsportalens skärmsändningsströmmar till X11-program 65 | X11 uygulamalarına XDG Masaüstü Portalları ekran yayını akışları sun 66 | Надає змогу порталам стільниці XDG транслювати потоки даних до програм X11 67 | xxOffer XDG Desktop Portals screencast streams to X11 appsxx 68 | 将 XDG 桌面门户屏幕录像视频流提供给 X11 应用程序 69 | 提供 XDG Desktop Portals 螢幕錄製串流給 X11 應用程式 70 | 71 |

Many X11 apps will be using X11 mechanisms to share the contents of other applications and displays. In recent years we have created XDG Desktop Portals as the mechanism to provide this functionality and it's what we expect apps to be using. This application will provide the streams available to the XDG Desktop Portals to your legacy X11 apps that have not adopted the new system.

72 |

ستستخدم العديد من تطبيقات اكس١١ آليات اكس١١ لمشاركة محتويات التطبيقات والشاشات الأخرى في السنوات الأخيرة، أنشأنا بوابات XDG لسطح المكتب كآلية لتوفير هذه الوظيفة وهو ما نتوقع أن تستخدمه التطبيقات. سيوفر هذا التطبيق التدفقات المتاحة لبوابات سطح المكتب XDG لتطبيقات اكس١١ القديمة التي لم تعتمد النظام الجديد.

73 |

Moltes aplicacions X11 estaran utilitzant els mecanismes X11 per a compartir el contingut d'altres aplicacions i pantalles. En els darrers anys hem creat els «XDG Desktop Portals» com un mecanisme de proporcionar aquesta funcionalitat i és el que esperem que les aplicacions facin servir. Aquesta aplicació proporcionarà els fluxos disponibles per als «XDG Desktop Portals» a les vostres aplicacions X11 antigues que encara no hagin adoptat el sistema nou.

74 |

Moltes aplicacions X11 estaran utilitzant els mecanismes X11 per a compartir el contingut d'altres aplicacions i pantalles. En els darrers anys hem creat els «XDG Desktop Portals» com un mecanisme de proporcionar esta característica i és el que esperem que les aplicacions facen servir. Esta aplicació proporcionarà els fluxos disponibles per als «XDG Desktop Portals» a les vostres aplicacions X11 antigues que encara no hagen adoptat el sistema nou.

75 |

Viele X11-Anwendungen werden X11-Mechanismen verwenden, um Inhalte von anderen Anwendungen und Bildschirmen zu teilen. In den letzten Jahre haben wir XDG-Desktop-Portale als Mechanismus zur Bereitstellung dieser Funktionalität geschaffen und wir erwarten, dass Anwendungen diesen Mechanismus nutzen werden. Diese Anwendung stellt die für die XDG-Desktop-Portale verfügbaren Streams für Ihre alten X11-Anwendungen bereit, welche das neue System noch nicht übernommen haben.

76 |

Many X11 apps will be using X11 mechanisms to share the contents of other applications and displays. In recent years we have created XDG Desktop Portals as the mechanism to provide this functionality and it's what we expect apps to be using. This application will provide the streams available to the XDG Desktop Portals to your legacy X11 apps that have not adopted the new system.

77 |

Multaj X11-aplikoj uzos X11-mekanismojn por kunhavigi la enhavon de aliaj aplikaĵoj kaj ekranoj. En la lastaj jaroj ni kreis XDG Desktop Portals kiel la mekanismon por provizi ĉi tiun funkcion kaj estas tio, kion ni atendas, ke aplikaĵoj uzu. Ĉi tiu aplikaĵo provizos la fluojn disponeblajn al la XDG-Labortablaj Portaloj al viaj heredaĵaj X11-aplikoj, kiuj ne adoptis la novan sistemon.

78 |

Muchas aplicaciones de X11 usarán mecanismos de X11 para compartir el contenido de otras aplicaciones y pantallas. En los últimos años, hemos creado los portales de escritorio XDG como el mecanismo para proporcionar esta funcionalidad y es lo que esperamos que usen las aplicaciones. Esta aplicación proporcionará las transmisiones disponibles para los portales de escritorio XDG a las aplicaciones X11 heredadas que no han adoptado el nuevo sistema.

79 |

X11 aplikazio askok X11 mekanismoak erabiliko dituzte beste aplikazio eta bistaratzaile batzuen edukia partekatzeko. Azken urteetan XDG mahaigaineko atariak sortu ditugu funtzionalitate hori emateko mekanismo gisa, eta espero dugu aplikazioek haiek erabiltzea. Aplikazio horrek XDG mahaigaineko atarietarako eskuragarri dauden korronteak emango dizkie sistema berria hartu ez duten X11 ondare aplikazioei.

80 |

Monet X11-sovellukset käyttävät X11-mekanismeja sisältönsä jakamiseksi toisiin sovelluksiin ja toisille näytöille. Toiminnallisuutta tarjoamiseksi on viime vuosina luotu XDG-työpöytäportaalit, joita sovellusten odotetaan käytettävän. Tämä sovellus tarjoaa XDG-työpöytäportaalissa saatavilla oleva virrat vanhoille X11-sovelluksille, jotka eivät ole ottaneet käyttöön uutta järjestelmää.

81 |

De nombreuses applications fonctionnant sous X11 utiliseront les mécanismes sous X11 pour partager le contenu d'autres applications et affichages. Ces dernières années, les portails de bureaux « XDG » ont été créés comme le mécanisme pour fournir cette fonctionnalité. Ce mécanisme devrait être utilisé dans l'avenir par les applications. Il fournira les flux disponibles pour les portails de bureau « XDG » à vos anciennes applications sous X11 n'ayant pas adopter ce nouveau mécanisme.

82 |

Moitas aplicacións de X11 usarán mecanismos de X11 para compartir o contido doutras aplicacións e pantallas. Nos últimos anos creamos os portais de escritorio de XDG como mecanismo para fornecer esta funcionalidade e é o que esperamos que usen as aplicacións. Esta aplicación fornecerá os fluxos dispoñíbeis para os portais de escritorio de XDG ás aplicacións antigas de X11 que non adoptaron o novo sistema.

83 |

Banyak aplikasi X11 akan menggunakan mekanisme X11 untuk berbagi konten aplikasi dan tampilan lain. Dalam beberapa tahun terakhir, kami telah membuat Portal Desktop XDG sebagai mekanisme untuk menyediakan fungsionalitas ini dan itulah yang kami harapkan akan digunakan oleh aplikasi. Aplikasi ini akan menyediakan stream yang tersedia di Portal Desktop XDG ke aplikasi X11 lama Anda yang belum mengadopsi sistem baru.

84 |

Molte applicazioni X11 utilizzeranno meccanismi di X11 per condividere i contenuti di altre applicazioni e schermi. Negli ultimi anni abbiamo creato portali desktop XDG come meccanismo per fornire questa funzionalità ed è ciò che ci aspettiamo che le applicazioni utilizzino. Questa applicazione fornirà i flussi disponibili per i portali desktop XDG alle tue applicazioni X11 obsolete che non hanno adottato il nuovo sistema.

85 |

X11-ის ბევრი აპი იყენებს X11-ის მექანიზმს სხვადასხვა მონაცემების სხვა პროგრამებისთვის გასაზიარებლად. ბოლო წლებში ჩვენ შევქმენით XDG Desktop Portals, როგორც მექანიზმი, რათა ეს ფუნქციონალი მოგვეწოდებინა და მოველით, რომ აპები მას გამოიყენებენ. ეს აპლიკაცია XDG Desktop Portals-სთვის ხელმისაწვდომ ნაკადებს თქვენს მოძველებულ X11-ის აპებს, რომლებსაც ახალი სისტემის მხარდაჭერა ჯერ გააჩნიათ, გაუზიარებს.

86 |

여러 X11 앱에서는 다른 앱과 디스플레이의 내용을 공유할 때 X11 메커니즘을 사용합니다. 최근에는 XDG 데스크톱 포털에 화면 공유 기능이 추가되었고, 장기적으로 이 기능을 사용할 것을 예상하고 있습니다. 이 앱에서는 XDG 데스크톱 포털에서 제공하는 스트림을 포털을 사용하지 않는 레거시 X11 앱으로 전달합니다.

87 |

Veel X11 toepassingen zullen X11-mechanismen gebruiken om de inhoud van andere toepassen en schermen te delen. In recente jaren hebben we XDG bureaubladportalen als het mechanisme gebruikt om deze functionaliteit te leveren en het is wat we verwachten dat toepassingen gebruiken. Deze toepassing zal de streams beschikbaar aan de XDG bureaubladportalen leveren aan uw oudere X11-toepassingen die niet aan het nieuwe systeem zijn aangepast.

88 |

Mange X11-program bukar X11-mekanismar for å dela innhald frå andre program og skjermar. Dei siste åra har me laga såkalla XDG Desktop Portals som mekanisme for slik funksjonalitet, og det er dette me ventar at programma brukar. Programmet her gjev tilgang til straumar som er tilgjengelege for XDG Desktop Portals, til eldre X11-program som ikkje er tilpassa dette systemet.

89 |

Wiele aplikacji X11 będzie używać mechanizmów X11 do współdzielenia treści z innymi aplikacjami i wyświetlaczami. W ostatnich latach stworzyliśmy Portale Pulpitów XDG jako mechanizm do zapewnienia tej możliwości i oczekujemy, że właśnie tego będą używać aplikacji. Ta aplikacja dostarczy strumienie dostępne Portalom Pulpitów XDG twoim przestarzałym aplikacjom X11, które nie przeszły na nowy system.

90 |

Muitos aplicativos X11 usarão mecanismos X11 para compartilhar o conteúdo de outros aplicativos e telas. Nos últimos anos, criamos o XDG Desktop Portals como o mecanismo para fornecer essa funcionalidade e é o que esperamos que os aplicativos usem. Este aplicativo fornecerá os fluxos disponíveis do XDG Desktop Portals para seus aplicativos X11 antigos que não adotaram o novo sistema.

91 |

Multe aplicații X11 vor folosi mecanisme X11 pentru a partaja conținutul altor aplicații și afișaje. În ultimii ani, am creat XDG Desktop Portal ca mecanism de furnizare a acestei funcționalități și ne așteptăm ca aplicațiile să-l folosească. Această aplicație va oferi fluxurile disponibile pentru Portalul XDG aplicațiilor X11 moștenite ce nu au adoptat noul sistem.

92 |

Številne aplikacije X11 bodo uporabljale mehanizme X11 za skupno rabo vsebin drugih aplikacij in prikazov. V zadnjih letih smo ustvarili portale namizja XDG Portali kot mehanizem za zagotavljanje te funkcionalnosti in pričakujemo, da ga bodo aplikacije tudi uporabljale. Ta aplikacija bo zagotovila tokove na voljo na portalih namizja XDG za vaše podedovane aplikacije X11, ki se še niso prilagodile na novi sistem.

93 |

Många X11-program använder X11-mekanismer för att dela innehåll från andra program och skärmar. Under de senaste åren har vi skapat XDG-skrivbordsportaler som mekanismen för att tillhandahålla den funktionaliteten och det är vad vi förväntar oss att program ska använda. Det här programmet tillhandahåller de strömmar som är tillgängliga för XDG-skrivbordsportaler till äldre X11-program som inte har antagit det nya systemet.

94 |

Birçok X11 uygulaması, diğer uygulamaların ve ekranların içeriklerini paylaşmak için X11 mekanizmalarını kullanır. Son yıllarda, bu işlevselliği sağlamak için mekanizma olarak XDG Masaüstü Portalları’nı oluşturduk ve uygulamaların bunu kullanmasını bekliyoruz. Bu uygulama, XDG Masaüstü Portalları’nda var olan akışları, yeni sistemi benimsememiş eski X11 uygulamalarınıza sağlayacaktır.

95 |

Багато програм X11 використовують механізми X11 для оприлюднення даних інших програм та дисплеїв. Протягом останніх років ми створили портали стільниць XDG як механізм надання цих функціональних можливостей, і саме ними мають користуватися програми. Ця програма надає доступ до потоків даних порталів XDG ваших застарілим програмам X11, які не адаптовано до нової системи.

96 |

xxMany X11 apps will be using X11 mechanisms to share the contents of other applications and displays. In recent years we have created XDG Desktop Portals as the mechanism to provide this functionality and it's what we expect apps to be using. This application will provide the streams available to the XDG Desktop Portals to your legacy X11 apps that have not adopted the new system.xx

97 |

许多 X11 应用程序会使用 X11 的机制来分享其他应用程序和显示器中的内容。为了取代上述机制并提供相同的功能,我们开发了 XDG 桌面门户程序,并默认应用程序会使用它。此应用程序用于将 XDG 桌面门户程序中的可用视频流提供给尚未适配新系统的旧式 X11 应用程序。

98 |

許多 X11 應用程式會使用 X11 的機制來分享其他應用程式和螢幕的內容。近年來我們建立了 XDG Desktop Portals 作為提供這個功能的機制,而這也是我們預期應用程式會使用的。這個應用程式提供 XDG 桌面入口可用的串流給您尚未改用新系統的舊式 X11 應用程式。

99 |
100 | https://invent.kde.org/system/xwaylandvideobridge 101 | https://bugs.kde.org/enter_bug.cgi?product=XWaylandVideoBridge 102 | https://www.kde.org/community/donations 103 | 104 | xwaylandvideobridge 105 | 106 | KDE 107 | 108 | 109 | 110 |
111 | -------------------------------------------------------------------------------- /src/org.kde.xwaylandvideobridge.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | StartupNotify=false 3 | X-KDE-autostart-phase=2 4 | X-GNOME-Autostart-enabled=true 5 | NoDisplay=true 6 | 7 | Type=Application 8 | Name=Xwayland Video Bridge 9 | Name[ar]=جسر فيديو ويلاند_اكس 10 | Name[ca]=Pont de vídeo de l'Xwayland 11 | Name[ca@valencia]=Pont de vídeo d'XWayland 12 | Name[cs]=Propojení videa Xwayland 13 | Name[de]=Xwayland-Video-Brücke 14 | Name[en_GB]=Xwayland Video Bridge 15 | Name[eo]=Xwayland Video-Ponto 16 | Name[es]=Pasarela de vídeo Xwayland 17 | Name[eu]=Xwayland bideo zubia 18 | Name[fi]=Xwayland-videosilta 19 | Name[fr]=Pont vidéo XWayland 20 | Name[gl]=Ponte de vídeo de XWayland 21 | Name[it]=Bridge video Xwayland 22 | Name[ka]=Xwayland-ის ვიდეოხიდი 23 | Name[ko]=Xwayland 비디오 브리지 24 | Name[nl]=Xwayland video-bridge 25 | Name[nn]=Xwayland-videobru 26 | Name[pl]=Mostek obrazu Xwayland 27 | Name[pt]=Interface de Vídeo para o Xwayland 28 | Name[pt_BR]=Ponte de vídeo Xwayland 29 | Name[ro]=Punte video XWayland 30 | Name[sk]=Xwayland video most 31 | Name[sl]=Xwayland Video Bridge 32 | Name[sv]=Xwayland videobrygga 33 | Name[tr]=Xwayland Video Köprüsü 34 | Name[uk]=Відеомісток Xwayland 35 | Name[x-test]=xxXwayland Video Bridgexx 36 | Name[zh_CN]=Xwayland 视频桥接程序 37 | Name[zh_TW]=Xwayland 影像橋接 38 | GenericName=Share screens and windows to XWayland applications 39 | GenericName[ar]=مشاركة الشاشات والنوافذ لتطبيقات ويلاند_اكس 40 | GenericName[ca]=Comparteix pantalles i finestres amb les aplicacions XWayland 41 | GenericName[ca@valencia]=Compartix pantalles i finestres amb les aplicacions XWayland 42 | GenericName[de]=Bildschirme und Fenster mit XWayland-Anwendungen teilen 43 | GenericName[en_GB]=Share screens and windows to XWayland applications 44 | GenericName[eo]=Kunhavigi ekranojn kaj fenestrojn al XWayland-aplikaĵoj 45 | GenericName[es]=Compartir pantallas y ventanas con las aplicaciones XWayland 46 | GenericName[eu]=XWayland aplikazioekin pantailak eta leihoak partekatzea 47 | GenericName[fi]=Jaa näyttöjä ja ikkunoita Xwayland-sovelluksiin 48 | GenericName[fr]=Partager des écrans et des fenêtres entre applications sous XWayland 49 | GenericName[gl]=Compartir pantallas e xanelas con aplicacións de XWayland 50 | GenericName[it]=Condividi schermate e finestre con le applicazioni XWayland 51 | GenericName[ka]=გაუზიარეთ ეკრანები და ფანჯრები XWayland-ის აპლიკაციებს 52 | GenericName[ko]=XWayland 앱으로 화면과 창 공유 53 | GenericName[nl]=Schermen en vensters delen met XWayland toepassingen 54 | GenericName[nn]=Del skjermar og vindauge med XWayland-program 55 | GenericName[pl]=Udostępniaj ekrany i okna aplikacjom XWayland 56 | GenericName[pt]=Partilhar ecrãs e janelas com as aplicações do XWayland 57 | GenericName[pt_BR]=Compartilhe telas e janelas com aplicativos XWayland 58 | GenericName[ro]=Partajați ecrane și ferestre cu aplicațiile XWayland 59 | GenericName[sl]=Deljenje zaslonov in oken z aplikacijami XWayland 60 | GenericName[sv]=Dela skärmar och fönster med XWayland-program 61 | GenericName[tr]=Ekranları ve pencereleri XWayland uygulamalarına paylaş 62 | GenericName[uk]=Спільне користування екранами та вікнами для програм XWayland 63 | GenericName[x-test]=xxShare screens and windows to XWayland applicationsxx 64 | GenericName[zh_CN]=分享屏幕和窗口给 XWayland 应用程序 65 | GenericName[zh_TW]=分享螢幕和視窗給 XWayland 應用程式 66 | Icon=xwaylandvideobridge 67 | Exec=xwaylandvideobridge 68 | Categories=Qt;KDE;Utility;X-KDE-Utilities-Desktop; 69 | -------------------------------------------------------------------------------- /src/org.kde.xwaylandvideobridge.desktop.license: -------------------------------------------------------------------------------- 1 | SPDX-License-Identifier: BSD-3-Clause 2 | SPDX-FileCopyrightText: 2023 David Edmundson 3 | SPDX-FileCopyrightText: 2023 Aleix Pol 4 | -------------------------------------------------------------------------------- /src/version.h.in: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2023 Jonathan Riddell 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | */ 6 | 7 | #ifndef VERSION_H 8 | #define VERSION_H 9 | 10 | #include 11 | 12 | static QLatin1String version("@PROJECT_VERSION@"); 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /src/x11recordingnotifier.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 David Edmundson 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | * SPDX-FileCopyrightText: 2023 David Edmundson 6 | * SPDX-FileCopyrightText: 2023 Aleix Pol 7 | */ 8 | 9 | #include "x11recordingnotifier.h" 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #include 20 | #include 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | struct XCBResponse 28 | { 29 | ~XCBResponse(); 30 | 31 | xcb_record_enable_context_reply_t *reply = nullptr; 32 | xcb_generic_error_t *error = nullptr; 33 | }; 34 | 35 | XCBResponse::~XCBResponse() { 36 | std::free(this->reply); 37 | std::free(this->error); 38 | 39 | this->reply = nullptr; 40 | this->error = nullptr; 41 | } 42 | 43 | X11RecordingNotifier::X11RecordingNotifier(WId window, QObject *parent) 44 | : QObject(parent) 45 | , m_windowId(window) 46 | { 47 | // we use a separate connection as the X11 recording API blocks is super weird 48 | // and we get multiple replies to a request rather than events 49 | m_connection = xcb_connect(nullptr, nullptr); 50 | auto c = m_connection; 51 | xcb_generic_error_t *error; 52 | 53 | if (!c) { 54 | qWarning("Error to open local display. Auto activation will fail!\n"); 55 | return; 56 | } 57 | 58 | int compositeExtensionOpCode = -1; 59 | { 60 | xcb_query_extension_cookie_t cookie = xcb_query_extension(c, strlen("Composite"), "Composite"); 61 | QScopedPointer reply(xcb_query_extension_reply(c, cookie, nullptr)); 62 | compositeExtensionOpCode = reply->major_opcode; 63 | } 64 | 65 | // check the xcb_record extension exists 66 | { 67 | auto cookie = xcb_record_query_version(c, 0, 0); 68 | QScopedPointer reply(xcb_record_query_version_reply(c, cookie, &error)); 69 | if (!reply) { 70 | qWarning() << ("Failed to create recording context"); 71 | } else { 72 | } 73 | } 74 | 75 | xcb_record_range_t range = {}; 76 | range.ext_requests.major.first = compositeExtensionOpCode; 77 | range.ext_requests.major.last = compositeExtensionOpCode; 78 | range.ext_requests.minor.first = XCB_COMPOSITE_REDIRECT_WINDOW; 79 | range.ext_requests.minor.last = XCB_COMPOSITE_UNREDIRECT_SUBWINDOWS; 80 | range.client_died = true; 81 | xcb_record_client_spec_t spec = XCB_RECORD_CS_ALL_CLIENTS; 82 | 83 | m_recordingContext = xcb_generate_id(c); 84 | auto cookie = xcb_record_create_context_checked(c, m_recordingContext, 0, 1, 1, &spec, &range); 85 | auto err = xcb_request_check(c, cookie); 86 | if (err) { 87 | qWarning() << ("Failed to create recording context"); 88 | } 89 | 90 | auto enableCookie = xcb_record_enable_context(c, m_recordingContext).sequence; 91 | xcb_flush(c); 92 | 93 | auto notifier = new QSocketNotifier(xcb_get_file_descriptor(c), QSocketNotifier::Read, this); 94 | connect(notifier, &QSocketNotifier::activated, this, [this, enableCookie] { 95 | xcb_generic_event_t *event = nullptr; 96 | auto c = m_connection; 97 | while ((event = xcb_poll_for_event(m_connection))) { 98 | std::free(event); 99 | } 100 | 101 | XCBResponse record; 102 | while (enableCookie && xcb_poll_for_reply(c, enableCookie, (void **)&record.reply, &record.error)) { 103 | // xcb_poll_for_reply may set both reply and error to null if connection has error. 104 | // break if xcb_connection has error, no point to continue anyway. 105 | if (xcb_connection_has_error(c)) { 106 | break; 107 | } 108 | 109 | if (record.error) { 110 | break; 111 | } 112 | 113 | if (!record.reply) { 114 | continue; 115 | } 116 | 117 | handleNewRecord(*record.reply); 118 | record = XCBResponse(); 119 | } 120 | }); 121 | } 122 | 123 | X11RecordingNotifier::~X11RecordingNotifier() 124 | { 125 | if (m_recordingContext) { 126 | xcb_record_free_context(m_connection, m_recordingContext); 127 | } 128 | if (m_connection) { 129 | xcb_disconnect(m_connection); 130 | } 131 | } 132 | 133 | bool X11RecordingNotifier::isRedirected() const 134 | { 135 | return !m_redirectionCount.isEmpty(); 136 | } 137 | 138 | void X11RecordingNotifier::handleNewRecord(xcb_record_enable_context_reply_t &reply) 139 | { 140 | const bool wasRedirected = isRedirected(); 141 | auto cleanup = qScopeGuard([wasRedirected, this] { 142 | if (isRedirected() != wasRedirected) { 143 | Q_EMIT isRedirectedChanged(); 144 | } 145 | }); 146 | 147 | if (reply.category == 3) { 148 | m_redirectionCount.remove(reply.xid_base); 149 | return; 150 | } 151 | 152 | if (reply.category != 1) { 153 | return; 154 | } 155 | 156 | xcb_composite_redirect_window_request_t *request = reinterpret_cast(xcb_record_enable_context_data(&reply)); 157 | 158 | if (!request) { 159 | return; 160 | } 161 | 162 | if (request->window != m_windowId) { 163 | return; 164 | } 165 | 166 | uint32_t caller = reply.xid_base; 167 | switch(request->minor_opcode) { 168 | case XCB_COMPOSITE_REDIRECT_WINDOW: 169 | case XCB_COMPOSITE_REDIRECT_SUBWINDOWS: 170 | m_redirectionCount[caller]++; 171 | break; 172 | case XCB_COMPOSITE_UNREDIRECT_WINDOW: 173 | case XCB_COMPOSITE_UNREDIRECT_SUBWINDOWS: 174 | if (m_redirectionCount[caller]-- == 0) { 175 | m_redirectionCount.remove(caller); 176 | } 177 | break; 178 | default: 179 | break; 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /src/x11recordingnotifier.h: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 3 | * SPDX-FileCopyrightText: 2023 David Edmundson 4 | * SPDX-FileCopyrightText: 2023 Aleix Pol 5 | */ 6 | 7 | #pragma once 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | class X11RecordingNotifier : public QObject 15 | { 16 | Q_OBJECT 17 | public: 18 | X11RecordingNotifier(WId window, QObject *parent); 19 | ~X11RecordingNotifier(); 20 | 21 | bool isRedirected() const; 22 | Q_SIGNALS: 23 | void isRedirectedChanged(); 24 | private: 25 | void handleNewRecord(xcb_record_enable_context_reply_t &reply); 26 | 27 | xcb_connection_t *m_connection = nullptr; 28 | xcb_record_context_t m_recordingContext = 0; 29 | WId m_windowId = 0; // my xterm 30 | QHash m_redirectionCount; 31 | }; 32 | -------------------------------------------------------------------------------- /src/xwaylandvideobridge.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * App to render feeds coming from xdg-desktop-portal 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | * SPDX-FileCopyrightText: 2023 David Edmundson 6 | * SPDX-FileCopyrightText: 2023 Aleix Pol 7 | */ 8 | 9 | #include "xwaylandvideobridge.h" 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | 19 | #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 20 | #include 21 | #else 22 | #include 23 | #endif 24 | 25 | #include "xdp_dbus_screencast_interface.h" 26 | #include "contentswindow.h" 27 | #include "x11recordingnotifier.h" 28 | #include "xwaylandvideobridge_debug.h" 29 | 30 | Q_DECLARE_METATYPE(Stream) 31 | 32 | QDebug operator<<(QDebug debug, const Stream& stream) 33 | { 34 | QDebugStateSaver saver(debug); 35 | debug.nospace() << "Stream(id: " << stream.nodeId << ", opts: " << stream.opts << ')'; 36 | return debug; 37 | } 38 | 39 | 40 | const QDBusArgument &operator<<(const QDBusArgument &argument, const Stream &/*stream*/) 41 | { 42 | argument.beginStructure(); 43 | // argument << stream.id << stream.opts; 44 | argument.endStructure(); 45 | return argument; 46 | } 47 | 48 | const QDBusArgument &operator>>(const QDBusArgument &argument, Stream &stream) 49 | { 50 | argument.beginStructure(); 51 | argument >> stream.nodeId >> stream.opts; 52 | argument.endStructure(); 53 | return argument; 54 | } 55 | 56 | const QDBusArgument &operator>>(const QDBusArgument &argument, QVector &stream) 57 | { 58 | argument.beginArray(); 59 | while ( !argument.atEnd() ) { 60 | Stream element; 61 | argument >> element; 62 | stream.append( element ); 63 | } 64 | argument.endArray(); 65 | return argument; 66 | } 67 | 68 | XwaylandVideoBridge::XwaylandVideoBridge(QObject* parent) 69 | : QObject(parent) 70 | , iface(new OrgFreedesktopPortalScreenCastInterface( 71 | QLatin1String("org.freedesktop.portal.Desktop"), QLatin1String("/org/freedesktop/portal/desktop"), QDBusConnection::sessionBus(), this)) 72 | , m_handleToken(QStringLiteral("xwaylandvideobridge%1").arg(QRandomGenerator::global()->generate())) 73 | , m_quitTimer(new QTimer(this)) 74 | , m_window(new ContentsWindow) 75 | { 76 | m_quitTimer->setInterval(5000); 77 | m_quitTimer->setSingleShot(true); 78 | connect(m_quitTimer, &QTimer::timeout, this, &XwaylandVideoBridge::closeSession); 79 | 80 | 81 | 82 | 83 | auto notifier = new X11RecordingNotifier(m_window->winId(), this); 84 | 85 | connect(notifier, &X11RecordingNotifier::isRedirectedChanged, this, [this, notifier]() { 86 | if (notifier->isRedirected()) { 87 | m_quitTimer->stop(); 88 | // this is a bit racey, there's a point where we wait for a reply from the portal 89 | if (m_path.path().isEmpty()) { 90 | init(); 91 | } 92 | } else { 93 | m_quitTimer->start(); 94 | } 95 | }); 96 | 97 | m_window->show(); 98 | } 99 | 100 | XwaylandVideoBridge::~XwaylandVideoBridge() = default; 101 | 102 | void XwaylandVideoBridge::startStream(const QDBusObjectPath& path) 103 | { 104 | m_path = path; 105 | 106 | CursorModes availableCursorModes = static_cast(iface->availableCursorModes()); 107 | CursorMode cursorMode = CursorMode::Hidden; 108 | if (availableCursorModes.testFlag(CursorMode::Metadata)) { 109 | cursorMode = CursorMode::Metadata; 110 | } else if (availableCursorModes.testFlag(CursorMode::Embedded)) { 111 | cursorMode = CursorMode::Embedded; 112 | } else { 113 | qCWarning(XWAYLANDBRIDGE) << "Portal does not support any cursor modes. Cursors will be hidden"; 114 | } 115 | 116 | const QVariantMap sourcesParameters = { 117 | { QLatin1String("handle_token"), m_handleToken }, 118 | { QLatin1String("types"), iface->availableSourceTypes() }, 119 | { QLatin1String("multiple"), false }, //for now? 120 | { QLatin1String("cursor_mode"), static_cast(cursorMode) } 121 | }; 122 | 123 | auto reply = iface->SelectSources(m_path, sourcesParameters); 124 | reply.waitForFinished(); 125 | 126 | if (reply.isError()) { 127 | qCWarning(XWAYLANDBRIDGE) << "Could not select sources" << reply.error(); 128 | exit(1); 129 | return; 130 | } 131 | qCDebug(XWAYLANDBRIDGE) << "select sources done" << reply.value().path(); 132 | } 133 | 134 | void XwaylandVideoBridge::response(uint code, const QVariantMap& results) 135 | { 136 | if (code == 1) { 137 | qCDebug(XWAYLANDBRIDGE) << "XDG session cancelled"; 138 | closeSession(); 139 | return; 140 | } else if (code > 0) { 141 | qCWarning(XWAYLANDBRIDGE) << "XDG session failed:" << results << code; 142 | exit(1); 143 | return; 144 | } 145 | 146 | const auto streamsIt = results.constFind("streams"); 147 | if (streamsIt != results.constEnd()) { 148 | QVector streams; 149 | streamsIt->value() >> streams; 150 | 151 | handleStreams(streams); 152 | return; 153 | } 154 | 155 | const auto handleIt = results.constFind(QStringLiteral("session_handle")); 156 | if (handleIt != results.constEnd()) { 157 | startStream(QDBusObjectPath(handleIt->toString())); 158 | return; 159 | } 160 | 161 | qCDebug(XWAYLANDBRIDGE) << "params" << results << code; 162 | if (results.isEmpty()) { 163 | start(); 164 | return; 165 | } 166 | } 167 | 168 | void XwaylandVideoBridge::init() 169 | { 170 | const QVariantMap sessionParameters = { 171 | { QLatin1String("session_handle_token"), m_handleToken }, 172 | { QLatin1String("handle_token"), m_handleToken } 173 | }; 174 | auto sessionReply = iface->CreateSession(sessionParameters); 175 | sessionReply.waitForFinished(); 176 | if (!sessionReply.isValid()) { 177 | qCWarning(XWAYLANDBRIDGE) << "Couldn't initialize the remote control session"; 178 | exit(1); 179 | return; 180 | } 181 | 182 | const bool ret = QDBusConnection::sessionBus().connect(QString(), 183 | sessionReply.value().path(), 184 | QLatin1String("org.freedesktop.portal.Request"), 185 | QLatin1String("Response"), 186 | this, 187 | SLOT(response(uint, QVariantMap))); 188 | if (!ret) { 189 | qCWarning(XWAYLANDBRIDGE) << "failed to create session"; 190 | exit(2); 191 | return; 192 | } 193 | 194 | qDBusRegisterMetaType(); 195 | qDBusRegisterMetaType>(); 196 | } 197 | 198 | void XwaylandVideoBridge::start() 199 | { 200 | const QVariantMap startParameters = { 201 | { QLatin1String("handle_token"), m_handleToken } 202 | }; 203 | 204 | auto reply = iface->Start(m_path, QStringLiteral("org.kde.xwaylandvideobridge"), startParameters); 205 | reply.waitForFinished(); 206 | 207 | if (reply.isError()) { 208 | qCWarning(XWAYLANDBRIDGE) << "Could not start stream" << reply.error(); 209 | exit(1); 210 | return; 211 | } 212 | } 213 | 214 | void XwaylandVideoBridge::handleStreams(const QVector &streams) 215 | { 216 | const QVariantMap startParameters = { 217 | { QLatin1String("handle_token"), m_handleToken } 218 | }; 219 | 220 | auto reply = iface->OpenPipeWireRemote(m_path, startParameters); 221 | reply.waitForFinished(); 222 | 223 | if (reply.isError()) { 224 | qCWarning(XWAYLANDBRIDGE) << "Could not start stream" << reply.error(); 225 | exit(1); 226 | return; 227 | } 228 | const int fd = reply.value().takeFileDescriptor(); 229 | 230 | if (streams.count() < 1) { 231 | qCWarning(XWAYLANDBRIDGE) << "No streams available"; 232 | exit(1); 233 | } 234 | 235 | m_pipeWireItem = new PipeWireSourceItem(m_window->contentItem()); 236 | m_pipeWireItem->setFd(fd); 237 | m_pipeWireItem->setNodeId(streams[0].nodeId); 238 | m_pipeWireItem->setVisible(true); 239 | 240 | if (m_pipeWireItem->state() == PipeWireSourceItem::StreamState::Streaming) { 241 | m_pipeWireItem->setSize(m_pipeWireItem->streamSize()); 242 | m_window->resize(m_pipeWireItem->size().toSize()); 243 | } 244 | 245 | connect(m_pipeWireItem, &PipeWireSourceItem::streamSizeChanged, this, [this]() { 246 | m_pipeWireItem->setSize(m_pipeWireItem->streamSize()); 247 | }); 248 | 249 | 250 | connect(m_pipeWireItem, &QQuickItem::widthChanged, this, [this]() { 251 | m_window->resize(m_pipeWireItem->size().toSize()); 252 | }); 253 | connect(m_pipeWireItem, &QQuickItem::heightChanged, this, [this]() { 254 | m_window->resize(m_pipeWireItem->size().toSize()); 255 | }); 256 | 257 | connect(m_pipeWireItem, &PipeWireSourceItem::stateChanged, this, [this]{ 258 | if (m_pipeWireItem->state() == PipeWireSourceItem::StreamState::Unconnected) { 259 | closeSession(); 260 | } 261 | }); 262 | } 263 | 264 | void XwaylandVideoBridge::closeSession() 265 | { 266 | 267 | m_handleToken = QStringLiteral("xwaylandvideobridge%1").arg(QRandomGenerator::global()->generate()); 268 | m_quitTimer->stop(); 269 | 270 | if (m_path.path().isEmpty()) 271 | return; 272 | QDBusMessage closeScreencastSession = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"), 273 | m_path.path(), 274 | QLatin1String("org.freedesktop.portal.Session"), 275 | QLatin1String("Close")); 276 | m_path = {}; 277 | 278 | if (m_pipeWireItem) { 279 | disconnect(m_pipeWireItem, nullptr, this, nullptr); 280 | m_pipeWireItem->deleteLater(); 281 | m_pipeWireItem = nullptr; 282 | } 283 | QDBusConnection::sessionBus().call(closeScreencastSession); 284 | } 285 | -------------------------------------------------------------------------------- /src/xwaylandvideobridge.h: -------------------------------------------------------------------------------- 1 | /* 2 | * App to render feeds coming from xdg-desktop-portal 3 | * 4 | * SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 5 | * SPDX-FileCopyrightText: 2023 Aleix Pol 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | class QTimer; 15 | class ContentsWindow; 16 | class PipeWireSourceItem; 17 | 18 | struct Stream { 19 | uint nodeId; 20 | QVariantMap opts; 21 | }; 22 | 23 | class OrgFreedesktopPortalScreenCastInterface; 24 | 25 | class XwaylandVideoBridge : public QObject 26 | { 27 | Q_OBJECT 28 | public: 29 | XwaylandVideoBridge(QObject* parent = nullptr); 30 | ~XwaylandVideoBridge() override; 31 | 32 | enum CursorMode { 33 | Hidden = 1, 34 | Embedded = 2, 35 | Metadata = 4 36 | }; 37 | Q_ENUM(CursorMode); 38 | Q_DECLARE_FLAGS(CursorModes, CursorMode) 39 | 40 | enum SourceTypes { 41 | Monitor = 1, 42 | Window = 2 43 | }; 44 | Q_ENUM(SourceTypes); 45 | 46 | public Q_SLOTS: 47 | void response(uint code, const QVariantMap& results); 48 | 49 | private: 50 | void init(); 51 | void startStream(const QDBusObjectPath &path); 52 | void handleStreams(const QVector &streams); 53 | void start(); 54 | void closeSession(); 55 | void closed(); 56 | 57 | OrgFreedesktopPortalScreenCastInterface *iface; 58 | QDBusObjectPath m_path; 59 | QString m_handleToken; 60 | 61 | QTimer *m_quitTimer; 62 | QScopedPointer m_window; 63 | PipeWireSourceItem *m_pipeWireItem = nullptr; 64 | }; 65 | --------------------------------------------------------------------------------