File xwaylandvideobridge-0.4.0+git12.obscpio of Package xwaylandvideobridge
07070100000000000081A400000000000000000000000165ADD93600000416000000000000000000000000000000000000003700000000xwaylandvideobridge-0.4.0+git12/.flatpak-manifest.json{
"id": "org.kde.xwaylandvideobridge",
"branch": "master",
"runtime": "org.kde.Platform",
"runtime-version": "5.15-22.08",
"sdk": "org.kde.Sdk",
"command": "xwaylandvideobridge",
"tags": ["nightly"],
"desktop-file-name-suffix": " (Nightly)",
"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"],
"modules": [
{
"config-opts": [ "-DENABLE_TESTING=OFF" ],
"name": "kpipewire",
"buildsystem": "cmake-ninja",
"sources": [ { "type": "git", "url": "https://invent.kde.org/plasma/kpipewire.git", "commit": "Plasma/5.27" } ]
},
{
"name": "xwaylandvideobridge",
"buildsystem": "cmake-ninja",
"sources": [
{
"type": "dir",
"path": "."
}
]
}
]
}
07070100000001000081A400000000000000000000000165ADD936000000A8000000000000000000000000000000000000003F00000000xwaylandvideobridge-0.4.0+git12/.flatpak-manifest.json.licenseSPDX-License-Identifier: BSD-3-Clause
SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
07070100000002000081A400000000000000000000000165ADD93600000114000000000000000000000000000000000000002F00000000xwaylandvideobridge-0.4.0+git12/.gitlab-ci.yml# SPDX-FileCopyrightText: None
# SPDX-License-Identifier: CC0-1.0
include:
- project: sysadmin/ci-utilities
file:
- /gitlab-templates/reuse-lint.yml
- /gitlab-templates/linux.yml
- /gitlab-templates/linux-qt6.yml
- /gitlab-templates/flatpak.yml
07070100000003000081A400000000000000000000000165ADD93600000317000000000000000000000000000000000000002C00000000xwaylandvideobridge-0.4.0+git12/.kde-ci.yml# SPDX-FileCopyrightText: None
# SPDX-License-Identifier: CC0-1.0
Dependencies:
- 'on': ['Linux/Qt6', 'FreeBSD/Qt6']
'require':
'frameworks/extra-cmake-modules': '@latest-kf6'
'frameworks/kcoreaddons': '@latest-kf6'
'frameworks/ki18n': '@latest-kf6'
'frameworks/kwindowsystem': '@latest-kf6'
'frameworks/knotifications': '@latest-kf6'
'frameworks/kstatusnotifieritem': '@latest-kf6'
'plasma/kpipewire': '@latest-kf6'
- 'on': ['Linux/Qt5', 'FreeBSD/Qt5']
'require':
'frameworks/extra-cmake-modules': '@stable'
'frameworks/kcoreaddons': '@stable'
'frameworks/ki18n': '@stable'
'frameworks/kwindowsystem': '@stable'
'frameworks/knotifications': '@stable'
'plasma/kpipewire': '@latest'
Options:
require-passing-tests-on: [ 'Linux' ]
07070100000004000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002700000000xwaylandvideobridge-0.4.0+git12/.reuse07070100000005000081A400000000000000000000000165ADD93600000120000000000000000000000000000000000000002C00000000xwaylandvideobridge-0.4.0+git12/.reuse/dep5Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Screen Record
Upstream-Contact: Aleix Pol Gonzalez <aleixpol@kde.org>
Source: https://kde.org
# Sample paragraph, commented out:
#
# Files: src/*
# Copyright: $YEAR $NAME <$CONTACT>
# License: ...
07070100000006000081A400000000000000000000000165ADD9360000065F000000000000000000000000000000000000002F00000000xwaylandvideobridge-0.4.0+git12/CMakeLists.txt# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
# SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
cmake_minimum_required(VERSION 3.16)
project(xwaylandvideobridge)
set(PROJECT_VERSION "0.4.0")
set(QT_MIN_VERSION "5.15.0")
set(KF_MIN_VERSION "5.83.0")
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMInstallIcons)
include(ECMQtDeclareLoggingCategory)
include(FeatureSummary)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (QT_MAJOR_VERSION STREQUAL "6")
set(REQUIRED_QT_VERSION "6.4")
set(KF_MIN_VERSION "5.240.0")
set(KF_MAJOR_VERSION "6")
else()
set(KF_MAJOR_VERSION "5")
endif()
find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Quick DBus)
if (QT_MAJOR_VERSION STREQUAL "5")
find_package(Qt5X11Extras ${QT_MIN_VERSION} REQUIRED)
endif()
find_package(KF${QT_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS
CoreAddons
I18n
WindowSystem
Notifications
)
if (QT_MAJOR_VERSION STREQUAL "6")
find_package(KF6StatusNotifierItem ${KF_MIN_VERSION} REQUIRED)
endif()
find_package(XCB COMPONENTS REQUIRED XCB COMPOSITE EVENT RECORD XFIXES)
find_package(KPipeWire REQUIRED)
add_subdirectory(src)
add_subdirectory(icons)
# Make it possible to use the po files fetched by the fetch-translations step
ki18n_install(po)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
07070100000007000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002900000000xwaylandvideobridge-0.4.0+git12/LICENSES07070100000008000081A400000000000000000000000165ADD936000005C8000000000000000000000000000000000000003A00000000xwaylandvideobridge-0.4.0+git12/LICENSES/BSD-3-Clause.txtCopyright (c) <year> <owner>. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
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.
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.
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.
07070100000009000081A400000000000000000000000165ADD93600001B88000000000000000000000000000000000000003500000000xwaylandvideobridge-0.4.0+git12/LICENSES/CC0-1.0.txtCreative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
0707010000000A000081A400000000000000000000000165ADD936000060CE000000000000000000000000000000000000003F00000000xwaylandvideobridge-0.4.0+git12/LICENSES/LGPL-2.0-or-later.txtGNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
[This is the first released version of the library GPL. It is numbered 2
because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your freedom to share
and change it. By contrast, the GNU General Public Licenses are intended to
guarantee your freedom to share and change free software--to make sure the
software is free for all its users.
This license, the Library General Public License, applies to some specially
designated Free Software Foundation software, and to any other libraries whose
authors decide to use it. You can use it for your libraries, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom
to distribute copies of free software (and charge for this service if you
wish), that you receive source code or can get it if you want it, that you
can change the software or use pieces of it in new free programs; and that
you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to
deny you these rights or to ask you to surrender the rights. These restrictions
translate to certain responsibilities for you if you distribute copies of
the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis or for
a fee, you must give the recipients all the rights that we gave you. You must
make sure that they, too, receive or can get the source code. If you link
a program with the library, you must provide complete object files to the
recipients so that they can relink them with the library, after making changes
to the library and recompiling it. And you must show them these terms so they
know their rights.
Our method of protecting your rights has two steps: (1) copyright the library,
and (2) offer you this license which gives you legal permission to copy, distribute
and/or modify the library.
Also, for each distributor's protection, we want to make certain that everyone
understands that there is no warranty for this free library. If the library
is modified by someone else and passed on, we want its recipients to know
that what they have is not the original version, so that any problems introduced
by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We
wish to avoid the danger that companies distributing free software will individually
obtain patent licenses, thus in effect transforming the program into proprietary
software. To prevent this, we have made it clear that any patent must be licensed
for everyone's free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary GNU
General Public License, which was designed for utility programs. This license,
the GNU Library General Public License, applies to certain designated libraries.
This license is quite different from the ordinary one; be sure to read it
in full, and don't assume that anything in it is the same as in the ordinary
license.
The reason we have a separate public license for some libraries is that they
blur the distinction we usually make between modifying or adding to a program
and simply using it. Linking a program with a library, without changing the
library, is in some sense simply using the library, and is analogous to running
a utility program or application program. However, in a textual and legal
sense, the linked executable is a combined work, a derivative of the original
library, and the ordinary General Public License treats it as such.
Because of this blurred distinction, using the ordinary General Public License
for libraries did not effectively promote software sharing, because most developers
did not use the libraries. We concluded that weaker conditions might promote
sharing better.
However, unrestricted linking of non-free programs would deprive the users
of those programs of all benefit from the free status of the libraries themselves.
This Library General Public License is intended to permit developers of non-free
programs to use free libraries, while preserving your freedom as a user of
such programs to change the free libraries that are incorporated in them.
(We have not seen how to achieve this as regards changes in header files,
but we have achieved it as regards changes in the actual functions of the
Library.) The hope is that this will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and modification
follow. Pay close attention to the difference between a "work based on the
library" and a "work that uses the library". The former contains code derived
from the library, while the latter only works together with the library.
Note that it is possible for a library to be covered by the ordinary General
Public License rather than by this special one.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which contains a
notice placed by the copyright holder or other authorized party saying it
may be distributed under the terms of this Library General Public License
(also called "this License"). Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data prepared
so as to be conveniently linked with application programs (which use some
of those functions and data) to form executables.
The "Library", below, refers to any such software library or work which has
been distributed under these terms. A "work based on the Library" means either
the Library or any derivative work under copyright law: that is to say, a
work containing the Library or a portion of it, either verbatim or with modifications
and/or translated straightforwardly into another language. (Hereinafter, translation
is included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for making modifications
to it. For a library, complete source code means all the source code for all
modules it contains, plus any associated interface definition files, plus
the scripts used to control compilation and installation of the library.
Activities other than copying, distribution and modification are not covered
by this License; they are outside its scope. The act of running a program
using the Library is not restricted, and output from such a program is covered
only if its contents constitute a work based on the Library (independent of
the use of the Library in a tool for writing it). Whether that is true depends
on what the Library does and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's complete source
code as you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and disclaimer
of warranty; keep intact all the notices that refer to this License and to
the absence of any warranty; and distribute a copy of this License along with
the Library.
You may charge a fee for the physical act of transferring a copy, and you
may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Library or any portion of it,
thus forming a work based on the Library, and copy and distribute such modifications
or work under the terms of Section 1 above, provided that you also meet all
of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices stating that
you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no charge to all
third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a table of
data to be supplied by an application program that uses the facility, other
than as an argument passed when the facility is invoked, then you must make
a good faith effort to ensure that, in the event an application does not supply
such function or table, the facility still operates, and performs whatever
part of its purpose remains meaningful.
(For example, a function in a library to compute square roots has a purpose
that is entirely well-defined independent of the application. Therefore, Subsection
2d requires that any application-supplied function or table used by this function
must be optional: if the application does not supply it, the square root function
must still compute square roots.)
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Library, and can be reasonably
considered independent and separate works in themselves, then this License,
and its terms, do not apply to those sections when you distribute them as
separate works. But when you distribute the same sections as part of a whole
which is a work based on the Library, the distribution of the whole must be
on the terms of this License, whose permissions for other licensees extend
to the entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise
the right to control the distribution of derivative or collective works based
on the Library.
In addition, mere aggregation of another work not based on the Library with
the Library (or with a work based on the Library) on a volume of a storage
or distribution medium does not bring the other work under the scope of this
License.
3. You may opt to apply the terms of the ordinary GNU General Public License
instead of this License to a given copy of the Library. To do this, you must
alter all the notices that refer to this License, so that they refer to the
ordinary GNU General Public License, version 2, instead of to this License.
(If a newer version than version 2 of the ordinary GNU General Public License
has appeared, then you can specify that version instead if you wish.) Do not
make any other change in these notices.
Once this change is made in a given copy, it is irreversible for that copy,
so the ordinary GNU General Public License applies to all subsequent copies
and derivative works made from that copy.
This option is useful when you wish to copy part of the code of the Library
into a program that is not a library.
4. You may copy and distribute the Library (or a portion or derivative of
it, under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you accompany it with the complete corresponding
machine-readable source code, which must be distributed under the terms of
Sections 1 and 2 above on a medium customarily used for software interchange.
If distribution of object code is made by offering access to copy from a designated
place, then offering equivalent access to copy the source code from the same
place satisfies the requirement to distribute the source code, even though
third parties are not compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the Library, but
is designed to work with the Library by being compiled or linked with it,
is called a "work that uses the Library". Such a work, in isolation, is not
a derivative work of the Library, and therefore falls outside the scope of
this License.
However, linking a "work that uses the Library" with the Library creates an
executable that is a derivative of the Library (because it contains portions
of the Library), rather than a "work that uses the library". The executable
is therefore covered by this License. Section 6 states terms for distribution
of such executables.
When a "work that uses the Library" uses material from a header file that
is part of the Library, the object code for the work may be a derivative work
of the Library even though the source code is not. Whether this is true is
especially significant if the work can be linked without the Library, or if
the work is itself a library. The threshold for this to be true is not precisely
defined by law.
If such an object file uses only numerical parameters, data structure layouts
and accessors, and small macros and small inline functions (ten lines or less
in length), then the use of the object file is unrestricted, regardless of
whether it is legally a derivative work. (Executables containing this object
code plus portions of the Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may distribute
the object code for the work under the terms of Section 6. Any executables
containing that work also fall under Section 6, whether or not they are linked
directly with the Library itself.
6. As an exception to the Sections above, you may also compile or link a "work
that uses the Library" with the Library to produce a work containing portions
of the Library, and distribute that work under terms of your choice, provided
that the terms permit modification of the work for the customer's own use
and reverse engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library
is used in it and that the Library and its use are covered by this License.
You must supply a copy of this License. If the work during execution displays
copyright notices, you must include the copyright notice for the Library among
them, as well as a reference directing the user to the copy of this License.
Also, you must do one of these things:
a) Accompany the work with the complete corresponding machine-readable source
code for the Library including whatever changes were used in the work (which
must be distributed under Sections 1 and 2 above); and, if the work is an
executable linked with the Library, with the complete machine-readable "work
that uses the Library", as object code and/or source code, so that the user
can modify the Library and then relink to produce a modified executable containing
the modified Library. (It is understood that the user who changes the contents
of definitions files in the Library will not necessarily be able to recompile
the application to use the modified definitions.)
b) Accompany the work with a written offer, valid for at least three years,
to give the same user the materials specified in Subsection 6a, above, for
a charge no more than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy from a designated
place, offer equivalent access to copy the above specified materials from
the same place.
d) Verify that the user has already received a copy of these materials or
that you have already sent this user a copy.
For an executable, the required form of the "work that uses the Library" must
include any data and utility programs needed for reproducing the executable
from it. However, as a special exception, the source code distributed need
not include anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the operating
system on which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license restrictions of
other proprietary libraries that do not normally accompany the operating system.
Such a contradiction means you cannot use both them and the Library together
in an executable that you distribute.
7. You may place library facilities that are a work based on the Library side-by-side
in a single library together with other library facilities not covered by
this License, and distribute such a combined library, provided that the separate
distribution of the work based on the Library and of the other library facilities
is otherwise permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work based on the
Library, uncombined with any other library facilities. This must be distributed
under the terms of the Sections above.
b) Give prominent notice with the combined library of the fact that part of
it is a work based on the Library, and explaining where to find the accompanying
uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute the Library
except as expressly provided under this License. Any attempt otherwise to
copy, modify, sublicense, link with, or distribute the Library is void, and
will automatically terminate your rights under this License. However, parties
who have received copies, or rights, from you under this License will not
have their licenses terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not signed
it. However, nothing else grants you permission to modify or distribute the
Library or its derivative works. These actions are prohibited by law if you
do not accept this License. Therefore, by modifying or distributing the Library
(or any work based on the Library), you indicate your acceptance of this License
to do so, and all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the Library),
the recipient automatically receives a license from the original licensor
to copy, distribute, link with or modify the Library subject to these terms
and conditions. You may not impose any further restrictions on the recipients'
exercise of the rights granted herein. You are not responsible for enforcing
compliance by third parties to this License.
11. If, as a consequence of a court judgment or allegation of patent infringement
or for any other reason (not limited to patent issues), conditions are imposed
on you (whether by court order, agreement or otherwise) that contradict the
conditions of this License, they do not excuse you from the conditions of
this License. If you cannot distribute so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations, then as
a consequence you may not distribute the Library at all. For example, if a
patent license would not permit royalty-free redistribution of the Library
by all those who receive copies directly or indirectly through you, then the
only way you could satisfy both it and this License would be to refrain entirely
from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents
or other property right claims or to contest validity of any such claims;
this section has the sole purpose of protecting the integrity of the free
software distribution system which is implemented by public license practices.
Many people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose
that choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in certain
countries either by patents or by copyrighted interfaces, the original copyright
holder who places the Library under this License may add an explicit geographical
distribution limitation excluding those countries, so that distribution is
permitted only in or among countries not thus excluded. In such case, this
License incorporates the limitation as if written in the body of this License.
13. The Free Software Foundation may publish revised and/or new versions of
the Library General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to address
new problems or concerns.
Each version is given a distinguishing version number. If the Library specifies
a version number of this License which applies to it and "any later version",
you have the option of following the terms and conditions either of that version
or of any later version published by the Free Software Foundation. If the
Library does not specify a license version number, you may choose any version
ever published by the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free programs
whose distribution conditions are incompatible with these, write to the author
to ask for permission. For software which is copyrighted by the Free Software
Foundation, write to the Free Software Foundation; we sometimes make exceptions
for this. Our decision will be guided by the two goals of preserving the free
status of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest possible
use to the public, we recommend making it free software that everyone can
redistribute and change. You can do so by permitting redistribution under
these terms (or, alternatively, under the terms of the ordinary General Public
License).
To apply these terms, attach the following notices to the library. It is safest
to attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the "copyright"
line and a pointer to where the full notice is found.
one line to give the library's name and an idea of what it does.
Copyright (C) year name of author
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for
more details.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your school,
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in
the library `Frob' (a library for tweaking knobs) written
by James Random Hacker.
signature of Ty Coon, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
0707010000000B000081A400000000000000000000000165ADD93600000296000000000000000000000000000000000000004900000000xwaylandvideobridge-0.4.0+git12/LICENSES/LicenseRef-KDE-Accepted-GPL.txtThis library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 3 of
the license or (at your option) at any later version that is
accepted by the membership of KDE e.V. (or its successor
approved by the membership of KDE e.V.), which shall act as a
proxy as defined in Section 14 of version 3 of the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
0707010000000C000081A400000000000000000000000165ADD93600000113000000000000000000000000000000000000002C00000000xwaylandvideobridge-0.4.0+git12/Messages.sh#! /usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
$EXTRACTRC `find . -name \*.ui -o -name \*.rc -o -name \*.kcfg` >> rc.cpp
$XGETTEXT `find . -name \*.cpp` -o $podir/xwaylandvideobridge.pot
rm -f rc.cpp
0707010000000D000081A400000000000000000000000165ADD936000006F6000000000000000000000000000000000000002A00000000xwaylandvideobridge-0.4.0+git12/README.md<!--
SPDX-License-Identifier: BSD-3-Clause
SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
-->
# XWayland Video Bridge
# About
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.
This tool allows us to share specific windows to X11 clients, but within the control of the user at all times.
# How to use
xwaylandvideobridge should autostart on login. It will run in the background. Next time you try to share a window a prompt will appear.
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.
The system tray icon provides finer control.
# Use outside Plasma
This should work on any desktop that supports the Xdg desktop portals and pipewire streaming and have a working system tray.
# Future
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.
# Release Process
- Check it works
- appstream-metainfo-release-update --version 0.3.0 -d today ./src/org.kde.xwaylandvideobridge.appdata.xml
- Update set(PROJECT_VERSION "0.3.0") in CMakeLists.txt
- In Releaseme mkdir xwaylandvideobridge; cd xwaylandvideobridge; ../tarme.rb --origin trunk --version 0.3.0 xwaylandvideobridge
- scp xwaylandvideobridge ftpadmin@tinami.kde.org: and move to right place
- Write a blog post and put on kde-announce
0707010000000E000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/icons0707010000000F000081A400000000000000000000000165ADD9360000014D000000000000000000000000000000000000003500000000xwaylandvideobridge-0.4.0+git12/icons/CMakeLists.txt# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
ecm_install_icons(
ICONS
sc-apps-xwaylandvideobridge.svg
DESTINATION ${KDE_INSTALL_ICONDIR}
THEME hicolor
)
ecm_install_icons(ICONS ${xwaylandvideobridge_ICONS} DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor)
07070100000010000081A400000000000000000000000165ADD93600003751000000000000000000000000000000000000004600000000xwaylandvideobridge-0.4.0+git12/icons/sc-apps-xwaylandvideobridge.svg<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg5"
sodipodi:docname="xwaylandvideobridge.svg"
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="11.346854"
inkscape:cx="-4.1421172"
inkscape:cy="6.6538266"
inkscape:window-width="1280"
inkscape:window-height="1370"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg5"
showguides="true" />
<defs
id="defs3051">
<style
type="text/css"
id="current-color-scheme">
.ColorScheme-Text {
color:#232629;
}
</style>
<linearGradient
inkscape:collect="always"
id="linearGradient4272"
xlink:href="#linearGradient4303"
y1="547.79797"
y2="536.79797"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(0.57842627,0,0,0.54086583,-220.24792,-267.85538)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4303">
<stop
style="stop-color:#c6cdd1"
id="stop4305" />
<stop
offset="1"
style="stop-color:#e0e5e7"
id="stop4307" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4250"
xlink:href="#linearGradient4159"
y1="536.79797"
y2="503.798"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(0.53710966,0,0,0.54086583,-203.36715,-267.85538)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4159">
<stop
style="stop-color:#2a2c2f"
id="stop4161" />
<stop
offset="1"
style="stop-color:#424649"
id="stop4163" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4597-5"
xlink:href="#linearGradient4591"
y1="541.79797"
y2="489.798"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(0.53898118,0,0,0.5453731,-208.4851,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4591">
<stop
style="stop-color:#7e8f9e"
id="stop4593" />
<stop
offset="1"
style="stop-color:#84ced5"
id="stop4595" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4681"
xlink:href="#linearGradient4675"
y1="535.79797"
y2="522.79797"
x1="394.57144"
gradientUnits="userSpaceOnUse"
x2="404.57144"
gradientTransform="matrix(0.54537286,0,0,0.56662092,-211.00709,-278.21009)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4675">
<stop
style="stop-color:#e4a56d"
id="stop4677" />
<stop
offset="1"
style="stop-color:#a7bd78"
id="stop4679" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4689"
xlink:href="#linearGradient4683"
x1="404.57144"
gradientUnits="userSpaceOnUse"
x2="421.57144"
gradientTransform="matrix(0.53522132,0,0,0.56662107,-206.90006,-278.21015)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4683">
<stop
style="stop-color:#c3a278"
id="stop4685" />
<stop
offset="1"
style="stop-color:#6688aa"
id="stop4687" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4728"
xlink:href="#linearGradient4722"
y1="536.79797"
y2="524.79797"
x1="430.57144"
gradientUnits="userSpaceOnUse"
x2="437.49963"
gradientTransform="matrix(0.5492444,0,0,0.56662092,-212.98626,-278.21009)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4722">
<stop
style="stop-color:#6588af"
id="stop4724" />
<stop
offset="1"
style="stop-color:#8ba8cd"
id="stop4726" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4840"
xlink:href="#linearGradient4834"
x1="421.57144"
gradientUnits="userSpaceOnUse"
x2="438.57144"
gradientTransform="matrix(0.52008044,0,0,0.5453731,-200.19577,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4834">
<stop
style="stop-color:#89ad8b"
id="stop4836" />
<stop
offset="1"
style="stop-color:#82b3c7"
id="stop4838" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4784"
xlink:href="#linearGradient4778"
y1="525.79797"
y2="513.79797"
x1="387.57144"
gradientUnits="userSpaceOnUse"
x2="401.57144"
gradientTransform="matrix(0.54537286,0,0,0.63220758,-211.00709,-311.29584)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4778">
<stop
style="stop-color:#e1b16f"
id="stop4780" />
<stop
offset="1"
style="stop-color:#99bf83"
id="stop4782" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4792"
xlink:href="#linearGradient4786"
y1="510.798"
y2="498.798"
x1="404.57144"
gradientUnits="userSpaceOnUse"
x2="391.57144"
gradientTransform="matrix(0.54537286,0,0,0.5453731,-211.00709,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4786">
<stop
style="stop-color:#99c487"
id="stop4788" />
<stop
offset="1"
style="stop-color:#b4d99e"
id="stop4790" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4808"
xlink:href="#linearGradient4802"
y1="501.798"
y2="501.61618"
x1="404.57144"
gradientUnits="userSpaceOnUse"
x2="421.57144"
gradientTransform="matrix(0.55412222,0,0,0.5453731,-214.54684,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4802">
<stop
style="stop-color:#75d5c7"
id="stop4804" />
<stop
offset="1"
style="stop-color:#66afb9"
id="stop4806" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4776"
xlink:href="#linearGradient4770"
y1="495.798"
y2="504.798"
x1="428.57144"
gradientUnits="userSpaceOnUse"
x2="438.57144"
gradientTransform="matrix(0.52008014,0,0,0.52678123,-200.19565,-257.66084)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4770">
<stop
style="stop-color:#5c7b9e"
id="stop4772" />
<stop
offset="1"
style="stop-color:#839dc0"
id="stop4774" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4816"
xlink:href="#linearGradient4810"
x1="421.57144"
gradientUnits="userSpaceOnUse"
x2="406.57144"
gradientTransform="matrix(0.53898118,0,0,0.5453731,-208.4851,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4810">
<stop
style="stop-color:#7fbcc6"
id="stop4812" />
<stop
offset="1"
style="stop-color:#8ee4e3"
id="stop4814" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4824"
xlink:href="#linearGradient4818"
x1="421.57144"
gradientUnits="userSpaceOnUse"
x2="436.57144"
gradientTransform="matrix(0.53898118,0,0,0.5453731,-208.4851,-266.95302)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4818">
<stop
style="stop-color:#84d5d7"
id="stop4820" />
<stop
offset="1"
style="stop-color:#84a8ba"
id="stop4822" />
</linearGradient>
</defs>
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4272);stroke-width:1.38822;stroke-opacity:0.550265"
id="rect4254"
d="m 12.609952,22.480327 v 3.786058 1.081732 1.081732 h 6.941111 v -1.081732 -1.081732 -3.786058 z" />
<rect
width="25.781261"
x="3.1898794"
y="4.6317577"
height="19.47117"
style="fill:url(#linearGradient4250);stroke-width:1.38822;stroke-opacity:0.550265"
id="rect4173" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4597-5);stroke-width:0.495794"
id="path4589-5"
d="M 4.1814606,5.6233479 V 21.984537 H 27.896628 V 5.6233479 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4681);fill-rule:evenodd;stroke-width:0.495794"
id="path4476-9"
d="m 9.6351903,14.051844 -5.4537297,4.665775 v 3.266918 h 5.4537297 z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4689);fill-rule:evenodd;stroke-width:0.495794"
id="path4478-4"
d="m 9.6351903,14.547643 v 7.436894 h 9.0987617 z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4728);fill-rule:evenodd;stroke-width:0.495794"
id="path4488-0-8"
d="m 27.979555,14.051844 -9.420079,7.932693 9.420079,6e-6 z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4840);fill-rule:evenodd;stroke-width:0.495794"
id="path4188-3"
d="M 19.055269,18.712299 V 6.6149407 l 8.924286,7.4369033 -8.924286,7.932693 z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4784);fill-rule:evenodd;stroke-width:0.495794"
id="path4192-6"
d="M 4.1814606,9.5897025 V 20.001373 l 5.4537297,-5.45373 z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4792);fill-rule:evenodd;stroke-width:0.495794"
id="path4198-3"
d="M 4.1814606,5.6233479 V 9.8585104 L 9.6351903,14.547643 V 11.077078 5.6233479 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4808);fill-rule:evenodd;stroke-width:0.495794"
id="path4200-1"
d="m 9.6351903,5.6233479 v 5.4537301 3.470565 L 19.055269,6.6149407 17.56789,5.6233539 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4776);fill-rule:evenodd;stroke-width:0.495794"
id="path4202-1"
d="m 20.318899,5.6233479 -1.26363,0.9915928 8.924286,7.4369033 V 11.077082 5.6233539 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4816);fill-rule:evenodd;stroke-width:0.495794"
id="path4206-9-2"
d="m 17.56789,5.6233539 1.487379,0.9915868 V 5.6233539 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4824);fill-rule:evenodd;stroke-width:0.495794"
id="path4208-1-1"
d="M 19.055269,5.6233539 V 6.6149407 L 20.54265,5.6233539 Z" />
<rect
width="11.899032"
x="10.13099"
y="27.934057"
height="0.49580356"
style="fill:#99a1a7;stroke-width:1.38822;stroke-opacity:0.550265"
id="rect4295" />
<g
id="g4392"
transform="matrix(0.49579363,0,0,0.49579363,-186.48659,-243.16488)">
<rect
width="47.999989"
x="384.57144"
y="530.79797"
height="3.9999831"
style="fill:#ffffff;fill-opacity:0.784314"
id="rect4267" />
<circle
cx="429.57144"
cy="532.79791"
style="fill:#4d4d4d"
r="1"
id="path4166" />
<path
inkscape:connector-curvature="0"
style="fill:#4d4d4d"
id="rect4183"
d="m 386.57143,531.79799 v 1 h 1 v -1 z m 1,1 v 1 h 1 v -1 z" />
</g>
<g
id="g4383"
transform="matrix(0.49579363,0,0,0.49579363,-186.48659,-243.16488)">
<rect
width="19.999987"
x="386.57144"
y="503.798"
height="16.999994"
style="fill:#ffffff;fill-opacity:0.784314"
id="rect3432" />
<path
inkscape:connector-curvature="0"
style="fill:#3580ca"
id="rect4160"
d="m 387.57143,504.79799 v 4 h 4.16667 v -3 h -1.04167 l -1.04166,-1 z" />
<path
inkscape:connector-curvature="0"
style="fill:#ff9955"
id="rect4235"
d="m 395.57143,504.79799 v 5 h 4 v -3 l -2,-2 z" />
<path
inkscape:connector-curvature="0"
style="fill:#d45500;fill-rule:evenodd"
id="path4237"
d="m 397.57143,504.79799 2,2 h -2 z" />
<path
inkscape:connector-curvature="0"
style="fill:#7aabdc"
id="rect4272"
d="m 387.57143,505.79799 h 5 v 4 h -5 z" />
<path
inkscape:connector-curvature="0"
style="fill:#71c837"
id="path4275"
d="m 401.57143,504.79799 v 5 h 4 v -3 l -2,-2 z" />
<path
inkscape:connector-curvature="0"
style="fill:#447821;fill-rule:evenodd"
id="path4277"
d="m 403.57143,504.79799 2,2 h -2 z" />
</g>
<path
style="fill:#da4453;stroke-width:0.775072"
d="m 23.869153,13.679132 a 7.7507194,7.7507194 0 0 1 -7.750719,7.75072 7.7507194,7.7507194 0 0 1 -7.7507207,-7.75072 7.7507194,7.7507194 0 0 1 7.7507207,-7.7507185 7.7507194,7.7507194 0 0 1 7.750719,7.7507185 z"
id="circle44" />
</svg>
07070100000011000081A400000000000000000000000165ADD936000000A8000000000000000000000000000000000000004E00000000xwaylandvideobridge-0.4.0+git12/icons/sc-apps-xwaylandvideobridge.svg.licenseSPDX-License-Identifier: BSD-3-Clause
SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
07070100000012000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002300000000xwaylandvideobridge-0.4.0+git12/po07070100000013000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/ca07070100000014000081A400000000000000000000000165ADD936000006C0000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/ca/xwaylandvideobridge.po# Translation of xwaylandvideobridge.po to Catalan
# Copyright (C) 2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
# or the same license as the source of its messages in English.
#
# Josep M. Ferrer <txemaq@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 17:22+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 20.12.0\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Josep M. Ferrer"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "txemaq@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Pont d'enregistrament Wayland a X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Pont de vídeo de l'Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Ofereix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a "
"les aplicacions X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Surt"
07070100000015000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002F00000000xwaylandvideobridge-0.4.0+git12/po/ca@valencia07070100000016000081A400000000000000000000000165ADD936000006CD000000000000000000000000000000000000004600000000xwaylandvideobridge-0.4.0+git12/po/ca@valencia/xwaylandvideobridge.po# Translation of xwaylandvideobridge.po to Catalan (Valencian)
# Copyright (C) 2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
# or the same license as the source of its messages in English.
#
# Josep M. Ferrer <txemaq@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 17:22+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 20.12.0\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Josep M. Ferrer"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "txemaq@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Pont de gravació Wayland a X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Pont de vídeo d'XWayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Oferix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a "
"les aplicacions X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autoria"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Ix"
07070100000017000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/cs07070100000018000081A400000000000000000000000165ADD93600000585000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/cs/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Vit Pelcak <vit@pelcak.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 15:07+0200\n"
"Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Vít Pelčák"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "vit@pelcak.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr ""
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr ""
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Ukončit"
07070100000019000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/de0707010000001A000081A400000000000000000000000165ADD9360000062B000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/de/xwaylandvideobridge.po# German translations for xwaylandvideobridge package.
# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Frederik Schwarzer <schwarzer@kde.org>, 2023.
#
# Automatically generated, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-07 15:30+0200\n"
"Last-Translator: Frederik Schwarzer <schwarzer@kde.org>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.07.70\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Deutsches KDE-Übersetzerteam"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "kde-i18n-de@kde.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Aufnahmebrücke von Wayland nach X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland-Video-Brücke"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "Copyright 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Beenden"
0707010000001B000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002900000000xwaylandvideobridge-0.4.0+git12/po/en_GB0707010000001C000081A400000000000000000000000165ADD936000005ED000000000000000000000000000000000000004000000000xwaylandvideobridge-0.4.0+git12/po/en_GB/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Steve Allewell <steve.allewell@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-08 11:13+0100\n"
"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
"Language-Team: British English\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.03.70\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Steve Allewell"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "steve.allewell@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland to X Recording bridge"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland Video Bridge"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Offer XDG Desktop Portals screencast streams to X11 apps"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Author"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Quit"
0707010000001D000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/eo0707010000001E000081A400000000000000000000000165ADD93600000638000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/eo/xwaylandvideobridge.po# translation of xwaylandvideobridge.pot to esperanto
# Copyright (C) 2023 Free Software Foundation, Inc.
# This file is distributed under the same license as the xwaylandvideobridge package.
# Oliver Kellogg <okellogg@users.sourceforge.net, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-07-15 17:53+0100\n"
"Last-Translator: Oliver Kellogg <okellogg@users.sourceforge.net>\n"
"Language-Team: Esperanto <kde-i18n-eo@kde.org>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Oliver Kellogg"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "okellogg@users.sourceforge.net"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland al X-Registraĵa ponto"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland Video-Ponto"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Oferti \"XDG Desktop Portals\" ekranregistraĵajn fluojn al X11-aplikoj"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Aŭtoro"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Ĉesigi"
0707010000001F000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/es07070100000020000081A400000000000000000000000165ADD9360000066B000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/es/xwaylandvideobridge.po# Spanish translations for xwaylandvideobridge.po package.
# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Automatically generated, 2023.
# Eloy Cuadra <ecuadra@eloihr.net>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-08 00:13+0200\n"
"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.03.90\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Eloy Cuadra"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "ecuadra@eloihr.net"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Pasarela de grabación de Wayland a X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Pasarela de vídeo Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Ofrecer emisiones de vídeo de los portales de escritorio XDG a las "
"aplicaciones de X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Salir"
07070100000021000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/eu07070100000022000081A400000000000000000000000165ADD9360000069E000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/eu/xwaylandvideobridge.po# Translation for xwaylandvideobridge.po to Euskara/Basque (eu).
# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>.
#
# Translators:
# Iñigo Salvador Azurmendi <xalba@ni.eus>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-14 00:30+0200\n"
"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Iñigo Salvador Azurmendi"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "xalba@ni.eus"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "«Wayland»etik «X»ra grabatzeko zubia"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland bideo zubia"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Eskaini XDG mahaigain atarien pantaila-grabazio korronteak X11 aplikazioei"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Egilea"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Irten"
07070100000023000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/fi07070100000024000081A400000000000000000000000165ADD9360000060B000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/fi/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Tommi Nieminen <translator@legisign.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-05-08 13:50+0300\n"
"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 23.04.0\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Tommi Nieminen"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "translator@legisign.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Waylandistä X:ään -talletussilta"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland-videosilta"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Tarjoa XDG-työpöytäportaalin näytöntoistovirtoja X11-sovelluksiin"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Tekijä"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Lopeta"
07070100000025000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/fr07070100000026000081A400000000000000000000000165ADD936000005E5000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/fr/xwaylandvideobridge.po# SPDX-FileCopyrightText: 2023 Xavier Besnard <xavier.besnard@kde.org>
# Xavier Besnard <xavier.besnard@kde.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-12-20 09:28+0100\n"
"Last-Translator: Xavier Besnard <xavier.besnard@kde.org>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 23.08.4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Xavier Besnard"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "xavier.besnard@kde.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland vers un pont d'enregistrement pour X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Pont vidéo XWayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Proposer des flux de diffusion d'écrans pour des portails e bureaux « XDG » "
"vers les applications sous X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Auteur"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Quitter"
07070100000027000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/gl07070100000028000081A400000000000000000000000165ADD9360000063A000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/gl/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-30 10:45+0200\n"
"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
"Language-Team: Galician <proxecto@trasno.gal>\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.04.0\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Adrian Chaves (Gallaecio)"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "adrian@chaves.io"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Ponte de gravación de Wayland a X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Ponte de vídeo de XWayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Ofrecer aos portais de escritorio de XDG fluxos de emisión de pantalla de "
"aplicacións de X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© 2022 Aleix Pol González"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Saír"
07070100000029000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/it0707010000002A000081A400000000000000000000000165ADD93600000621000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/it/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Vincenzo Reale <smart2128vr@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-07 08:23+0200\n"
"Last-Translator: Vincenzo Reale <smart2128vr@gmail.com>\n"
"Language-Team: Italian <kde-i18n-it@kde.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Vincenzo Reale"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "smart2128vr@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Bridge di registrazione da Wayland a X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Bridge video XWayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Offri i flussi di trasmissione dello schermo dei portali desktop XDG alle "
"applicazioni X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autore"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Esci"
0707010000002B000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/ja0707010000002C000081A400000000000000000000000165ADD93600000498000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/ja/xwaylandvideobridge.pomsgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 00:04-0700\n"
"Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n"
"Language-Team: Japanese <kde-jp@kde.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr ""
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr ""
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr ""
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr ""
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr ""
0707010000002D000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/ka0707010000002E000081A400000000000000000000000165ADD936000006B8000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/ka/xwaylandvideobridge.po# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-07 05:05+0200\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <kde-i18n-doc@kde.org>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.2.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Temuri Doghonadze"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "Temuri.doghonadze@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland-დან X-მდე ჩაწერის ხიდი"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland-ის ვიდეოხიდი"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"X11-ის აპებისთვის XDG Desktop Portals-ის screencast ნაკადების შეთავაზება"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "ავტორი"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "გასვლა"
0707010000002F000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/ko07070100000030000081A400000000000000000000000165ADD936000005E2000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/ko/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
# Shinjo Park <kde@peremen.name>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-08-06 20:58+0200\n"
"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean <kde-kr@kde.org>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "박신조"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "kde@peremen.name"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland to X 녹화 브리지"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland 비디오 브리지"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "XDG 데스크톱 포털에 X11 앱으로 스크린캐스트 제공"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "작성자"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "끝내기"
07070100000031000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/nl07070100000032000081A400000000000000000000000165ADD936000005EF000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/nl/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Freek de Kruijf <freekdekruijf@kde.nl>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 10:40+0200\n"
"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
"Language-Team: \n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Freek de Kruijf - 2023"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "freekdekruijf@kde.nl"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland naar X-opname-bridge"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland video-bridge"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"XDG schermfilmstreams van bureaubladportalen bieden aan X11 toepassingen"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Auteur"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Afsluiten"
07070100000033000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/nn07070100000034000081A400000000000000000000000165ADD9360000060C000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/nn/xwaylandvideobridge.po# Translation of xwaylandvideobridge to Norwegian Nynorsk
#
# Karl Ove Hufthammer <karl@huftis.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-08-01 21:40+0200\n"
"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
"Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.04.3\n"
"X-Environment: kde\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Karl Ove Hufthammer"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "karl@huftis.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Opptaksbru for Wayland til X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland-videobru"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Tilbyr XDG Desktop Portals-skjermkastingsstraumar til X11-program"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Opphavsperson"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Avslutt"
07070100000035000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/pl07070100000036000081A400000000000000000000000165ADD93600000652000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/pl/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-10-15 11:51+0200\n"
"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 23.04.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Łukasz Wojniłowicz"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "lukasz.wojnilowicz@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Mostek nagrywania Wayland na X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Mostek obrazu Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Daj strumienie Portali Pulpitu XDG aplikacjom X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Zakończ"
07070100000037000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/pt07070100000038000081A400000000000000000000000165ADD936000005BD000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/pt/xwaylandvideobridge.pomsgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 10:25+0100\n"
"Last-Translator: José Nuno Coelho Pires <zepires@gmail.com>\n"
"Language-Team: Portuguese <kde-i18n-pt@kde.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POFile-SpellExtra: Wayland Xwayland Aleix Pol Gonzalez XDG Desktop\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-POFile-SpellExtra: Portals\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "José Nuno Pires"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "zepires@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Interface de gravação do Wayland para o X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Interface de Vídeo para o Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Disponibiliza transmissões do XDG Desktop Portals para as aplicações de X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autoria"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Sair"
07070100000039000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002900000000xwaylandvideobridge-0.4.0+git12/po/pt_BR0707010000003A000081A400000000000000000000000165ADD9360000063A000000000000000000000000000000000000004000000000xwaylandvideobridge-0.4.0+git12/po/pt_BR/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-07-05 17:15-0300\n"
"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Luiz Fernando Ranghetti"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "elchevive@opensuse.org"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland para ponte de gravação X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Ponte de vídeo Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Oferece fluxos de screencast do XDG Desktop Portals para aplicativos X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Sair"
0707010000003B000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/sk0707010000003C000081A400000000000000000000000165ADD93600000559000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/sk/xwaylandvideobridge.po# translation of xwaylandvideobridge.po to Slovak
# Roman Paholík <wizzardsk@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-07 08:07+0200\n"
"Last-Translator: Roman Paholik <wizzardsk@gmail.com>\n"
"Language-Team: Slovak <kde-sk@linux.sk>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 22.12.3\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Roman Paholík"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "wizzardsk@gmail.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr ""
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland video most"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Autor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Ukončiť"
0707010000003D000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/sl0707010000003E000081A400000000000000000000000165ADD9360000062F000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/sl/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Matjaž Jeran <matjaz.jeran@amis.net>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-07 08:03+0200\n"
"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Matjaž Jeran"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "matjaz.jeran@amis.net"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Premostitev snemalnika Wayland na X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland Video Bridge"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "Nudi portalom namizja XDG zaslonske tokove aplikacijam X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Avtor"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Zapusti"
0707010000003F000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/sv07070100000040000081A400000000000000000000000165ADD93600000634000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/sv/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-08-18 11:17+0200\n"
"Last-Translator: Stefan Asserhäll <stefan.asserhall@bredband.net>\n"
"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.04.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Stefan Asserhäll"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "stefan.asserhall@bredband.net"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland till X inspelningsbrygga"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland videobrygga"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Tillhandahåll XDG-skrivbordsportalens skärmsändningsströmmar till X11-program"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Upphovsman"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Avsluta"
07070100000041000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/tr07070100000042000081A400000000000000000000000165ADD936000005FA000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/tr/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Emir SARI <emir_sari@icloud.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 13:16+0300\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Emir SARI"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "emir_sari@icloud.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland'den X'e Kayıt Köprüsü"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland Video Köprüsü"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "X11 uygulamalarına XDG Masaüstü Portalları ekran yayını akışları sun"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Yazar"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Çık"
07070100000043000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002600000000xwaylandvideobridge-0.4.0+git12/po/uk07070100000044000081A400000000000000000000000165ADD936000006BA000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/po/uk/xwaylandvideobridge.po# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# Yuri Chornoivan <yurchor@ukr.net>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-04-06 07:45+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Lokalize 20.12.0\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Юрій Чорноіван"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "yurchor@ukr.net"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Місток запису від Wayland до X"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Відеомісток Xwayland"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr ""
"Надає змогу порталам стільниці XDG транслювати потоки даних до програм X11"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "© Aleix Pol Gonzalez, 2022"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "Автор"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "Вийти"
07070100000045000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002900000000xwaylandvideobridge-0.4.0+git12/po/zh_CN07070100000046000081A400000000000000000000000165ADD936000005A5000000000000000000000000000000000000004000000000xwaylandvideobridge-0.4.0+git12/po/zh_CN/xwaylandvideobridge.pomsgid ""
msgstr ""
"Project-Id-Version: kdeorg\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2024-01-21 14:15\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: kdeorg\n"
"X-Crowdin-Project-ID: 269464\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /kf5-trunk/messages/xwaylandvideobridge/xwaylandvideobridge."
"pot\n"
"X-Crowdin-File-ID: 42107\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Tyson Tan"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "tds00@qq.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland 到 X 录像桥接程序"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland 视频桥接程序"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "将 XDG 桌面门户投屏视频流提供给 X11 应用程序"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "作者"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "退出"
07070100000047000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002900000000xwaylandvideobridge-0.4.0+git12/po/zh_TW07070100000048000081A400000000000000000000000165ADD93600000616000000000000000000000000000000000000004000000000xwaylandvideobridge-0.4.0+git12/po/zh_TW/xwaylandvideobridge.po# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the xwaylandvideobridge package.
#
# SPDX-FileCopyrightText: 2023 Kisaragi Hiu <mail@kisaragi-hiu.com>
msgid ""
msgstr ""
"Project-Id-Version: xwaylandvideobridge\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-11-11 00:44+0000\n"
"PO-Revision-Date: 2023-12-24 05:04+0900\n"
"Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n"
"Language-Team: Traditional Chinese <zh-l10n@lists.slat.org>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Lokalize 23.08.4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Kisaragi Hiu"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "mail@kisaragi-hiu.com"
#: src/contentswindow.cpp:51
#, kde-format
msgid "Wayland to X Recording bridge"
msgstr "Wayland 到 X 的錄製橋接"
#: src/main.cpp:40
#, kde-format
msgid "Xwayland Video Bridge"
msgstr "Xwayland 影像橋接"
#: src/main.cpp:40
#, kde-format
msgid "Offer XDG Desktop Portals screencast streams to X11 apps"
msgstr "提供 XDG Desktop Portals 螢幕錄製串流給 X11 應用程式"
#: src/main.cpp:41
#, kde-format
msgid "(C) 2022 Aleix Pol Gonzalez"
msgstr "(C) 2022 Aleix Pol Gonzalez"
#: src/main.cpp:43 src/main.cpp:44
#, kde-format
msgid "Author"
msgstr "作者"
#: src/xwaylandvideobridge.cpp:101
#, kde-format
msgid "Quit"
msgstr "離開"
07070100000049000041ED00000000000000000000000265ADD93600000000000000000000000000000000000000000000002400000000xwaylandvideobridge-0.4.0+git12/src0707010000004A000081A400000000000000000000000165ADD9360000071B000000000000000000000000000000000000003300000000xwaylandvideobridge-0.4.0+git12/src/CMakeLists.txt# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
# SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
add_executable(xwaylandvideobridge)
qt_add_dbus_interface(
XDP_SRCS
org.freedesktop.portal.ScreenCast.xml
xdp_dbus_screencast_interface
)
ecm_qt_install_logging_categories(EXPORT XWAYLANDVIDEOBRIDGE FILE xwaylandvideobridge.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})
ecm_qt_declare_logging_category(XDP_SRCS HEADER xwaylandvideobridge_debug.h IDENTIFIER XWAYLANDBRIDGE CATEGORY_NAME org.kde.xwaylandvideobridge DESCRIPTION "Xwayland Video Bridge" EXPORT XWAYLANDVIDEOBRIDGE)
target_sources(xwaylandvideobridge PRIVATE
main.cpp
xwaylandvideobridge.cpp
contentswindow.cpp
x11recordingnotifier.cpp
${XDP_SRCS}
)
configure_file(version.h.in version.h)
target_link_libraries(xwaylandvideobridge
KF${QT_MAJOR_VERSION}::I18n
KF${QT_MAJOR_VERSION}::CoreAddons
KF${QT_MAJOR_VERSION}::WindowSystem
KF${QT_MAJOR_VERSION}::Notifications
Qt${QT_MAJOR_VERSION}::Quick
Qt${QT_MAJOR_VERSION}::DBus
Qt${QT_MAJOR_VERSION}::Widgets
K::KPipeWireRecord
XCB::XCB
XCB::COMPOSITE
XCB::RECORD
)
if (QT_MAJOR_VERSION STREQUAL "6")
target_link_libraries(xwaylandvideobridge Qt6::GuiPrivate KF6::StatusNotifierItem)
elseif (QT_MAJOR_VERSION STREQUAL "5")
target_link_libraries(xwaylandvideobridge Qt5::X11Extras)
endif()
install(TARGETS xwaylandvideobridge ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
install(PROGRAMS org.kde.xwaylandvideobridge.desktop DESTINATION ${KDE_INSTALL_APPDIR})
install(FILES org.kde.xwaylandvideobridge.desktop DESTINATION ${KDE_INSTALL_AUTOSTARTDIR})
install(FILES org.kde.xwaylandvideobridge.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
0707010000004B000081A400000000000000000000000165ADD93600000D94000000000000000000000000000000000000003700000000xwaylandvideobridge-0.4.0+git12/src/contentswindow.cpp/*
* Copyright 2023 David Edmundson <davidedmundson@kde.org>
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#include "contentswindow.h"
#include <KLocalizedString>
#include <KWindowSystem>
#include <KX11Extras>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <private/qtx11extras_p.h>
#else
#include <QX11Info>
#endif
struct MotifHints
{
u_int32_t flags = 0;
u_int32_t functions = 0;
u_int32_t decorations = 0;
int32_t inputMode = 0;
u_int32_t status = 0;
};
struct GtkFrameExtents
{
uint32_t left = 0;
uint32_t right = 0;
uint32_t top = 0;
uint32_t bottom = 0;
};
static xcb_atom_t intern_atom(xcb_connection_t *c, const char *name)
{
xcb_atom_t atom = XCB_NONE;
QScopedPointer<xcb_intern_atom_reply_t, QScopedPointerPodDeleter> reply(xcb_intern_atom_reply(c, xcb_intern_atom(c, false, strlen(name), name), nullptr));
if (reply) {
atom = reply->atom;
}
return atom;
}
ContentsWindow::ContentsWindow()
{
resize(QSize(100, 100));
setTitle(i18n("Wayland to X Recording bridge"));
setOpacity(0);
setFlag(Qt::WindowDoesNotAcceptFocus);
setFlag(Qt::WindowTransparentForInput);
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
KX11Extras::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher);
#else
KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher);
#endif
// remove decoration. We can't use the Qt helper as we need our window type to remain something
// that keeps us valid for streams
MotifHints hints;
hints.flags = 2;
xcb_atom_t motif_hints_atom = intern_atom(QX11Info::connection(), "_MOTIF_WM_HINTS");
xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, winId(), motif_hints_atom, motif_hints_atom, 32, 5, (const void *)&hints);
handleResize();
}
void ContentsWindow::resize(const QSize &size)
{
if (size.isEmpty()) {
return;
}
QQuickWindow::resize(size);
handleResize();
}
void ContentsWindow::handleResize()
{
// In theory this isn't needed - we're transparent for input, but a bug in either Xorg or kwin means
// that it doesn't. If we forward to X it falls to the X window underneath, but kwin still "knows" theres
// an xwayland surface there and sends to X and not the right client
// Solvable by either kwin checking event mask or Xserver setting a null input_region based on the event mask
// but I want things now! so instead do a hack of moving things offscreen
// hopefully drop for a Plasma 6
// if we blindly just set oursevles to offscreen, kwin will try to position us back
// if we set override-redirect screencast clients skip us.
// frames can be offscreen though, so lets make the whole window part of the frame and then
// put that bit of "frame" offscreen
// Don't let window manager devs see this
GtkFrameExtents frame;
frame.top = height() - 1;
frame.left = width() -1 ;
setX(-width() + 1); // unforutnately we still need 1px on screen to get callbacks
xcb_atom_t gtk_frame_extent_atom = intern_atom(QX11Info::connection(), "_GTK_FRAME_EXTENTS");
xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, winId(), gtk_frame_extent_atom, XCB_ATOM_CARDINAL, 32, 4, (const void *)&frame);
}
0707010000004C000081A400000000000000000000000165ADD93600000184000000000000000000000000000000000000003500000000xwaylandvideobridge-0.4.0+git12/src/contentswindow.h/*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#pragma once
#include <QQuickWindow>
#include <QObject>
class ContentsWindow : public QQuickWindow
{
Q_OBJECT
public:
ContentsWindow();
//shadow super class
void resize(const QSize &size);
private:
void init();
void handleResize();
};
0707010000004D000081A400000000000000000000000165ADD936000007F8000000000000000000000000000000000000002D00000000xwaylandvideobridge-0.4.0+git12/src/main.cpp/*
* App to render feeds coming from xdg-desktop-portal
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#include "xwaylandvideobridge.h"
#include "version.h"
#include <QApplication>
#include <QCommandLineParser>
#include <QSessionManager>
#include <QIcon>
#include <KLocalizedString>
#include <KAboutData>
int main(int argc, char **argv)
{
if (qgetenv("XDG_SESSION_TYPE") == "x11") {
return 0;
}
qputenv("QT_QPA_PLATFORM", "xcb");
qputenv("QT_XCB_GL_INTEGRATION", "xcb_egl");
qputenv("QT_QPA_UPDATE_IDLE_TIME", "0");
qputenv("QSG_RENDER_LOOP", "basic");
QApplication app(argc, argv); // widgets are needed just for the SNI.
app.setAttribute(Qt::AA_UseHighDpiPixmaps);
auto disableSessionManagement = [](QSessionManager &sm) {
sm.setRestartHint(QSessionManager::RestartNever);
};
QObject::connect(&app, &QGuiApplication::commitDataRequest, disableSessionManagement);
QObject::connect(&app, &QGuiApplication::saveStateRequest, disableSessionManagement);
KLocalizedString::setApplicationDomain("xwaylandvideobridge");
{
KAboutData about("xwaylandvideobridge", i18n("Xwayland Video Bridge"), version, i18n("Offer XDG Desktop Portals screencast streams to X11 apps"),
KAboutLicense::GPL, i18n("(C) 2022 Aleix Pol Gonzalez"));
about.addAuthor("Aleix Pol Gonzalez", i18n("Author"), "aleixpol@kde.org" );
about.addAuthor("David Edmundson", i18n("Author"), "davidedmundson@kde.org" );
KAboutData::setApplicationData(about);
QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("xwaylandvideobridge"), app.windowIcon()));
QCommandLineParser parser;
about.setupCommandLine(&parser);
parser.process(app);
about.processCommandLine(&parser);
new XwaylandVideoBridge(&app);
}
return app.exec();
}
0707010000004E000081A400000000000000000000000165ADD93600003514000000000000000000000000000000000000004A00000000xwaylandvideobridge-0.4.0+git12/src/org.freedesktop.portal.ScreenCast.xml<?xml version="1.0"?>
<!--
# SPDX-License-Identifier: LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2017-2018 Red Hat, Inc.
-->
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<!--
org.freedesktop.portal.ScreenCast:
@short_description: Screen cast portal
The Screen cast portal allows to create screen cast sessions.
This documentation describes version 4 of this interface.
-->
<interface name="org.freedesktop.portal.ScreenCast">
<!--
CreateSession:
@options: Vardict with optional further information
@handle: Object path for the #org.freedesktop.portal.Request object representing this call
Create a screen cast session. A successfully created session can at
any time be closed using org.freedesktop.portal.Session.Close(), or may
at any time be closed by the portal implementation, which will be
signalled via #org.freedesktop.portal.Session::Closed.
Supported keys in the @options vardict include:
<variablelist>
<varlistentry>
<term>handle_token s</term>
<listitem><para>
A string that will be used as the last element of the @handle. Must be a valid
object path element. See the #org.freedesktop.portal.Request documentation for
more information about the @handle.
</para></listitem>
</varlistentry>
<varlistentry>
<term>session_handle_token s</term>
<listitem><para>
A string that will be used as the last element of the session handle. Must be a valid
object path element. See the #org.freedesktop.portal.Session documentation for
more information about the session handle.
</para></listitem>
</varlistentry>
</variablelist>
The following results get returned via the #org.freedesktop.portal.Request::Response signal:
<variablelist>
<varlistentry>
<term>session_handle o</term>
<listitem><para>
The session handle. An object path for the
#org.freedesktop.portal.Session object representing the created
session.
</para></listitem>
</varlistentry>
</variablelist>
-->
<method name="CreateSession">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="o" name="handle" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
</method>
<!--
SelectSources:
@session_handle: Object path for the #org.freedesktop.portal.Session object
@options: Vardict with optional further information
@handle: Object path for the #org.freedesktop.portal.Request object representing this call
Configure what the screen cast session should record. This method must
be called before starting the session.
Passing invalid input to this method will cause the session to be
closed. An application may only attempt to select sources once per
session.
Supported keys in the @options vardict include:
<variablelist>
<varlistentry>
<term>handle_token s</term>
<listitem><para>
A string that will be used as the last element of the @handle. Must be a valid
object path element. See the #org.freedesktop.portal.Request documentation for
more information about the @handle.
</para></listitem>
</varlistentry>
<varlistentry>
<term>types u</term>
<listitem><para>
Bitmask of what types of content to record. Default is MONITOR.
</para></listitem>
</varlistentry>
<varlistentry>
<term>multiple b</term>
<listitem><para>
Whether to allow selecting multiple sources. Default is no.
</para></listitem>
</varlistentry>
<varlistentry>
<term>cursor_mode u</term>
<listitem><para>
Determines how the cursor will be drawn in the screen cast stream. It must be
one of the cursor modes advertised in
#org.freedesktop.portal.ScreenCast.AvailableCursorModes. Setting a cursor mode
not advertised will cause the screen cast session to be closed. The default
cursor mode is 'Hidden'.
This option was added in version 2 of this interface.
</para></listitem>
</varlistentry>
<varlistentry>
<term>restore_token s</term>
<listitem><para>
The token to restore a previous session.
If the stored session cannot be restored, this value is ignored
and the user will be prompted normally. This may happen when, for
example, the session contains a monitor or a window that is not
available anymore, or when the stored permissions are withdrawn.
The restore token is invalidated after using it once. To restore
the same session again, use the new restore token sent in response
to starting this session.
This option was added in version 4 of this interface.
</para></listitem>
</varlistentry>
<varlistentry>
<term>persist_mode u</term>
<listitem><para>
How this session should persist. Default is 0. Accepted values are:
<simplelist>
<member>0: Do not persist (default)</member>
<member>1: Permissions persist as long as the application is running</member>
<member>2: Permissions persist until explicitly revoked</member>
</simplelist>
Remote desktop screen cast sessions cannot persist. The only allowed
persist_mode for remote desktop sessions is 0.
If the permission for the session to persist is granted, a restore token will
be returned via the #org.freedesktop.portal.Request::Response signal of the
#org.freedesktop.portal.ScreenCast.Start method.
This option was added in version 4 of this interface.
</para></listitem>
</varlistentry>
</variablelist>
For available source types, see the AvailableSourceTypes property.
-->
<method name="SelectSources">
<arg type="o" name="session_handle" direction="in"/>
<arg type="a{sv}" name="options" direction="in"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
<arg type="o" name="handle" direction="out"/>
</method>
<!--
Start:
@session_handle: Object path for the #org.freedesktop.portal.Session object
@parent_window: Identifier for the application window, see <link linkend="parent_window">Common Conventions</link>
@options: Vardict with optional further information
@handle: Object path for the #org.freedesktop.portal.Request object representing this call
Start the screen cast session. This will typically result the portal
presenting a dialog letting the user do the selection set up by
org.freedesktop.portal.ScreenCast.SelectSources(). An application can
only attempt start a session once.
A screen cast session may only be started after having selected sources
using org.freedesktop.portal.ScreenCast.SelectSources().
Supported keys in the @options vardict include:
<variablelist>
<varlistentry>
<term>handle_token s</term>
<listitem><para>
A string that will be used as the last element of the @handle. Must be a valid
object path element. See the #org.freedesktop.portal.Request documentation for
more information about the @handle.
</para></listitem>
</varlistentry>
</variablelist>
The following results get returned via the
#org.freedesktop.portal.Request::Response signal:
<variablelist>
<varlistentry>
<term>streams a(ua{sv})</term>
<listitem><para>
An array of PipeWire streams. Each stream consists of a PipeWire
node ID (the first element in the tuple, and a Vardict of
properties.
The array will contain a single stream if 'multiple' (see
org.freedesktop.portal.ScreenCast.SelectSources())
was set to 'false', or at least one stream if
'multiple' was set to 'true' as part of the
org.freedesktop.portal.ScreenCast.SelectSources() method.
</para></listitem>
</varlistentry>
<varlistentry>
<term>restore_token s</term>
<listitem><para>
The restore token. This token is a single use token that can later
be used to restore a session. See
org.freedesktop.portal.ScreenCast.SelectSources() for details.
This response option was added in version 4 of this interface.
</para></listitem>
</varlistentry>
</variablelist>
Stream properties include:
<variablelist>
<varlistentry>
<term>id s</term>
<listitem><para>
Opaque identifier. Will be unique for this stream and local to this
session. Will persist with future sessions, if they are restored
using a restore token. This property was added in version 4 of this
interface. Optional.
</para></listitem>
</varlistentry>
<varlistentry>
<term>position (ii)</term>
<listitem><para>
A tuple consisting of the position (x, y) in the compositor
coordinate space. Note that the position may not be equivalent to a
position in a pixel coordinate space. Only available for monitor
streams. Optional.
</para></listitem>
</varlistentry>
<varlistentry>
<term>size (ii)</term>
<listitem><para>
A tuple consisting of (width, height). The size represents the size
of the stream as it is displayed in the compositor coordinate
space. Note that this size may not be equivalent to a size in a
pixel coordinate space. The size may differ from the size of the
stream. Optional.
</para></listitem>
</varlistentry>
<varlistentry>
<term>source_type u</term>
<listitem><para>
The type of the content which is being screen casted.
For available source types, see the AvailableSourceTypes property.
This property was added in version 3 of this interface.
</para></listitem>
</varlistentry>
</variablelist>
-->
<method name="Start">
<arg type="o" name="session_handle" direction="in"/>
<arg type="s" name="parent_window" direction="in"/>
<arg type="a{sv}" name="options" direction="in"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QVariantMap"/>
<arg type="o" name="handle" direction="out"/>
</method>
<!--
OpenPipeWireRemote:
@session_handle: Object path for the #org.freedesktop.portal.Session object
@options: Vardict with optional further information
@fd: File descriptor of an open PipeWire remote.
Open a file descriptor to the PipeWire remote where the screen cast
streams are available. The file descriptor should be used to create a
<classname>pw_core</classname> object, by using
<function>pw_context_connect_fd</function>. Only the screen cast stream
nodes will be available from this PipeWire node.
-->
<method name="OpenPipeWireRemote">
<annotation name="org.gtk.GDBus.C.Name" value="open_pipewire_remote"/>
<annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
<arg type="o" name="session_handle" direction="in"/>
<arg type="a{sv}" name="options" direction="in"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
<arg type="h" name="fd" direction="out"/>
</method>
<!--
AvailableSourceTypes:
A bitmask of available source types. Currently defined types are:
<simplelist>
<member>1: MONITOR</member>
<member>2: WINDOW</member>
<member>4: VIRTUAL</member>
</simplelist>
-->
<property name="AvailableSourceTypes" type="u" access="read"/>
<!--
AvailableCursorModes:
A bitmask of available cursor modes.
Available cursor mode values:
<simplelist>
<member>1: Hidden. The cursor is not part of the screen cast stream.</member>
<member>2: Embedded: The cursor is embedded as part of the stream buffers.</member>
<member>4: Metadata: The cursor is not part of the screen cast stream, but sent as PipeWire stream metadata.</member>
</simplelist>
This property was added in version 2 of this interface.
-->
<property name="AvailableCursorModes" type="u" access="read"/>
<property name="version" type="u" access="read"/>
</interface>
</node>
0707010000004F000081A400000000000000000000000165ADD93600003EE4000000000000000000000000000000000000004C00000000xwaylandvideobridge-0.4.0+git12/src/org.kde.xwaylandvideobridge.appdata.xml<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
-->
<component type="desktop-application">
<id>org.kde.xwaylandvideobridge.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>LicenseRef-KDE-Accepted-GPL</project_license>
<name>Xwayland Video Bridge</name>
<name xml:lang="ar">جسر فيديو ويلاند_اكس</name>
<name xml:lang="ca">Pont de vídeo de l'Xwayland</name>
<name xml:lang="ca-valencia">Pont de vídeo d'XWayland</name>
<name xml:lang="cs">Propojení videa Xwayland</name>
<name xml:lang="de">Xwayland-Video-Brücke</name>
<name xml:lang="en-GB">Xwayland Video Bridge</name>
<name xml:lang="eo">Xwayland Video-Ponto</name>
<name xml:lang="es">Pasarela de vídeo Xwayland</name>
<name xml:lang="eu">Xwayland bideo zubia</name>
<name xml:lang="fi">Xwayland-videosilta</name>
<name xml:lang="fr">Pont vidéo XWayland</name>
<name xml:lang="gl">Ponte de vídeo de XWayland</name>
<name xml:lang="it">Bridge video Xwayland</name>
<name xml:lang="ka">Xwayland-ის ვიდეოხიდი</name>
<name xml:lang="ko">Xwayland 비디오 브리지</name>
<name xml:lang="nl">Xwayland video-bridge</name>
<name xml:lang="nn">Xwayland-videobru</name>
<name xml:lang="pl">Mostek obrazu Xwayland</name>
<name xml:lang="pt">Interface de Vídeo para o Xwayland</name>
<name xml:lang="pt-BR">Ponte de vídeo Xwayland</name>
<name xml:lang="sk">Xwayland video most</name>
<name xml:lang="sl">Xwayland Video Bridge</name>
<name xml:lang="sv">Xwayland videobrygga</name>
<name xml:lang="tr">Xwayland Video Köprüsü</name>
<name xml:lang="uk">Відеомісток Xwayland</name>
<name xml:lang="x-test">xxXwayland Video Bridgexx</name>
<name xml:lang="zh-CN">Xwayland 视频桥接程序</name>
<name xml:lang="zh-TW">Xwayland 影像橋接</name>
<summary>Offer XDG Desktop Portals screencast streams to X11 apps</summary>
<summary xml:lang="ar">يوفر دفق بث بوابة XDG لسطح المكتب لتطبيقات اكس11</summary>
<summary xml:lang="ca">Ofereix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a les aplicacions X11</summary>
<summary xml:lang="ca-valencia">Oferix fluxos de vídeo de captura de pantalla dels «XDG Desktop Portals» a les aplicacions X11</summary>
<summary xml:lang="en-GB">Offer XDG Desktop Portals screencast streams to X11 apps</summary>
<summary xml:lang="eo">Oferti "XDG Desktop Portals" ekranregistraĵajn fluojn al X11-aplikoj</summary>
<summary xml:lang="es">Ofrecer emisiones de vídeo de los portales de escritorio XDG a las aplicaciones de X11</summary>
<summary xml:lang="eu">Eskaini XDG mahaigain atarien pantaila-grabazio korronteak X11 aplikazioei</summary>
<summary xml:lang="fi">Tarjoa XDG-työpöytäportaalin näytöntoistovirtoja X11-sovelluksiin</summary>
<summary xml:lang="fr">Proposer des flux de diffusion d'écrans pour des portails e bureaux « XDG » vers les applications sous X11</summary>
<summary xml:lang="gl">Ofrecer aos portais de escritorio de XDG fluxos de emisión de pantalla de aplicacións de X11.</summary>
<summary xml:lang="it">Offri i flussi di trasmissione dello schermo dei portali desktop XDG alle applicazioni X11</summary>
<summary xml:lang="ka">X11-ის აპებისთვის XDG Desktop Portals-ის screencast ნაკადების შეთავაზება</summary>
<summary xml:lang="ko">XDG 데스크톱 포털에 X11 앱으로 스크린캐스트 제공</summary>
<summary xml:lang="nl">XDG schermfilmstreams van bureaubladportalen bieden aan X11 toepassingen</summary>
<summary xml:lang="nn">Tilbyr XDG Desktop Portals-skjermkastingsstraumar til X11-program</summary>
<summary xml:lang="pl">Daj strumienie Portali Pulpitu XDG aplikacjom X11</summary>
<summary xml:lang="pt">Disponibiliza transmissões do XDG Desktop Portals para as aplicações de X11</summary>
<summary xml:lang="pt-BR">Oferece fluxos de screencast do XDG Desktop Portals para aplicativos X11</summary>
<summary xml:lang="sl">Nudi portalom namizja XDG zaslonske tokove aplikacijam X11</summary>
<summary xml:lang="sv">Tillhandahåll XDG-skrivbordsportalens skärmsändningsströmmar till X11-program</summary>
<summary xml:lang="tr">X11 uygulamalarına XDG Masaüstü Portalları ekran yayını akışları sun</summary>
<summary xml:lang="uk">Надає змогу порталам стільниці XDG транслювати потоки даних до програм X11</summary>
<summary xml:lang="x-test">xxOffer XDG Desktop Portals screencast streams to X11 appsxx</summary>
<summary xml:lang="zh-CN">将 XDG 桌面门户投屏视频流提供给 X11 应用程序</summary>
<summary xml:lang="zh-TW">提供 XDG Desktop Portals 螢幕錄製串流給 X11 應用程式</summary>
<description>
<p>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.</p>
<p xml:lang="ca">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.</p>
<p xml:lang="ca-valencia">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.</p>
<p xml:lang="eo">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.</p>
<p xml:lang="es">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.</p>
<p xml:lang="eu">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.</p>
<p xml:lang="fi">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ää.</p>
<p xml:lang="fr">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.</p>
<p xml:lang="gl">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.</p>
<p xml:lang="it">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.</p>
<p xml:lang="ka">X11-ის ბევრი აპი იყენებს X11-ის მექანიზმს სხვადასხვა მონაცემების სხვა პროგრამებისთვის გასაზიარებლად. ბოლო წლებში ჩვენ შევქმენით XDG Desktop Portals, როგორც მექანიზმი, რათა ეს ფუნქციონალი მოგვეწოდებინა და მოველით, რომ აპები მას გამოიყენებენ. ეს აპლიკაცია XDG Desktop Portals-სთვის ხელმისაწვდომ ნაკადებს თქვენს მოძველებულ X11-ის აპებს, რომლებსაც ახალი სისტემის მხარდაჭერა ჯერ გააჩნიათ, გაუზიარებს.</p>
<p xml:lang="ko">여러 X11 앱에서는 다른 앱과 디스플레이의 내용을 공유할 때 X11 메커니즘을 사용합니다. 최근에는 XDG 데스크톱 포털에 화면 공유 기능이 추가되었고, 장기적으로 이 기능을 사용할 것을 예상하고 있습니다. 이 앱에서는 XDG 데스크톱 포털에서 제공하는 스트림을 포털을 사용하지 않는 레거시 X11 앱으로 전달합니다.</p>
<p xml:lang="nl">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.</p>
<p xml:lang="pl">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.</p>
<p xml:lang="pt-BR">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.</p>
<p xml:lang="sl">Š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.</p>
<p xml:lang="sv">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.</p>
<p xml:lang="tr">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.</p>
<p xml:lang="uk">Багато програм X11 використовують механізми X11 для оприлюднення даних інших програм та дисплеїв. Протягом останніх років ми створили портали стільниць XDG як механізм надання цих функціональних можливостей, і саме ними мають користуватися програми. Ця програма надає доступ до потоків даних порталів XDG ваших застарілим програмам X11, які не адаптовано до нової системи.</p>
<p xml:lang="x-test">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</p>
<p xml:lang="zh-CN">许多 X11 应用程序会使用 X11 的机制来分享其他应用程序和显示器中的内容。为了取代上述机制并提供相同的功能,我们开发了 XDG 桌面门户程序,并默认应用程序会使用它。此应用程序用于将 XDG 桌面门户程序中的可用视频流提供给尚未适配新系统的旧式 X11 应用程序。</p>
<p xml:lang="zh-TW">許多 X11 應用程式會使用 X11 的機制來分享其他應用程式和螢幕的內容。近年來我們建立了 XDG Desktop Portals 作為提供這個功能的機制,而這也是我們預期應用程式會使用的。這個應用程式提供 XDG 桌面入口可用的串流給您尚未改用新系統的舊式 X11 應用程式。</p>
</description>
<url type="homepage">https://invent.kde.org/system/xwaylandvideobridge</url>
<url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?product=XWaylandVideoBridge</url>
<url type="donation">https://www.kde.org/community/donations</url>
<provides>
<binary>xwaylandvideobridge</binary>
</provides>
<project_group>KDE</project_group>
<releases>
<release version="0.3.0" date="2023-11-03"/>
</releases>
</component>
07070100000050000081A400000000000000000000000165ADD93600000C82000000000000000000000000000000000000004800000000xwaylandvideobridge-0.4.0+git12/src/org.kde.xwaylandvideobridge.desktop[Desktop Entry]
StartupNotify=false
X-KDE-autostart-phase=2
X-GNOME-Autostart-enabled=true
NoDisplay=true
Type=Application
Name=Xwayland Video Bridge
Name[ca]=Pont de vídeo de l'Xwayland
Name[ca@valencia]=Pont de vídeo d'XWayland
Name[cs]=Propojení videa Xwayland
Name[de]=Xwayland-Video-Brücke
Name[en_GB]=Xwayland Video Bridge
Name[eo]=Xwayland Video-Ponto
Name[es]=Pasarela de vídeo Xwayland
Name[eu]=Xwayland bideo zubia
Name[fi]=Xwayland-videosilta
Name[fr]=Pont vidéo XWayland
Name[gl]=Ponte de vídeo de XWayland
Name[it]=Bridge video Xwayland
Name[ka]=Xwayland-ის ვიდეოხიდი
Name[ko]=Xwayland 비디오 브리지
Name[nl]=Xwayland video-bridge
Name[nn]=Xwayland-videobru
Name[pl]=Mostek obrazu Xwayland
Name[pt]=Interface de Vídeo para o Xwayland
Name[pt_BR]=Ponte de vídeo Xwayland
Name[sk]=Xwayland video most
Name[sl]=Xwayland Video Bridge
Name[sv]=Xwayland videobrygga
Name[tr]=Xwayland Video Köprüsü
Name[uk]=Відеомісток Xwayland
Name[x-test]=xxXwayland Video Bridgexx
Name[zh_CN]=Xwayland 视频桥接程序
Name[zh_TW]=Xwayland 影像橋接
GenericName=Share screens and windows to XWayland applications
GenericName[ca]=Comparteix pantalles i finestres amb les aplicacions XWayland
GenericName[ca@valencia]=Compartix pantalles i finestres amb les aplicacions XWayland
GenericName[de]=Bildschirme und Fenster mit XWayland-Anwendungen teilen
GenericName[en_GB]=Share screens and windows to XWayland applications
GenericName[eo]=Kunhavigi ekranojn kaj fenestrojn al XWayland-aplikaĵoj
GenericName[es]=Compartir pantallas y ventanas con las aplicaciones XWayland
GenericName[eu]=XWayland aplikazioekin pantailak eta leihoak partekatzea
GenericName[fi]=Jaa näyttöjä ja ikkunoita Xwayland-sovelluksiin
GenericName[fr]=Partager des écrans et des fenêtres entre applications sous XWayland
GenericName[gl]=Compartir pantallas e xanelas con aplicacións de XWayland
GenericName[it]=Condividi schermate e finestre con le applicazioni XWayland
GenericName[ka]=გაუზიარეთ ეკრანები და ფანჯრები XWayland-ის აპლიკაციებს
GenericName[ko]=XWayland 앱으로 화면과 창 공유
GenericName[nl]=Schermen en vensters delen met XWayland toepassingen
GenericName[nn]=Del skjermar og vindauge med XWayland-program
GenericName[pl]=Udostępniaj ekrany i okna aplikacjom XWayland
GenericName[pt]=Partilhar ecrãs e janelas com as aplicações do XWayland
GenericName[pt_BR]=Compartilhe telas e janelas com aplicativos XWayland
GenericName[sl]=Deljenje zaslonov in oken z aplikacijami XWayland
GenericName[sv]=Dela skärmar och fönster med XWayland-program
GenericName[tr]=Ekranları ve pencereleri XWayland uygulamalarına paylaş
GenericName[uk]=Спільне користування екранами та вікнами для програм XWayland
GenericName[x-test]=xxShare screens and windows to XWayland applicationsxx
GenericName[zh_CN]=分享屏幕和窗口给 XWayland 应用程序
GenericName[zh_TW]=分享螢幕和視窗給 XWayland 應用程式
Icon=xwaylandvideobridge
Exec=xwaylandvideobridge
StartupNotify=false
Categories=Qt;KDE;Utility;X-KDE-Utilities-Desktop;
07070100000051000081A400000000000000000000000165ADD936000000A8000000000000000000000000000000000000005000000000xwaylandvideobridge-0.4.0+git12/src/org.kde.xwaylandvideobridge.desktop.licenseSPDX-License-Identifier: BSD-3-Clause
SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
07070100000052000081A400000000000000000000000165ADD93600000104000000000000000000000000000000000000003100000000xwaylandvideobridge-0.4.0+git12/src/version.h.in/*
* SPDX-FileCopyrightText: 2023 Jonathan Riddell <jr@jriddell.org>
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
*/
#ifndef VERSION_H
#define VERSION_H
#include <QLatin1String>
static QLatin1String version("@PROJECT_VERSION@");
#endif
07070100000053000081A400000000000000000000000165ADD936000014F4000000000000000000000000000000000000003D00000000xwaylandvideobridge-0.4.0+git12/src/x11recordingnotifier.cpp/*
* Copyright 2023 David Edmundson <davidedmundson@kde.org>
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#include "x11recordingnotifier.h"
#include <cstdio>
#include <cstdlib>
#include <xcb/xcb.h>
#include <xcb/xproto.h>
#include <xcb/composite.h>
#include <xcb/xcb_event.h>
#include <xcb/xcbext.h>
#include <xcb/record.h>
#include <cstring>
#include <QScopedPointer>
#include <QDebug>
#include <QSocketNotifier>
#include <QScopeGuard>
struct XCBResponse
{
~XCBResponse();
xcb_record_enable_context_reply_t *reply = nullptr;
xcb_generic_error_t *error = nullptr;
};
XCBResponse::~XCBResponse() {
std::free(this->reply);
std::free(this->error);
this->reply = nullptr;
this->error = nullptr;
}
X11RecordingNotifier::X11RecordingNotifier(WId window, QObject *parent)
: QObject(parent)
, m_windowId(window)
{
// we use a separate connection as the X11 recording API blocks is super weird
// and we get multiple replies to a request rather than events
m_connection = xcb_connect(nullptr, nullptr);
auto c = m_connection;
xcb_generic_error_t *error;
if (!c) {
qWarning("Error to open local display. Auto activation will fail!\n");
return;
}
int compositeExtensionOpCode = -1;
{
xcb_query_extension_cookie_t cookie = xcb_query_extension(c, strlen("Composite"), "Composite");
QScopedPointer<xcb_query_extension_reply_t, QScopedPointerPodDeleter> reply(xcb_query_extension_reply(c, cookie, nullptr));
compositeExtensionOpCode = reply->major_opcode;
}
// check the xcb_record extension exists
{
auto cookie = xcb_record_query_version(c, 0, 0);
QScopedPointer<xcb_record_query_version_reply_t, QScopedPointerPodDeleter> reply(xcb_record_query_version_reply(c, cookie, &error));
if (!reply) {
qWarning() << ("Failed to create recording context");
} else {
}
}
xcb_record_range_t range = {};
range.ext_requests.major.first = compositeExtensionOpCode;
range.ext_requests.major.last = compositeExtensionOpCode;
range.ext_requests.minor.first = XCB_COMPOSITE_REDIRECT_WINDOW;
range.ext_requests.minor.last = XCB_COMPOSITE_UNREDIRECT_SUBWINDOWS;
range.client_died = true;
xcb_record_client_spec_t spec = XCB_RECORD_CS_ALL_CLIENTS;
m_recordingContext = xcb_generate_id(c);
auto cookie = xcb_record_create_context_checked(c, m_recordingContext, 0, 1, 1, &spec, &range);
auto err = xcb_request_check(c, cookie);
if (err) {
qWarning() << ("Failed to create recording context");
}
auto enableCookie = xcb_record_enable_context(c, m_recordingContext).sequence;
xcb_flush(c);
auto notifier = new QSocketNotifier(xcb_get_file_descriptor(c), QSocketNotifier::Read, this);
connect(notifier, &QSocketNotifier::activated, this, [this, enableCookie] {
xcb_generic_event_t *event = nullptr;
auto c = m_connection;
while ((event = xcb_poll_for_event(m_connection))) {
std::free(event);
}
XCBResponse record;
while (enableCookie && xcb_poll_for_reply(c, enableCookie, (void **)&record.reply, &record.error)) {
// xcb_poll_for_reply may set both reply and error to null if connection has error.
// break if xcb_connection has error, no point to continue anyway.
if (xcb_connection_has_error(c)) {
break;
}
if (record.error) {
break;
}
if (!record.reply) {
continue;
}
handleNewRecord(*record.reply);
record = XCBResponse();
}
});
}
X11RecordingNotifier::~X11RecordingNotifier()
{
if (m_recordingContext) {
xcb_record_free_context(m_connection, m_recordingContext);
}
if (m_connection) {
xcb_disconnect(m_connection);
}
}
bool X11RecordingNotifier::isRedirected() const
{
return !m_redirectionCount.isEmpty();
}
void X11RecordingNotifier::handleNewRecord(xcb_record_enable_context_reply_t &reply)
{
const bool wasRedirected = isRedirected();
auto cleanup = qScopeGuard([wasRedirected, this] {
if (isRedirected() != wasRedirected) {
Q_EMIT isRedirectedChanged();
}
});
if (reply.category == 3) {
m_redirectionCount.remove(reply.xid_base);
return;
}
if (reply.category != 1) {
return;
}
xcb_composite_redirect_window_request_t *request = reinterpret_cast<xcb_composite_redirect_window_request_t *>(xcb_record_enable_context_data(&reply));
if (!request) {
return;
}
if (request->window != m_windowId) {
return;
}
uint32_t caller = reply.xid_base;
switch(request->minor_opcode) {
case XCB_COMPOSITE_REDIRECT_WINDOW:
case XCB_COMPOSITE_REDIRECT_SUBWINDOWS:
m_redirectionCount[caller]++;
break;
case XCB_COMPOSITE_UNREDIRECT_WINDOW:
case XCB_COMPOSITE_UNREDIRECT_SUBWINDOWS:
if (m_redirectionCount[caller]-- == 0) {
m_redirectionCount.remove(caller);
}
break;
default:
break;
}
}
07070100000054000081A400000000000000000000000165ADD93600000323000000000000000000000000000000000000003B00000000xwaylandvideobridge-0.4.0+git12/src/x11recordingnotifier.h/*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#pragma once
#include <QHash>
#include <QObject>
#include <QWindow>
#include <xcb/record.h>
class X11RecordingNotifier : public QObject
{
Q_OBJECT
public:
X11RecordingNotifier(WId window, QObject *parent);
~X11RecordingNotifier();
bool isRedirected() const;
Q_SIGNALS:
void isRedirectedChanged();
private:
void handleNewRecord(xcb_record_enable_context_reply_t &reply);
xcb_connection_t *m_connection = nullptr;
xcb_record_context_t m_recordingContext = 0;
WId m_windowId = 0; // my xterm
QHash<uint32_t /**called XID*/, int /*count*/> m_redirectionCount;
};
07070100000055000081A400000000000000000000000165ADD936000025EF000000000000000000000000000000000000003C00000000xwaylandvideobridge-0.4.0+git12/src/xwaylandvideobridge.cpp/*
* App to render feeds coming from xdg-desktop-portal
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 David Edmundson <kde@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#include "xwaylandvideobridge.h"
#include <QGuiApplication>
#include <QLoggingCategory>
#include <QTimer>
#include <QQuickWindow>
#include <QAction>
#include <KLocalizedString>
#include <KFileUtils>
#include <KStatusNotifierItem>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <PipeWireSourceItem>
#else
#include <KPipeWire/pipewiresourceitem.h>
#endif
#include "xdp_dbus_screencast_interface.h"
#include "contentswindow.h"
#include "x11recordingnotifier.h"
#include "xwaylandvideobridge_debug.h"
Q_DECLARE_METATYPE(Stream)
QDebug operator<<(QDebug debug, const Stream& stream)
{
QDebugStateSaver saver(debug);
debug.nospace() << "Stream(id: " << stream.nodeId << ", opts: " << stream.opts << ')';
return debug;
}
const QDBusArgument &operator<<(const QDBusArgument &argument, const Stream &/*stream*/)
{
argument.beginStructure();
// argument << stream.id << stream.opts;
argument.endStructure();
return argument;
}
const QDBusArgument &operator>>(const QDBusArgument &argument, Stream &stream)
{
argument.beginStructure();
argument >> stream.nodeId >> stream.opts;
argument.endStructure();
return argument;
}
const QDBusArgument &operator>>(const QDBusArgument &argument, QVector<Stream> &stream)
{
argument.beginArray();
while ( !argument.atEnd() ) {
Stream element;
argument >> element;
stream.append( element );
}
argument.endArray();
return argument;
}
XwaylandVideoBridge::XwaylandVideoBridge(QObject* parent)
: QObject(parent)
, iface(new OrgFreedesktopPortalScreenCastInterface(
QLatin1String("org.freedesktop.portal.Desktop"), QLatin1String("/org/freedesktop/portal/desktop"), QDBusConnection::sessionBus(), this))
, m_handleToken(QStringLiteral("xwaylandvideobridge%1").arg(QRandomGenerator::global()->generate()))
, m_quitTimer(new QTimer(this))
, m_window(new ContentsWindow)
, m_sni(new KStatusNotifierItem("pipewireToXProxy", this))
{
m_quitTimer->setInterval(5000);
m_quitTimer->setSingleShot(true);
connect(m_quitTimer, &QTimer::timeout, this, &XwaylandVideoBridge::closeSession);
auto notifier = new X11RecordingNotifier(m_window->winId(), this);
connect(notifier, &X11RecordingNotifier::isRedirectedChanged, this, [this, notifier]() {
if (notifier->isRedirected()) {
m_quitTimer->stop();
// this is a bit racey, there's a point where we wait for a reply from the portal
if (m_path.path().isEmpty()) {
init();
}
} else {
m_quitTimer->start();
}
});
m_sni->setTitle("Wayland to X11 Video bridge");
m_sni->setIconByName("video-display");
auto quitAction = new QAction(i18n("Quit"), this);
connect(quitAction, &QAction::triggered, qApp, &QGuiApplication::quit);
m_sni->addAction("quitAction", quitAction);
m_sni->setStatus(KStatusNotifierItem::Passive);
m_window->show();
}
XwaylandVideoBridge::~XwaylandVideoBridge() = default;
void XwaylandVideoBridge::startStream(const QDBusObjectPath& path)
{
m_path = path;
CursorModes availableCursorModes = static_cast<CursorModes>(iface->availableCursorModes());
CursorMode cursorMode = CursorMode::Hidden;
if (availableCursorModes.testFlag(CursorMode::Metadata)) {
cursorMode = CursorMode::Metadata;
} else if (availableCursorModes.testFlag(CursorMode::Embedded)) {
cursorMode = CursorMode::Embedded;
} else {
qCWarning(XWAYLANDBRIDGE) << "Portal does not support any cursor modes. Cursors will be hidden";
}
const QVariantMap sourcesParameters = {
{ QLatin1String("handle_token"), m_handleToken },
{ QLatin1String("types"), iface->availableSourceTypes() },
{ QLatin1String("multiple"), false }, //for now?
{ QLatin1String("cursor_mode"), static_cast<uint>(cursorMode) }
};
auto reply = iface->SelectSources(m_path, sourcesParameters);
reply.waitForFinished();
if (reply.isError()) {
qCWarning(XWAYLANDBRIDGE) << "Could not select sources" << reply.error();
exit(1);
return;
}
qCDebug(XWAYLANDBRIDGE) << "select sources done" << reply.value().path();
}
void XwaylandVideoBridge::response(uint code, const QVariantMap& results)
{
if (code == 1) {
qCDebug(XWAYLANDBRIDGE) << "XDG session cancelled";
closeSession();
return;
} else if (code > 0) {
qCWarning(XWAYLANDBRIDGE) << "XDG session failed:" << results << code;
exit(1);
return;
}
const auto streamsIt = results.constFind("streams");
if (streamsIt != results.constEnd()) {
QVector<Stream> streams;
streamsIt->value<QDBusArgument>() >> streams;
handleStreams(streams);
return;
}
const auto handleIt = results.constFind(QStringLiteral("session_handle"));
if (handleIt != results.constEnd()) {
startStream(QDBusObjectPath(handleIt->toString()));
return;
}
qCDebug(XWAYLANDBRIDGE) << "params" << results << code;
if (results.isEmpty()) {
start();
return;
}
}
void XwaylandVideoBridge::init()
{
const QVariantMap sessionParameters = {
{ QLatin1String("session_handle_token"), m_handleToken },
{ QLatin1String("handle_token"), m_handleToken }
};
auto sessionReply = iface->CreateSession(sessionParameters);
sessionReply.waitForFinished();
if (!sessionReply.isValid()) {
qCWarning(XWAYLANDBRIDGE) << "Couldn't initialize the remote control session";
exit(1);
return;
}
const bool ret = QDBusConnection::sessionBus().connect(QString(),
sessionReply.value().path(),
QLatin1String("org.freedesktop.portal.Request"),
QLatin1String("Response"),
this,
SLOT(response(uint, QVariantMap)));
if (!ret) {
qCWarning(XWAYLANDBRIDGE) << "failed to create session";
exit(2);
return;
}
qDBusRegisterMetaType<Stream>();
qDBusRegisterMetaType<QVector<Stream>>();
}
void XwaylandVideoBridge::start()
{
const QVariantMap startParameters = {
{ QLatin1String("handle_token"), m_handleToken }
};
auto reply = iface->Start(m_path, QStringLiteral("org.kde.xwaylandvideobridge"), startParameters);
reply.waitForFinished();
if (reply.isError()) {
qCWarning(XWAYLANDBRIDGE) << "Could not start stream" << reply.error();
exit(1);
return;
}
}
void XwaylandVideoBridge::handleStreams(const QVector<Stream> &streams)
{
m_sni->setStatus(KStatusNotifierItem::Active);
const QVariantMap startParameters = {
{ QLatin1String("handle_token"), m_handleToken }
};
auto reply = iface->OpenPipeWireRemote(m_path, startParameters);
reply.waitForFinished();
if (reply.isError()) {
qCWarning(XWAYLANDBRIDGE) << "Could not start stream" << reply.error();
exit(1);
return;
}
const int fd = reply.value().takeFileDescriptor();
if (streams.count() < 1) {
qCWarning(XWAYLANDBRIDGE) << "No streams available";
exit(1);
}
m_pipeWireItem = new PipeWireSourceItem(m_window->contentItem());
m_pipeWireItem->setFd(fd);
m_pipeWireItem->setNodeId(streams[0].nodeId);
m_pipeWireItem->setVisible(true);
if (m_pipeWireItem->state() == PipeWireSourceItem::StreamState::Streaming) {
m_pipeWireItem->setSize(m_pipeWireItem->streamSize());
m_window->resize(m_pipeWireItem->size().toSize());
}
connect(m_pipeWireItem, &PipeWireSourceItem::streamSizeChanged, this, [this]() {
m_pipeWireItem->setSize(m_pipeWireItem->streamSize());
});
connect(m_pipeWireItem, &QQuickItem::widthChanged, this, [this]() {
m_window->resize(m_pipeWireItem->size().toSize());
});
connect(m_pipeWireItem, &QQuickItem::heightChanged, this, [this]() {
m_window->resize(m_pipeWireItem->size().toSize());
});
connect(m_pipeWireItem, &PipeWireSourceItem::stateChanged, this, [this]{
if (m_pipeWireItem->state() == PipeWireSourceItem::StreamState::Unconnected) {
closeSession();
}
});
}
void XwaylandVideoBridge::closeSession()
{
m_handleToken = QStringLiteral("xwaylandvideobridge%1").arg(QRandomGenerator::global()->generate());
m_quitTimer->stop();
m_sni->setStatus(KStatusNotifierItem::Passive);
if (m_path.path().isEmpty())
return;
QDBusMessage closeScreencastSession = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"),
m_path.path(),
QLatin1String("org.freedesktop.portal.Session"),
QLatin1String("Close"));
m_path = {};
if (m_pipeWireItem) {
disconnect(m_pipeWireItem, nullptr, this, nullptr);
m_pipeWireItem->deleteLater();
m_pipeWireItem = nullptr;
}
QDBusConnection::sessionBus().call(closeScreencastSession);
}
07070100000056000081A400000000000000000000000165ADD936000005AC000000000000000000000000000000000000003A00000000xwaylandvideobridge-0.4.0+git12/src/xwaylandvideobridge.h/*
* App to render feeds coming from xdg-desktop-portal
*
* SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
* SPDX-FileCopyrightText: 2023 Aleix Pol <aleixpol@kde.org>
*/
#pragma once
#include <QObject>
#include <QDBusObjectPath>
#include <PipeWireRecord>
class QTimer;
class ContentsWindow;
class PipeWireSourceItem;
class KStatusNotifierItem;
struct Stream {
uint nodeId;
QVariantMap opts;
};
class OrgFreedesktopPortalScreenCastInterface;
class XwaylandVideoBridge : public QObject
{
Q_OBJECT
public:
XwaylandVideoBridge(QObject* parent = nullptr);
~XwaylandVideoBridge() override;
enum CursorMode {
Hidden = 1,
Embedded = 2,
Metadata = 4
};
Q_ENUM(CursorMode);
Q_DECLARE_FLAGS(CursorModes, CursorMode)
enum SourceTypes {
Monitor = 1,
Window = 2
};
Q_ENUM(SourceTypes);
void setDuration(int duration);
public Q_SLOTS:
void response(uint code, const QVariantMap& results);
private:
void init();
void startStream(const QDBusObjectPath &path);
void handleStreams(const QVector<Stream> &streams);
void start();
void closeSession();
void closed();
OrgFreedesktopPortalScreenCastInterface *iface;
QDBusObjectPath m_path;
QString m_handleToken;
QTimer *m_quitTimer;
QScopedPointer<ContentsWindow> m_window;
PipeWireSourceItem *m_pipeWireItem = nullptr;
KStatusNotifierItem *m_sni;
};
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!332 blocks