Import Upstream version 5.92.0
This commit is contained in:
commit
169c24cb54
|
@ -0,0 +1,28 @@
|
|||
# Ignore the following files
|
||||
*~
|
||||
*.[oa]
|
||||
*.diff
|
||||
*.kate-swp
|
||||
*.kdev4
|
||||
.kdev_include_paths
|
||||
*.kdevelop.pcs
|
||||
*.moc
|
||||
*.moc.cpp
|
||||
*.orig
|
||||
*.user
|
||||
.*.swp
|
||||
.swp.*
|
||||
Doxyfile
|
||||
Makefile
|
||||
avail
|
||||
random_seed
|
||||
/build*/
|
||||
CMakeLists.txt.user*
|
||||
*.unc-backup*
|
||||
.cmake/
|
||||
/.clang-format
|
||||
/compile_commands.json
|
||||
.clangd
|
||||
.idea
|
||||
/cmake-build*
|
||||
.cache
|
|
@ -0,0 +1,7 @@
|
|||
# SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
include:
|
||||
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
|
||||
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
|
||||
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml
|
|
@ -0,0 +1,7 @@
|
|||
Dependencies:
|
||||
- 'on': ['Linux', 'FreeBSD', 'Windows', 'macOS']
|
||||
'require':
|
||||
'frameworks/extra-cmake-modules': '@same'
|
||||
|
||||
Options:
|
||||
test-before-installing: True
|
|
@ -0,0 +1,95 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(KF_VERSION "5.92.0") # handled by release scripts
|
||||
project(KDBusAddons VERSION ${KF_VERSION})
|
||||
|
||||
include(FeatureSummary)
|
||||
find_package(ECM 5.92.0 NO_MODULE)
|
||||
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
|
||||
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||
|
||||
include(KDEInstallDirs)
|
||||
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
||||
include(KDECMakeSettings)
|
||||
include(KDEGitCommitHooks)
|
||||
include(ECMQtDeclareLoggingCategory)
|
||||
|
||||
set(REQUIRED_QT_VERSION 5.15.2)
|
||||
find_package(Qt${QT_MAJOR_VERSION}DBus ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||
|
||||
if (QT_MAJOR_VERSION STREQUAL "5")
|
||||
find_package(Qt5X11Extras ${REQUIRED_QT_VERSION} CONFIG)
|
||||
elseif (QT_MAJOR_VERSION STREQUAL "6")
|
||||
find_package(Qt6Gui ${REQUIRED_QT_VERSION} CONFIG) # qtx11extras_p.h
|
||||
endif()
|
||||
|
||||
include(GenerateExportHeader)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(ECMSetupVersion)
|
||||
include(ECMGenerateHeaders)
|
||||
include(ECMGenerateExportHeader)
|
||||
include(ECMMarkNonGuiExecutable)
|
||||
include(ECMAddQch)
|
||||
|
||||
include(ECMPoQmTools)
|
||||
|
||||
ecm_setup_version(PROJECT VARIABLE_PREFIX KDBUSADDONS
|
||||
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kdbusaddons_version.h"
|
||||
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5DBusAddonsConfigVersion.cmake"
|
||||
SOVERSION 5)
|
||||
|
||||
# qtx11extras_p.h is in Qt6Gui
|
||||
if(TARGET Qt5::X11Extras OR TARGET Qt6::Gui)
|
||||
set(HAVE_X11 TRUE)
|
||||
else()
|
||||
set(HAVE_X11 FALSE)
|
||||
endif()
|
||||
|
||||
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
|
||||
|
||||
option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
|
||||
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
|
||||
|
||||
ecm_install_po_files_as_qm(po)
|
||||
add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050f02)
|
||||
add_subdirectory(src)
|
||||
if (BUILD_TESTING)
|
||||
add_subdirectory(autotests)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
# create a Config.cmake and a ConfigVersion.cmake file and install them
|
||||
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5DBusAddons")
|
||||
|
||||
if (BUILD_QCH)
|
||||
ecm_install_qch_export(
|
||||
TARGETS KF5DBusAddons_QCH
|
||||
FILE KF5DBusAddonsQchTargets.cmake
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
COMPONENT Devel
|
||||
)
|
||||
set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5DBusAddonsQchTargets.cmake\")")
|
||||
endif()
|
||||
|
||||
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5DBusAddonsConfig.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KF5DBusAddonsConfig.cmake"
|
||||
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||
)
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5DBusAddonsConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KF5DBusAddonsConfigVersion.cmake"
|
||||
"KF5DBusAddonsMacros.cmake"
|
||||
"KF5dbus.service.in"
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
COMPONENT Devel )
|
||||
|
||||
install(EXPORT KF5DBusAddonsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5DBusAddonsTargets.cmake NAMESPACE KF5:: )
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kdbusaddons_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KDBusAddons COMPONENT Devel)
|
||||
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
|
@ -0,0 +1,18 @@
|
|||
@PACKAGE_INIT@
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Qt@QT_MAJOR_VERSION@DBus @REQUIRED_QT_VERSION@)
|
||||
|
||||
if(NOT @BUILD_SHARED_LIBS@)
|
||||
# Qt5::DBus target will have been defined by the find_dependency() call above
|
||||
# at the time where this file is used
|
||||
if(TARGET Qt5::DBus)
|
||||
find_dependency(Qt5X11Extras @REQUIRED_QT_VERSION@)
|
||||
else()
|
||||
find_dependency(Qt6Gui @REQUIRED_QT_VERSION@) # qtx11extras_p.h
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/KF5DBusAddonsTargets.cmake")
|
||||
@PACKAGE_INCLUDE_QCHTARGETS@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/KF5DBusAddonsMacros.cmake")
|
|
@ -0,0 +1,42 @@
|
|||
set(_KDBUSADDONSDIR ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
#
|
||||
# kdbusaddons_generate_dbus_service_file(EXECUTABLE NAME PATH)
|
||||
#
|
||||
# This function generates a D-Bus service file and installs it
|
||||
# into the specified destination.
|
||||
#
|
||||
# On Windows the path is not used because D-Bus service executables
|
||||
# are always installed in the same directory as dbus-daemon.
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# EXECUTABLE - name of the executable
|
||||
# NAME - service path in D-Bus
|
||||
# PATH - path to install the service file
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# kdbusaddons_generate_dbus_service_file(kded5 org.kde.kded5 ${KDE_INSTALL_FULL_BINDIR})
|
||||
#
|
||||
# Since 5.42.0
|
||||
|
||||
function(KDBUSADDONS_GENERATE_DBUS_SERVICE_FILE _executable _name _path)
|
||||
set(_file ${CMAKE_CURRENT_BINARY_DIR}/${_name}.service)
|
||||
set(_template ${_KDBUSADDONSDIR}/KF5dbus.service.in)
|
||||
set(NAME ${_name})
|
||||
if(WIN32)
|
||||
set(EXEC ${_executable})
|
||||
else()
|
||||
if(IS_ABSOLUTE ${_path})
|
||||
set(EXEC ${_path}/${_executable})
|
||||
else()
|
||||
message(FATAL_ERROR "Path ${_path} is not absolute")
|
||||
endif()
|
||||
endif()
|
||||
if(NOT EXISTS ${_file})
|
||||
message(STATUS "generating ${_file} from ${_template}")
|
||||
endif()
|
||||
configure_file(${_template} ${_file})
|
||||
install(FILES ${_file} DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR})
|
||||
endfunction()
|
|
@ -0,0 +1,3 @@
|
|||
[D-BUS Service]
|
||||
Name=@NAME@
|
||||
Exec=@EXEC@
|
|
@ -0,0 +1,121 @@
|
|||
Creative 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.
|
|
@ -0,0 +1,446 @@
|
|||
GNU 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!
|
|
@ -0,0 +1,467 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, 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 Lesser GPL. It also counts as the
|
||||
successor of the GNU Library Public License, version 2, hence the version
|
||||
number 2.1.]
|
||||
|
||||
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 Lesser General Public License, applies to some specially
|
||||
designated software packages--typically libraries--of the Free Software Foundation
|
||||
and other authors who decide to use it. You can use it too, but we suggest
|
||||
you first think carefully about whether this license or the ordinary General
|
||||
Public License is the better strategy to use in any particular case, based
|
||||
on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that
|
||||
you are informed that you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid distributors
|
||||
to deny you these rights or to ask you to surrender these 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
|
||||
other code 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.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the library,
|
||||
and (2) we offer you this license, which gives you legal permission to copy,
|
||||
distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that there is no
|
||||
warranty for the free library. Also, if the library is modified by someone
|
||||
else and passed on, the recipients should know that what they have is not
|
||||
the original version, so that the original author's reputation will not be
|
||||
affected by problems that might be introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of any free
|
||||
program. We wish to make sure that a company cannot effectively restrict the
|
||||
users of a free program by obtaining a restrictive license from a patent holder.
|
||||
Therefore, we insist that any patent license obtained for a version of the
|
||||
library must be consistent with the full freedom of use specified in this
|
||||
license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License. This license, the GNU Lesser General Public License,
|
||||
applies to certain designated libraries, and is quite different from the ordinary
|
||||
General Public License. We use this license for certain libraries in order
|
||||
to permit linking those libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using a shared
|
||||
library, the combination of the two is legally speaking a combined work, a
|
||||
derivative of the original library. The ordinary General Public License therefore
|
||||
permits such linking only if the entire combination fits its criteria of freedom.
|
||||
The Lesser General Public License permits more lax criteria for linking other
|
||||
code with the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it does Less
|
||||
to protect the user's freedom than the ordinary General Public License. It
|
||||
also provides other free software developers Less of an advantage over competing
|
||||
non-free programs. These disadvantages are the reason we use the ordinary
|
||||
General Public License for many libraries. However, the Lesser license provides
|
||||
advantages in certain special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to encourage the
|
||||
widest possible use of a certain library, so that it becomes a de-facto standard.
|
||||
To achieve this, non-free programs must be allowed to use the library. A more
|
||||
frequent case is that a free library does the same job as widely used non-free
|
||||
libraries. In this case, there is little to gain by limiting the free library
|
||||
to free software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free programs
|
||||
enables a greater number of people to use a large body of free software. For
|
||||
example, permission to use the GNU C Library in non-free programs enables
|
||||
many more people to use the whole GNU operating system, as well as its variant,
|
||||
the GNU/Linux operating system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the users'
|
||||
freedom, it does ensure that the user of a program that is linked with the
|
||||
Library has the freedom and the wherewithal to run that program using a modified
|
||||
version of the Library.
|
||||
|
||||
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, whereas the latter must be combined with the library in
|
||||
order to run.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other program
|
||||
which contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Lesser 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 combine 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) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (1) uses at run time a copy of the library
|
||||
already present on the user's computer system, rather than copying library
|
||||
functions into the executable, and (2) will operate properly with a modified
|
||||
version of the library, if the user installs one, as long as the modified
|
||||
version is interface-compatible with the version that the work was made with.
|
||||
|
||||
c) 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.
|
||||
|
||||
d) 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.
|
||||
|
||||
e) 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 materials to be 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 with 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 Lesser 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 Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 2.1 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 Lesser General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this library; if not, write to the Free Software Foundation, Inc., 51
|
||||
Franklin Street, 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!
|
|
@ -0,0 +1,163 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates the terms
|
||||
and conditions of version 3 of the GNU General Public License, supplemented
|
||||
by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser General
|
||||
Public License, and the "GNU GPL" refers to version 3 of the GNU General Public
|
||||
License.
|
||||
|
||||
|
||||
|
||||
"The Library" refers to a covered work governed by this License, other than
|
||||
an Application or a Combined Work as defined below.
|
||||
|
||||
|
||||
|
||||
An "Application" is any work that makes use of an interface provided by the
|
||||
Library, but which is not otherwise based on the Library. Defining a subclass
|
||||
of a class defined by the Library is deemed a mode of using an interface provided
|
||||
by the Library.
|
||||
|
||||
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an Application
|
||||
with the Library. The particular version of the Library with which the Combined
|
||||
Work was made is also called the "Linked Version".
|
||||
|
||||
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the Corresponding
|
||||
Source for the Combined Work, excluding any source code for portions of the
|
||||
Combined Work that, considered in isolation, are based on the Application,
|
||||
and not on the Linked Version.
|
||||
|
||||
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the object
|
||||
code and/or source code for the Application, including any data and utility
|
||||
programs needed for reproducing the Combined Work from the Application, but
|
||||
excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License without
|
||||
being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a facility
|
||||
refers to a function or data to be supplied by an Application that uses the
|
||||
facility (other than as an argument passed when the facility is invoked),
|
||||
then you may convey a copy of the modified version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to ensure
|
||||
that, in the event an Application does not supply the function or data, the
|
||||
facility still operates, and performs whatever part of its purpose remains
|
||||
meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of this License
|
||||
applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from a header
|
||||
file that is part of the Library. You may convey such object code under terms
|
||||
of your choice, provided that, if the incorporated material is not limited
|
||||
to numerical parameters, data structure layouts and accessors, or small macros,
|
||||
inline functions and templates (ten or fewer lines in length), you do both
|
||||
of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that, taken together,
|
||||
effectively do not restrict modification of the portions of the Library contained
|
||||
in the Combined Work and reverse engineering for debugging such modifications,
|
||||
if you also do each of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during execution, include
|
||||
the copyright notice for the Library among these notices, as well as a reference
|
||||
directing the user to the copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this License,
|
||||
and the Corresponding Application Code in a form suitable for, and under terms
|
||||
that permit, the user to recombine or relink the Application with a modified
|
||||
version of the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (a) uses at run time a copy of the Library
|
||||
already present on the user's computer system, and (b) will operate properly
|
||||
with a modified version of the Library that is interface-compatible with the
|
||||
Linked Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise be required
|
||||
to provide such information under section 6 of the GNU GPL, and only to the
|
||||
extent that such information is necessary to install and execute a modified
|
||||
version of the Combined Work produced by recombining or relinking the Application
|
||||
with a modified version of the Linked Version. (If you use option 4d0, the
|
||||
Installation Information must accompany the Minimal Corresponding Source and
|
||||
Corresponding Application Code. If you use option 4d1, you must provide the
|
||||
Installation Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
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 that are
|
||||
not Applications and are not covered by this License, and convey such a combined
|
||||
library under terms of your choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities, conveyed under the
|
||||
terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it is a work
|
||||
based on the Library, and explaining where to find the accompanying uncombined
|
||||
form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the
|
||||
GNU Lesser 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 as you
|
||||
received it specifies that a certain numbered version of the GNU Lesser General
|
||||
Public License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that published version or of
|
||||
any later version published by the Free Software Foundation. If the Library
|
||||
as you received it does not specify a version number of the GNU Lesser General
|
||||
Public License, you may choose any version of the GNU Lesser General Public
|
||||
License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide whether
|
||||
future versions of the GNU Lesser General Public License shall apply, that
|
||||
proxy's public statement of acceptance of any version is permanent authorization
|
||||
for you to choose that version for the Library.
|
|
@ -0,0 +1,12 @@
|
|||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the license or (at your option) 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 6 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.
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
Current kdbusaddons maintainer is: Kevin Ottens <ervin@kde.org>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# KDBusAddons
|
||||
|
||||
Convenience classes for D-Bus
|
||||
|
||||
## Introduction
|
||||
|
||||
KDBusAddons provides convenience classes on top of QtDBus, as well as an API to
|
||||
create KDED modules.
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
remove_definitions(-DQT_NO_CAST_FROM_ASCII)
|
||||
|
||||
find_package(Qt${QT_MAJOR_VERSION}Test ${REQUIRED_QT_VERSION} REQUIRED CONFIG)
|
||||
|
||||
include(ECMAddTests)
|
||||
|
||||
if(UNIX)
|
||||
add_executable(kdbussimpleservice kdbussimpleservice.cpp)
|
||||
target_link_libraries(kdbussimpleservice Qt${QT_MAJOR_VERSION}::Core KF5::DBusAddons)
|
||||
|
||||
ecm_add_tests(
|
||||
deadservicetest.cpp
|
||||
LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test KF5::DBusAddons
|
||||
)
|
||||
|
||||
add_dependencies(deadservicetest kdbussimpleservice)
|
||||
endif()
|
||||
|
||||
ecm_add_tests(
|
||||
kdbusinterprocesslocktest.cpp
|
||||
kdbusservicetest.cpp
|
||||
LINK_LIBRARIES Qt${QT_MAJOR_VERSION}::Test KF5::DBusAddons
|
||||
)
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
This file is part of libkdbus
|
||||
|
||||
SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusConnectionInterface>
|
||||
#include <QDBusServiceWatcher>
|
||||
#include <QDebug>
|
||||
#include <QProcess>
|
||||
#include <QTest>
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static const QString s_serviceName = QStringLiteral("org.kde.kdbussimpleservice");
|
||||
|
||||
class TestObject : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
QList<int> m_danglingPids;
|
||||
private Q_SLOTS:
|
||||
void cleanupTestCase()
|
||||
{
|
||||
// Make sure we don't leave dangling processes even when we had an
|
||||
// error and the process is stopped.
|
||||
for (int pid : m_danglingPids) {
|
||||
kill(pid, SIGKILL);
|
||||
}
|
||||
}
|
||||
|
||||
void testDeadService()
|
||||
{
|
||||
QVERIFY(!QDBusConnection::sessionBus().interface()->isServiceRegistered(s_serviceName).value());
|
||||
|
||||
QProcess proc1;
|
||||
proc1.setProgram(QFINDTESTDATA("kdbussimpleservice"));
|
||||
proc1.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||
proc1.start();
|
||||
QVERIFY(proc1.waitForStarted());
|
||||
m_danglingPids << proc1.processId();
|
||||
|
||||
// Spy isn't very suitable here because we'd be racing with proc1 or
|
||||
// signal blocking since we'd need to unblock before spying but then
|
||||
// there is an ɛ between unblock and spy.
|
||||
qint64 pid1 = proc1.processId(); // store local, in case the proc disappears
|
||||
QVERIFY(pid1 >= 0);
|
||||
bool proc1Registered = QTest::qWaitFor(
|
||||
[&]() {
|
||||
QTest::qSleep(1000);
|
||||
return QDBusConnection::sessionBus().interface()->servicePid(s_serviceName).value() == pid1;
|
||||
},
|
||||
8000);
|
||||
QVERIFY(proc1Registered);
|
||||
|
||||
// suspend proc1, we don't want it responding on dbus anymore, but still
|
||||
// be running so it holds the name.
|
||||
QCOMPARE(kill(proc1.processId(), SIGSTOP), 0);
|
||||
|
||||
// start second instance
|
||||
QProcess proc2;
|
||||
proc2.setProgram(QFINDTESTDATA("kdbussimpleservice"));
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("KCRASH_AUTO_RESTARTED", "1");
|
||||
proc2.setProcessEnvironment(env);
|
||||
proc2.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||
proc2.start();
|
||||
QVERIFY(proc2.waitForStarted());
|
||||
m_danglingPids << proc2.processId();
|
||||
|
||||
// sleep a bit. fairly awkward. we need proc2 to be waiting on the name
|
||||
// but we can't easily determine when it started waiting. in lieu of
|
||||
// better instrumentation let's just sleep a bit.
|
||||
qDebug() << "sleeping";
|
||||
QTest::qSleep(4000);
|
||||
|
||||
// Let proc1 go up in flames so that dbus-daemon reclaims the name and
|
||||
// gives it to proc2.
|
||||
qDebug() << "murder on the orient express";
|
||||
QCOMPARE(0, kill(proc1.processId(), SIGUSR1));
|
||||
QCOMPARE(0, kill(proc1.processId(), SIGCONT));
|
||||
|
||||
qint64 pid2 = proc2.processId(); // store local, in case the proc disappears
|
||||
QVERIFY(pid2 >= 0);
|
||||
// Wait for service to be owned by proc2.
|
||||
bool proc2Registered = QTest::qWaitFor(
|
||||
[&]() {
|
||||
QTest::qSleep(1000);
|
||||
return QDBusConnection::sessionBus().interface()->servicePid(s_serviceName).value() == pid2;
|
||||
},
|
||||
8000);
|
||||
QVERIFY(proc2Registered);
|
||||
|
||||
proc1.kill();
|
||||
m_danglingPids.removeAll(pid1);
|
||||
proc2.kill();
|
||||
m_danglingPids.removeAll(pid2);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_MAIN(TestObject)
|
||||
|
||||
#include "deadservicetest.moc"
|
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
This file is part of libkdbus
|
||||
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
#include <QTest>
|
||||
|
||||
#include <kdbusinterprocesslock.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
static const char *counterFileName = "kdbusinterprocesslocktest.counter";
|
||||
|
||||
void writeCounter(int value)
|
||||
{
|
||||
QFile file(counterFileName);
|
||||
file.open(QFile::WriteOnly);
|
||||
QTextStream stream(&file);
|
||||
stream << value;
|
||||
file.close();
|
||||
}
|
||||
|
||||
int readCounter()
|
||||
{
|
||||
QFile file(counterFileName);
|
||||
file.open(QFile::ReadOnly);
|
||||
QTextStream stream(&file);
|
||||
|
||||
int value = 0;
|
||||
stream >> value;
|
||||
|
||||
file.close();
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
void removeCounter()
|
||||
{
|
||||
QFile::remove(counterFileName);
|
||||
}
|
||||
|
||||
QProcess *executeNewChild()
|
||||
{
|
||||
qDebug() << "executeNewChild";
|
||||
|
||||
// Duplicated from kglobalsettingstest.cpp - make a shared helper method?
|
||||
QProcess *proc = new QProcess();
|
||||
QString appName = QStringLiteral("kdbusinterprocesslocktest");
|
||||
#ifdef Q_OS_WIN
|
||||
appName += ".exe";
|
||||
#else
|
||||
if (QFile::exists(appName + ".shell")) {
|
||||
appName = "./" + appName + ".shell";
|
||||
} else {
|
||||
Q_ASSERT(QFile::exists(appName));
|
||||
appName = "./" + appName;
|
||||
}
|
||||
#endif
|
||||
proc->setProcessChannelMode(QProcess::ForwardedChannels);
|
||||
proc->start(appName, QStringList() << QStringLiteral("child"));
|
||||
return proc;
|
||||
}
|
||||
|
||||
void work(int id, KDBusInterProcessLock &lock)
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
qDebug("%d: retrieve lock...", id);
|
||||
lock.lock();
|
||||
qDebug("%d: waiting...", id);
|
||||
lock.waitForLockGranted();
|
||||
qDebug("%d: retrieved lock", id);
|
||||
|
||||
int value = readCounter() + 1;
|
||||
writeCounter(value);
|
||||
qDebug("%d: counter updated to %d", id, value);
|
||||
|
||||
lock.unlock();
|
||||
qDebug("%d: sleeping", id);
|
||||
QTest::qSleep(20);
|
||||
}
|
||||
|
||||
qDebug("%d: done", id);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication a(argc, argv);
|
||||
|
||||
QCoreApplication::setApplicationName(QStringLiteral("kdbusinterprocesslocktest"));
|
||||
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
|
||||
|
||||
QDir::setCurrent(QCoreApplication::applicationDirPath());
|
||||
|
||||
KDBusInterProcessLock lock(QStringLiteral("myfunnylock"));
|
||||
|
||||
if (argc >= 2) {
|
||||
work(2, lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
writeCounter(0);
|
||||
|
||||
QProcess *proc = executeNewChild();
|
||||
work(1, lock);
|
||||
|
||||
proc->waitForFinished();
|
||||
delete proc;
|
||||
|
||||
int value = readCounter();
|
||||
qDebug("Final value: %d", value);
|
||||
|
||||
const bool ok = (value == 20);
|
||||
|
||||
removeCounter();
|
||||
|
||||
return ok ? 0 : 1;
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
/*
|
||||
This file is part of libkdbus
|
||||
|
||||
SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 David Faure <faure@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QMetaObject>
|
||||
#include <QProcess>
|
||||
#include <QTimer>
|
||||
|
||||
#include <kdbusservice.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
class TestObject : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
TestObject(KDBusService *service)
|
||||
: m_proc(nullptr)
|
||||
, m_callCount(0)
|
||||
, m_service(service)
|
||||
{
|
||||
}
|
||||
|
||||
~TestObject() override
|
||||
{
|
||||
if (m_proc) {
|
||||
m_proc->waitForFinished();
|
||||
}
|
||||
}
|
||||
|
||||
int callCount() const
|
||||
{
|
||||
return m_callCount;
|
||||
}
|
||||
|
||||
void slotActivateRequested(const QStringList &args, const QString &workingDirectory)
|
||||
{
|
||||
Q_UNUSED(workingDirectory);
|
||||
qDebug() << "Application executed with args" << args;
|
||||
|
||||
++m_callCount;
|
||||
|
||||
if (m_callCount == 1) {
|
||||
Q_ASSERT(args.count() == 1);
|
||||
Q_ASSERT(args.at(0) == QLatin1String("dummy call"));
|
||||
} else if (m_callCount == 2) {
|
||||
Q_ASSERT(args.count() == 2);
|
||||
Q_ASSERT(args.at(1) == QLatin1String("bad call"));
|
||||
m_service->setExitValue(4);
|
||||
} else if (m_callCount == 3) {
|
||||
Q_ASSERT(args.count() == 3);
|
||||
Q_ASSERT(args.at(1) == QLatin1String("real call"));
|
||||
Q_ASSERT(args.at(2) == QLatin1String("second arg"));
|
||||
// OK, all done, quit
|
||||
QCoreApplication::instance()->quit();
|
||||
}
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
void slotProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
{
|
||||
Q_UNUSED(exitStatus)
|
||||
qDebug() << "Process exited with code" << exitCode;
|
||||
m_proc = nullptr;
|
||||
if (m_callCount == 2) {
|
||||
Q_ASSERT(exitCode == 4);
|
||||
secondCall();
|
||||
}
|
||||
}
|
||||
|
||||
void firstCall()
|
||||
{
|
||||
QStringList args;
|
||||
args << QStringLiteral("bad call");
|
||||
executeNewChild(args);
|
||||
}
|
||||
|
||||
void secondCall()
|
||||
{
|
||||
QStringList args;
|
||||
args << QStringLiteral("real call") << QStringLiteral("second arg");
|
||||
executeNewChild(args);
|
||||
}
|
||||
|
||||
private:
|
||||
void executeNewChild(const QStringList &args)
|
||||
{
|
||||
// Duplicated from kglobalsettingstest.cpp - make a shared helper method?
|
||||
m_proc = new QProcess(this);
|
||||
connect(m_proc, &QProcess::finished, this, &TestObject::slotProcessFinished);
|
||||
QString appName = QStringLiteral("kdbusservicetest");
|
||||
#ifdef Q_OS_WIN
|
||||
appName += ".exe";
|
||||
#else
|
||||
if (QFile::exists(appName + ".shell")) {
|
||||
appName = "./" + appName + ".shell";
|
||||
} else {
|
||||
Q_ASSERT(QFile::exists(appName));
|
||||
appName = "./" + appName;
|
||||
}
|
||||
#endif
|
||||
qDebug() << "about to run" << appName << args;
|
||||
m_proc->start(appName, args);
|
||||
}
|
||||
|
||||
QProcess *m_proc;
|
||||
int m_callCount;
|
||||
KDBusService *m_service;
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication a(argc, argv);
|
||||
|
||||
QCoreApplication::setApplicationName(QStringLiteral("kdbusservicetest"));
|
||||
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
|
||||
|
||||
QDir::setCurrent(QCoreApplication::applicationDirPath());
|
||||
|
||||
KDBusService service(KDBusService::Unique);
|
||||
TestObject testObject(&service);
|
||||
QObject::connect(&service, &KDBusService::activateRequested, &testObject, &TestObject::slotActivateRequested);
|
||||
|
||||
// Testcase for the problem coming from the old fork-on-startup solution:
|
||||
// the "Activate" D-Bus call would time out if the app took too much time
|
||||
// to be ready.
|
||||
// printf("Sleeping.\n");
|
||||
// sleep(200);
|
||||
QStringList args;
|
||||
args << QStringLiteral("dummy call");
|
||||
|
||||
QMetaObject::invokeMethod(&service, "activateRequested", Qt::QueuedConnection, Q_ARG(QStringList, args), Q_ARG(QString, QDir::currentPath()));
|
||||
QTimer::singleShot(400, &testObject, SLOT(firstCall()));
|
||||
|
||||
qDebug() << "Running.";
|
||||
a.exec();
|
||||
qDebug() << "Terminating.";
|
||||
|
||||
Q_ASSERT(testObject.callCount() == 3);
|
||||
const bool ok = testObject.callCount() == 3;
|
||||
|
||||
return ok ? 0 : 1;
|
||||
}
|
||||
|
||||
#include "kdbusservicetest.moc"
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
This file is part of libkdbus
|
||||
|
||||
SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
#include <QThread>
|
||||
#include <kdbusservice.h>
|
||||
|
||||
// sigaction
|
||||
#include <signal.h>
|
||||
// close
|
||||
#include <unistd.h>
|
||||
|
||||
// rlimit
|
||||
#include <sys/resource.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
// USR1.
|
||||
// Close all sockets and eventually ABRT. This mimics behavior during KCrash
|
||||
// handling. Closing all sockets will effectively disconnect us from the bus
|
||||
// and result in the daemon reclaiming all our service names and allowing
|
||||
// other processes to register them instead.
|
||||
void usr1_handler(int signum)
|
||||
{
|
||||
qDebug() << "usr1" << signum << SIGSEGV;
|
||||
|
||||
// Close all remaining file descriptors so we drop off of the bus.
|
||||
struct rlimit rlp;
|
||||
getrlimit(RLIMIT_NOFILE, &rlp);
|
||||
for (int i = 3; i < (int)rlp.rlim_cur; i++) {
|
||||
close(i);
|
||||
}
|
||||
|
||||
// Sleep a bit for good measure. We could actually loop ad infinitum here
|
||||
// as after USR1 we are expected to get killed. In the interest of sane
|
||||
// behavior we'll simply exit on our own as well though.
|
||||
sleep(4);
|
||||
abort();
|
||||
}
|
||||
|
||||
// Simple application under test.
|
||||
// Closes all sockets on USR1 and aborts to simulate a kcrash shutdown behavior
|
||||
// which can result in a service registration race.
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
qDebug() << "hello there!";
|
||||
|
||||
struct sigaction action;
|
||||
|
||||
action.sa_handler = usr1_handler;
|
||||
sigemptyset(&action.sa_mask);
|
||||
sigaddset(&action.sa_mask, SIGUSR1);
|
||||
action.sa_flags = SA_RESTART;
|
||||
|
||||
if (sigaction(SIGUSR1, &action, nullptr) < 0) {
|
||||
qDebug() << "failed to register segv handler";
|
||||
return 1;
|
||||
}
|
||||
|
||||
QCoreApplication app(argc, argv);
|
||||
QCoreApplication::setApplicationName("kdbussimpleservice");
|
||||
QCoreApplication::setOrganizationDomain("kde.org");
|
||||
|
||||
KDBusService service(KDBusService::Unique);
|
||||
if (!service.isRegistered()) {
|
||||
qDebug() << "service not registered => exiting";
|
||||
return 1;
|
||||
}
|
||||
qDebug() << "service registered";
|
||||
|
||||
int ret = app.exec();
|
||||
qDebug() << "exiting deadservice";
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
maintainer: dfaure
|
||||
description: Addons to QtDBus
|
||||
tier: 1
|
||||
type: functional
|
||||
platforms:
|
||||
- name: Linux
|
||||
- name: FreeBSD
|
||||
- name: Windows
|
||||
- name: macOS
|
||||
portingAid: false
|
||||
deprecated: false
|
||||
release: true
|
||||
libraries:
|
||||
- qmake: KDBusAddons
|
||||
cmake: "KF5::DBusAddons"
|
||||
cmakename: KF5DBusAddons
|
||||
|
||||
public_lib: true
|
||||
group: Frameworks
|
||||
subgroup: Tier 1
|
|
@ -0,0 +1,55 @@
|
|||
# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2014, 2017, 2018.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-28 15:38+0300\n"
|
||||
"PO-Revision-Date: 2018-06-08 23:55+0300\n"
|
||||
"Last-Translator: Safa Alfulaij <safa1996alfulaij@gmail.com>\n"
|
||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "أنهِ بسهولة التطبيقات التي تدعم D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "اسم الخدمة الكامل، يتجاهل اسم التطبيق الذي قدّمته"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "المسار في واجهة D-Bus الذي سيُستخدم"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "اسم التطبيق لإنهائه"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "تعذر العثور على التطبيق %1 باستخدام الخدمة %2 والمسار %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"فشل إنهاء التطبيق %1. الخطأ كان:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Xəyyam <xxmn77@gmail.com>, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2020-04-10 20:02+0400\n"
|
||||
"Last-Translator: Xəyyam <xxmn77@gmail.com>\n"
|
||||
"Language-Team: Azerbaijani\n"
|
||||
"Language: az\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 19.12.3\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "D-Bus -un dəstəklədiyi tətbiqdən sadə yolla çıxış"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Xidmətin tam adı verilmiş tətbiqin adını aradan qaldırır"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "İstifadə üçün D-Bus interfeysinə keçid yolu"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Çıxılası tətbiqin adı"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "%2 xidməti və %3 yolundakı %1 tətbiqi tapıla bilmir"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"%1 tətbiqindən çıxmaq alınmadı . Xəta bildirildi:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kde5\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2015-02-24 19:46+0100\n"
|
||||
"Last-Translator: Samir Ribić <megaribi@epn.ba>\n"
|
||||
"Language-Team: Bosnian\n"
|
||||
"Language: bs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Jednostavo napustite program opremljen D‑Busom"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Puno ime servisa, potiskuje dato ime programa"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Putanja u D‑Bus interfejsu"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Ime programa koji se napušta"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Program %1 nije se mogao naći upotrebom servisa %2 i putanje %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Neuspjelo napuštanje programa %1. Prijavljena greška:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,62 @@
|
|||
# Translation of kdbusaddons5_qt.po to Catalan
|
||||
# Copyright (C) 2014-2020 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.
|
||||
#
|
||||
# Josep M. Ferrer <txemaq@gmail.com>, 2014.
|
||||
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2015, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2014-03-23 01:50+0000\n"
|
||||
"PO-Revision-Date: 2020-07-14 13:16+0200\n"
|
||||
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Generator: Lokalize 20.04.3\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Surt amb facilitat d'una aplicació amb el D-Bus activat"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
"Nom complet del servei, substitueix el nom subministrat per l'aplicació"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Camí a usar en la interfície de D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "El nom de l'aplicació per a sortir"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "No s'ha pogut trobar l'aplicació %1 usant el servei %2 i el camí %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ha fallat en sortir de l'aplicació %1. L'error obtingut ha estat:\n"
|
||||
"\n"
|
||||
" %2: %3"
|
|
@ -0,0 +1,64 @@
|
|||
# Translation of kdbusaddons5_qt.po to Catalan (Valencian)
|
||||
# Copyright (C) 2014-2019 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.
|
||||
#
|
||||
# Josep M. Ferrer <txemaq@gmail.com>, 2014.
|
||||
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2015.
|
||||
# Empar Montoro Martín <montoro_mde@gva.es>, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2014-03-23 01:50+0000\n"
|
||||
"PO-Revision-Date: 2019-06-17 13:12+0200\n"
|
||||
"Last-Translator: Empar Montoro Martín <montoro_mde@gva.es>\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-Accelerator-Marker: &\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"X-Project-Style: kde\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Ix fàcilment d'una aplicació activada des de D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nom complet del servei, substitueix el nom subministrat de l'aplicació"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Camí que cal utilitzar en la interfície de D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "El nom de l'aplicació per a eixir"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"No s'ha pogut trobar l'aplicació %1 utilitzant el servei %2 i el camí %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ha fallat en eixir de l'aplicació %1. L'error reportat ha estat:\n"
|
||||
"\n"
|
||||
" %2: %3"
|
|
@ -0,0 +1,55 @@
|
|||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Vít Pelčák <vit@pelcak.org>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-28 14:00+0100\n"
|
||||
"Last-Translator: Vít Pelčák <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 1.5\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Jednoduše ukončí aplikaci s povoleným D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Plný název služby, obejde zadaný název aplikace"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Cesta v rozhraní D-Bus jenž ze má použít"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Název aplikace k ukončení"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Nelze najít aplikaci %1 pomocí služby %2 a cesty %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ukončení aplikace %1 selhalo. Nahlášená chyba:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Martin Schlander <mschlander@opensuse.org>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-12-29 20:03+0100\n"
|
||||
"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
|
||||
"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
|
||||
"Language: da\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Afslut nemt et D-Bus-aktiveret program"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Fuldt tjenestenavn, tilsidesætter angivet programnavn"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Stil til D-Bus-grænsefladen der skal bruges"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Navnet på programmet der skal afsluttes"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Programmet %1 kunne ikke findes ved brug af tjenesten %2 og stien %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Afslutning af programmet %1 mislykkedes. Fejlmeddelelsen var:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,54 @@
|
|||
# Burkhard Lück <lueck@hube-lueck.de>, 2014.
|
||||
# Frederik Schwarzer <schwarzer@kde.org>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-06-29 10:03+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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Ermöglicht das einfache Beenden von D-Bus-Anwendungen"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Vollständiger Dienstname, übergeht den angegebenen Anwendungsnamen"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Zu verwendender D-Bus-Pfad"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Name der Anwendung, die beendet werden soll"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Die Anwendung „%1“ kann nicht über den Dienst „%2“ und den Pfad „%3“ "
|
||||
"gefunden werden."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Das Beenden der Anwendung %1 ist fehlgeschlagen. Die Fehlermeldung lautet:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,54 @@
|
|||
# Dimitris Kardarakos <dimkard@gmail.com>, 2015.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2015-11-05 16:46+0200\n"
|
||||
"Last-Translator: Dimitris Kardarakos <dimkard@gmail.com>\n"
|
||||
"Language-Team: Greek <kde-i18n-el@kde.org>\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Τερματίζει εύκολα μια εφαρμογή που χρησιμοποιεί D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Πλήρες όνομα υπηρεσίας, αντικαθιστά το όνομα της εφαρμογής που δόθηκε"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Διαδρομή για τη διασύνδεση D-Bus που θα χρησιμοποιηθεί"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Το όνομα της εφαρμογής που θα τερματιστεί"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Η εφαρμογή %1 δεν μπορεί να βρεθεί με τη χρήση της υπηρεσίας %2 και τη "
|
||||
"διαδρομή %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Η έξοδος από την εφαρμογή %1 απέτυχε. Το σφάλμα που αναφέρθηκε ήταν:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,56 @@
|
|||
# translation of kquitapp.po to British English
|
||||
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Malcolm Hunter <malcolm.hunter@gmx.co.uk>, 2008.
|
||||
# Andrew Coles <andrew_coles@yahoo.co.uk>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-06-28 11:04+0100\n"
|
||||
"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
|
||||
"Language-Team: British English <kde-l10n-en_gb@kde.org>\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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Quit a D-Bus enabled application easily"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Full service name, overrides application name provided"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Path in the D-Bus interface to use"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "The name of the application to quit"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Application %1 could not be found using service %2 and path %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,56 @@
|
|||
# Eloy Cuadra <ecuadra@eloihr.net>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-29 17:46+0100\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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Salir fácilmente de una aplicación que usa D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
"Nombre completo del servicio (sustituye al nombre de aplicación "
|
||||
"proporcionado)"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Ruta a usar en la interfaz de D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "El nombre de la aplicación de la que se va a salir"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"No se ha encontrado la aplicación %1 usando el servicio %2 y la ruta %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ha ocurrido un fallo al salir de la aplicación %1. El error generado ha "
|
||||
"sido:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Marek Laane <qiilaq69@gmail.com>, 2016.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2016-09-09 01:29+0300\n"
|
||||
"Last-Translator: Marek Laane <qiilaq69@gmail.com>\n"
|
||||
"Language-Team: Estonian <kde-i18n-doc@kde.org>\n"
|
||||
"Language: et\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Võimaldab hõlpsasti väljuda D-Busi toetusega rakendusest"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Teenuse täielik nimi (tühistab antud rakenduse nime)"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Kasutatava D-Busi liidese asukoht"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Suletava rakenduse nimi"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Rakendust %1 ei leitud. Kasutati teenust %2 ja asukohta %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Rakendusest %1 väljumine nurjus. Teatati veast:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,59 @@
|
|||
# Translation of kdbusaddons5_qt.po to Euskara/Basque (eu).
|
||||
# Copyright (C) 2017, Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the frameworks package.
|
||||
# KDE Euskaratzeko proiektuaren arduraduna <xalba@euskalnet.net>.
|
||||
#
|
||||
# Translators:
|
||||
# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2017.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons5_qt\n"
|
||||
"PO-Revision-Date: 2017-08-28 11:15+0100\n"
|
||||
"Last-Translator: Iñigo Salvador Azurmendi <xalba@euskalnet.net>\n"
|
||||
"Language-Team: Basque <kde-i18n-doc@kde.org>\n"
|
||||
"Language: eu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Itxi D-Bus darabilen aplikazio batetik era errazean"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
"Zerbitzuaren izen osoa, aplikazioak hornitutako izenari gainjartzen zaio"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "D-Bus interfazean erabili beharreko bide-izena"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Itxi beharreko aplikazioaren izena"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "%1 aplikazioa ezin da aurkitu %2 zerbitzua eta %3 bide-izena erabiliz."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"%1 aplikaziotik irtetea huts egin du. Jakinarazitako errorea:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,63 @@
|
|||
# translation of kquitapp.po to Finnish
|
||||
# translation of kquitapp.po to
|
||||
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Mikko Piippo <piippo@cc.helsinki.fi>, 2008.
|
||||
# Teemu Rytilahti <teemu.rytilahti@kde-fi.org>, 2008.
|
||||
# Teemu Rytilahti <teemu.rytilahti@d5k.net>, 2008.
|
||||
# Lasse Liehu <lasse.liehu@gmail.com>, 2014.
|
||||
#
|
||||
# KDE Finnish translation sprint participants:
|
||||
# Author: Artnay
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-28 18:15+0200\n"
|
||||
"Last-Translator: Lasse Liehu <lasse.liehu@gmail.com>\n"
|
||||
"Language-Team: Finnish <lokalisointi@lists.coss.fi>\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-POT-Import-Date: 2012-12-01 22:22:14+0000\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Lopeta D-Busia tukeva sovellus vaivatta"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Täydellinen palvelun nimi, ohittaa sovelluksen nimen"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Polku käytettävään D-Bus-liityntään"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Lopetettavan sovelluksen nimi"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Ohjelmaa %1 ei löytynyt palvelunimellä %2 ja polulla %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ohjelman %1 lopettaminen epäonnistui. Virhe oli:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,67 @@
|
|||
# translation of kquitapp.po to Français
|
||||
# French translation of PACKAGE.
|
||||
# Copyright (C) 2007 This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Amine Say <aminesay@yahoo.fr>, 2007, 2008, 2009.
|
||||
# Sébastien Renard <Sebastien.Renard@digitalfox.org>, 2007, 2008, 2009.
|
||||
# xavier <ktranslator31@yahoo.fr>, 2013.
|
||||
# Vincent Pinon <vpinon@kde.org>, 2016.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2016-11-27 22:54+0100\n"
|
||||
"Last-Translator: Vincent Pinon <vpinon@kde.org>\n"
|
||||
"Language-Team: French <kde-i18n-doc@kde.org>\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 2.0\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Permet de quitter facilement une application acceptant « D-Bus »"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nom complet du service, écrase le nom fourni pour l'application"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Emplacement vers l'interface « D-Bus » à utiliser"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Le nom de l'application à quitter"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"L'application %1 n'a pu être trouvée en utilisant le service %2 et "
|
||||
"l'emplacement %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Erreur lors de la fermeture de l'application %1. L'erreur rencontrée "
|
||||
"était :\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,55 @@
|
|||
# GunChleoc <fios@foramnagaidhlig.net>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2015-11-04 15:12+0000\n"
|
||||
"Last-Translator: Michael Bauer <fios@akerbeltz.org>\n"
|
||||
"Language-Team: Fòram na Gàidhlig\n"
|
||||
"Language: gd\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 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
|
||||
"(n > 2 && n < 20) ? 2 : 3;\n"
|
||||
"X-Generator: Poedit 1.8.4\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Fàg aplacaid le comas D-Bus gu furasta"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Ainm slàn na seirbheise, thèid seo a chur an àite ainm na h-aplacaid"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "An t-slighe san eadar-aghaidh D-Bus a thèid a chleachdadh"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Ainm na h-aplacaid a thèid fhàgail"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Cha deach an aplacaid %1 a lorg leis an t-seirbheis %2 san t-slighe %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Dh'fhàillig le fàgail na h-aplacaid %1. Seo a' mhearachd a chaidh aithris:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Marce Villarino <mvillarino@kde-espana.org>, 2014.
|
||||
# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2017, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2019-10-19 22:29+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 19.11.70\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Sae facilmente de aplicacións compatíbeis con D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nome completo do servizo, sobreponse ao fornecido pola aplicación"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Ruta a usar na interface D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "O nome da aplicación da que saír"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Non se puido atopar a aplicación %1 mediante o servizo %2 e ruta %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Fallou a saída da aplicación %1. Informouse do erro:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Sameer Singh <lumarzeli30@gmail.com>, 2021.
|
||||
# Raghavendra Kamath <raghu@raghukamath.com>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2021-06-27 10:22+0530\n"
|
||||
"Last-Translator: Raghavendra Kamath <raghu@raghukamath.com>\n"
|
||||
"Language-Team: kde-hindi\n"
|
||||
"Language: hi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Lokalize 21.04.2\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "डी-बस सक्षम अनुप्रयोग को सरलता से छोड़ें"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "सेवा का पूरा नाम, अनुप्रयोग द्वारा दिए गए नाम को बदल देता है"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "डी-बस इंटरफ़ेस में प्रयोग होने वाले पथ का नाम"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "अनुप्रयोग का नाम जिसे छोड़ना है"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "%2 सेवा तथा %3 पथ का प्रयोग करते हुए %1 अनुप्रयोग नहीं मिल सका।"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"%1 अनुप्रयोग बन्द करने में असफल। दर्ज की गई त्रुटि:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Kristóf Kiszel <ulysses@kubuntu.org>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-28 22:57+0100\n"
|
||||
"Last-Translator: Kristóf Kiszel <ulysses@kubuntu.org>\n"
|
||||
"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "D-Bus-alapú alkalmazások egyszerű bezárása"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
"Teljes szolgáltatásnév, felülbírálja az alkalmazás nevét, ha meg van adva"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Elérési út a D-Bus névtérben"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "A bezárandó alkalmazás neve"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Nem található %1 nevű alkalmazás - szolgáltatás: %2, elérési út: %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Nem sikerült bezárni ezt az alkalmazást: %1. A hibaüzenet:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# G.Sora <g.sora@tiscali.it>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-31 16:15+0200\n"
|
||||
"Last-Translator: G.Sora <g.sora@tiscali.it>\n"
|
||||
"Language-Team: Interlingua <kde-l10n-ia@kde.org>\n"
|
||||
"Language: ia\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Abandona facilemente un application habilitate de D-BUS"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nomine de servicio plen, il substitue le nomine de application fornite"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Percurso de usar in le interfacie D-BUS"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Le nomine del application de abandonar"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Application %1 non pote esser trovate usante servicio %2 e percurso %3. "
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Il falleva le abandono de application %1. Error reportate esseva:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,57 @@
|
|||
# Indonesian translations for kquitapp package.
|
||||
# Copyright (C) 2010 This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the kquitapp package.
|
||||
# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010.
|
||||
# Wantoyo <wantoyek@gmail.com>, 2017, 2018, 2019, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2019-08-27 13:56+0700\n"
|
||||
"Last-Translator: Wantoyo <wantoyek@gmail.com>\n"
|
||||
"Language-Team: Indonesian <kde-i18n-doc@kde.org>\n"
|
||||
"Language: id\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 19.12.1\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Berhentikan aplikasi D-Bus yang difungsikan secara mudah"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nama layanan penuh, penimpaan nama aplikasi yang disediakan"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Alur dalam antarmuka D-Bus yang digunakan"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Nama dari aplikasi yang diberhentikan"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Aplikasi %1 tidak dapat ditemukan menggunakan layanan %2 dan alur %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Pengeluaran aplikasi %1 gagal. Dilaporkan error adalah:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,58 @@
|
|||
# translation of kquitapp.po to Italian
|
||||
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Federico Zenith <federico.zenith@member.fsf.org>, 2007, 2008.
|
||||
# Federico Zenith <zenith@chemeng.ntnu.no>, 2008.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-04-19 12:12+0200\n"
|
||||
"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Esce facilmente da un'applicazione con supporto D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nome completo del servizio, ignora il nome fornito dall'applicazione"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Percorso dell'interfaccia D-Bus da utilizzare"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Il nome dell'applicazione da chiudere"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"L'applicazione %1 non è può essere trovata utilizzando il servizio %2 e il "
|
||||
"percorso %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"La chiusura dell'applicazione %1 non è riuscita. L'errore segnalato era:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,55 @@
|
|||
# Taiki Komoda <kom@kde.gr.jp>, 2010.
|
||||
# Fumiaki Okushi <fumiaki.okushi@gmail.com>, 2015.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2015-04-19 15:50-0700\n"
|
||||
"Last-Translator: Fumiaki Okushi <fumiaki.okushi@gmail.com>\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=2; plural=n != 1;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "D-Bus が有効になっているアプリケーションを簡単に終了します"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "全サービス名、提供されているアプリケーション名を上書きします"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "使用する D-Bus インターフェースにおけるパス"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "終了するアプリケーション名"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "サービス %2、パス %3 のアプリケーション %1 は見つかりませんでした。"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"アプリケーション %1 の終了に失敗しました。レポートされたエラーは以下です:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,55 @@
|
|||
# Translation of kio_trash to Korean.
|
||||
# Copyright (C) 2007 This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the kdebase package.
|
||||
# Shinjo Park <kde@peremen.name>, 2007, 2008, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-04-28 02:10+0900\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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "D-Bus를 사용하는 프로그램을 쉽게 종료시켜 줍니다"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "전체 서비스 이름, 프로그램 이름을 다시 정의합니다"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "사용할 D-Bus 인터페이스의 경로"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "종료할 프로그램의 이름"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "서비스 %2, 경로 %3을(를) 사용하여 프로그램 %1을(를) 찾을 수 없습니다."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"프로그램 %1을(를) 종료할 수 없습니다. 보고된 오류는 다음과 같습니다:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Liudas Ališauskas <liudas@akmc.lt>, 2015.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: trunk-kf 5\n"
|
||||
"PO-Revision-Date: 2015-01-10 09:40+0200\n"
|
||||
"Last-Translator: Liudas Ališauskas <liudas@akmc.lt>\n"
|
||||
"Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n"
|
||||
"Language: lt\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
|
||||
"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Lengvai išjungti D-Bus palaikančią programą"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Pilnas tarnybos vardas, perrašo pirminį programos vardą"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Kelias D-Bus sąsajoje, kurį naudoti"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Išjungiamos programos vardas"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Nepavyko rasti programos %1 naudojant tarnybą %2 ir kelią %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Nepavyko uždaryti programos %1. Pranešta klaida:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,47 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons5_qt\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: Swathanthra|സ്വതന്ത്ര Malayalam|മലയാളം Computing|കമ്പ്യൂട്ടിങ്ങ് <smc."
|
||||
"org.in>\n"
|
||||
"Language: ml\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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
|
@ -0,0 +1,57 @@
|
|||
# Translation of kdbusaddons5_qt to Norwegian Bokmål
|
||||
#
|
||||
# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2008, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-04-25 18:47+0200\n"
|
||||
"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <l10n-no@lister.huftis.org>\n"
|
||||
"Language: nb\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Stopp enkelt et program som bruker D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Fullt tjenestenavn, overstyrer oppgitt programnavn"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Sti i D-Busgrensesnittet som skal brukes"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Navnet på programmet som skal stoppe"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Fant ikke programmet %1 ved bruk av tjeneste %2 og sti %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Det lyktes ikke å avslutte programmet %1. Feilmeldinga var:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,59 @@
|
|||
# Translation of kquitapp.po to Low Saxon
|
||||
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Sönke Dibbern <s_dibbern@web.de>, 2007, 2008, 2014.
|
||||
# Manfred Wiese <m.j.wiese@web.de>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-30 20:18+0200\n"
|
||||
"Last-Translator: Sönke Dibbern <s_dibbern@web.de>\n"
|
||||
"Language-Team: Low Saxon <kde-i18n-nds@kde.org>\n"
|
||||
"Language: nds\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Lokalize 1.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Programmen mit D-Bus-Funkschoon eenfach utmaken"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Heel Deenstnaam, överschrifft den angeven Programmnaam"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "D-Bus-Padd, den Du bruken wullt"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "De Naam vun dat Programm, dat Du utmaken wullt"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Dat Programm \"%1\" lett sik över den Deenst \"%2\" un den Padd \"%3\" nich "
|
||||
"finnen."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Utmaken vun't Programm \"%1\" is fehlslaan. De Fehlermellen is:\n"
|
||||
"\n"
|
||||
" %2: %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Freek de Kruijf <freekdekruijf@kde.nl>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-29 00:34+0100\n"
|
||||
"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
|
||||
"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Sluit gemakkelijk DBUS-geschikte programma's af"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Volledige dienstnaam, omzeilt de opgegeven programmanaam"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Het te gebruiken pad in de DBUS-interface"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Naam van het programma dat u wilt afsluiten"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Programma %1 kon niet worden gevonden met de dienst %2 en pad %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Het beëindigen van programma %1 is mislukt. De foutmelding was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,59 @@
|
|||
# Translation of kdbusaddons5_qt to Norwegian Nynorsk
|
||||
#
|
||||
# Karl Ove Hufthammer <karl@huftis.org>, 2007, 2008, 2015.
|
||||
# Håvard Korsvoll <korsvoll@skulelinux.no>, 2008.
|
||||
# Eirik U. Birkeland <eirbir@gmail.com>, 2008, 2009.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2015-06-03 19:01+0100\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"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Stopp enkelt eit program som brukar D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Fullt tenestenamn – overstyrer oppgjeve programnamn"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Adresse i D-Bus-grensesnittet som skal brukast"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Namnet på programmet som skal stoppast"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Fann ikkje programmet %1 ved å bruka tenesta %2 og adressa %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Klarte ikkje avslutta programmet %1. Feilmeldinga var:\n"
|
||||
"\n"
|
||||
" %2: %3"
|
|
@ -0,0 +1,52 @@
|
|||
# A S Alam <aalam@users.sf.net>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-07-08 14:24-0500\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"Language: pa\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "ਇੱਕ D-BUS ਯੋਗ ਐਪਲੀਕੇਸ਼ਨ ਛੇਤੀ ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "ਪੂਰਾ ਸਰਵਿਸ ਨਾਂ, ਐਪਲੀਕੇਸ਼ਨ ਵਲੋਂ ਦਿੱਤਾ ਨਾਂ ਅਣਡਿੱਠਾ ਕਰਦਾ ਹੈ"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "ਵਰਤਣ ਲਈ D-Bus ਇੰਟਰਫੇਸ ਵਿੱਚ ਮਾਰਗ"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "ਬੰਦ ਕਰਨ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਨਾਂ"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ %1 ਸਰਵਿਸ %2 ਅਤੇ ਪਾਥ %3 ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਨਹੀਂ ਲੱਭੀ।"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"%1 ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਨ ਲਈ ਫੇਲ੍ਹ। ਗਲਤੀ ਰਿਪੋਰਟ:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-28 17:24+0100\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"
|
||||
"X-Qt-Contexts: true\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 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Łatwe kończenie pracy programów wykorzystujących D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Pełna nazwa usługi, zastępuje podaną nazwę programu"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Ścieżka do użycia w interfejsie D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Nazwa programu do zakończenia"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Nie udało się znaleźć programu %1 przy użyciu usługi %2 i ścieżki %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Nieudane kończenie pracy programu %1. Zgłoszony błąd:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,47 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Sair facilmente de uma aplicação com suporte para D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nome completo do serviço - substitui o nome da aplicação indicado"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Localização na interface de D-Bus a usar"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "O nome da aplicação a fechar"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Não foi possível encontrar a aplicação %1, usando o serviço %2 e a "
|
||||
"localização %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"A saída da aplicação %1 foi mal-sucedida. O erro devolvido foi:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,58 @@
|
|||
# Translation of kdbusaddons5.po to Brazilian Portuguese
|
||||
# Copyright (C) 2014 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# André Marcelo Alvarenga <alvarenga@kde.org>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-03-29 01:39-0300\n"
|
||||
"Last-Translator: André Marcelo Alvarenga <alvarenga@kde.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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Fechar facilmente um aplicativo com suporte a D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Nome completo do serviço, substitui o nome do aplicativo fornecido"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Caminho da interface D-Bus a usar"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Nome do aplicativo a ser fechado"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
"Não foi possível encontrar o aplicativo %1 usando o serviço %2 e o caminho "
|
||||
"%3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Falha no fechamento do aplicativo %1. O erro indicado foi:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Sergiu Bivol <sergiu@cip.md>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-08-16 14:49+0300\n"
|
||||
"Last-Translator: Sergiu Bivol <sergiu@ase.md>\n"
|
||||
"Language-Team: Romanian <kde-i18n-ro@kde.org>\n"
|
||||
"Language: ro\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==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2;\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Părăsește facil o aplicație capabilă D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
"Denumirea deplină a serviciului, suprascrie denumirea de aplicație dată"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Calea din interfața D-Bus de folosit"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Denumirea aplicației de părăsit"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Aplicația %1 nu a putut fi găsită utilizând serviciul %2 și calea %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ieșirea din aplicația %1 a eșuat. Eroarea raportată a fost:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Alexander Potashev <aspotashev@gmail.com>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-04-28 03:37+0400\n"
|
||||
"Last-Translator: Alexander Potashev <aspotashev@gmail.com>\n"
|
||||
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=3; plural=(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 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Простой способ выйти из приложения, поддерживающего D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Полное имя службы, замещает выбранное название приложения"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Путь к интерфейсу D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Приложение, которое нужно закрыть"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Не удалось найти приложение %1 по службе %2 и пути %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ошибка завершения работы приложения %1:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,51 @@
|
|||
# Translation of kdbusaddons5_qt to Northern Sami
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"Language-Team: Northern Sami <l10n-no@lister.huftis.org>\n"
|
||||
"Language: se\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: KBabel 1.11.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr ""
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
|
@ -0,0 +1,55 @@
|
|||
# translation of kdbusaddons5.po to Slovak
|
||||
# Roman Paholik <wizzardsk@gmail.com>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons5\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2014-03-28 01:55+0000\n"
|
||||
"PO-Revision-Date: 2014-03-29 08:23+0100\n"
|
||||
"Last-Translator: Roman Paholík <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 1.5\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Jednoducho ukončí D-BUS aplikáciu"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Plný názov služby, potláča zadaný názov aplikácie"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Cesta v D-Bus rozhraní na použitie"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Názov aplikácie na ukončenie"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Nepodarilo sa nájsť aplikáciu %1 pomocou služby %2 a cesty %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ukončenie aplikácie %1 zlyhalo. Oznámená chyba:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,53 @@
|
|||
# Andrej Mernik <andrejm@ubuntu.si>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-06-12 14:27+0200\n"
|
||||
"Last-Translator: Andrej Mernik <andrejm@ubuntu.si>\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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n"
|
||||
"%100<=4 ? 2 : 3);\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Na preprost način končaj program, ki ima omogočen D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Polno ime storitve, prepiše podano ime programa"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Pot v vmesniku D-Bus, ki naj se uporabi"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Ime programa, ki naj bo končan"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Z uporabo storitve %2 in poti %3 ni bilo mogoče najti programa %1."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Ni bilo mogoče končati programa %1. Sporočena napaka je bila:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,57 @@
|
|||
# Translation of kquitapp.po into Serbian.
|
||||
# Chusslove Illich <caslav.ilic@gmx.net>, 2007, 2008, 2009, 2014.
|
||||
# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-30 20:24+0200\n"
|
||||
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||
"Language: sr\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Једноставо напустите програм опремљен д‑бусом"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:20
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Пуно име сервиса, потискује дато име програма"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Путања у д‑бус сучељу"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:22
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Име програма који се напушта"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Програм %1 не може да се нађе кроз сервис %2 и путању %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:51
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Неуспело напуштање програма %1. Пријављена грешка:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,57 @@
|
|||
# Translation of kquitapp.po into Serbian.
|
||||
# Chusslove Illich <caslav.ilic@gmx.net>, 2007, 2008, 2009, 2014.
|
||||
# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-30 20:24+0200\n"
|
||||
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||
"Language: sr@ijekavian\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Једноставо напустите програм опремљен д‑бусом"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:20
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Пуно име сервиса, потискује дато име програма"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Путања у д‑бус сучељу"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:22
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Име програма који се напушта"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Програм %1 не може да се нађе кроз сервис %2 и путању %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:51
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Неуспјело напуштање програма %1. Пријављена грешка:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,57 @@
|
|||
# Translation of kquitapp.po into Serbian.
|
||||
# Chusslove Illich <caslav.ilic@gmx.net>, 2007, 2008, 2009, 2014.
|
||||
# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-30 20:24+0200\n"
|
||||
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||
"Language: sr@ijekavianlatin\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Jednostavo napustite program opremljen D‑Busom"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:20
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Puno ime servisa, potiskuje dato ime programa"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Putanja u D‑Bus sučelju"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:22
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Ime programa koji se napušta"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Program %1 ne može da se nađe kroz servis %2 i putanju %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:51
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Neuspjelo napuštanje programa %1. Prijavljena greška:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,57 @@
|
|||
# Translation of kquitapp.po into Serbian.
|
||||
# Chusslove Illich <caslav.ilic@gmx.net>, 2007, 2008, 2009, 2014.
|
||||
# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kquitapp\n"
|
||||
"PO-Revision-Date: 2014-03-30 20:24+0200\n"
|
||||
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||
"Language: sr@latin\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Accelerator-Marker: &\n"
|
||||
"X-Text-Markup: qtrich\n"
|
||||
"X-Environment: kde\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Jednostavo napustite program opremljen D‑Busom"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:20
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Puno ime servisa, potiskuje dato ime programa"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Putanja u D‑Bus sučelju"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:22
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Ime programa koji se napušta"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Program %1 ne može da se nađe kroz servis %2 i putanju %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:51
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Neuspelo napuštanje programa %1. Prijavljena greška:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2014-04-18 09:29+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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.4\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Avsluta enkelt ett program som stöder D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Fullständigt tjänstnamn, överskrider angivet programnamn"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Sökväg att använda i D-Bus gränssnitt"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Namnet på programmet som ska avslutas"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Programmet %1 kunde inte hittas med tjänsten %2 och sökvägen %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Misslyckades avsluta programmet %1. Felet som rapporterades är:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,52 @@
|
|||
# Victor Ibragimov <victor.ibragimov@gmail.com>, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2019-08-16 19:15+0500\n"
|
||||
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
||||
"Language-Team: English <kde-i18n-doc@kde.org>\n"
|
||||
"Language: tg\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 19.04.3\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Ба осонӣ баромадан аз барномаи дорои D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Номи хидмати пурра, номи барномаи таъминшударо рӯйҳамнависӣ мекунад"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Масир дар воситаи D-Bus, ки истифода мешавад"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Номи барномае, ки мебарояд"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Барномаи %1 бо истифодаи хидмати %2 ва масири %3 ёфт нашуд."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Баромад аз барномаи %1 қатъ шуд. Хатои гузоришшуда:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,45 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"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-Qt-Contexts: true\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "D-Bus desteği olan bir uygulamadan kolayca çıkın"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Tam servis adı, verilen uygulama isminin yerine geçer"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Kullanmak için D-Bus arayüzündeki yol"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Çıkılacak uygulamanın adı"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "%1 uygulaması %2 servisi ve %3 yolu kullanılarak bulunamadı."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"%1 uygulamasından çıkılamadı. Bildirilen hata şuydu:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,60 @@
|
|||
# Translation of kdbusaddons5_qt.po to Ukrainian
|
||||
# Copyright (C) 2018 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.
|
||||
#
|
||||
# Yuri Chornoivan <yurchor@ukr.net>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdbusaddons5_qt\n"
|
||||
"POT-Creation-Date: 2014-03-27 08:00+0200\n"
|
||||
"PO-Revision-Date: 2014-03-28 19:16+0200\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"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"X-Qt-Contexts: true\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 1.5\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "Простий спосіб закрити програму, що підтримує D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "Повна назва служби, перезаписує надану назву програми"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "Використовувати цей шлях в інтерфейсі D-Bus"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "Назва програми, яку слід закрити"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "Програму %1 не вдалося знайти за допомогою служби %2 за адресою %3."
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"Спроба вийти з програми %1 зазнала невдачі. Повідомлення про помилку:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
|
@ -0,0 +1,55 @@
|
|||
# Weng Xuetian <wengxt@gmail.com>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdeorg\n"
|
||||
"PO-Revision-Date: 2022-02-26 05:16\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"
|
||||
"X-Qt-Contexts: true\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/kdbusaddons/kdbusaddons5_qt.pot\n"
|
||||
"X-Crowdin-File-ID: 5602\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "轻而易举地退出支持 D-Bus 的应用程序"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "完整的服务名称,取代所提供的应用程序名称"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "要使用的 D-Bus 接口路径"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "要退出的应用程序名称"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "应用程序 %1 无法通过服务 %2 和路径 %3 找到。"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"退出应用程序 %1 失败。错误消息:\n"
|
||||
"\n"
|
||||
" %2:%3"
|
|
@ -0,0 +1,52 @@
|
|||
# Franklin Weng <franklin at goodhorse dot idv dot tw>, 2014, 2017.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2017-11-11 20:13+0800\n"
|
||||
"Last-Translator: Franklin Weng <franklin@goodhorse.idv.tw>\n"
|
||||
"Language-Team: Chinese <zh-l10n@lists.linux.org.tw>\n"
|
||||
"Language: zh_TW\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Qt-Contexts: true\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:19
|
||||
msgctxt "main|"
|
||||
msgid "Quit a D-Bus enabled application easily"
|
||||
msgstr "讓支援 D-Bus 的應用程式可以輕易地關閉"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:21
|
||||
msgctxt "main|"
|
||||
msgid "Full service name, overrides application name provided"
|
||||
msgstr "完整的服務名稱,覆寫提供的應用程式名稱"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:24
|
||||
msgctxt "main|"
|
||||
msgid "Path in the D-Bus interface to use"
|
||||
msgstr "使用的 D-Bus 介面路徑"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:27
|
||||
msgctxt "main|"
|
||||
msgid "The name of the application to quit"
|
||||
msgstr "要離開的應用程式名稱"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:45
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid "Application %1 could not be found using service %2 and path %3."
|
||||
msgstr "使用服務 %2 與路徑 %3 中找不到應用程式 %1。"
|
||||
|
||||
#: tools/kquitapp/kquitapp.cpp:52
|
||||
#, qt-format
|
||||
msgctxt "main|"
|
||||
msgid ""
|
||||
"Quitting application %1 failed. Error reported was:\n"
|
||||
"\n"
|
||||
" %2 : %3"
|
||||
msgstr ""
|
||||
"離開應用程式 %1 失敗。錯誤報告為:\n"
|
||||
"\n"
|
||||
"%2:%3"
|
|
@ -0,0 +1,129 @@
|
|||
add_subdirectory(tools/kquitapp)
|
||||
|
||||
add_library(KF5DBusAddons)
|
||||
add_library(KF5::DBusAddons ALIAS KF5DBusAddons)
|
||||
|
||||
ecm_create_qm_loader(KF5DBusAddons kdbusaddons5_qt)
|
||||
|
||||
target_sources(KF5DBusAddons PRIVATE
|
||||
kdbusconnectionpool.cpp
|
||||
kdbusconnectionpool.h
|
||||
kdbusinterprocesslock.cpp
|
||||
kdbusinterprocesslock.h
|
||||
kdbusservice.cpp
|
||||
kdbusservice.h
|
||||
kdedmodule.cpp
|
||||
kdedmodule.h
|
||||
kdeinitinterface.cpp
|
||||
kdeinitinterface.h
|
||||
updatelaunchenvironmentjob.cpp
|
||||
updatelaunchenvironmentjob.h
|
||||
)
|
||||
ecm_qt_declare_logging_category(KF5DBusAddons
|
||||
HEADER kdbusaddons_debug.h
|
||||
IDENTIFIER KDBUSADDONS_LOG
|
||||
CATEGORY_NAME kf.dbusaddons
|
||||
OLD_CATEGORY_NAMES kf5.kdbusaddons
|
||||
DESCRIPTION "KDBusAddons"
|
||||
EXPORT KDBUSADDONS
|
||||
)
|
||||
|
||||
set(libkdbusaddons_dbus_SRCS)
|
||||
qt_add_dbus_interface(libkdbusaddons_dbus_SRCS org.freedesktop.Application.xml FreeDesktopApplpicationIface)
|
||||
qt_add_dbus_interface(libkdbusaddons_dbus_SRCS org.kde.KDBusService.xml KDBusServiceIface)
|
||||
|
||||
qt_add_dbus_adaptor(libkdbusaddons_dbus_SRCS
|
||||
org.freedesktop.Application.xml
|
||||
kdbusservice.h
|
||||
KDBusService
|
||||
kdbusservice_adaptor
|
||||
KDBusServiceAdaptor)
|
||||
qt_add_dbus_adaptor(libkdbusaddons_dbus_SRCS
|
||||
org.kde.KDBusService.xml
|
||||
kdbusservice.h
|
||||
KDBusService
|
||||
kdbusserviceextensions_adaptor
|
||||
KDBusServiceExtensionsAdaptor)
|
||||
|
||||
target_sources(KF5DBusAddons PRIVATE
|
||||
${libkdbusaddons_dbus_SRCS}
|
||||
)
|
||||
|
||||
ecm_generate_export_header(KF5DBusAddons
|
||||
BASE_NAME KDBusAddons
|
||||
GROUP_BASE_NAME KF
|
||||
VERSION ${KF_VERSION}
|
||||
DEPRECATED_BASE_VERSION 0
|
||||
DEPRECATION_VERSIONS 5.68
|
||||
EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT}
|
||||
)
|
||||
|
||||
if(TARGET Qt5::X11Extras)
|
||||
set(_qt_x11_extras_libs Qt5::X11Extras)
|
||||
elseif(TARGET Qt6::Gui)
|
||||
set(_qt_x11_extras_libs Qt6::GuiPrivate) # qtx11extras_p.h
|
||||
endif()
|
||||
|
||||
target_link_libraries(KF5DBusAddons PUBLIC Qt${QT_MAJOR_VERSION}::DBus PRIVATE ${_qt_x11_extras_libs})
|
||||
|
||||
target_include_directories(KF5DBusAddons INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR_KF}/KDBusAddons>")
|
||||
|
||||
set_target_properties(KF5DBusAddons PROPERTIES VERSION ${KDBUSADDONS_VERSION}
|
||||
SOVERSION ${KDBUSADDONS_SOVERSION}
|
||||
EXPORT_NAME DBusAddons
|
||||
)
|
||||
|
||||
configure_file(config-kdbusaddons.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdbusaddons.h )
|
||||
|
||||
ecm_generate_headers(KDBusAddons_HEADERS
|
||||
HEADER_NAMES
|
||||
KDBusConnectionPool
|
||||
KDBusInterProcessLock
|
||||
KDBusService
|
||||
KDEDModule
|
||||
KDEInitInterface
|
||||
UpdateLaunchEnvironmentJob
|
||||
REQUIRED_HEADERS KDBusAddons_HEADERS
|
||||
)
|
||||
|
||||
install(TARGETS KF5DBusAddons EXPORT KF5DBusAddonsTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
|
||||
install(FILES
|
||||
${KDBusAddons_HEADERS}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/kdbusaddons_export.h
|
||||
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KDBusAddons COMPONENT Devel
|
||||
)
|
||||
|
||||
ecm_qt_install_logging_categories(
|
||||
EXPORT KDBUSADDONS
|
||||
FILE kdbusaddons.categories
|
||||
DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
|
||||
)
|
||||
|
||||
if(BUILD_QCH)
|
||||
ecm_add_qch(
|
||||
KF5DBusAddons_QCH
|
||||
NAME KDBusAddons
|
||||
BASE_NAME KF5DBusAddons
|
||||
VERSION ${KF_VERSION}
|
||||
ORG_DOMAIN org.kde
|
||||
SOURCES # using only public headers, to cover only public API
|
||||
${KDBusAddons_HEADERS}
|
||||
MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
|
||||
LINK_QCHS
|
||||
Qt5DBus_QCH
|
||||
Qt5Core_QCH
|
||||
INCLUDE_DIRS
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
BLANK_MACROS
|
||||
KDBUSADDONS_EXPORT
|
||||
KDBUSADDONS_DEPRECATED
|
||||
TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
|
||||
QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
|
||||
COMPONENT Devel
|
||||
)
|
||||
endif()
|
||||
|
||||
include(ECMGeneratePriFile)
|
||||
ecm_generate_pri_file(BASE_NAME KDBusAddons LIB_NAME KF5DBusAddons DEPS "dbus" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF}/KDBusAddons)
|
||||
install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Extract strings from all source files.
|
||||
# EXTRACT_TR_STRINGS extracts strings with lupdate and convert them to .pot with
|
||||
# lconvert.
|
||||
$EXTRACT_TR_STRINGS `find . -name \*.cpp -o -name \*.h -o -name \*.ui -o -name \*.qml` -o $podir/kdbusaddons5_qt.pot
|
|
@ -0,0 +1 @@
|
|||
#cmakedefine01 HAVE_X11
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
This file is part of the KDE Frameworks.
|
||||
SPDX-FileCopyrightText: 2010 Sebastian Trueg <trueg@kde.org>
|
||||
SPDX-FileCopyrightText: 2010 David Faure <faure@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "kdbusconnectionpool.h"
|
||||
#include <QCoreApplication>
|
||||
#include <QThread>
|
||||
#include <QThreadStorage>
|
||||
|
||||
#if KDBUSADDONS_BUILD_DEPRECATED_SINCE(5, 68)
|
||||
namespace
|
||||
{
|
||||
QAtomicInt s_connectionCounter;
|
||||
|
||||
class KDBusConnectionPoolPrivate
|
||||
{
|
||||
public:
|
||||
KDBusConnectionPoolPrivate()
|
||||
: m_connection(QDBusConnection::connectToBus(QDBusConnection::SessionBus, //
|
||||
QStringLiteral("KDBusConnectionPoolConnection%1").arg(newNumber())))
|
||||
{
|
||||
}
|
||||
|
||||
~KDBusConnectionPoolPrivate()
|
||||
{
|
||||
QDBusConnection::disconnectFromBus(m_connection.name());
|
||||
}
|
||||
|
||||
QDBusConnection connection() const
|
||||
{
|
||||
return m_connection;
|
||||
}
|
||||
|
||||
private:
|
||||
static int newNumber()
|
||||
{
|
||||
return s_connectionCounter.fetchAndAddRelaxed(1);
|
||||
}
|
||||
|
||||
QDBusConnection m_connection;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static QThreadStorage<KDBusConnectionPoolPrivate *> s_perThreadConnection;
|
||||
|
||||
QDBusConnection KDBusConnectionPool::threadConnection()
|
||||
{
|
||||
Q_ASSERT(QCoreApplication::instance() != nullptr);
|
||||
if (QCoreApplication::instance()->thread() == QThread::currentThread()) {
|
||||
return QDBusConnection::sessionBus();
|
||||
}
|
||||
if (!s_perThreadConnection.hasLocalData()) {
|
||||
s_perThreadConnection.setLocalData(new KDBusConnectionPoolPrivate);
|
||||
}
|
||||
|
||||
return s_perThreadConnection.localData()->connection();
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
This file is part of the KDE Frameworks.
|
||||
SPDX-FileCopyrightText: 2010 Sebastian Trueg <trueg@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef KDBUSCONNECTIONPOOL_H
|
||||
#define KDBUSCONNECTIONPOOL_H
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
#if KDBUSADDONS_ENABLE_DEPRECATED_SINCE(5, 68)
|
||||
#include <QDBusConnection>
|
||||
|
||||
/**
|
||||
* @namespace KDBusConnectionPool
|
||||
* Provides utility functions working around the problem
|
||||
* of QDBusConnection not being thread-safe.
|
||||
* @deprecated since 5.68 QDBusConnection has been fixed.
|
||||
*/
|
||||
namespace KDBusConnectionPool
|
||||
{
|
||||
/**
|
||||
* The KDBusConnectionPool works around the problem
|
||||
* of QDBusConnection not being thread-safe. As soon as that
|
||||
* has been fixed (either directly in libdbus or with a work-
|
||||
* around in Qt) this method can be dropped in favor of
|
||||
* QDBusConnection::sessionBus().
|
||||
*
|
||||
* Note that this will create a thread-local QDBusConnection
|
||||
* object, which means whichever thread this is called
|
||||
* from must have both an event loop and be as long-lived as
|
||||
* the object using it. If either condition is not met, the
|
||||
* returned QDBusConnection will not send or receive D-Bus
|
||||
* events (calls, return values, etc).
|
||||
*
|
||||
* Using this within libraries can create complexities for
|
||||
* application developers working with threads as its use
|
||||
* in the library may not be apparent to the application
|
||||
* developer, and so functionality may appear to be broken
|
||||
* simply due to the nature of the thread from which this
|
||||
* ends up being called from. Library developers using
|
||||
* this facility are strongly encouraged to note this
|
||||
* caveat in the library's documentation.
|
||||
*
|
||||
* @deprecated since 5.68 Use QDBusConnection::sessionBus() instead.
|
||||
* QDBusConnection is nowadays safe to use in multiple threads as well.
|
||||
*/
|
||||
KDBUSADDONS_EXPORT
|
||||
KDBUSADDONS_DEPRECATED_VERSION(5, 68, "Use QDBusConnection::sessionBus()")
|
||||
QDBusConnection threadConnection();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
This file is part of the KDE
|
||||
|
||||
SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#include "kdbusinterprocesslock.h"
|
||||
|
||||
#include <QDBusConnectionInterface>
|
||||
#include <QEventLoop>
|
||||
|
||||
class KDBusInterProcessLockPrivate
|
||||
{
|
||||
public:
|
||||
KDBusInterProcessLockPrivate(const QString &resource, KDBusInterProcessLock *parent)
|
||||
: m_resource(resource)
|
||||
, m_parent(parent)
|
||||
{
|
||||
m_serviceName = QStringLiteral("org.kde.private.lock-%1").arg(m_resource);
|
||||
|
||||
m_parent->connect(QDBusConnection::sessionBus().interface(), &QDBusConnectionInterface::serviceRegistered, m_parent, [this](const QString &service) {
|
||||
serviceRegistered(service);
|
||||
});
|
||||
}
|
||||
|
||||
~KDBusInterProcessLockPrivate()
|
||||
{
|
||||
}
|
||||
|
||||
void serviceRegistered(const QString &service)
|
||||
{
|
||||
if (service == m_serviceName) {
|
||||
Q_EMIT m_parent->lockGranted(m_parent);
|
||||
}
|
||||
}
|
||||
|
||||
QString m_resource;
|
||||
QString m_serviceName;
|
||||
KDBusInterProcessLock *m_parent;
|
||||
};
|
||||
|
||||
KDBusInterProcessLock::KDBusInterProcessLock(const QString &resource)
|
||||
: d(new KDBusInterProcessLockPrivate(resource, this))
|
||||
{
|
||||
}
|
||||
|
||||
KDBusInterProcessLock::~KDBusInterProcessLock() = default;
|
||||
|
||||
QString KDBusInterProcessLock::resource() const
|
||||
{
|
||||
return d->m_resource;
|
||||
}
|
||||
|
||||
void KDBusInterProcessLock::lock()
|
||||
{
|
||||
QDBusConnection::sessionBus().interface()->registerService(d->m_serviceName,
|
||||
QDBusConnectionInterface::QueueService,
|
||||
QDBusConnectionInterface::DontAllowReplacement);
|
||||
}
|
||||
|
||||
void KDBusInterProcessLock::unlock()
|
||||
{
|
||||
QDBusConnection::sessionBus().interface()->unregisterService(d->m_serviceName);
|
||||
}
|
||||
|
||||
void KDBusInterProcessLock::waitForLockGranted()
|
||||
{
|
||||
QEventLoop loop;
|
||||
connect(this, &KDBusInterProcessLock::lockGranted, &loop, &QEventLoop::quit);
|
||||
loop.exec();
|
||||
}
|
||||
|
||||
#include "moc_kdbusinterprocesslock.cpp"
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
This file is part of libkdbus
|
||||
|
||||
SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#ifndef KDBUSINTERPROCESSLOCK_H
|
||||
#define KDBUSINTERPROCESSLOCK_H
|
||||
|
||||
#include <QObject>
|
||||
#include <memory>
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
class KDBusInterProcessLockPrivate;
|
||||
|
||||
/**
|
||||
* @class KDBusInterProcessLock kdbusinterprocesslock.h <KDBusInterProcessLock>
|
||||
*
|
||||
* @short A class for serializing access to a resource that is shared between multiple processes.
|
||||
*
|
||||
* This class can be used to serialize access to a resource between
|
||||
* multiple processes. Instead of using lock files, which could
|
||||
* become stale easily, the registration of dummy D-Bus services is used
|
||||
* to allow only one process at a time to access the resource.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* @code
|
||||
*
|
||||
* KDBusInterProcessLock *lock = new KDBusInterProcessLock("myresource");
|
||||
* connect(lock, &KDBusInterProcessLock::lockGranted, this, &MyClass::doCriticalTask);
|
||||
* lock->lock();
|
||||
*
|
||||
* ...
|
||||
*
|
||||
* ... ::doCriticalTask(KDBusInterProcessLock *lock)
|
||||
* {
|
||||
* // change common resource
|
||||
*
|
||||
* lock->unlock();
|
||||
* }
|
||||
*
|
||||
* @endcode
|
||||
*
|
||||
* @author Tobias Koenig <tokoe@kde.org>
|
||||
*/
|
||||
class KDBUSADDONS_EXPORT KDBusInterProcessLock : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/**
|
||||
* Creates a new inter process lock object.
|
||||
*
|
||||
* @param resource The identifier of the resource that shall be locked.
|
||||
* This identifier can be any string, however it must be unique for
|
||||
* the resource and every client that wants to access the resource must
|
||||
* know it.
|
||||
*/
|
||||
KDBusInterProcessLock(const QString &resource);
|
||||
|
||||
/**
|
||||
* Destroys the inter process lock object.
|
||||
*/
|
||||
~KDBusInterProcessLock() override;
|
||||
|
||||
/**
|
||||
* Returns the identifier of the resource the lock is set on.
|
||||
*/
|
||||
QString resource() const;
|
||||
|
||||
/**
|
||||
* Requests the lock.
|
||||
*
|
||||
* The lock is granted as soon as the lockGranted() signal is emitted.
|
||||
*/
|
||||
void lock();
|
||||
|
||||
/**
|
||||
* Releases the lock.
|
||||
*
|
||||
* @note This method should be called as soon as the critical area is left
|
||||
* in your code path and the lock is no longer needed.
|
||||
*/
|
||||
void unlock();
|
||||
|
||||
/**
|
||||
* Waits for the granting of a lock by starting an internal event loop.
|
||||
*/
|
||||
void waitForLockGranted();
|
||||
|
||||
Q_SIGNALS:
|
||||
/**
|
||||
* This signal is emitted when the requested lock has been granted.
|
||||
*
|
||||
* @param lock The lock that has been granted.
|
||||
*/
|
||||
void lockGranted(KDBusInterProcessLock *lock);
|
||||
|
||||
private:
|
||||
friend class KDBusInterProcessLockPrivate;
|
||||
std::unique_ptr<KDBusInterProcessLockPrivate> const d;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,358 @@
|
|||
/*
|
||||
This file is part of libkdbusaddons
|
||||
|
||||
SPDX-FileCopyrightText: 2011 David Faure <faure@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#include "kdbusservice.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusConnectionInterface>
|
||||
#include <QDBusReply>
|
||||
|
||||
#include "FreeDesktopApplpicationIface.h"
|
||||
#include "KDBusServiceIface.h"
|
||||
|
||||
#include "config-kdbusaddons.h"
|
||||
|
||||
#if HAVE_X11
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
#include <private/qtx11extras_p.h>
|
||||
#else
|
||||
#include <QX11Info>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "kdbusaddons_debug.h"
|
||||
#include "kdbusservice_adaptor.h"
|
||||
#include "kdbusserviceextensions_adaptor.h"
|
||||
|
||||
class KDBusServicePrivate
|
||||
{
|
||||
public:
|
||||
KDBusServicePrivate()
|
||||
: registered(false)
|
||||
, exitValue(0)
|
||||
{
|
||||
}
|
||||
|
||||
QString generateServiceName()
|
||||
{
|
||||
const QCoreApplication *app = QCoreApplication::instance();
|
||||
const QString domain = app->organizationDomain();
|
||||
const QStringList parts = domain.split(QLatin1Char('.'), Qt::SkipEmptyParts);
|
||||
|
||||
QString reversedDomain;
|
||||
if (parts.isEmpty()) {
|
||||
reversedDomain = QStringLiteral("local.");
|
||||
} else {
|
||||
for (const QString &part : parts) {
|
||||
reversedDomain.prepend(QLatin1Char('.'));
|
||||
reversedDomain.prepend(part);
|
||||
}
|
||||
}
|
||||
|
||||
return reversedDomain + app->applicationName();
|
||||
}
|
||||
|
||||
static void handlePlatformData(const QVariantMap &platformData)
|
||||
{
|
||||
#if HAVE_X11
|
||||
if (QX11Info::isPlatformX11()) {
|
||||
QByteArray desktopStartupId = platformData.value(QStringLiteral("desktop-startup-id")).toByteArray();
|
||||
if (!desktopStartupId.isEmpty()) {
|
||||
QX11Info::setNextStartupId(desktopStartupId);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
const auto xdgActivationToken = platformData.value(QLatin1String("activation-token")).toByteArray();
|
||||
if (!xdgActivationToken.isEmpty()) {
|
||||
qputenv("XDG_ACTIVATION_TOKEN", xdgActivationToken);
|
||||
}
|
||||
}
|
||||
|
||||
bool registered;
|
||||
QString serviceName;
|
||||
QString errorMessage;
|
||||
int exitValue;
|
||||
};
|
||||
|
||||
// Wraps a serviceName registration.
|
||||
class Registration : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum class Register {
|
||||
RegisterWitoutQueue,
|
||||
RegisterWithQueue,
|
||||
};
|
||||
|
||||
Registration(KDBusService *s_, KDBusServicePrivate *d_, KDBusService::StartupOptions options_)
|
||||
: s(s_)
|
||||
, d(d_)
|
||||
, options(options_)
|
||||
{
|
||||
if (!QDBusConnection::sessionBus().isConnected() || !(bus = QDBusConnection::sessionBus().interface())) {
|
||||
d->errorMessage = QLatin1String(
|
||||
"DBus session bus not found. To circumvent this problem try the following command (with bash):\n"
|
||||
" export $(dbus-launch)");
|
||||
} else {
|
||||
generateServiceName();
|
||||
}
|
||||
}
|
||||
|
||||
void run()
|
||||
{
|
||||
if (bus) {
|
||||
registerOnBus();
|
||||
}
|
||||
|
||||
if (!d->registered && ((options & KDBusService::NoExitOnFailure) == 0)) {
|
||||
qCCritical(KDBUSADDONS_LOG) << qPrintable(d->errorMessage);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void generateServiceName()
|
||||
{
|
||||
d->serviceName = d->generateServiceName();
|
||||
objectPath = QLatin1Char('/') + d->serviceName;
|
||||
objectPath.replace(QLatin1Char('.'), QLatin1Char('/'));
|
||||
objectPath.replace(QLatin1Char('-'), QLatin1Char('_')); // see spec change at https://bugs.freedesktop.org/show_bug.cgi?id=95129
|
||||
|
||||
if (options & KDBusService::Multiple) {
|
||||
const bool inSandbox = QFileInfo::exists(QStringLiteral("/.flatpak-info"));
|
||||
if (inSandbox) {
|
||||
d->serviceName += QStringLiteral(".kdbus-")
|
||||
+ QDBusConnection::sessionBus().baseService().replace(QRegularExpression(QStringLiteral("[\\.:]")), QStringLiteral("_"));
|
||||
} else {
|
||||
d->serviceName += QLatin1Char('-') + QString::number(QCoreApplication::applicationPid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void registerOnBus()
|
||||
{
|
||||
auto bus = QDBusConnection::sessionBus();
|
||||
bool objectRegistered = false;
|
||||
objectRegistered = bus.registerObject(QStringLiteral("/MainApplication"),
|
||||
QCoreApplication::instance(),
|
||||
QDBusConnection::ExportAllSlots //
|
||||
| QDBusConnection::ExportScriptableProperties //
|
||||
| QDBusConnection::ExportAdaptors);
|
||||
if (!objectRegistered) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "Failed to register /MainApplication on DBus";
|
||||
return;
|
||||
}
|
||||
|
||||
objectRegistered = bus.registerObject(objectPath, s, QDBusConnection::ExportAdaptors);
|
||||
if (!objectRegistered) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "Failed to register" << objectPath << "on DBus";
|
||||
return;
|
||||
}
|
||||
|
||||
attemptRegistration();
|
||||
|
||||
if (d->registered) {
|
||||
if (QCoreApplication *app = QCoreApplication::instance()) {
|
||||
connect(app, &QCoreApplication::aboutToQuit, s, &KDBusService::unregister);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void attemptRegistration()
|
||||
{
|
||||
Q_ASSERT(!d->registered);
|
||||
|
||||
auto queueOption = QDBusConnectionInterface::DontQueueService;
|
||||
|
||||
if (options & KDBusService::Unique) {
|
||||
// When a process crashes and gets auto-restarted by KCrash we may
|
||||
// be in this code path "too early". There is a bit of a delay
|
||||
// between the restart and the previous process dropping off of the
|
||||
// bus and thus releasing its registered names. As a result there
|
||||
// is a good chance that if we wait a bit the name will shortly
|
||||
// become registered.
|
||||
|
||||
queueOption = QDBusConnectionInterface::QueueService;
|
||||
|
||||
connect(bus, &QDBusConnectionInterface::serviceRegistered, this, [this](const QString &service) {
|
||||
if (service != d->serviceName) {
|
||||
return;
|
||||
}
|
||||
|
||||
d->registered = true;
|
||||
registrationLoop.quit();
|
||||
});
|
||||
}
|
||||
|
||||
d->registered = (bus->registerService(d->serviceName, queueOption) == QDBusConnectionInterface::ServiceRegistered);
|
||||
|
||||
if (d->registered) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (options & KDBusService::Replace) {
|
||||
auto message = QDBusMessage::createMethodCall(d->serviceName,
|
||||
QStringLiteral("/MainApplication"),
|
||||
QStringLiteral("org.qtproject.Qt.QCoreApplication"),
|
||||
QStringLiteral("quit"));
|
||||
QDBusConnection::sessionBus().asyncCall(message);
|
||||
waitForRegistration();
|
||||
} else if (options & KDBusService::Unique) {
|
||||
// Already running so it's ok!
|
||||
QVariantMap platform_data;
|
||||
#if HAVE_X11
|
||||
if (QX11Info::isPlatformX11()) {
|
||||
QString startupId = QString::fromUtf8(qgetenv("DESKTOP_STARTUP_ID"));
|
||||
if (startupId.isEmpty()) {
|
||||
startupId = QString::fromUtf8(QX11Info::nextStartupId());
|
||||
}
|
||||
if (!startupId.isEmpty()) {
|
||||
platform_data.insert(QStringLiteral("desktop-startup-id"), startupId);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (qEnvironmentVariableIsSet("XDG_ACTIVATION_TOKEN")) {
|
||||
platform_data.insert(QStringLiteral("activation-token"), qgetenv("XDG_ACTIVATION_TOKEN"));
|
||||
}
|
||||
|
||||
if (QCoreApplication::arguments().count() > 1) {
|
||||
OrgKdeKDBusServiceInterface iface(d->serviceName, objectPath, QDBusConnection::sessionBus());
|
||||
iface.setTimeout(5 * 60 * 1000); // Application can take time to answer
|
||||
QDBusReply<int> reply = iface.CommandLine(QCoreApplication::arguments(), QDir::currentPath(), platform_data);
|
||||
if (reply.isValid()) {
|
||||
exit(reply.value());
|
||||
} else {
|
||||
d->errorMessage = reply.error().message();
|
||||
}
|
||||
} else {
|
||||
OrgFreedesktopApplicationInterface iface(d->serviceName, objectPath, QDBusConnection::sessionBus());
|
||||
iface.setTimeout(5 * 60 * 1000); // Application can take time to answer
|
||||
QDBusReply<void> reply = iface.Activate(platform_data);
|
||||
if (reply.isValid()) {
|
||||
exit(0);
|
||||
} else {
|
||||
d->errorMessage = reply.error().message();
|
||||
}
|
||||
}
|
||||
|
||||
// service did not respond in a valid way....
|
||||
// let's wait to see if our queued registration finishes perhaps.
|
||||
waitForRegistration();
|
||||
}
|
||||
|
||||
if (!d->registered) { // either multi service or failed to reclaim name
|
||||
d->errorMessage = QLatin1String("Couldn't register name '") + d->serviceName + QLatin1String("' with DBUS - another process owns it already!");
|
||||
}
|
||||
}
|
||||
|
||||
void waitForRegistration()
|
||||
{
|
||||
QTimer quitTimer;
|
||||
// Wait a bit longer when we know this instance was restarted. There's
|
||||
// a very good chance we'll eventually get the name once the defunct
|
||||
// process closes its sockets.
|
||||
quitTimer.start(qEnvironmentVariableIsSet("KCRASH_AUTO_RESTARTED") ? 8000 : 2000);
|
||||
connect(&quitTimer, &QTimer::timeout, ®istrationLoop, &QEventLoop::quit);
|
||||
registrationLoop.exec();
|
||||
}
|
||||
|
||||
QDBusConnectionInterface *bus = nullptr;
|
||||
KDBusService *s = nullptr;
|
||||
KDBusServicePrivate *d = nullptr;
|
||||
KDBusService::StartupOptions options;
|
||||
QEventLoop registrationLoop;
|
||||
QString objectPath;
|
||||
};
|
||||
|
||||
KDBusService::KDBusService(StartupOptions options, QObject *parent)
|
||||
: QObject(parent)
|
||||
, d(new KDBusServicePrivate)
|
||||
{
|
||||
new KDBusServiceAdaptor(this);
|
||||
new KDBusServiceExtensionsAdaptor(this);
|
||||
|
||||
Registration registration(this, d.get(), options);
|
||||
registration.run();
|
||||
}
|
||||
|
||||
KDBusService::~KDBusService() = default;
|
||||
|
||||
bool KDBusService::isRegistered() const
|
||||
{
|
||||
return d->registered;
|
||||
}
|
||||
|
||||
QString KDBusService::errorMessage() const
|
||||
{
|
||||
return d->errorMessage;
|
||||
}
|
||||
|
||||
void KDBusService::setExitValue(int value)
|
||||
{
|
||||
d->exitValue = value;
|
||||
}
|
||||
|
||||
QString KDBusService::serviceName() const
|
||||
{
|
||||
return d->serviceName;
|
||||
}
|
||||
|
||||
void KDBusService::unregister()
|
||||
{
|
||||
QDBusConnectionInterface *bus = nullptr;
|
||||
if (!d->registered || !QDBusConnection::sessionBus().isConnected() || !(bus = QDBusConnection::sessionBus().interface())) {
|
||||
return;
|
||||
}
|
||||
bus->unregisterService(d->serviceName);
|
||||
}
|
||||
|
||||
void KDBusService::Activate(const QVariantMap &platform_data)
|
||||
{
|
||||
d->handlePlatformData(platform_data);
|
||||
Q_EMIT activateRequested(QStringList(), QString());
|
||||
qunsetenv("XDG_ACTIVATION_TOKEN");
|
||||
}
|
||||
|
||||
void KDBusService::Open(const QStringList &uris, const QVariantMap &platform_data)
|
||||
{
|
||||
d->handlePlatformData(platform_data);
|
||||
Q_EMIT openRequested(QUrl::fromStringList(uris));
|
||||
qunsetenv("XDG_ACTIVATION_TOKEN");
|
||||
}
|
||||
|
||||
void KDBusService::ActivateAction(const QString &action_name, const QVariantList &maybeParameter, const QVariantMap &platform_data)
|
||||
{
|
||||
d->handlePlatformData(platform_data);
|
||||
|
||||
// This is a workaround for D-Bus not supporting null variants.
|
||||
const QVariant param = maybeParameter.count() == 1 ? maybeParameter.first() : QVariant();
|
||||
|
||||
Q_EMIT activateActionRequested(action_name, param);
|
||||
qunsetenv("XDG_ACTIVATION_TOKEN");
|
||||
}
|
||||
|
||||
int KDBusService::CommandLine(const QStringList &arguments, const QString &workingDirectory, const QVariantMap &platform_data)
|
||||
{
|
||||
d->exitValue = 0;
|
||||
d->handlePlatformData(platform_data);
|
||||
// The TODOs here only make sense if this method can be called from the GUI.
|
||||
// If it's for pure "usage in the terminal" then no startup notification got started.
|
||||
// But maybe one day the workspace wants to call this for the Exec key of a .desktop file?
|
||||
Q_EMIT activateRequested(arguments, workingDirectory);
|
||||
qunsetenv("XDG_ACTIVATION_TOKEN");
|
||||
return d->exitValue;
|
||||
}
|
||||
|
||||
#include "kdbusservice.moc"
|
|
@ -0,0 +1,309 @@
|
|||
/*
|
||||
This file is part of libkdbusaddons
|
||||
|
||||
SPDX-FileCopyrightText: 2011 David Faure <faure@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Kevin Ottens <ervin@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#ifndef KDBUSSERVICE_H
|
||||
#define KDBUSSERVICE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QUrl>
|
||||
#include <memory>
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
class KDBusServicePrivate;
|
||||
|
||||
/**
|
||||
* @class KDBusService kdbusservice.h <KDBusService>
|
||||
*
|
||||
* KDBusService takes care of registering the current process with D-Bus.
|
||||
*
|
||||
* This registers the application at a predictable location on D-Bus, registers
|
||||
* the QCoreApplication (or subclass) object at /MainApplication, and
|
||||
* assists in implementing the application side of D-Bus activation from
|
||||
* the <a
|
||||
* href="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">Desktop
|
||||
* Entry Specification</a>.
|
||||
*
|
||||
* An application can either work in Multiple mode or Unique mode.
|
||||
*
|
||||
* In Multiple mode, the application can be launched many times. The service
|
||||
* name in the D-Bus registration will contain the PID to distinguish the
|
||||
* various instances; for example: <tt>org.kde.konqueror-12345</tt>.
|
||||
*
|
||||
* In Unique mode, only one instance of this application can ever run.
|
||||
* The first instance of the application registers with D-Bus without the PID,
|
||||
* and any attempt to run the application again will cause the
|
||||
* activateRequested() signal to be emitted in the already-running instance; the
|
||||
* duplicate instance will then quit. The exit value can be set by the already
|
||||
* running instance with setExitValue(), the default value is @c 0.
|
||||
*
|
||||
* Unique-mode applications should usually delay parsing command-line arguments
|
||||
* until after creating a KDBusService object; that way they know they are the
|
||||
* original instance of the application.
|
||||
*
|
||||
* Applications that set the D-Bus activation entry (DBusActivatable=true) in
|
||||
* their desktop files will use Unique mode and connect to the signals emitted
|
||||
* by this class.
|
||||
* Note that the D-Bus interface is exported for Multiple-mode applications as
|
||||
* well, so it also makes sense for such applications to connect to the signals
|
||||
* emitted by this class.
|
||||
*
|
||||
* @note In order to avoid a race, the application should export its objects to
|
||||
* D-Bus before allowing the event loop to run (for example, by calling
|
||||
* QCoreApplication::exec()). Otherwise, the application will appear on the bus
|
||||
* before its objects are accessible via D-Bus, which could be a problem for
|
||||
* other applications or scripts which start the application in order to talk
|
||||
* D-Bus to it immediately.
|
||||
*
|
||||
* Example usage:
|
||||
*
|
||||
* @code
|
||||
QApplication app(argc, argv);
|
||||
app.setApplicationName("kuiserver");
|
||||
app.setOrganizationDomain("kde.org");
|
||||
// Create your D-Bus objects here
|
||||
// ...
|
||||
KDBusService service(KDBusService::Unique);
|
||||
// If this point is reached, this is the only running instance
|
||||
// i.e. org.kde.kuiserver has been registered
|
||||
return app.exec();
|
||||
* @endcode
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
class KDBUSADDONS_EXPORT KDBusService : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/**
|
||||
* Options to control the behaviour of KDBusService
|
||||
* @see StartupOptions
|
||||
*/
|
||||
enum StartupOption {
|
||||
/**
|
||||
* Indicates that only one instance of this application should ever exist.
|
||||
*
|
||||
* Cannot be combined with @c Multiple.
|
||||
*/
|
||||
Unique = 1,
|
||||
/**
|
||||
* Indicates that multiple instances of the application may exist.
|
||||
*
|
||||
* Cannot be combined with @c Unique. This is the default.
|
||||
*/
|
||||
Multiple = 2,
|
||||
/** Indicates that the application should not exit if it failed to
|
||||
* register with D-Bus.
|
||||
*
|
||||
* If not set, KDBusService will quit the application if it failed to
|
||||
* register the service with D-Bus or a @c Unique instance can not be
|
||||
* activated. A @c Multiple instance will exit with error code @c 1.
|
||||
* The exit value of a @c Unique instance can be set from the running
|
||||
* instance with setExitValue(), the default value is @c 0.
|
||||
*/
|
||||
NoExitOnFailure = 4,
|
||||
/**
|
||||
* Indicates that if there's already a unique service running, to be quit and replaced
|
||||
* with our own.
|
||||
*
|
||||
* If exported, it will try first quitting the service calling @c org.qtproject.Qt.QCoreApplication.quit,
|
||||
* which is exported by KDBusService by default.
|
||||
*
|
||||
* @since 5.65
|
||||
*/
|
||||
Replace = 8
|
||||
};
|
||||
Q_ENUM(StartupOption)
|
||||
|
||||
/**
|
||||
* Stores a combination of #StartupOption values.
|
||||
*/
|
||||
Q_DECLARE_FLAGS(StartupOptions, StartupOption)
|
||||
Q_FLAG(StartupOptions)
|
||||
|
||||
/**
|
||||
* Tries to register the current process to D-Bus at an address based on the
|
||||
* application name and organization domain.
|
||||
*
|
||||
* The D-Bus service name is the reversed organization domain, followed by
|
||||
* the application name. If @p options includes the @c Multiple flag, the
|
||||
* application PID will be appended. For example,
|
||||
* @code
|
||||
* app.setApplicationName("kuiserver");
|
||||
* app.setOrganizationDomain("kde.org");
|
||||
* @endcode
|
||||
* will make KDBusService register as @c org.kde.kuiserver in @c Unique
|
||||
* mode, and @c org.kde.kuiserver-1234 (if the process has PID @c 1234) in
|
||||
* @c Multiple mode.
|
||||
*/
|
||||
explicit KDBusService(StartupOptions options = Multiple, QObject *parent = nullptr);
|
||||
|
||||
/**
|
||||
* Destroys this object (but does not unregister the application).
|
||||
*
|
||||
* Deleting this object before unregister() is called (either manually or
|
||||
* because QCoreApplication::aboutToQuit() was emitted) could confuse
|
||||
* clients, who will see the service on the bus but will be unable to use
|
||||
* the activation methods.
|
||||
*/
|
||||
~KDBusService() override;
|
||||
|
||||
/**
|
||||
* Returns true if the D-Bus registration succeeded.
|
||||
*
|
||||
* Note that this is only useful when specifying the option NoExitOnFailure.
|
||||
* Otherwise, the simple fact that this process is still running indicates
|
||||
* that the registration succeeded.
|
||||
*/
|
||||
bool isRegistered() const;
|
||||
|
||||
/**
|
||||
* Returns the name of the D-Bus service registered by this class.
|
||||
* Mostly useful when using the option Multiple.
|
||||
* @since 5.33
|
||||
*/
|
||||
QString serviceName() const;
|
||||
|
||||
/**
|
||||
* Returns the error message from the D-Bus registration if it failed.
|
||||
*
|
||||
* Note that this is only useful when specifying the option NoExitOnFailure.
|
||||
* Otherwise the process has quit by the time you can get a chance to call this.
|
||||
*/
|
||||
QString errorMessage() const;
|
||||
|
||||
/**
|
||||
* Sets the exit value to be used for a duplicate instance.
|
||||
*
|
||||
* If this is a @c Unique application, a slot connected to
|
||||
* activateRequested() can use this to specify a non-zero exit value for the
|
||||
* duplicate instance. This would typically be done if invalid command-line
|
||||
* arguments are passed.
|
||||
*
|
||||
* Note that this will only work if the signal-slot connection type is
|
||||
* Qt::DirectConnection.
|
||||
*
|
||||
* @param value The exit value for the duplicate instance.
|
||||
*/
|
||||
void setExitValue(int value);
|
||||
|
||||
Q_SIGNALS:
|
||||
/**
|
||||
* Signals that the application is to be activated.
|
||||
*
|
||||
* If this is a @c Unique application, when KDBusService is constructed in
|
||||
* subsequent instances of the application (ie: when the executable is run
|
||||
* when an instance is already running), it will cause this signal to be
|
||||
* emitted in the already-running instance (with the arguments passed to the
|
||||
* duplicate instance), and the duplicate instance will then exit.
|
||||
*
|
||||
* If this application's desktop file indicates that it supports D-Bus
|
||||
* activation (DBusActivatable=true), a command launcher may also call the Activate()
|
||||
* D-Bus method to trigger this signal. In this case, @p args will be empty.
|
||||
*
|
||||
* In single-window applications, the connected signal should typically
|
||||
* raise the window.
|
||||
*
|
||||
* @param arguments The arguments the executable was called with, starting with the executable file name.
|
||||
* See QCoreApplication::arguments().
|
||||
* This can also be empty.
|
||||
*
|
||||
* A typical implementation of the signal handler would be:
|
||||
* @code
|
||||
* if (!arguments.isEmpty()) {
|
||||
* commandLineParser->parse(arguments); // same QCommandLineParser instance as the one used in main()
|
||||
* handleCmdLine(workingDirectory); // shared method with main(), which uses commandLineParser to handle options and positional arguments
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
* For GUI applications, the handler also needs to deal with any platform-specific startup ids
|
||||
* and make sure the mainwindow is shown as well as request its activation from the window manager.
|
||||
* For X11, KDBusService makes the id for the Startup Notification protocol available
|
||||
* from QX11Info::nextStartupId(), if there is one.
|
||||
* For Wayland, KDBusService provides the token for the XDG Activation protocol in the
|
||||
* "XDG_ACTIVATION_TOKEN" environment variable and unsets it again after the signal, if there is one.
|
||||
* The util method @c KWindowSystem::updateStartupId(QWindow *window) (since KF 5.91) takes care of that.
|
||||
* A typical implementation in the signal handler would be:
|
||||
* @code
|
||||
* mainWindow->show();
|
||||
* #if KWINDOWSYSTEM_VERSION >= QT_VERSION_CHECK(5, 91, 0)
|
||||
* KWindowSystem::updateStartupId(mainWindow->windowHandle());
|
||||
* #else
|
||||
* if (KWindowSystem::isPlatformX11()) {
|
||||
* KStartupInfo::setNewStartupId(mainWindow->windowHandle(), QX11Info::nextStartupId());
|
||||
* } else if (KWindowSystem::isPlatformWayland()) {
|
||||
* KWindowSystem::setCurrentXdgActivationToken(qEnvironmentVariable("XDG_ACTIVATION_TOKEN"));
|
||||
* }
|
||||
* #endif
|
||||
* mainWindow->raise();
|
||||
* KWindowSystem::activateWindow(mainWindow->windowHandle());
|
||||
* @endcode
|
||||
*
|
||||
* If you're using the builtin handling of @c --help and @c --version in QCommandLineParser,
|
||||
* you should call parser.process(arguments) before creating the KDBusService instance,
|
||||
* since parse() doesn't handle those (and exiting the already-running instance would be wrong anyway).
|
||||
*
|
||||
* @see setExitValue()
|
||||
*/
|
||||
void activateRequested(const QStringList &arguments, const QString &workingDirectory);
|
||||
|
||||
/**
|
||||
* Signals that one or more files should be opened in the application.
|
||||
*
|
||||
* This signal is emitted to request handling of the respective method of the D-Bus activation.
|
||||
* For GUI applications, the signal handler also needs to deal with any platform-specific startup ids
|
||||
* and make sure the mainwindow is shown as well as request its activation from the window manager.
|
||||
* See documentation of activateRequested(const QStringList &arguments, const QString &)
|
||||
* for details.
|
||||
*
|
||||
* @param uris The URLs of the files to open.
|
||||
*/
|
||||
void openRequested(const QList<QUrl> &uris);
|
||||
|
||||
/**
|
||||
* Signals that an application action should be triggered.
|
||||
*
|
||||
* This signal is emitted to request handling of the respective method of the D-Bus activation.
|
||||
* For GUI applications, the signal handler also needs to deal with any platform-specific startup ids
|
||||
* and make sure the mainwindow is shown as well as request its activation from the window manager.
|
||||
* See documentation of activateRequested(const QStringList &arguments, const QString &)
|
||||
* for details.
|
||||
*
|
||||
* See the desktop entry specification for more information about action activation.
|
||||
*/
|
||||
void activateActionRequested(const QString &actionName, const QVariant ¶meter);
|
||||
|
||||
public Q_SLOTS:
|
||||
/**
|
||||
* Unregister from D-Bus.
|
||||
*
|
||||
* This is called automatically when the application is about to quit, to
|
||||
* make sure it doesn't keep receiving calls to its D-Bus interface while it
|
||||
* is doing final cleanups.
|
||||
*/
|
||||
void unregister();
|
||||
|
||||
private:
|
||||
// fdo.Application spec
|
||||
void Activate(const QVariantMap &platform_data);
|
||||
void Open(const QStringList &uris, const QVariantMap &platform_data);
|
||||
void ActivateAction(const QString &action_name, const QVariantList &maybeParameter, const QVariantMap &platform_data);
|
||||
friend class KDBusServiceAdaptor;
|
||||
// org.kde.KDBusService
|
||||
int CommandLine(const QStringList &arguments, const QString &workingDirectory, const QVariantMap &platform_data);
|
||||
friend class KDBusServiceExtensionsAdaptor;
|
||||
|
||||
private:
|
||||
std::unique_ptr<KDBusServicePrivate> const d;
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(KDBusService::StartupOptions)
|
||||
|
||||
#endif /* KDBUSSERVICE_H */
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
This file is part of the KDE libraries
|
||||
|
||||
SPDX-FileCopyrightText: 2001 Waldo Bastian <bastian@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "kdedmodule.h"
|
||||
#include "kdbusaddons_debug.h"
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#include <QDBusObjectPath>
|
||||
|
||||
class KDEDModulePrivate
|
||||
{
|
||||
public:
|
||||
QString moduleName;
|
||||
};
|
||||
|
||||
KDEDModule::KDEDModule(QObject *parent)
|
||||
: QObject(parent)
|
||||
, d(new KDEDModulePrivate)
|
||||
{
|
||||
}
|
||||
|
||||
KDEDModule::~KDEDModule()
|
||||
{
|
||||
Q_EMIT moduleDeleted(this);
|
||||
}
|
||||
|
||||
void KDEDModule::setModuleName(const QString &name)
|
||||
{
|
||||
d->moduleName = name;
|
||||
QDBusObjectPath realPath(QLatin1String("/modules/") + d->moduleName);
|
||||
|
||||
if (realPath.path().isEmpty()) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "The kded module name" << name << "is invalid!";
|
||||
return;
|
||||
}
|
||||
|
||||
QDBusConnection::RegisterOptions regOptions;
|
||||
|
||||
if (this->metaObject()->indexOfClassInfo("D-Bus Interface") != -1) {
|
||||
// 1. There are kded modules that don't have a D-Bus interface.
|
||||
// 2. qt 4.4.3 crashes when trying to emit signals on class without
|
||||
// Q_CLASSINFO("D-Bus Interface", "<your interface>") but
|
||||
// ExportSignal set.
|
||||
// We try to solve that for now with just registering Properties and
|
||||
// Adaptors. But we should investigate where the sense is in registering
|
||||
// the module at all. Just for autoload? Is there a better solution?
|
||||
regOptions = QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors;
|
||||
} else {
|
||||
// Full functional module. Register everything.
|
||||
regOptions = QDBusConnection::ExportScriptableSlots //
|
||||
| QDBusConnection::ExportScriptableProperties //
|
||||
| QDBusConnection::ExportAdaptors;
|
||||
qCDebug(KDBUSADDONS_LOG) << "Registration of kded module" << d->moduleName << "without D-Bus interface.";
|
||||
}
|
||||
|
||||
if (!QDBusConnection::sessionBus().registerObject(realPath.path(), this, regOptions)) {
|
||||
// Happens for khotkeys but the module works. Need some time to investigate.
|
||||
qCDebug(KDBUSADDONS_LOG) << "registerObject() returned false for" << d->moduleName;
|
||||
} else {
|
||||
// qCDebug(KDBUSADDONS_LOG) << "registerObject() successful for" << d->moduleName;
|
||||
// Fix deadlock with Qt 5.6: this has to be delayed until the dbus thread is unlocked
|
||||
QMetaObject::invokeMethod(this, "moduleRegistered", Qt::QueuedConnection, Q_ARG(QDBusObjectPath, realPath));
|
||||
}
|
||||
}
|
||||
|
||||
QString KDEDModule::moduleName() const
|
||||
{
|
||||
return d->moduleName;
|
||||
}
|
||||
|
||||
static const char s_modules_path[] = "/modules/";
|
||||
|
||||
QString KDEDModule::moduleForMessage(const QDBusMessage &message)
|
||||
{
|
||||
if (message.type() != QDBusMessage::MethodCallMessage) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString obj = message.path();
|
||||
if (!obj.startsWith(QLatin1String(s_modules_path))) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
// Remove the <s_modules_path> part
|
||||
obj = obj.mid(strlen(s_modules_path));
|
||||
|
||||
// Remove the part after the modules name
|
||||
const int index = obj.indexOf(QLatin1Char('/'));
|
||||
if (index != -1) {
|
||||
obj = obj.left(index);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
This file is part of the KDE libraries
|
||||
|
||||
SPDX-FileCopyrightText: 2001 Waldo Bastian <bastian@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
|
||||
*/
|
||||
#ifndef __KDEDMODULE_H__
|
||||
#define __KDEDMODULE_H__
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
#include <QObject>
|
||||
#include <memory>
|
||||
|
||||
class KDEDModulePrivate;
|
||||
class Kded;
|
||||
|
||||
class QDBusObjectPath;
|
||||
class QDBusMessage;
|
||||
|
||||
/**
|
||||
* \class KDEDModule kdedmodule.h <KDEDModule>
|
||||
*
|
||||
* The base class for KDED modules.
|
||||
*
|
||||
* KDED modules are realized as shared
|
||||
* libraries that are loaded on-demand into kded at runtime.
|
||||
*
|
||||
* See kdelibs/kded/HOWTO for documentation about writing kded modules.
|
||||
*
|
||||
* @author Waldo Bastian <bastian@kde.org>
|
||||
*/
|
||||
class KDBUSADDONS_EXPORT KDEDModule : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "org.kde.KDEDModule")
|
||||
|
||||
friend class Kded;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
explicit KDEDModule(QObject *parent = nullptr);
|
||||
|
||||
~KDEDModule() override;
|
||||
|
||||
/**
|
||||
* Sets the name of the module, and uses it to register the module to D-Bus.
|
||||
*
|
||||
* For modules loaded as plugins by a daemon, this is called automatically
|
||||
* by the daemon after loading the module. Module authors should NOT call this.
|
||||
*/
|
||||
void setModuleName(const QString &name);
|
||||
|
||||
QString moduleName() const;
|
||||
|
||||
/**
|
||||
* Returns the module being called by this D-Bus message.
|
||||
* Useful for autoloading modules in kded and similar daemons.
|
||||
* @since 5.7
|
||||
*/
|
||||
static QString moduleForMessage(const QDBusMessage &message);
|
||||
|
||||
Q_SIGNALS:
|
||||
/**
|
||||
* Emitted when the module is being deleted.
|
||||
*/
|
||||
void moduleDeleted(KDEDModule *);
|
||||
|
||||
/**
|
||||
* Emitted when a mainwindow registers itself.
|
||||
*/
|
||||
void windowRegistered(qlonglong windowId);
|
||||
|
||||
/**
|
||||
* Emitted when a mainwindow unregisters itself.
|
||||
*/
|
||||
void windowUnregistered(qlonglong windowId);
|
||||
|
||||
/**
|
||||
* Emitted after the module is registered successfully with D-Bus
|
||||
*
|
||||
* @since 4.2
|
||||
*/
|
||||
void moduleRegistered(const QDBusObjectPath &path);
|
||||
|
||||
private:
|
||||
std::unique_ptr<KDEDModulePrivate> const d;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
This file is part of libkdbusaddons
|
||||
|
||||
SPDX-FileCopyrightText: 2013 David Faure <faure@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#include "kdeinitinterface.h"
|
||||
#include "kdbusaddons_debug.h"
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusConnectionInterface>
|
||||
#include <QDir>
|
||||
#include <QLockFile>
|
||||
#include <QProcess>
|
||||
#include <QStandardPaths>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QLibraryInfo>
|
||||
|
||||
void KDEInitInterface::ensureKdeinitRunning()
|
||||
{
|
||||
QDBusConnectionInterface *dbusDaemon = QDBusConnection::sessionBus().interface();
|
||||
if (dbusDaemon->isServiceRegistered(QStringLiteral("org.kde.klauncher5"))) {
|
||||
return;
|
||||
}
|
||||
qCDebug(KDBUSADDONS_LOG) << "klauncher not running... launching kdeinit";
|
||||
|
||||
QLockFile lock(QDir::tempPath() + QLatin1Char('/') + QLatin1String("startkdeinitlock"));
|
||||
// If we can't get the lock, then someone else is already in the process of starting kdeinit.
|
||||
if (!lock.tryLock()) {
|
||||
// Wait for that to happen, by locking again 30 seconds max.
|
||||
if (!lock.tryLock(30000)) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "'kdeinit5' is taking more than 30 seconds to start.";
|
||||
return;
|
||||
}
|
||||
// Check that the DBus name is up, i.e. the other process did manage to do it successfully.
|
||||
if (dbusDaemon->isServiceRegistered(QStringLiteral("org.kde.klauncher5"))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Try to launch kdeinit.
|
||||
QString srv = QStandardPaths::findExecutable(QStringLiteral("kdeinit5"));
|
||||
// If not found in system paths, search other paths
|
||||
if (srv.isEmpty()) {
|
||||
const QStringList searchPaths = QStringList() << QCoreApplication::applicationDirPath() // then look where our application binary is located
|
||||
<< QLibraryInfo::location(QLibraryInfo::BinariesPath); // look where exec path is (can be set in qt.conf)
|
||||
srv = QStandardPaths::findExecutable(QStringLiteral("kdeinit5"), searchPaths);
|
||||
if (srv.isEmpty()) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "Can not find 'kdeinit5' executable at " << qgetenv("PATH") << searchPaths.join(QStringLiteral(", "));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
QStringList args;
|
||||
#ifndef Q_OS_WIN
|
||||
args += QStringLiteral("--suicide");
|
||||
#endif
|
||||
// NOTE: kdeinit5 is supposed to finish quickly, certainly in less than 30 seconds.
|
||||
QProcess::execute(srv, args);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
This file is part of libkdbusaddons
|
||||
|
||||
SPDX-FileCopyrightText: 2013 David Faure <faure@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
#ifndef KDEINIT_IFACE_H
|
||||
#define KDEINIT_IFACE_H
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
/**
|
||||
* The KDEInitInterface namespace contains:
|
||||
*
|
||||
* <ul>
|
||||
* <li>A function to ensure kdeinit and klauncher are running.
|
||||
* This is necessary before making D-Bus calls to org.kde.klauncher5.
|
||||
* </ul>
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
namespace KDEInitInterface
|
||||
{
|
||||
KDBUSADDONS_EXPORT void ensureKdeinitRunning();
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node>
|
||||
<interface name='org.freedesktop.Application'>
|
||||
<method name='Activate'>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
|
||||
<arg type='a{sv}' name='platform-data' direction='in'/>
|
||||
</method>
|
||||
<method name='Open'>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
|
||||
<arg type='as' name='uris' direction='in'/>
|
||||
<arg type='a{sv}' name='platform-data' direction='in'/>
|
||||
</method>
|
||||
<method name='ActivateAction'>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QVariantMap"/>
|
||||
<arg type='s' name='action_name' direction='in'/>
|
||||
<arg type='av' name='parameter' direction='in'/>
|
||||
<arg type='a{sv}' name='platform-data' direction='in'/>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node>
|
||||
<interface name='org.kde.KDBusService'>
|
||||
<method name='CommandLine'>
|
||||
<arg type='as' name='arguments' direction='in'/>
|
||||
<arg type='s' name='working-dir' direction='in'/>
|
||||
<arg type='a{sv}' name='platform-data' direction='in' />
|
||||
<arg type='i' name='exit-status' direction='out'/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QVariantMap"/>
|
||||
</method>
|
||||
<!--
|
||||
<property name='Busy' type='b' access='read'/>
|
||||
-->
|
||||
</interface>
|
||||
</node>
|
|
@ -0,0 +1,4 @@
|
|||
add_executable(kquitapp5 kquitapp.cpp)
|
||||
ecm_mark_nongui_executable(kquitapp5)
|
||||
target_link_libraries(kquitapp5 Qt${QT_MAJOR_VERSION}::DBus)
|
||||
install(TARGETS kquitapp5 ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2006 Aaron Seigo <aseigo@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QCommandLineParser>
|
||||
#include <QCoreApplication>
|
||||
#include <QDBusInterface>
|
||||
#include <QDebug>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
app.setApplicationName(QStringLiteral("kquitapp"));
|
||||
app.setApplicationVersion(QStringLiteral("2.0"));
|
||||
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription(QCoreApplication::translate("main", "Quit a D-Bus enabled application easily"));
|
||||
parser.addOption(QCommandLineOption(QStringLiteral("service"),
|
||||
QCoreApplication::translate("main", "Full service name, overrides application name provided"),
|
||||
QStringLiteral("service")));
|
||||
parser.addOption(QCommandLineOption(QStringLiteral("path"),
|
||||
QCoreApplication::translate("main", "Path in the D-Bus interface to use"),
|
||||
QStringLiteral("path"),
|
||||
QStringLiteral("/MainApplication")));
|
||||
parser.addPositionalArgument(QStringLiteral("[application]"), QCoreApplication::translate("main", "The name of the application to quit"));
|
||||
parser.addHelpOption();
|
||||
parser.addVersionOption();
|
||||
parser.process(app);
|
||||
|
||||
QString service;
|
||||
if (parser.isSet(QStringLiteral("service"))) {
|
||||
service = parser.value(QStringLiteral("service"));
|
||||
} else if (!parser.positionalArguments().isEmpty()) {
|
||||
service = QStringLiteral("org.kde.%1").arg(parser.positionalArguments().at(0));
|
||||
} else {
|
||||
parser.showHelp(1);
|
||||
}
|
||||
|
||||
QString path(parser.value(QStringLiteral("path")));
|
||||
|
||||
QDBusInterface interface(service, path);
|
||||
if (!interface.isValid()) {
|
||||
qWarning() << QCoreApplication::translate("main", "Application %1 could not be found using service %2 and path %3.")
|
||||
.arg(parser.positionalArguments().at(0), service, path);
|
||||
return 1;
|
||||
}
|
||||
interface.call(QStringLiteral("quit"));
|
||||
QDBusError error = interface.lastError();
|
||||
if (error.type() != QDBusError::NoError) {
|
||||
qWarning() << QCoreApplication::translate("main", "Quitting application %1 failed. Error reported was:\n\n %2 : %3")
|
||||
.arg(parser.positionalArguments().join(QStringLiteral(" ")), error.name(), error.message());
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@broulik.de>
|
||||
SPDX-FileCopyrightText: 2021 David Edmundson <davidedmundson@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "updatelaunchenvironmentjob.h"
|
||||
|
||||
#include <QDBusArgument>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMetaType>
|
||||
#include <QDBusPendingReply>
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
#include "kdbusaddons_debug.h"
|
||||
|
||||
class KUpdateLaunchEnvironmentJobPrivate
|
||||
{
|
||||
public:
|
||||
explicit KUpdateLaunchEnvironmentJobPrivate(UpdateLaunchEnvironmentJob *q);
|
||||
void monitorReply(const QDBusPendingReply<> &reply);
|
||||
|
||||
static bool isPosixName(const QString &name);
|
||||
static bool isSystemdApprovedValue(const QString &value);
|
||||
|
||||
UpdateLaunchEnvironmentJob *q;
|
||||
QProcessEnvironment environment;
|
||||
int pendingReplies = 0;
|
||||
};
|
||||
|
||||
KUpdateLaunchEnvironmentJobPrivate::KUpdateLaunchEnvironmentJobPrivate(UpdateLaunchEnvironmentJob *q)
|
||||
: q(q)
|
||||
{
|
||||
}
|
||||
|
||||
void KUpdateLaunchEnvironmentJobPrivate::monitorReply(const QDBusPendingReply<> &reply)
|
||||
{
|
||||
++pendingReplies;
|
||||
|
||||
auto *watcher = new QDBusPendingCallWatcher(reply, q);
|
||||
QObject::connect(watcher, &QDBusPendingCallWatcher::finished, q, [this](QDBusPendingCallWatcher *watcher) {
|
||||
watcher->deleteLater();
|
||||
--pendingReplies;
|
||||
|
||||
if (pendingReplies == 0) {
|
||||
Q_EMIT q->finished();
|
||||
q->deleteLater();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// KF6 TODO: add K-prefix to class name
|
||||
UpdateLaunchEnvironmentJob::UpdateLaunchEnvironmentJob(const QProcessEnvironment &environment)
|
||||
: d(new KUpdateLaunchEnvironmentJobPrivate(this))
|
||||
{
|
||||
d->environment = environment;
|
||||
QTimer::singleShot(0, this, &UpdateLaunchEnvironmentJob::start);
|
||||
}
|
||||
|
||||
UpdateLaunchEnvironmentJob::~UpdateLaunchEnvironmentJob() = default;
|
||||
|
||||
void UpdateLaunchEnvironmentJob::start()
|
||||
{
|
||||
qDBusRegisterMetaType<QMap<QString, QString>>();
|
||||
QMap<QString, QString> dbusActivationEnv;
|
||||
QStringList systemdUpdates;
|
||||
|
||||
for (const auto &varName : d->environment.keys()) {
|
||||
if (!KUpdateLaunchEnvironmentJobPrivate::isPosixName(varName)) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "Skipping syncing of environment variable " << varName << "as name contains unsupported characters";
|
||||
continue;
|
||||
}
|
||||
const QString value = d->environment.value(varName);
|
||||
|
||||
// KLauncher; remove this in KF6 (by then KInit will be gone)
|
||||
QDBusMessage klauncherMsg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.klauncher5"),
|
||||
QStringLiteral("/KLauncher"),
|
||||
QStringLiteral("org.kde.KLauncher"),
|
||||
QStringLiteral("setLaunchEnv"));
|
||||
klauncherMsg.setArguments({QVariant::fromValue(varName), QVariant::fromValue(value)});
|
||||
auto klauncherReply = QDBusConnection::sessionBus().asyncCall(klauncherMsg);
|
||||
d->monitorReply(klauncherReply);
|
||||
|
||||
// plasma-session
|
||||
QDBusMessage plasmaSessionMsg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.Startup"),
|
||||
QStringLiteral("/Startup"),
|
||||
QStringLiteral("org.kde.Startup"),
|
||||
QStringLiteral("updateLaunchEnv"));
|
||||
plasmaSessionMsg.setArguments({QVariant::fromValue(varName), QVariant::fromValue(value)});
|
||||
auto plasmaSessionReply = QDBusConnection::sessionBus().asyncCall(plasmaSessionMsg);
|
||||
d->monitorReply(plasmaSessionReply);
|
||||
|
||||
// DBus-activation environment
|
||||
dbusActivationEnv.insert(varName, value);
|
||||
|
||||
// _user_ systemd env
|
||||
// Systemd has stricter parsing of valid environment variables
|
||||
// https://github.com/systemd/systemd/issues/16704
|
||||
// validate here
|
||||
if (!KUpdateLaunchEnvironmentJobPrivate::isSystemdApprovedValue(value)) {
|
||||
qCWarning(KDBUSADDONS_LOG) << "Skipping syncing of environment variable " << varName << "as value contains unsupported characters";
|
||||
continue;
|
||||
}
|
||||
const QString updateString = varName + QStringLiteral("=") + value;
|
||||
systemdUpdates.append(updateString);
|
||||
}
|
||||
|
||||
// DBus-activation environment
|
||||
QDBusMessage dbusActivationMsg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DBus"),
|
||||
QStringLiteral("/org/freedesktop/DBus"),
|
||||
QStringLiteral("org.freedesktop.DBus"),
|
||||
QStringLiteral("UpdateActivationEnvironment"));
|
||||
dbusActivationMsg.setArguments({QVariant::fromValue(dbusActivationEnv)});
|
||||
|
||||
auto dbusActivationReply = QDBusConnection::sessionBus().asyncCall(dbusActivationMsg);
|
||||
d->monitorReply(dbusActivationReply);
|
||||
|
||||
// _user_ systemd env
|
||||
QDBusMessage systemdActivationMsg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.systemd1"),
|
||||
QStringLiteral("/org/freedesktop/systemd1"),
|
||||
QStringLiteral("org.freedesktop.systemd1.Manager"),
|
||||
QStringLiteral("SetEnvironment"));
|
||||
systemdActivationMsg.setArguments({systemdUpdates});
|
||||
|
||||
auto systemdActivationReply = QDBusConnection::sessionBus().asyncCall(systemdActivationMsg);
|
||||
d->monitorReply(systemdActivationReply);
|
||||
}
|
||||
|
||||
bool KUpdateLaunchEnvironmentJobPrivate::isPosixName(const QString &name)
|
||||
{
|
||||
// Posix says characters like % should be 'tolerated', but it gives issues in practice.
|
||||
// https://bugzilla.redhat.com/show_bug.cgi?id=1754395
|
||||
// https://bugzilla.redhat.com/show_bug.cgi?id=1879216
|
||||
// Ensure systemd compat by only allowing alphanumerics and _ in names.
|
||||
bool first = true;
|
||||
for (const QChar c : name) {
|
||||
if (first && !c.isLetter() && c != QLatin1Char('_')) {
|
||||
return false;
|
||||
} else if (first) {
|
||||
first = false;
|
||||
} else if (!c.isLetterOrNumber() && c != QLatin1Char('_')) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return !first;
|
||||
}
|
||||
|
||||
bool KUpdateLaunchEnvironmentJobPrivate::isSystemdApprovedValue(const QString &value)
|
||||
{
|
||||
// systemd code checks that a value contains no control characters except \n \t
|
||||
// effectively copied from systemd's string_has_cc
|
||||
for (const char &it : value.toLatin1()) {
|
||||
if (it == QLatin1Char('\n') || it == QLatin1Char('\t')) {
|
||||
continue;
|
||||
}
|
||||
if (it > 0 && it < ' ') {
|
||||
return false;
|
||||
}
|
||||
if (it == 127) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@broulik.de>
|
||||
SPDX-FileCopyrightText: 2021 David Edmundson <davidedmundson@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <kdbusaddons_export.h>
|
||||
|
||||
#include <QProcessEnvironment>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class QString;
|
||||
class KUpdateLaunchEnvironmentJobPrivate;
|
||||
|
||||
/**
|
||||
* @class UpdateLaunchEnvironmentJob updatelaunchenvironmentjob.h <UpdateLaunchEnvironmentJob>
|
||||
*
|
||||
* Job for updating the launch environment.
|
||||
*
|
||||
* This job adds or updates an environment variable in process environment that will be used
|
||||
* when a process is launched:
|
||||
* This includes:
|
||||
* - DBus activation
|
||||
* - Systemd units
|
||||
* - Plasma-session
|
||||
* - KInit (deprecated)
|
||||
*
|
||||
* Environment variables are sanitized before uploading.
|
||||
*
|
||||
* This object deletes itself after completion, similar to KJobs
|
||||
*
|
||||
* @since 5.84
|
||||
*/
|
||||
class KDBUSADDONS_EXPORT UpdateLaunchEnvironmentJob : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit UpdateLaunchEnvironmentJob(const QProcessEnvironment &environment);
|
||||
~UpdateLaunchEnvironmentJob() override;
|
||||
|
||||
Q_SIGNALS:
|
||||
void finished();
|
||||
|
||||
private:
|
||||
void start();
|
||||
|
||||
private:
|
||||
std::unique_ptr<KUpdateLaunchEnvironmentJobPrivate> const d;
|
||||
};
|
|
@ -0,0 +1,17 @@
|
|||
remove_definitions(-DQT_NO_CAST_FROM_ASCII)
|
||||
|
||||
include(ECMMarkAsTest)
|
||||
|
||||
macro(KDBUSADDONS_TESTS)
|
||||
foreach(_testname ${ARGN})
|
||||
add_executable(${_testname} ${_testname}.cpp)
|
||||
ecm_mark_as_test(${_testname})
|
||||
target_link_libraries(${_testname} KF5::DBusAddons)
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
kdbusaddons_tests(
|
||||
dbuscalltest
|
||||
syncdbusenvtest
|
||||
)
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
#include <QCoreApplication>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusReply>
|
||||
#include <QDebug>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
QDBusConnectionInterface *bus = nullptr;
|
||||
if (!QDBusConnection::sessionBus().isConnected() || !(bus = QDBusConnection::sessionBus().interface())) {
|
||||
qCritical() << "Session bus not found";
|
||||
return 125;
|
||||
}
|
||||
|
||||
qDebug() << "sending reparseConfiguration to object Konqueror in konqueror";
|
||||
QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/Konqueror"), //
|
||||
QStringLiteral("org.kde.Konqueror"),
|
||||
QStringLiteral("reparseConfiguration"));
|
||||
if (!QDBusConnection::sessionBus().send(message)) {
|
||||
qDebug() << "void expected, " << QDBusConnection::sessionBus().lastError().name() << " returned";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <updatelaunchenvironmentjob.h>
|
||||
|
||||
// This test syncs the current environment of the spawned process to systemd/whatever
|
||||
// akin to dbus-update-activation-environment
|
||||
// it can then be compared with "systemd-run --user -P env" or watched with dbus-monitor
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
QEventLoop e;
|
||||
auto job = new UpdateLaunchEnvironmentJob(QProcessEnvironment::systemEnvironment());
|
||||
QObject::connect(job, &UpdateLaunchEnvironmentJob::finished, &e, &QEventLoop::quit);
|
||||
return e.exec();
|
||||
}
|
Loading…
Reference in New Issue