Compare commits

..

19 Commits

Author SHA1 Message Date
nobody
29e6aa4636 This commit was manufactured by cvs2svn to create tag
'KDE_3_1_2_RELEASE'.

svn path=/tags/KDE_3_1_2_RELEASE/kdenetwork/krfb/; revision=225764
2003-05-14 08:22:51 +00:00
Script Kiddy
aac12c0641 CVS_SILENT made messages
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=223116
2003-05-01 02:49:04 +00:00
Tim Jansen
ec5aec621c Get rid of in6_addr (on systems without AF_INET6)
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=219162
2003-04-08 21:56:42 +00:00
Script Kiddy
78d6970930 CVS_SILENT made messages
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=218189
2003-04-04 01:32:14 +00:00
Tim Jansen
fe4bbda0c5 #53620: solaris 7 problems / AF_INET6 compilation problems again
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=216209
2003-03-25 19:37:17 +00:00
Tim Jansen
0b256c5117 #54873: get rid of socklen_t which is not available on Solaris 2.6
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=215975
2003-03-24 12:44:23 +00:00
Tim Jansen
12e8effc1a #51792: a bunch of includes to make Solaris 2/6 happy
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=215971
2003-03-24 12:26:25 +00:00
Tim Jansen
98debc4910 Make krfb work on thin-clients without XShm. You need a lot of bandwidth
though...

svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=205753
2003-02-09 01:10:59 +00:00
Tim Jansen
a65c5fd148 Fix #52126 (krfb mangles colours when serving 8-bit displays)
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=205627
2003-02-08 13:04:33 +00:00
Tim Jansen
1405623863 fix krfb on machines with big-endian framebuffers
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=205094
2003-02-05 18:49:51 +00:00
Tim Jansen
612e3b8aab Fix behaviour for clients that support soft cursor and rich cursor encodings (like krdc will soon): soft cursor has the higher priority
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=204221
2003-02-01 19:35:40 +00:00
Tim Jansen
f80311e260 #53620: krfb did not compile on Solaris 7
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=203810
2003-01-30 22:39:31 +00:00
Tim Jansen
caab1aad51 Backport from HEAD:
Remove read timeouts. Instead make sure to send something at least every
10 seconds (empty framebuffer requests if nothing else has been sent).
This fixes problems with the windows vnc client which had been kicked after
a minute of inactivity without losing the capability to detect dead
clients.

svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=201809
2003-01-21 21:31:43 +00:00
Tim Jansen
9a4432a0fd #51792: Compile patch for solaris versions without IPv6
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=201807
2003-01-21 21:15:28 +00:00
Dirk Mueller
fefe8c1a11 don't interpret format strings here (backport)
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=199229
2003-01-12 13:14:55 +00:00
Waldo Bastian
6b36501ba0 CCMAIL: peter@hawkins.emu.id.au
string fixes, patches by Peter Hawkins <peter@hawkins.emu.id.au>

svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=194091
2002-12-15 15:44:47 +00:00
Luboš Luňák
7426b84321 Max size limits for scanf().
Correct arguments to scanf() - people, can't you read the warnings?
Got rid of two more warnings.

svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=192448
2002-12-06 16:01:45 +00:00
Lauri Watts
b04b1591e5 Fixing Date
svn path=/branches/KDE_3_1_BRANCH/kdenetwork/doc/krfb/; revision=191476
2002-12-01 18:57:36 +00:00
Andy Fawcett
42f9c6e578 +#ifndef _BYTE_ORDER
#define _BYTE_ORDER BYTE_ORDER
+#endif
+#ifndef _LITTLE_ENDIAN
 #define _LITTLE_ENDIAN LITTLE_ENDIAN
+#endif

These are already defined on FreeBSD, so don't try and do it again.

Previously applied to HEAD, these didn't make it to the release or the branch.

svn path=/branches/KDE_3_1_BRANCH/kdenetwork/krfb/; revision=191459
2002-12-01 17:13:07 +00:00
214 changed files with 14286 additions and 28238 deletions

1
.krazy
View File

@@ -1 +0,0 @@
SKIP /kinetd/

View File

@@ -1,50 +0,0 @@
project(krfb)
if(NOT INSIDE_KDENETWORK)
message("Not building inside KDENetwork, loading KDE CMake Macros.")
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
include(MacroLibrary)
include(CheckSymbolExists)
if (BUILD_EXPERIMENTAL_TUBES_SUPPORT)
message(WARNING "You enabled experimental Tubes support. Expect breakage!!")
macro_optional_find_package(TelepathyQt4)
macro_log_feature(TELEPATHY_QT4_FOUND "telepathy-qt4" "Telepathy Qt Bindings" "http://telepathy.freedesktop.org" FALSE "0.18" "Needed to build Telepathy Tubes support.")
endif (BUILD_EXPERIMENTAL_TUBES_SUPPORT)
set(CMAKE_REQUIRED_DEFINITIONS ${_KDE_PLATFORM_DEFINITIONS})
add_definitions(${QT_DEFINITIONS} ${QT_DBUS_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES})
endif(NOT INSIDE_KDENETWORK)
macro_bool_to_01(X11_Xdamage_FOUND HAVE_XDAMAGE)
macro_bool_to_01(X11_XShm_FOUND HAVE_XSHM)
include_directories ("${CMAKE_CURRENT_BINARY_DIR}/krfb"
"${CMAKE_CURRENT_SOURCE_DIR}/krfb"
"${CMAKE_CURRENT_SOURCE_DIR}/krfb/ui"
"${CMAKE_CURRENT_SOURCE_DIR}/libvncserver/"
"${CMAKE_CURRENT_BINARY_DIR}/libvncserver/"
)
if(Q_WS_X11)
if(NOT X11_XTest_FOUND)
message(FATAL_ERROR "krfb requires the libXtst (http://xorg.freedesktop.org) to be built")
endif(NOT X11_XTest_FOUND)
endif(Q_WS_X11)
add_subdirectory(libvncserver)
add_subdirectory(krfb)
add_subdirectory (framebuffers)
if (NOT INSIDE_KDENETWORK)
macro_display_feature_log()
endif ()

9
DCOP-INTERFACE Normal file
View File

@@ -0,0 +1,9 @@
DCOP Interfaces:
// Exits the application, disconnects clients
void exit()
// Set the desktop to be controlable from remote clients
void setAllowDesktopControl(bool)

View File

@@ -1,5 +0,0 @@
/** @mainpage Krfb API Reference
*
* Krfb provides a VNC-compatible server to share KDE desktops.
*
*/

8
Makefile.am Normal file
View File

@@ -0,0 +1,8 @@
SUBDIRS = srvloc kinetd libvncserver krfb kcm_krfb
EXTRA_DIST = AUTHORS README TODO NOTES DCOP-INTERFACE
# not a GNU package. You can remove this line, if
# have all needed files, that a GNU package needs
AUTOMAKE_OPTIONS = foreign

21
TODO
View File

@@ -1,18 +1,23 @@
For 3.2:
For 3.1:
- write SLP service template for remote desktop protocols
(documentation)
- enhance RFB with SASL authentication (Kerberos)
- encrypted connections (using SASL and/or SSL/TLS)
- with kerberos/ssl: display name of remote user in connection dialog,
kpassivepopup and systray (if name is available)
- mention that invitations are one-time on personal invitation dialog
Todo (unscheduled features):
For 3.2:
- set desktop name (username@hostname)
- apply multi-desktop patch
- trayicon mouse-over text
- configurable slp lifetime in kinetd
- slp registration refresh in kinetd when lifetime expired
- when krfb is started with URL arguments and without connection
quality, add some kind of smart algorithm to determine whether the
other host is local (maybe using SLP to announce the connectivity
of a LAN)
- enhance RFB with SASL authentication (Kerberos)
- encrypted connections (using SASL and/or SSL/TLS)
- try to solve the non-atomic KConfig changes problem
- mention that invitations are one-time on personal invitation dialog
Todo (unscheduled features):
- NAT traversal support if I can find an acceptable implementation
(probably using TURN, as soon as there is a server and newer spec for that)
- when OpenSLP supports this, allow scope configuration

View File

@@ -1,22 +0,0 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -1,39 +0,0 @@
# Try to find the Qt4 binding of the Telepathy library
# TELEPATHY_QT4_FOUND - system has TelepathyQt4
# TELEPATHY_QT4_INCLUDE_DIR - the TelepathyQt4 include directory
# TELEPATHY_QT4_LIBRARIES - Link these to use TelepathyQt4
# Copyright (c) 2008, Allen Winter <winter@kde.org>
# Copyright (c) 2009, Andre Moreira Magalhaes <andrunko@gmail.com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
set(TELEPATHY_QT4_FIND_REQUIRED ${TelepathyQt4_FIND_REQUIRED})
if(TELEPATHY_QT4_INCLUDE_DIR AND TELEPATHY_QT4_LIBRARIES)
# Already in cache, be silent
set(TELEPATHY_QT4_FIND_QUIETLY TRUE)
endif(TELEPATHY_QT4_INCLUDE_DIR AND TELEPATHY_QT4_LIBRARIES)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_TELEPATHY_QT4 QUIET TelepathyQt4>=0.1.8)
endif(PKG_CONFIG_FOUND)
find_path(TELEPATHY_QT4_INCLUDE_DIR
NAMES TelepathyQt4/Types
HINTS
${PC_TELEPATHY_QT4_INCLUDEDIR}
${PC_TELEPATHY_QT4_INCLUDE_DIRS}
)
find_library(TELEPATHY_QT4_LIBRARIES
NAMES telepathy-qt4
HINTS
${PC_TELEPATHY_QT4_LIBDIR}
${PC_TELEPATHY_QT4_LIBRARY_DIRS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(TELEPATHY_QT4 DEFAULT_MSG
TELEPATHY_QT4_LIBRARIES TELEPATHY_QT4_INCLUDE_DIR)

4
configure.in.in Normal file
View File

@@ -0,0 +1,4 @@
KDE_CHECK_HEADER(X11/extensions/XTest.h,
[],
AC_MSG_ERROR([XTest extension header not found / no xlib headers]))

View File

@@ -1,2 +0,0 @@
########### install files ###############
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en)

4
doc/Makefile.am Executable file
View File

@@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

475
doc/index.docbook Normal file → Executable file
View File

@@ -1,501 +1,78 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kappname "&krfb;">
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kappname "<application>krfb</application>">
<!ENTITY package "kdenetwork">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"> <!-- ONLY If you are writing non-English
original documentation, change
the language here -->
<!-- Do not define any other entities; instead, use the entities
from entities/general.entities and $LANG/user.entities. -->
<!ENTITY % English "INCLUDE">
]>
<!-- Based on kdoctemplate v0.9 January 10 2003 -->
<book lang="&language;">
<!-- This header contains all of the meta-information for the document such
as Authors, publish date, the abstract, and Keywords -->
<bookinfo>
<title>The &krfb; Handbook</title>
<title>The &kappname; Handbook</title>
<authorgroup>
<author>
&Brad.Hards;
&Brad.Hards.mail;
<firstname></firstname>
<othername></othername>
<surname></surname>
<affiliation>
<address><email></email></address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2003</year>
<holder>&Brad.Hards;</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
(Major.minor.lesser), it could be used by automation scripts -->
<date>2010-02-09</date>
<releaseinfo>&kde; 4.4</releaseinfo>
<date>2000-09-02</date>
<releaseinfo>0.00.00</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&krfb; is a server application that allows you to share your current
session with a user on another machine, who can use a <acronym>VNC</acronym> client to
view or even control the desktop.
&kappname; is a desktop sharing application for &kde;
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>kdenetwork</keyword>
<keyword>krfb</keyword>
<keyword>VNC</keyword>
<keyword>RFB</keyword>
<keyword>krdc</keyword>
<keyword>Desktop Sharing</keyword>
<keyword>Remote Control</keyword>
<keyword>Remote Assistance</keyword>
<keyword>Remote Desktop</keyword>
<keyword>Kapp</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<chapter id="introduction"> <title>Introduction</title> <para>Sorry, but
the documentation for &kappname; was not finished when &kde; was installed on
this computer.</para> <para>If you need help, please check <ulink
url="http://www.kde.org">The &kde; Website</ulink> for updates, or by
submitting your question to <ulink url="mailto:kde-user@kde.org">The
&kde; User Mailing list</ulink>.</para> <para><emphasis>The &kde;
Team</emphasis></para>
<chapter id="introduction">
<title>Introduction</title>
<!-- The introduction chapter contains a brief introduction for the
application that explains what it does and where to report
problems. Basically a long version of the abstract. Don't include a
revision history. (see installation appendix comment) -->
<para>
&krfb; is a server application that allows you to share your current
session with a user on another machine, who can use a <acronym>VNC</acronym> client to
view or even control the desktop.
</para>
<para>
You would typically use &krfb; with the &kde; <acronym>VNC</acronym> client, which is
&krdc;, since it closely matches the special features of &krfb;.
</para>
<para>
&krfb; doesn't require you to start a new X session - it can share
the current session. This makes it very useful when you want someone
to help you perform a task.
</para>
<para>
Please report any problems or feature requests to the &kde; mailing
lists or file a bug at <ulink
url="http://bugs.kde.org">http://bugs.kde.org</ulink>.
</para>
</chapter>
<chapter id="what-is-RFB">
<title>The Remote Frame Buffer protocol</title>
<para>
This chapter provides a brief description of the Remote Frame Buffer
protocol used by &krfb; and by other compatible systems. If you are
already familiar with Remote Frame Buffer, you can safely skip this
chapter.
</para>
<para>
The high level implementation of a system using the Remote Frame
Buffer protocol is known as Virtual Network Computer, or more often
just as <acronym>VNC</acronym>.
</para>
<para>
Remote Frame Buffer (or <acronym>RFB</acronym> for short) is a simple
protocol for remote access to graphical user interfaces. It works at
the frame-buffer level, which roughly corresponds to the rendered
screen image, which means that it can be applied to all windowing
systems (including X11, &MacOS; and &Microsoft; &Windows;). Remote
Frame Buffer applications exist for many platforms, and can often be
freely re-distributed.
</para>
<para>
In the Remote Frame Buffer protocol, the application that runs on the
machine where the user sits (containing the display, keyboard and
pointer) is called the client. The application that runs on the
machine where the framebuffer is located (which is running the
windowing system and applications that the user is remotely
controlling) is called the server. &krfb; is the &kde; server for the
Remote Frame Buffer protocol. &krdc; is the &kde; client for the
Remote Frame Buffer protocol.
</para>
<para>
It takes a reasonable amount of network traffic to send an image of
the framebuffer, so Remote Frame Buffer works best over high
bandwidth links, such as a local area network. It is still possible to
use &krfb; over other links, but performance is unlikely to be as good.
</para>
&underFDL;
</chapter>
<chapter id="using-krfb">
<title>Using &krfb;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<para>
It is very easy to use &krfb; - it has a simple interface, as shown in
the screenshot below.
</para>
<para>
<screenshot>
<screeninfo>Here's a screenshot of &krfb;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&krfb; main window</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
When you want to allow someone to access your desktop, you can create
an personal invitation using the <guibutton>New Personal
Invitation...</guibutton> button, which will bring up a window
containing the information needed to access your desktop. An example
is shown below.
</para>
<para>
<screenshot>
<screeninfo>Example &krfb; personal invitation</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="personal_invitation.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Example &krfb; personal invitation</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
To increase security, the invitation is only valid for an
hour after it is created, and of course the person connecting has to
have the correct password.
</para>
<para>
Since you may want to invite someone to access your desktop by email,
&krfb; can create invitations as email messages. You can create such
an invitation using the <guibutton>New Email Invitation...</guibutton>
button on the &krfb; main window. This will usually bring up an email
message that looks like the following, ready for you to type in the
email address of the person you are sending the invitation to.
</para>
<para>
<screenshot>
<screeninfo>Example &krfb; email invitation</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="email_invitation.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Example &krfb; email invitation</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<warning>
<para>
&krfb; will warn you about the security implications of sending this
information across an insecure link. You must heed those warnings.
</para>
<para>
If you cannot encrypt the email (or otherwise secure the link),
sending invitations by email is a very serious security risk, since
anyone can read the password and address from the email as it passes
over the network. This means that they can potentially take control of
your machine.
</para>
<para>
If you cannot encrypt the email message, it may be better to use a
personal invitation, telephone the person you are giving access to,
verify the identity of that person, and provide the required
invitation information that way.
</para>
</warning>
<sect1 id="krfb-managing-invitations">
<title>Managing &krfb; invitations</title>
<para>
Having created an invitation (either a personal invitation or one that
was sent by email), &krfb; main window allows you to delete existing
invitations. To just delete one of the invitations, select it with the
mouse (it should become highlighted), and then select
the <guibutton>Delete</guibutton>. To delete all invitations, just
select the <guibutton>Delete All</guibutton> button.
</para>
</sect1>
<sect1 id="krfb-qit">
<title>Quit &krfb;</title>
<para>
If you close the &krfb; main window the server keeps running, which is
indicated by an icon in the system tray.
To stop &krfb; right click on the icon in the systems tray and select
<guimenuitem>Quit</guimenuitem>.
</para>
</sect1>
<sect1 id="krfb-configuration">
<title>Configuring &krfb;</title>
<para>
In addition to the main &krfb; interface shown and described above,
you can also control &krfb; using the
<guibutton>Configure...</guibutton> on the &krfb; main window. The &krfb;
configuration has two pages, as shown in the screenshot below:
</para>
<para>
The <guilabel>Network</guilabel> page allows control over the port that
&krfb; uses, as shown below.
</para>
<para>
<screenshot>
<screeninfo>&krfb; Configuration (Network page)</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="configuration_network.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&krfb; Configuration (Network page)</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
The <guilabel>Announce service on the network</guilabel> checkbox
controls whether &krfb; announces invitations over the network using
Service Location Protocol. This is normally a good idea, but only
works really well with a Service Location Protocol aware client, such
as &krdc;.
</para>
<para>
If you select the <guilabel>Use default port</guilabel> checkbox,
then &krfb; will locate a suitable port, and invitations will match
this port. If you deselect this checkbox, you can specify a particular
port. Specifying a particular port may be useful if you are using
port-forwarding on the firewall. Note that if Service Location
Protocol is turned on, this will automatically deal with identifying
the correct port.
</para>
<para>
The <guilabel>Security</guilabel> page allows you configure settings
related to access to the &krfb; server.
</para>
<para>
<screenshot>
<screeninfo>&krfb; Configuration (Security page)</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="configuration_security.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&krfb; Configuration (Security page)</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
The <guilabel>Allow uninvited connections</guilabel> check box controls
whether &krfb; allows connection without an invitation. If uninvited
connections are allowed, then you should probably specify a
password. You can also use the check boxes here to choose whether you
have to confirm the connection before it proceeds, and whether the
person connecting can control the desktop, or only view.
</para>
<para>
If the machine is a workstation, and you choose to allow uninvited
connections, you probably want to select the <guilabel>Ask
before accepting connections </guilabel>. Conversely, if the
machine is a server and you are using &krfb; for remote
administration, you probably want to deselect this option.
</para>
<note>
<para>
&krfb; uses the normal <acronym>RFB</acronym> password system, which does not transfer
your password in the clear across the network. Instead, it uses a
challenge-response system. This is reasonably secure, as long as the
password is securely guarded.
</para>
</note>
</sect1>
<sect1 id="krfb-connection">
<title>What happens when someone connects to &krfb;</title>
<para>
When someone connects to &krfb; on your machine, you will get a pop-up
notification that looks like the following screenshot, unless you are
accepting uninvited connections without warning.
</para>
<para>
<screenshot>
<screeninfo>&krfb; Connection Window</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="connection.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&krfb; Connection Window</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
If you <guibutton>Accept Connection</guibutton>, the client can
proceed to authenticate (which requires the correct password for a
personal invitation or email invitation). If you <guibutton>Refuse
Connection</guibutton>, then the attempt to connect will be terminated.
</para>
<para>
The <guilabel>Allow remote user to control keyboard and
mouse</guilabel> check box determines whether this client can only
observe, or can take control of your machine.
</para>
<para>
If the client connection is successful, and used the password from a
personal invitation or email invitation, then that invitation is
deleted and cannot be used again. You will also get a small pop-up
window in the dock, that shows that the connection has been made.
</para>
</sect1>
</chapter>
<chapter id="credits">
<!-- Include credits for the programmers, documentation writers, and
contributors here. The license for your software should then be included below
the credits with a reference to the appropriate license file included in the KDE
distribution. -->
<title>Credits and License</title>
<para>
&krfb;
</para>
<para>
Program copyright 2002 Tim Jansen <email>tim@tjansen.de</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Ian Reinhart Geiser <email>geiseri@kde.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation Copyright &copy; 2003 &Brad.Hards; &Brad.Hards.mail;
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
&underGPL; <!-- GPL License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-krfb">
<title>How to obtain &krfb;</title>
<!-- This first entity contains boiler plate for applications that are
part of KDE CVS. You should remove it if you are releasing your
application -->
&install.intro.documentation;
</sect1>
<sect1 id="compilation">
<title>Compilation and Installation</title>
<!-- This entity contains the boilerplate text for standard -->
<!-- compilation instructions. If your application requires any -->
<!-- special handling, remove it, and replace with your own text. -->
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
&documentation.index;
</book>
<!--
Local Variables:
mode: xml
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
vim:tabstop=2:shiftwidth=2:expandtab
// vim:ts=2:sw=2:tw=78:noet
-->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -1,3 +0,0 @@
add_subdirectory (qt)
add_subdirectory (x11)

View File

@@ -1,28 +0,0 @@
include_directories (${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
set (krfb_framebuffer_qt_SRCS
qtframebuffer.cpp
qtframebufferplugin.cpp
)
kde4_add_plugin (krfb_framebuffer_qt
${krfb_framebuffer_qt_SRCS}
)
target_link_libraries (krfb_framebuffer_qt
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
${KDE4_KDEUI_LIBS}
krfbprivate
)
install (TARGETS krfb_framebuffer_qt
DESTINATION ${PLUGIN_INSTALL_DIR}
)
install (FILES krfb_framebuffer_qt.desktop
DESTINATION ${SERVICES_INSTALL_DIR}
)

View File

@@ -1,97 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Comment=Qt based Framebuffer for KRfb.
Comment[ast]=Esquema Qt de buffer pa KRfb
Comment[bs]=Kadrobafer za KRfb na osnovu Qt
Comment[ca]=«Framebuffer» basat en Qt per al KRfb.
Comment[ca@valencia]=«Framebuffer» basat en Qt per al KRfb.
Comment[cs]=Framebuffer založený na Qt pro KRfb.
Comment[da]=Qt-baseret framebuffer til KRfb.
Comment[de]=Qt-basierter Framebuffer für KRfb
Comment[en_GB]=Qt based Framebuffer for KRfb.
Comment[es]=Memoria intermedia de vídeo basada en Qt para KRfb.
Comment[et]=KRfb Qt põhine kaadripuhver
Comment[eu]=Qt-n oinarritutako KRfb-ren irteerako bideoa
Comment[fi]=QT-perustainen Kehyspuskuri KRfb:lle
Comment[fr]=Sortie vidéo fondée sur Qt pour KRfb.
Comment[ga]=Maolán fráma le haghaidh KRfb, bunaithe ar Qt.
Comment[gl]=Framebuffer baseado en Qt para KRfb.
Comment[hr]=Međuspremnik okvira baziran na Qt-u za KRfb.
Comment[ia]=Framebuffer basate sur Qt per KRfb
Comment[it]=Framebuffer basato su Qt per KRfb.
Comment[kk]=Qt негіздеген KRfb-нің кадр буфері.
Comment[km]=Framebuffer មាន​មូលដ្ឋាន​លើ Qt សម្រាប់ KRfb 
Comment[ko]=KRfb를 위한 Qt 기반 프레임버퍼.
Comment[lt]=Qt pagrindu veikiantis Framebuffer skirtas KRfb.
Comment[lv]=Qt balstīts kadrbuferis priekš KRfb.
Comment[nb]=Qt-basert rammebuffer for KRfb.
Comment[nds]=Op Qt opbuut Bildpuffer för KRfb
Comment[nl]=Op Qt gebaseerd framebuffer voor KRfb.
Comment[nn]=Qt basert framebuffer for KRfb.
Comment[pt]='Framebuffer' baseado no Qt para o KRfb.
Comment[pt_BR]=Framebuffer baseado no Qt para o KRfb.
Comment[si]=KRfb සඳහා Qt මත පදනම් වූ රාමු බෆරය
Comment[sk]=Framebuffer založený na Qt pre KRfb.
Comment[sl]=Slikovni medpomnilnik za KRFB, ki temelji na Qt
Comment[sr]=Кадробафер за КРФБ на основу КуТу
Comment[sr@ijekavian]=Кадробафер за КРФБ на основу КуТу
Comment[sr@ijekavianlatin]=Kadrobafer za KRFB na osnovu Qtu
Comment[sr@latin]=Kadrobafer za KRFB na osnovu Qtu
Comment[sv]=Qt-baserad rambuffert för Krfb.
Comment[tr]=KRfb için Qt temelli Çerçeve tamponu.
Comment[uk]=Заснований на Qt буфер кадрів для KRfb.
Comment[x-test]=xxQt based Framebuffer for KRfb.xx
Comment[zh_CN]=基于 Qt 的 KRfb 帧缓冲机制
Comment[zh_TW]=KRfb 的 Qt-based Framebuffer
Name=Qt Framebuffer for KRfb
Name[ast]=Esquema Qt de buffer pa KRfb
Name[bs]=Qt-ov kadrobafer za KRFB
Name[ca]=«Framebuffer» Qt per al KRfb.
Name[ca@valencia]=«Framebuffer» Qt per al KRfb.
Name[cs]=Qt Framebuffer pro KRfb
Name[da]=Qt-framebuffer til KRfb
Name[de]=Qt-Framebuffer für KRfb
Name[en_GB]=Qt Framebuffer for KRfb
Name[es]=Memoria intermedia de vídeo Qt para KRfb
Name[et]=KRfb Qt kaadripuhver
Name[eu]=KRfb-ren Qt-ko irteerako bideoa
Name[fi]=QT-kehyspuskuri KRfb:lle
Name[fr]=Sortie vidéo Qt pour KRfb
Name[ga]=Maolán fráma Qt le haghaidh KRfb
Name[gl]=Framebuffer de Qt para KRfb
Name[hr]=Qt Framebuffer za KRfb
Name[ia]=Framebuffer Qt per KRfb
Name[it]=Framebuffer Qt per KRfb
Name[kk]=Qt KRfb кадр буфері
Name[km]=Qt Framebuffer សម្រាប់for KRfb
Name[ko]=KRfb를 위한 Qt 프레임버퍼
Name[lt]=Qt Framebufferis skirtas KRfb
Name[lv]=Qt kadrbuferis priekš KRfb.
Name[nb]=Qt rammebuffer for KRfb
Name[nds]=Qt-Bildpuffer för KRfb
Name[nl]=Qt-framebuffer voor KRfb
Name[nn]=Qt-framebuffer for KRfb
Name[pt]='Framebuffer' do Qt para o KRfb
Name[pt_BR]=Framebuffer do Qt para o KRfb
Name[si]=KRfb සඳහා වන Qt රාමුබෆරය
Name[sk]=Qt Framebuffer pre KRfb
Name[sl]=Slikovni medpomnilnik Qt za KRFB
Name[sr]=КуТ‑ов кадробафер за КРФБ
Name[sr@ijekavian]=КуТ‑ов кадробафер за КРФБ
Name[sr@ijekavianlatin]=Qtov kadrobafer za KRFB
Name[sr@latin]=Qtov kadrobafer za KRFB
Name[sv]=Qt-rambuffert för Krfb
Name[tr]=KRfb için Qt Çerçeve tamponu
Name[uk]=Буфер кадрів на Qt для KRfb
Name[x-test]=xxQt Framebuffer for KRfbxx
Name[zh_CN]=KRfb 的 Qt 帧缓冲机制
Name[zh_TW]=Krfb 的 Qt Framebuffer
Type=Service
ServiceTypes=krfb/framebuffer
X-KDE-Library=krfb_framebuffer_qt
X-KDE-PluginInfo-Name=qt
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://www.kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

View File

@@ -1,116 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#include "qtframebuffer.h"
#include "qtframebuffer.moc"
#include <QTimer>
#include <QRegion>
#include <QPixmap>
#include <QBitmap>
const int UPDATE_TIME = 500;
QtFrameBuffer::QtFrameBuffer(WId id, QObject *parent)
: FrameBuffer(id, parent)
{
fbImage = QPixmap::grabWindow(win).toImage();
fb = new char[fbImage.numBytes()];
t = new QTimer(this);
connect(t, SIGNAL(timeout()), SLOT(updateFrameBuffer()));
}
QtFrameBuffer::~QtFrameBuffer()
{
delete [] fb;
fb = 0;
}
int QtFrameBuffer::depth()
{
return fbImage.depth();
}
int QtFrameBuffer::height()
{
return fbImage.height();
}
int QtFrameBuffer::width()
{
return fbImage.width();
}
void QtFrameBuffer::getServerFormat(rfbPixelFormat &format)
{
format.bitsPerPixel = 32;
format.depth = 32;
format.trueColour = true;
format.bigEndian = false;
format.redShift = 16;
format.greenShift = 8;
format.blueShift = 0;
format.redMax = 0xff;
format.greenMax = 0xff;
format.blueMax = 0xff;
}
void QtFrameBuffer::updateFrameBuffer()
{
QImage img = QPixmap::grabWindow(win).toImage();
QSize imgSize = img.size();
// verify what part of the image need to be marked as changed
// fbImage is the previous version of the image,
// img is the current one
#if 0 // This is actually slower than updating the whole desktop...
QImage map(imgSize, QImage::Format_Mono);
map.fill(0);
for (int x = 0; x < imgSize.width(); x++) {
for (int y = 0; y < imgSize.height(); y++) {
if (img.pixel(x, y) != fbImage.pixel(x, y)) {
map.setPixel(x, y, 1);
}
}
}
QRegion r(QBitmap::fromImage(map));
tiles = tiles + r.rects();
#else
tiles.append(img.rect());
#endif
memcpy(fb, (const char *)img.bits(), img.numBytes());
fbImage = img;
}
int QtFrameBuffer::paddedWidth()
{
return fbImage.width() * 4;
}
void QtFrameBuffer::startMonitor()
{
t->start(UPDATE_TIME);
}
void QtFrameBuffer::stopMonitor()
{
t->stop();
}

View File

@@ -1,44 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#ifndef KRFB_FRAMEBUFFER_QT_QTFRAMEBUFFER_H
#define KRFB_FRAMEBUFFER_QT_QTFRAMEBUFFER_H
#include <QImage>
#include "framebuffer.h"
class QTimer;
/**
@author Alessandro Praduroux <pradu@pradu.it>
*/
class QtFrameBuffer : public FrameBuffer
{
Q_OBJECT
public:
explicit QtFrameBuffer(WId id, QObject *parent = 0);
~QtFrameBuffer();
virtual int depth();
virtual int height();
virtual int width();
virtual int paddedWidth();
virtual void getServerFormat(rfbPixelFormat &format);
virtual void startMonitor();
virtual void stopMonitor();
public Q_SLOTS:
void updateFrameBuffer();
private:
QImage fbImage;
QTimer *t;
};
#endif

View File

@@ -1,47 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "qtframebufferplugin.h"
#include "qtframebuffer.h"
#include <KGenericFactory>
QtFrameBufferPlugin::QtFrameBufferPlugin(QObject *parent, const QVariantList &args)
: FrameBufferPlugin(parent, args)
{
}
QtFrameBufferPlugin::~QtFrameBufferPlugin()
{
}
FrameBuffer *QtFrameBufferPlugin::frameBuffer(WId id)
{
return new QtFrameBuffer(id);
}
K_PLUGIN_FACTORY(factory, registerPlugin<QtFrameBufferPlugin>();) \
K_EXPORT_PLUGIN(factory("krfb_framebuffer_qt"))
#include "qtframebufferplugin.moc"

View File

@@ -1,48 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KRFB_FRAMEBUFFER_QT_QTFRAMEBUFFERPLUGIN_H
#define KRFB_FRAMEBUFFER_QT_QTFRAMEBUFFERPLUGIN_H
#include "framebufferplugin.h"
#include <kdemacros.h>
#include <QtGui/QWidget>
class FrameBuffer;
class QtFrameBufferPlugin : public FrameBufferPlugin
{
Q_OBJECT
public:
QtFrameBufferPlugin(QObject *parent, const QVariantList &args);
virtual ~QtFrameBufferPlugin();
virtual FrameBuffer *frameBuffer(WId id);
private:
Q_DISABLE_COPY(QtFrameBufferPlugin)
};
#endif // Header guard

View File

@@ -1,31 +0,0 @@
include_directories (${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
set (krfb_framebuffer_x11_SRCS
x11framebuffer.cpp
x11framebufferplugin.cpp
)
kde4_add_plugin (krfb_framebuffer_x11
${krfb_framebuffer_x11_SRCS}
)
target_link_libraries (krfb_framebuffer_x11
${KDE4_KDEUI_LIBS}
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
${X11_X11_LIB}
${X11_Xdamage_LIB}
${X11_Xext_LIB}
krfbprivate
)
install (TARGETS krfb_framebuffer_x11
DESTINATION ${PLUGIN_INSTALL_DIR}
)
install (FILES krfb_framebuffer_x11.desktop
DESTINATION ${SERVICES_INSTALL_DIR}
)

View File

@@ -1,97 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Comment=X11 XDamage/XShm based Framebuffer for KRfb.
Comment[ast]=Esquema de buffer pa KRfb basáu en XDamage/XShm
Comment[bs]=X11 XDamage/XShm baziran framebafer za KRfb.
Comment[ca]=«Framebuffer» basat en XDamage/XShmQt de l'X11 per al KRfb.
Comment[ca@valencia]=«Framebuffer» basat en XDamage/XShmQt de l'X11 per al KRfb.
Comment[cs]=Framebuffer založený na X11 XDamage/XShm pro KRfb.
Comment[da]=X11 XDamage/XShm-baseret framebuffer til KRfb.
Comment[de]=X11 XDamage/XShm-basierter Framebuffer für KRfb.
Comment[en_GB]=X11 XDamage/XShm based Framebuffer for KRfb.
Comment[es]=Memoria intermedia de vídeo basada en X11 Damage/XShm para KRfb.
Comment[et]=KRfb X11 XDamage/XShm põhine kaadripuhver
Comment[eu]=X11 XDamage/XShm oinarritutako KRfb-ren irteerako bideoa.
Comment[fi]=X11 XDamage/XShm-perustainen kehyspuskui KRfb:lle.
Comment[fr]=Sortie vidéo fondée sur X11 XDamage / XShm pour KRfb.
Comment[ga]=Maolán fráma le haghaidh KRfb, bunaithe ar X11 XDamage/XShm
Comment[gl]=Framebuffer baseado en Xll XDamage/Xshm para XRfb.
Comment[hr]=Međuspreminik okvira baziran na X11 XDamage/XShm za KRfb.
Comment[ia]=Framebuffer basate sur X11 XDamage/XShm per KRfb.
Comment[it]=Framebuffer basato su XDamage/XShm di X11 per KRfb.
Comment[kk]=X11 XDamage/XShm негіздеген KRfb кадр буфері.
Comment[km]=X11 XDamage/XShm based Framebuffer សម្រាប់ KRfb 
Comment[ko]=KRfb를 위한 X11 XDamage/XShm 기반 프레임버퍼.
Comment[lt]=X11 XDamage/XShm paremtas Framebuffer skirtas KRfb.
Comment[lv]=X11 XDamage/XShm balstīts kadrbuferis priekš KRfb.
Comment[nb]=Rammebuffer for KRfb basert på X11 XDamage/XShm.
Comment[nds]=Op X11-XDamage/-XShm opbuut Bildpuffer för KRfb
Comment[nl]=Op X11 XDamage/XShm gebaseerd framebuffer voor KRfb.
Comment[nn]=X11 XDamage/XShm basert framebuffer for KRfb.
Comment[pt]='Framebuffer' baseado no XDamage/XShm do X11 para o KRfb.
Comment[pt_BR]=Framebuffer baseado no XDamage/XShm do X11 para o KRfb.
Comment[si]=KRfb සඳහා වන රාමු බෆරය මත පදනම් වූ X11 XDamage/XShm.
Comment[sk]=Framebuffer založený na X11 XDamage/XShm pre KRfb.
Comment[sl]=Slikovni medpomnilnik za KRFB, ki temelji na X11 XDamage/XShm
Comment[sr]=Кадробафер за КРФБ на основу Икс‑демиџа/Икс‑схма у Иксу11.
Comment[sr@ijekavian]=Кадробафер за КРФБ на основу Икс‑демиџа/Икс‑схма у Иксу11.
Comment[sr@ijekavianlatin]=Kadrobafer za KRFB na osnovu XDamagea/XShma u X11.
Comment[sr@latin]=Kadrobafer za KRFB na osnovu XDamagea/XShma u X11.
Comment[sv]=X11 XDamage/XShm-baserad rambuffert för Krfb.
Comment[tr]=KRfb için X11 XDamage/XShm temelli Çerçeve Tamponu.
Comment[uk]=Заснований на XDamage/XShm X11 буфер кадрів для KRfb.
Comment[x-test]=xxX11 XDamage/XShm based Framebuffer for KRfb.xx
Comment[zh_CN]=基于 X11 XDamage/XShm 扩展的 KRfb 帧缓冲机制。
Comment[zh_TW]=KRfb 的 X11 XDamage/XShm based Framebuffer
Name=X11 Framebuffer for KRfb
Name[ast]=Buffer de X11 pa KRfb
Name[bs]=X11 frame bafer za KRfb
Name[ca]=«Framebuffer» de l'X11 per al KRfb.
Name[ca@valencia]=«Framebuffer» de l'X11 per al KRfb.
Name[cs]=X11 Framebuffer pro KRfb
Name[da]=X11-framebuffer til KRfb
Name[de]=X11-Framebuffer für KRfb
Name[en_GB]=X11 Framebuffer for KRfb
Name[es]=Memoria intermedia de vídeo X11 para KRfb
Name[et]=KRfb X11 kaadripuhver
Name[eu]=KRfb-ren X11-ko irteerako bideoa
Name[fi]=X11-kehyspuskuri KRfb:lle
Name[fr]=Sortie vidéo X11 pour KRfb
Name[ga]=Maolán fráma X11 le haghaidh KRfb
Name[gl]=Framebuffer de X11 para KRfb
Name[hr]=Međuspremnik okvira X11 za KRfb
Name[ia]=Framebuffer X11 per KRfb
Name[it]=Framebuffer X11 per KRfb
Name[kk]=X11 KRfb кадр буфері
Name[km]=X11 Framebuffer សម្រាប់ KRfb
Name[ko]=KRfb를 위한 X11 프레임버퍼
Name[lt]=X11 Framebuffer skirtas KRfb
Name[lv]=X11 kadrbuferis priekš KRfb
Name[nb]=X11 rammebuffer for KRfb
Name[nds]=X11-Bildpuffer för KRfb
Name[nl]=X11 framebuffer voor KRfb
Name[nn]=X11-framebuffer for KRfb
Name[pt]='Framebuffer' do X11 para o KRfb
Name[pt_BR]=Framebuffer do X11 para o KRfb
Name[si]=KRfb සඳහා X11 රාමු බෆරය
Name[sk]=X11 Framebuffer pre KRfb
Name[sl]=Slikovni medpomnilnik X11 za KRFB
Name[sr]=Икс11 кадробафер за КРФБ.
Name[sr@ijekavian]=Икс11 кадробафер за КРФБ.
Name[sr@ijekavianlatin]=X11 kadrobafer za KRFB.
Name[sr@latin]=X11 kadrobafer za KRFB.
Name[sv]=X11-rambuffert för Krfb
Name[tr]=KRfb için X11 Çerçeve Tamponu
Name[uk]=Буфер кадрів X11 для KRfb
Name[x-test]=xxX11 Framebuffer for KRfbxx
Name[zh_CN]=KRfb 的 X11 帧缓冲机制
Name[zh_TW]=KRfb 的 X11 Framebuffer
Type=Service
ServiceTypes=krfb/framebuffer
X-KDE-Library=krfb_framebuffer_x11
X-KDE-PluginInfo-Name=x11
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://www.kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

View File

@@ -1,388 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#include "x11framebuffer.h"
#include "x11framebuffer.moc"
#include <config-krfb.h>
#include <QX11Info>
#include <QApplication>
#include <QDesktopWidget>
#include <KApplication>
#include <KDebug>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#ifdef HAVE_XDAMAGE
#include <X11/extensions/Xdamage.h>
#endif
#ifdef HAVE_XSHM
#include <sys/ipc.h>
#include <sys/shm.h>
#include <X11/extensions/XShm.h>
#endif
class X11FrameBuffer::P
{
public:
#ifdef HAVE_XDAMAGE
Damage damage;
#endif
#ifdef HAVE_XSHM
XShmSegmentInfo shminfo;
#endif
XImage *framebufferImage;
XImage *updateTile;
EvWidget *ev;
bool useShm;
int xdamageBaseEvent;
bool running;
};
X11FrameBuffer::X11FrameBuffer(WId id, QObject *parent)
: FrameBuffer(id, parent), d(new X11FrameBuffer::P)
{
#ifdef HAVE_XSHM
d->useShm = XShmQueryExtension(QX11Info::display());
kDebug() << "shm: " << d->useShm;
#else
d->useShm = false;
#endif
d->running = false;
d->framebufferImage = XGetImage(QX11Info::display(),
id,
0,
0,
QApplication::desktop()->width(), //arg, must get a widget ???
QApplication::desktop()->height(),
AllPlanes,
ZPixmap);
if (d->useShm) {
#ifdef HAVE_XSHM
d->updateTile = XShmCreateImage(QX11Info::display(),
DefaultVisual(QX11Info::display(), 0),
d->framebufferImage->bits_per_pixel,
ZPixmap,
NULL,
&d->shminfo,
32,
32);
d->shminfo.shmid = shmget(IPC_PRIVATE,
d->updateTile->bytes_per_line * d->updateTile->height,
IPC_CREAT | 0777);
d->shminfo.shmaddr = d->updateTile->data = (char *)
shmat(d->shminfo.shmid, 0, 0);
d->shminfo.readOnly = False;
XShmAttach(QX11Info::display(), &d->shminfo);
#endif
} else {
;
}
kDebug() << "Got image. bpp: " << d->framebufferImage->bits_per_pixel
<< ", depth: " << d->framebufferImage->depth
<< ", padded width: " << d->framebufferImage->bytes_per_line
<< " (sent: " << d->framebufferImage->width * 4 << ")"
<< endl;
fb = d->framebufferImage->data;
#ifdef HAVE_XDAMAGE
d->ev = new EvWidget(this);
kapp->installX11EventFilter(d->ev);
#endif
}
X11FrameBuffer::~X11FrameBuffer()
{
XDestroyImage(d->framebufferImage);
#ifdef HAVE_XDAMAGE
kapp->removeX11EventFilter(d->ev);
#endif
#ifdef HAVE_XSHM
XShmDetach(QX11Info::display(), &d->shminfo);
XDestroyImage(d->updateTile);
shmdt(d->shminfo.shmaddr);
shmctl(d->shminfo.shmid, IPC_RMID, 0);
#endif
delete d;
fb = 0; // already deleted by XDestroyImage
}
int X11FrameBuffer::depth()
{
return d->framebufferImage->depth;
}
int X11FrameBuffer::height()
{
return d->framebufferImage->height;
}
int X11FrameBuffer::width()
{
return d->framebufferImage->width;
}
int X11FrameBuffer::paddedWidth()
{
return d->framebufferImage->bytes_per_line;
}
void X11FrameBuffer::getServerFormat(rfbPixelFormat &format)
{
format.bitsPerPixel = d->framebufferImage->bits_per_pixel;
format.depth = d->framebufferImage->depth;
format.trueColour = true;
format.bigEndian = ((d->framebufferImage->bitmap_bit_order == MSBFirst) ? true : false);
if (format.bitsPerPixel == 8) {
format.redShift = 0;
format.greenShift = 3;
format.blueShift = 6;
format.redMax = 7;
format.greenMax = 7;
format.blueMax = 3;
} else {
format.redShift = 0;
if (d->framebufferImage->red_mask)
while (!(d->framebufferImage->red_mask & (1 << format.redShift))) {
format.redShift++;
}
format.greenShift = 0;
if (d->framebufferImage->green_mask)
while (!(d->framebufferImage->green_mask & (1 << format.greenShift))) {
format.greenShift++;
}
format.blueShift = 0;
if (d->framebufferImage->blue_mask)
while (!(d->framebufferImage->blue_mask & (1 << format.blueShift))) {
format.blueShift++;
}
format.redMax = d->framebufferImage->red_mask >> format.redShift;
format.greenMax = d->framebufferImage->green_mask >> format.greenShift;
format.blueMax = d->framebufferImage->blue_mask >> format.blueShift;
}
}
void X11FrameBuffer::handleXDamage(XEvent *event)
{
#ifdef HAVE_XDAMAGE
XDamageNotifyEvent *dev = (XDamageNotifyEvent *)event;
QRect r(dev->area.x, dev->area.y, dev->area.width, dev->area.height);
tiles.append(r);
/*if (!dev->more) {
XDamageSubtract(QX11Info::display(),d->damage, None, None);
}*/
#endif
}
void X11FrameBuffer::cleanupRects()
{
QList<QRect> cpy = tiles;
bool inserted = false;
tiles.clear();
// kDebug() << "before cleanup: " << cpy.size();
foreach(const QRect & r, cpy) {
if (tiles.size() > 0) {
for (int i = 0; i < tiles.size(); i++) {
// kDebug() << r << tiles[i];
if (r.intersects(tiles[i])) {
tiles[i] |= r;
inserted = true;
break;
// kDebug() << "merged into " << tiles[i];
}
}
if (!inserted) {
tiles.append(r);
// kDebug() << "appended " << r;
}
} else {
// kDebug() << "appended " << r;
tiles.append(r);
}
}
for (int i = 0; i < tiles.size(); i++) {
tiles[i].adjust(-30, -30, 30, 30);
if (tiles[i].top() < 0) {
tiles[i].setTop(0);
}
if (tiles[i].left() < 0) {
tiles[i].setLeft(0);
}
if (tiles[i].bottom() > d->framebufferImage->height) {
tiles[i].setBottom(d->framebufferImage->height);
}
if (tiles[i].right() > d->framebufferImage->width) {
tiles[i].setRight(d->framebufferImage->width);
}
}
// kDebug() << "after cleanup: " << tiles.size();
}
void X11FrameBuffer::acquireEvents()
{
XEvent ev;
while (XCheckTypedEvent(QX11Info::display(), d->xdamageBaseEvent + XDamageNotify, &ev)) {
handleXDamage(&ev);
}
XDamageSubtract(QX11Info::display(), d->damage, None, None);
}
QList< QRect > X11FrameBuffer::modifiedTiles()
{
QList<QRect> ret;
if (!d->running) {
return ret;
}
kapp->processEvents(); // try to make sure every damage event goes trough;
cleanupRects();
QRect gl;
//d->useShm = false;
if (tiles.size() > 0) {
if (d->useShm) {
#ifdef HAVE_XSHM
foreach(const QRect & r, tiles) {
// kDebug() << r;
gl |= r;
int y = r.y();
int x = r.x();
while (x < r.right()) {
while (y < r.bottom()) {
if (y + d->updateTile->height > d->framebufferImage->height) {
y = d->framebufferImage->height - d->updateTile->height;
}
if (x + d->updateTile->width > d->framebufferImage->width) {
x = d->framebufferImage->width - d->updateTile->width;
}
// kDebug() << "x: " << x << " (" << r.x() << ") y: " << y << " (" << r.y() << ") " << r;
XShmGetImage(QX11Info::display(), win, d->updateTile, x, y, AllPlanes);
int pxsize = d->framebufferImage->bits_per_pixel / 8;
char *dest = fb + ((d->framebufferImage->bytes_per_line * y) + (x * pxsize));
char *src = d->updateTile->data;
for (int i = 0; i < d->updateTile->height; i++) {
memcpy(dest, src, d->updateTile->bytes_per_line);
dest += d->framebufferImage->bytes_per_line;
src += d->updateTile->bytes_per_line;
}
y += d->updateTile->height;
}
x += d->updateTile->width;
y = r.y();
}
}
#endif
} else {
foreach(const QRect & r, tiles) {
XGetSubImage(QX11Info::display(),
win,
r.left(),
r.top(),
r.width(),
r.height(),
AllPlanes,
ZPixmap,
d->framebufferImage,
r.left(),
r.top()
);
}
}
}
// kDebug() << "tot: " << gl;
// kDebug() << tiles.size();
ret = tiles;
tiles.clear();
return ret;
}
void X11FrameBuffer::startMonitor()
{
d->running = true;
#ifdef HAVE_XDAMAGE
d->damage = XDamageCreate(QX11Info::display(), win, XDamageReportRawRectangles);
XDamageSubtract(QX11Info::display(), d->damage, None, None);
#endif
}
void X11FrameBuffer::stopMonitor()
{
d->running = false;
#ifdef HAVE_XDAMAGE
XDamageDestroy(QX11Info::display(), d->damage);
#endif
}
EvWidget::EvWidget(X11FrameBuffer *x11fb)
: QWidget(0), fb(x11fb)
{
#ifdef HAVE_XDAMAGE
int er;
XDamageQueryExtension(QX11Info::display(), &xdamageBaseEvent, &er);
#endif
}
bool EvWidget::x11Event(XEvent *event)
{
#ifdef HAVE_XDAMAGE
if (event->type == xdamageBaseEvent + XDamageNotify) {
fb->handleXDamage(event);
return true;
}
#endif
return false;
}

View File

@@ -1,62 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#ifndef KRFB_FRAMEBUFFER_X11_X11FRAMEBUFFER_H
#define KRFB_FRAMEBUFFER_X11_X11FRAMEBUFFER_H
#include <framebuffer.h>
#include <QWidget>
class X11FrameBuffer;
class EvWidget: public QWidget
{
Q_OBJECT
public:
EvWidget(X11FrameBuffer *x11fb);
protected:
bool x11Event(XEvent *event);
private:
X11FrameBuffer *fb;
int xdamageBaseEvent;
};
/**
@author Alessandro Praduroux <pradu@pradu.it>
*/
class X11FrameBuffer : public FrameBuffer
{
Q_OBJECT
public:
X11FrameBuffer(WId id, QObject *parent = 0);
~X11FrameBuffer();
virtual QList<QRect> modifiedTiles();
virtual int depth();
virtual int height();
virtual int width();
virtual int paddedWidth();
virtual void getServerFormat(rfbPixelFormat &format);
virtual void startMonitor();
virtual void stopMonitor();
void handleXDamage(XEvent *event);
private:
void cleanupRects();
void acquireEvents();
class P;
P *const d;
};
#endif

View File

@@ -1,47 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "x11framebufferplugin.h"
#include "x11framebuffer.h"
#include <KGenericFactory>
X11FrameBufferPlugin::X11FrameBufferPlugin(QObject *parent, const QVariantList &args)
: FrameBufferPlugin(parent, args)
{
}
X11FrameBufferPlugin::~X11FrameBufferPlugin()
{
}
FrameBuffer *X11FrameBufferPlugin::frameBuffer(WId id)
{
return new X11FrameBuffer(id);
}
K_PLUGIN_FACTORY(factory, registerPlugin<X11FrameBufferPlugin>();) \
K_EXPORT_PLUGIN(factory("krfb_framebuffer_x11"))
#include "x11framebufferplugin.moc"

View File

@@ -1,48 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KRFB_FRAMEBUFFER_X11_X11FRAMEBUFFERPLUGIN_H
#define KRFB_FRAMEBUFFER_X11_X11FRAMEBUFFERPLUGIN_H
#include "framebufferplugin.h"
#include <kdemacros.h>
#include <QtGui/QWidget>
class FrameBuffer;
class X11FrameBufferPlugin : public FrameBufferPlugin
{
Q_OBJECT
public:
X11FrameBufferPlugin(QObject *parent, const QVariantList &args);
virtual ~X11FrameBufferPlugin();
virtual FrameBuffer *frameBuffer(WId id);
private:
Q_DISABLE_COPY(X11FrameBufferPlugin)
};
#endif // Header guard

View File

@@ -1,17 +0,0 @@
include_directories(${CMAKE_BINARY_DIR}/krfb/krfb)
set(kcm_krfb_PART_SRCS kcm_krfb.cpp ${krfbconfig_SRCS})
kde4_add_ui3_files(kcm_krfb_PART_SRCS configurationwidget.ui)
kde4_add_ui3_files(kcm_krfb_PART_SRCS
${CMAKE_SOURCE_DIR}/krfb/krfb/manageinvitations.ui
${CMAKE_SOURCE_DIR}/krfb/krfb/personalinvitewidget.ui
${CMAKE_SOURCE_DIR}/krfb/krfb/invitewidget.ui)
kde4_add_plugin(kcm_krfb ${kcm_krfb_PART_SRCS})
target_link_libraries(kcm_krfb ${KDE4_KDECORE_LIBS} ${KDE4_KDE3SUPPORT_LIBS})
install(TARGETS kcm_krfb DESTINATION ${PLUGIN_INSTALL_DIR})
install( FILES kcmkrfb.desktop DESTINATION ${SERVICES_INSTALL_DIR})

21
kcm_krfb/Makefile.am Normal file
View File

@@ -0,0 +1,21 @@
METASOURCES = AUTO
# Code
kde_module_LTLIBRARIES = kcm_krfb.la
kcm_krfb_la_SOURCES = configurationwidget.ui kcm_krfb.cpp
kcm_krfb_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module
kcm_krfb_la_LIBADD = ../krfb/libkrfbconfig.la $(LIB_KDEUI)
# Services
kcmdir = $(kde_appsdir)/Settings/Network
kcm_DATA = kcmkrfb.desktop
EXTRA_DIST = $(kcm_krfb_la_SOURCES)\
$(kcm_DATA)
# set the include path for X, qt and KDE
INCLUDES= -I../krfb $(all_includes)
messages: rc.cpp
$(XGETTEXT) *.cpp *.h -o $(podir)/kcm_krfb.pot

View File

@@ -1,3 +0,0 @@
#! /bin/sh
$EXTRACTRC *.ui >> rc.cpp
$XGETTEXT *.cpp -o $podir/kcm_krfb.pot

View File

@@ -1,4 +1,4 @@
<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
<class>ConfigurationWidget</class>
<widget class="QWidget">
<property name="name">
@@ -12,6 +12,9 @@
<height>445</height>
</rect>
</property>
<property name="caption">
<string>ConfWidget</string>
</property>
<property name="icon">
<pixmap>image0</pixmap>
</property>
@@ -20,7 +23,7 @@
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>0</number>
<number>11</number>
</property>
<property name="spacing">
<number>6</number>
@@ -50,6 +53,12 @@
<property name="name">
<cstring>GroupBox1</cstring>
</property>
<property name="frameShape">
<enum>Box</enum>
</property>
<property name="frameShadow">
<enum>Sunken</enum>
</property>
<property name="title">
<string>Invitations</string>
</property>
@@ -71,7 +80,7 @@
<cstring>invitationNumLabel</cstring>
</property>
<property name="text">
<string>You have no open invitations.</string>
<string>You have no open invitation.</string>
</property>
</widget>
<widget class="QPushButton">
@@ -139,7 +148,7 @@
<cstring>enableSLPCB</cstring>
</property>
<property name="text">
<string>Announce service &amp;on the network</string>
<string>Announce &amp;service on the network</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -153,7 +162,7 @@
<cstring>confirmConnectionsCB</cstring>
</property>
<property name="text">
<string>Confirm uninvited connections &amp;before accepting</string>
<string>&amp;Confirm uninvited connections before accepting</string>
</property>
<property name="whatsThis" stdset="0">
<string>If enabled, a dialog will appear when somebody attempts to connect, asking you whether you want to accept the connection.</string>
@@ -213,7 +222,7 @@
</sizepolicy>
</property>
<property name="text">
<string>Pass&amp;word:</string>
<string>&amp;Password:</string>
</property>
<property name="buddy" stdset="0">
<cstring>passwordInput</cstring>
@@ -256,75 +265,6 @@
</spacer>
</vbox>
</widget>
<widget class="QWidget">
<property name="name">
<cstring>tab</cstring>
</property>
<attribute name="title">
<string>&amp;Session</string>
</attribute>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>11</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<widget class="QGroupBox">
<property name="name">
<cstring>GroupBox4</cstring>
</property>
<property name="title">
<string>Session Preferences</string>
</property>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>11</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<widget class="QCheckBox">
<property name="name">
<cstring>disableBackgroundCB</cstring>
</property>
<property name="text">
<string>Always disable &amp;background image</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="whatsThis" stdset="0">
<string>Check this option to always disable the background image during a remote session. Otherwise the client decides whether the background will be enabled or disabled.</string>
</property>
</widget>
</vbox>
</widget>
<spacer>
<property name="name">
<cstring>Spacer4</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</vbox>
</widget>
<widget class="QWidget">
<property name="name">
<cstring>tab</cstring>
@@ -364,7 +304,7 @@
<cstring>autoPortCB</cstring>
</property>
<property name="text">
<string>Assi&amp;gn port automatically</string>
<string>A&amp;ssign port automatically</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -401,7 +341,7 @@
<cstring>TextLabel1_2</cstring>
</property>
<property name="text">
<string>P&amp;ort:</string>
<string>&amp;Port:</string>
</property>
<property name="buddy" stdset="0">
<cstring>portInput</cstring>
@@ -414,10 +354,10 @@
<property name="value">
<number>5900</number>
</property>
<property name="minimum">
<property name="minValue">
<number>1024</number>
</property>
<property name="maximum">
<property name="maxValue">
<number>32767</number>
</property>
<property name="toolTip" stdset="0">
@@ -495,15 +435,5 @@ Most VNC clients use a display number instead of the actual port. This display n
<tabstop>passwordInput</tabstop>
<tabstop>portInput</tabstop>
</tabstops>
<customwidgets>
<customwidget>
<class>KIntNumInput</class>
<header location="global">knuminput.h</header>
<container>0</container>
</customwidget>
</customwidgets>
<includehints>
<includehint>knuminput.h</includehint>
<includehint>knuminput.h</includehint>
</includehints>
<layoutdefaults spacing="6" margin="11"/>
</UI>

View File

@@ -25,156 +25,154 @@
#include <qradiobutton.h>
#include <qlineedit.h>
#include <qbuttongroup.h>
#include <qcstring.h>
#include <qdatastream.h>
#include <kapplication.h>
#include <kdialog.h>
#include <knuminput.h>
#include <klocale.h>
#include <kaboutdata.h>
#include <kconfig.h>
#include <kgenericfactory.h>
#include <kdatastream.h>
#include <kdebug.h>
#include <QDBusInterface>
#include <QDBusReply>
#include <dcopclient.h>
#define VERSION "0.7"
typedef KGenericFactory<KcmKRfb, QWidget> KcmKRfbFactory;
K_EXPORT_COMPONENT_FACTORY(krfb, KcmKRfbFactory("kcm_krfb"))
// Can't use K_EXPORT_COMPONENT_FACTORY, since insertCatalogue necessary
extern "C" {
void *init_kcm_krfb() {
KGlobal::locale()->insertCatalogue("krfb"); // For invitation translations
return new KcmKRfbFactory("kcm_krfb");
}
};
KcmKRfb::KcmKRfb(QWidget *p, const char *name, const QStringList &) :
KCModule(KcmKRfbFactory::instance(), p, name),
m_configuration(KRFB_CONFIGURATION_MODE) {
KcmKRfb::KcmKRfb(QWidget *p, const QStringList &) :
KCModule(KcmKRfbFactory::componentData(), p),
m_configuration(KRFB_CONFIGURATION_MODE)
{
m_confWidget = new ConfigurationWidget(this);
KGlobal::locale()->insertCatalog("krfb");
m_confWidget = new ConfigurationWidget(this);
QVBoxLayout *l = new QVBoxLayout(this, 0, KDialog::spacingHint());
l->add(m_confWidget);
QVBoxLayout *l = new QVBoxLayout(this);
l->setSpacing(KDialog::spacingHint());
l->setMargin(0);
l->add(m_confWidget);
setButtons(Default|Apply|Reset);
setButtons(Default | Apply | Default);
m_about = new KAboutData( "kcm_krfb", I18N_NOOP("Desktop Sharing Control Module"),
VERSION,
I18N_NOOP("Configure desktop sharing"), KAboutData::License_GPL,
"(c) 2002, Tim Jansen\n",
0, "http://www.tjansen.de/krfb", "tim@tjansen.de");
m_about->addAuthor("Tim Jansen", 0, "tim@tjansen.de");
KAboutData *about = new KAboutData("kcm_krfb", 0, ki18n("Desktop Sharing Control Module"),
VERSION,
ki18n("Configure desktop sharing"), KAboutData::License_GPL,
ki18n("(c) 2002, Tim Jansen\n"),
KLocalizedString(), "http://www.tjansen.de/krfb", "tim@tjansen.de");
about->addAuthor(ki18n("Tim Jansen"), KLocalizedString(), "tim@tjansen.de");
setAboutData(about);
load();
load();
connect(m_confWidget->passwordInput, SIGNAL(textChanged(QString)), SLOT(configChanged()));
connect(m_confWidget->allowUninvitedCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->enableSLPCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->confirmConnectionsCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->allowDesktopControlCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->autoPortCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->portInput, SIGNAL(valueChanged(int)), SLOT(configChanged()));
connect((QObject *)m_confWidget->manageInvitations, SIGNAL(clicked()),
&m_configuration, SLOT(showManageInvitationsDialog()));
connect(&m_configuration, SIGNAL(invitationNumChanged(int)),
this, SLOT(setInvitationNum(int)));
setInvitationNum(m_configuration.invitations().size());
connect(m_confWidget->disableBackgroundCB, SIGNAL(clicked()), SLOT(configChanged()));
connect(m_confWidget->passwordInput, SIGNAL(textChanged(const QString&)), SLOT(configChanged()) );
connect(m_confWidget->allowUninvitedCB, SIGNAL(clicked()), SLOT(configChanged()) );
connect(m_confWidget->enableSLPCB, SIGNAL(clicked()), SLOT(configChanged()) );
connect(m_confWidget->confirmConnectionsCB, SIGNAL(clicked()), SLOT(configChanged()) );
connect(m_confWidget->allowDesktopControlCB, SIGNAL(clicked()), SLOT(configChanged()) );
connect(m_confWidget->autoPortCB, SIGNAL(clicked()), SLOT(configChanged()) );
connect(m_confWidget->portInput, SIGNAL(valueChanged(int)), SLOT(configChanged()) );
connect((QObject*)m_confWidget->manageInvitations, SIGNAL(clicked()),
&m_configuration, SLOT(showManageInvitationsDialog()) );
connect(&m_configuration, SIGNAL(invitationNumChanged(int)),
this, SLOT(setInvitationNum(int)));
setInvitationNum(m_configuration.invitations().size());
}
KcmKRfb::~KcmKRfb() {
delete m_about;
}
void KcmKRfb::configChanged()
{
emit changed(true);
void KcmKRfb::configChanged() {
emit changed(true);
}
void KcmKRfb::setInvitationNum(int num)
{
if (num == 0) {
m_confWidget->invitationNumLabel->setText(i18n("You have no open invitation."));
} else {
m_confWidget->invitationNumLabel->setText(i18n("Open invitations: %1", num));
}
void KcmKRfb::setInvitationNum(int num) {
if (num == 0)
m_confWidget->invitationNumLabel->setText(i18n("You have no open invitation."));
else
m_confWidget->invitationNumLabel->setText(i18n("Open invitations: %1").arg(num));
}
void KcmKRfb::checkKInetd(bool &kinetdAvailable, bool &krfbAvailable)
{
kinetdAvailable = false;
krfbAvailable = false;
//TODO verify it when kinetd will port
QDBusInterface kinetd("org.kde.kded", "/modules/kinetd", "org.kde.kinetd");
QDBusReply<bool> reply = kinetd.call("isInstalled", "krfb");
void KcmKRfb::checkKInetd(bool &kinetdAvailable, bool &krfbAvailable) {
kinetdAvailable = false;
krfbAvailable = false;
if (!reply.isValid()) {
return;
}
DCOPClient *d = KApplication::dcopClient();
krfbAvailable = reply;
kinetdAvailable = true;
QByteArray sdata, rdata;
QCString replyType;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
if (!d->call ("kded", "kinetd", "isInstalled(QString)", sdata, replyType, rdata))
return;
if (replyType != "bool")
return;
QDataStream answer(rdata, IO_ReadOnly);
answer >> krfbAvailable;
kinetdAvailable = true;
}
void KcmKRfb::load()
{
bool kinetdAvailable, krfbAvailable;
checkKInetd(kinetdAvailable, krfbAvailable);
void KcmKRfb::load() {
bool kinetdAvailable, krfbAvailable;
checkKInetd(kinetdAvailable, krfbAvailable);
m_confWidget->allowUninvitedCB->setChecked(m_configuration.allowUninvitedConnections());
m_confWidget->enableSLPCB->setChecked(m_configuration.enableSLP());
m_confWidget->confirmConnectionsCB->setChecked(m_configuration.askOnConnect());
m_confWidget->allowDesktopControlCB->setChecked(m_configuration.allowDesktopControl());
m_confWidget->passwordInput->setText(m_configuration.password());
m_confWidget->autoPortCB->setChecked(m_configuration.preferredPort() < 0);
m_confWidget->portInput->setValue(m_configuration.preferredPort() > 0 ?
m_configuration.preferredPort() : 5900);
m_confWidget->disableBackgroundCB->setChecked(m_configuration.disableBackground());
emit changed(false);
m_confWidget->allowUninvitedCB->setChecked(m_configuration.allowUninvitedConnections());
m_confWidget->enableSLPCB->setChecked(m_configuration.enableSLP());
m_confWidget->confirmConnectionsCB->setChecked(m_configuration.askOnConnect());
m_confWidget->allowDesktopControlCB->setChecked(m_configuration.allowDesktopControl());
m_confWidget->passwordInput->setText(m_configuration.password());
m_confWidget->autoPortCB->setChecked(m_configuration.preferredPort()<0);
m_confWidget->portInput->setValue(m_configuration.preferredPort()> 0 ?
m_configuration.preferredPort() : 5900);
}
void KcmKRfb::save()
{
void KcmKRfb::save() {
m_configuration.update();
bool allowUninvited = m_confWidget->allowUninvitedCB->isChecked();
m_configuration.setAllowUninvited(allowUninvited);
m_configuration.setEnableSLP(m_confWidget->enableSLPCB->isChecked());
m_configuration.setAskOnConnect(m_confWidget->confirmConnectionsCB->isChecked());
m_configuration.setAllowDesktopControl(m_confWidget->allowDesktopControlCB->isChecked());
m_configuration.setPassword(m_confWidget->passwordInput->text());
if (m_confWidget->autoPortCB->isChecked()) {
m_configuration.setPreferredPort(-1);
} else {
m_configuration.setPreferredPort(m_confWidget->portInput->value());
}
m_configuration.setDisableBackground(m_confWidget->disableBackgroundCB->isChecked());
m_configuration.save();
#if 0
kapp->dcopClient()->emitDCOPSignal("KRFB::ConfigChanged", "KRFB_ConfigChanged()", QByteArray());
#endif
emit changed(false);
m_configuration.update();
bool allowUninvited = m_confWidget->allowUninvitedCB->isChecked();
m_configuration.setAllowUninvited(allowUninvited);
m_configuration.setEnableSLP(m_confWidget->enableSLPCB->isChecked());
m_configuration.setAskOnConnect(m_confWidget->confirmConnectionsCB->isChecked());
m_configuration.setAllowDesktopControl(m_confWidget->allowDesktopControlCB->isChecked());
m_configuration.setPassword(m_confWidget->passwordInput->text());
if (m_confWidget->autoPortCB->isChecked())
m_configuration.setPreferredPort(-1);
else
m_configuration.setPreferredPort(m_confWidget->portInput->value());
m_configuration.save();
}
void KcmKRfb::defaults()
{
bool kinetdAvailable, krfbAvailable;
checkKInetd(kinetdAvailable, krfbAvailable);
void KcmKRfb::defaults() {
bool kinetdAvailable, krfbAvailable;
checkKInetd(kinetdAvailable, krfbAvailable);
m_confWidget->allowUninvitedCB->setChecked(false);
m_confWidget->enableSLPCB->setChecked(true);
m_confWidget->confirmConnectionsCB->setChecked(false);
m_confWidget->allowDesktopControlCB->setChecked(false);
m_confWidget->passwordInput->setText("");
m_confWidget->autoPortCB->setChecked(true);
m_confWidget->portInput->setValue(5900);
m_confWidget->disableBackgroundCB->setChecked(false);
emit changed(true);
m_confWidget->allowUninvitedCB->setChecked(false);
m_confWidget->enableSLPCB->setChecked(true);
m_confWidget->confirmConnectionsCB->setChecked(false);
m_confWidget->allowDesktopControlCB->setChecked(false);
m_confWidget->passwordInput->setText("");
m_confWidget->autoPortCB->setChecked(true);
m_confWidget->portInput->setValue(5900);
}
const KAboutData *KcmKRfb::aboutData() const
{
return m_about;
}
QString KcmKRfb::quickHelp() const
{
return i18n("<h1>Desktop Sharing</h1> This module allows you to configure"
" the KDE desktop sharing.");
return i18n("<h1>Desktop Sharing Configuration</h1> This module allows you to configure"
" the KDE desktop sharing.");
}

View File

@@ -21,29 +21,29 @@
#include <qobject.h>
#include <qdatetime.h>
#define KDE3_SUPPORT
#include <kcmodule.h>
#undef KDE3_SUPPORT
#include "configurationwidget.h"
#include "../krfb/configuration.h"
class KcmKRfb : public KCModule
{
Q_OBJECT
class KcmKRfb : public KCModule {
Q_OBJECT
private:
Configuration m_configuration;
ConfigurationWidget *m_confWidget;
void checkKInetd(bool &, bool &);
Configuration m_configuration;
ConfigurationWidget *m_confWidget;
KAboutData *m_about;
void checkKInetd(bool&, bool&);
public:
KcmKRfb(QWidget *p, const QStringList &);
KcmKRfb(QWidget *p, const char *name, const QStringList &);
~KcmKRfb();
void load();
void save();
void defaults();
QString quickHelp() const;
void load();
void save();
void defaults();
QString quickHelp() const;
const KAboutData *aboutData() const;
private slots:
void setInvitationNum(int num);
void configChanged();
void setInvitationNum(int num);
void configChanged();
};

View File

@@ -1,181 +1,129 @@
[Desktop Entry]
Encoding=UTF-8
Icon=krfb
Exec=kcmshell4 kcmkrfb
Type=Service
X-DocPath=krfb/krfb-configuration.html
X-KDE-ServiceTypes=KCModule
Type=Application
Exec=kcmshell kcmkrfb
X-KDE-Library=kcm_krfb
X-KDE-Factoryname=krfb
X-KDE-ParentApp=kcontrol
X-KDE-ModuleType=Library
X-KDE-Library=krfb
Name=Desktop Sharing
Name[af]=Werkskerm Deeling
Name[ar]=مشاركة سطح المكتب
Name[ast]=Escritoriu compartiu
Name[bg]=Споделяне на работния плот
Name[bn]=ডেস্কটপ ভাগাভাগি
Name[br]=Rannañ ar vurev
Name[bs]=Dijeljenje radne površine
Name[bg]=Споделяне на Работно място
Name[bs]=Dijeljenje desktopa
Name[ca]=Compartició de l'escriptori
Name[ca@valencia]=Compartició de l'escriptori
Name[cs]=Sdílení pracovní plochy
Name[cy]=Rhannu Penbwrdd
Name[da]=Desktopdeling
Name[de]=Arbeitsflächen-Freigabe
Name[el]=Κοινή χρήση επιφάνειας εργασίας
Name[en_GB]=Desktop Sharing
Name[eo]=Tabula komunigado
Name[es]=Escritorio compartido
Name[da]=Skrivebordsdeling
Name[de]=Arbeitsfläche freigeben
Name[el]=Μοίρασμα της επιφάνειας εργασίας
Name[eo]=Tabuloj komunaj
Name[es]=Compartición de escritorio
Name[et]=Töölaua jagamine
Name[eu]=Mahaigaina partekatzea
Name[fa]=اشتراک رومیزی
Name[fi]=Työpöydän jakaminen
Name[fi]=Työpöytien jako
Name[fr]=Partage de bureau
Name[ga]=Roinnt Deisce
Name[gl]=Compartimento do escritorio
Name[he]=שיתוף שולחנות עבודה
Name[hi]=डेस्कटॉप साझेदारी
Name[hne]=डेस्कटाप साझेदारी
Name[hr]=Dijeljenje radne površine
Name[hu]=Munkaasztal-megosztás
Name[ia]=Compartir de scriptorio
Name[is]=Skjáborðamiðlun
Name[it]=Condivisione del desktop
Name[it]=Condivisione Desktop
Name[ja]=デスクトップ共有
Name[kk]=Үстелді ортақтастыру
Name[km]=ការ​ចែក​រំលែក​ផ្ទៃ​តុ
Name[ko]=데스크톱 공유
Name[lt]=Dalinimasis darbastaliu
Name[lv]=Darbvirsmas koplietošana
Name[mk]=Делење на работната површина
Name[ml]=പണിയിടം പങ്കുവെക്കല്‍
Name[ms]=Perkongsian Ruang Kerja
Name[mk]=Десктоп Делење
Name[mt]=Qsim tad-desktop
Name[nb]=Delte skrivebord
Name[nds]=Schriefdisch-Freegaav
Name[ne]=डेस्कटप साझेदारी
Name[nl]=Bureaublad delen
Name[nl]=Bureaubladvrijgave
Name[nn]=Skrivebordsdeling
Name[pa]=ਡੈਸਕਟਾਪ ਸ਼ੇਅਰਿੰਗ
Name[nso]=Kabagano ya Desktop
Name[pl]=Współdzielenie pulpitu
Name[pt]=Partilha do Ecrã
Name[pt_BR]=Compartilhamento do área de trabalho
Name[ro]=Partajare birou
Name[pt]=Partilha do Ambiente de Trabalho
Name[pt_BR]=Compartilhamento do Desktop
Name[ro]=Partajare ecran
Name[ru]=Общий рабочий стол
Name[se]=Čállinbeavdejuohkkin
Name[si]=වැඩතල හවුල්
Name[sk]=Zdieľanie pracovnej plochy
Name[sl]=Deljenje namizja
Name[sr]=Дељење површи
Name[sr@ijekavian]=Дијељење површи
Name[sr@ijekavianlatin]=Dijeljenje površi
Name[sr@latin]=Deljenje površi
Name[sv]=Dela ut skrivbordet
Name[ta]=பணிமேடை பகிர்வு
Name[tg]=Истифодабарии муштараки Мизи корӣ
Name[th]=ใช้งานพื้นที่ทำงานร่วมกัน
Name[tr]=Masaüstü Paylaşımı
Name[ug]=ئۈستەلئۈستىنى ھەمبەھىرلەش
Name[uk]=Спільні стільниці
Name[vi]=Chia sẻ màn hình nền
Name[ven]=U kovhekana ha Desikithopo
Name[xh]=Ukwehlulelana kwe Desktop
Name[x-test]=xxDesktop Sharingxx
Name[zh_CN]=桌面共享
Name[zh_HK]=桌面分享
Name[zh_TW]=桌面分享
Name[zu]=Ukwahlulelana kwe-Desktop
Comment=Configure Desktop Sharing
Comment[af]=Konfigureer Werkskerm Deeling
Comment[ar]=تعديل مشاركة سطح المكتب
Comment[ast]=Configura'l to escritoriu compartíu
Comment[bg]=Настройки на споделянето на работния плот
Comment[bn]=ডেস্কটপ ভাগাভাগি কনফিগার করুন
Comment[br]=Kefluniañ rannañ ar vurev
Comment[bs]=Podešavanje dijeljenja površine
Comment[bg]=Конфигуриране на 'Споделяне на Работно място'
Comment[bs]=Podesite dijeljenje desktopa
Comment[ca]=Lupa de l'escriptori
Comment[ca@valencia]=Lupa de l'escriptori
Comment[cs]=Nastavit sdílení pracovní plochy
Comment[cy]=Ffurfweddu Rhannu Penbwrdd
Comment[da]=Indstil desktopdeling
Comment[da]=Indstil skrivebordsdeling
Comment[de]=Freigabe der Arbeitsfläche einrichten
Comment[el]=Ρύθμιση της κοινής χρήσης της επιφάνειας εργασίας
Comment[en_GB]=Configure Desktop Sharing
Comment[eo]=Agordi la tabulan komunigadon
Comment[es]=Configure su escritorio compartido
Comment[el]=Ρύθμιση του μοιράσματος της επιφάνειας εργασίας
Comment[eo]=Agordu fordonadon de viaj tabuloj
Comment[es]=Compartición de escritorio
Comment[et]=Töölaua jagamise seadistamine
Comment[eu]=Konfiguratu mahaigaina partekatzea
Comment[fa]=پیکربندی اشتراک رومیزی
Comment[fi]=Aseta työpöydän jakaminen
Comment[fi]=Aseta työpöytien jakoa
Comment[fr]=Configuration du partage du bureau
Comment[ga]=Cumraigh Roinnt Deisce
Comment[gl]=Configurar o compartimento do escritorio
Comment[he]=שינוי הגדרות שיתוף שולחנות העבודה
Comment[hi]=डेस्कटॉप साझेदारी कॉन्फ़िगर करें
Comment[hne]=डेस्कटाप साझेदारी कान्फिगर करव
Comment[hr]=Podešavanje dijeljenja radne površine
Comment[hu]=A munkaasztal-megosztás beállításai
Comment[ia]=Configura le compartir de scriptorio
Comment[is]=Stilla skjáborðsmiðlun
Comment[it]=Configura condivisione del desktop
Comment[it]=Configura condivisione desktop
Comment[ja]=デスクトップ共有の設定
Comment[kk]=Үстелді ортақтастыруды баптау
Comment[km]=កំណត់​រចនា​សម្ព័ន្ធ​ការ​ចែក​រំលែក​ផ្ទៃ​តុ
Comment[ko]=데스크톱 공유 설정
Comment[lt]=Konfigūruoti dalinimąsi darbastaliu
Comment[lv]=Konfigurē darbvirsmas koplietošanu
Comment[mk]=Конфигурирајте делење на површината
Comment[ml]=പണിയിടം പങ്കുവെക്കല്‍ ക്രമീകരിക്കാം
Comment[ms]= Selaraskan Perkongsian Desktop
Comment[mk]=Конфигурирај Десктоп Делење
Comment[nb]=Tilpass delte skrivebord
Comment[nds]=Schriefdisch-Freegaav instellen
Comment[ne]=डेस्कटप साझेदारी कन्फिगर गर्नुहोस्
Comment[nl]=Bureaublad delen instellen
Comment[nl]=Bureaubladvrijgave configureren
Comment[nn]=Set opp skrivebordsdeling
Comment[pa]=ਡੈਸਕਟਾਪ ਸ਼ੇਅਰਿੰਗ ਸੰਰਚਨਾ
Comment[nso]=Beakanya Kabagano ya Desktop
Comment[pl]=Konfiguracja współdzielenia pulpitu
Comment[pt]=Configurar a Partilha do Ecrã
Comment[pt_BR]=Configura o compartilhamento da área de trabalho
Comment[ro]=Configurează partajarea biroului
Comment[pt]=Configura a Partilha do Ecrã
Comment[pt_BR]=Configurar Compartilhamento do Desktop
Comment[ru]=Параметры общего рабочего стола
Comment[se]=Heivet čállinbeavdejuohkkima
Comment[si]=වැඩතල හවුල් සකසන්න
Comment[sk]=Nastavenie zdieľania pracovnej plochy
Comment[sl]=Nastavi deljenje namizja
Comment[sr]=Подешавање дељења површи
Comment[sr@ijekavian]=Подешавање дијељења површи
Comment[sr@ijekavianlatin]=Podešavanje dijeljenja površi
Comment[sr@latin]=Podešavanje deljenja površi
Comment[sv]=Anpassa utdelning av skrivbord
Comment[ta]=பணிமேடை பகிர்வை உள்ளமை
Comment[tg]=Батанзимдарории Истифодабарии муштараки Мизи корӣ
Comment[th]=ปรับแต่งการแบ่งการใช้งานพื้นที่ทำงานร่วมกัน
Comment[tr]=Masaüstü Paylaşımını Yapılandır
Comment[uk]=Налаштувати спільні стільниці
Comment[vi]=Cấu hình chia sẻ màn hình nền
Comment[ven]=Dzudzanyani u kovhekana ha desikithopo
Comment[xh]=Qwalasela Ukusebenzisa ngokuhlangeneyo kwe Desktop
Comment[x-test]=xxConfigure Desktop Sharingxx
Comment[zh_CN]=配置桌面共享
Comment[zh_HK]=設定桌面分享
Comment[zh_TW]=設定桌面分享
X-KDE-Keywords=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
X-KDE-Keywords[ca]=compartició d'escriptori,krfb,vnc,compartició,krdc,connexió d'escriptori remot,invitació,port,slp,no invitat
X-KDE-Keywords[da]=skrivebordsdeling,krfb,vnc,deling,krdc,remote desktop,fjernskrivebord,invitation,port,slp,uinviteret
X-KDE-Keywords[de]=freigabe der arbeitsfläche,krfb,vnc,freigabe,krdc,fernwartung,einladung,port,slp
X-KDE-Keywords[es]=compartición de escritorio,krfb,vnc,compartición,krdc,conexión de escritorio en remoto,invitación,puerto,slp,no invitado
X-KDE-Keywords[et]=töölaua jagamine,krfb,vnc,jagamine,rdp,krdc,kaugtöölaua ühendus,rdp,kutse,port,slp,kutsumata
X-KDE-Keywords[ia]=compartir de scriptorio,krfb.vnc,compartir,krdc,connexion de scriptorio remote,invitation,porto,slp,non invitate
X-KDE-Keywords[it]=condivisione desktop,krfb,vnc,condivisione,krdc,connessione desktop remoto,invito,porta,slp,non invitato
X-KDE-Keywords[kk]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
X-KDE-Keywords[km]=ការ​ចែក​រំលែក​ផ្ទៃតុ​,krfb,vnc,ការ​ចែក​រំលែក​,krdc,ការ​តភ្ជាប់​ផ្ទៃ​តុ​ពី​ចម្ងាយ​,​ការ​អញ្ជើញ​,​ច្រក​,slp,មិន​ត្រូវ​បានអញ្ជើញ
X-KDE-Keywords[nb]=skrivebordsdeling,krfb,vnc,deling,krdc,tilkoblng til annet skrivebord,invitasjon,port,slp,ikke invitert
X-KDE-Keywords[nds]=Schriefdischfreegaav,krfb,vnc,Freegaav,Verbinnen na feern Schriefdisch,Inladen,Port,Koppelsteed,slp,nich inlaadt
X-KDE-Keywords[nl]=delen van bureaublad,krfb,vnc,delen,krdc,verbinding naar bureaublad op afstand,invitatie,poort,slp,ongenodigd
X-KDE-Keywords[pt]=partilha do ecrã,krfb,vnc,partilha,krdc,ligação ecrã remoto,convite,porto,slp,sem convite
X-KDE-Keywords[pt_BR]=compartilhamento da área de trabalho,krfb,vnc,compartilhar,krdc,conexão à área de trabalho remota,convite,porta,desconvidar
X-KDE-Keywords[sv]=dela skrivbord,krfb,vnc,dela,krdc,fjärrskrivbordsanslutning,inbjudan,port,slp,oinbjuden
X-KDE-Keywords[uk]=krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,спільне використання,керування,оприлюднення,віддалене з’єднання,запрошення,порт,небажане
X-KDE-Keywords[x-test]=xxdesktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvitedxx
X-KDE-Keywords[zh_TW]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
Categories=Qt;KDE;X-KDE-settings-network;Settings;
Comment[zu]=Hlela kahle Ukwahlulelana kwe-Desktop
Keywords=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp
Keywords[ar]=مشاركة سطح المكتب,krfb,vnc,مشاركة,rdp,krdc,اتصال سطح مكتب بعيد,rdp
Keywords[bs]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,dijeljenje desktopa,dijeljenje
Keywords[ca]=compartició de l'escriptori,krfb,vnc,compartir,rdp,krdc,connexió a l'escriptori remot,rdp
Keywords[cs]=sdílení plochy,krfb,vnc,sdílení,rdp,krdc,připojení vzdálené plochy
Keywords[da]=skrivebordsdeling,krfb,vnc,deling,rdp,krdc,ekstern skrivebordsforbindelse ,rdp
Keywords[de]=Arbeitsfläche freigen,krfb,vnc,freigeben,rdp,krdc,Verbindung zur Arbeitsfläche über das Netzwerk,rdp
Keywords[el]=μοίρασμα επιφάνειας εργασίας,krfb,vnc,μοίρασμα,rdp,krdc,σύνδεση σε απομακρυσμένη επιφάνεια εργασίας,rdp
Keywords[eo]=tabulo,tabulofordonado,fordonado,rdp,krdc,foraj tabuloj
Keywords[es]=compartición de escritorio,krfb,vnc,compartir,rdp,krdc, conexión escritorio remoto,rdp
Keywords[et]=töölaua jagamine,krfb,vnc,jagamine,rdp,krdc,kaugtöölaua ühendus,rdp
Keywords[fi]=työpöydän jako,krfb,vnc,jako,rdp,krdc,etätyöpöytä
Keywords[fr]=partage du bureau,krfb,vnc,rdp,krdc,connexion à un bureau distant,rdp
Keywords[he]=שיתוף שולחן עבודה,krfb,vnc,שיתוף,rdp,krdc,חיבור לשולחן עבודה מרוחק,rdp
Keywords[hu]=munkaasztal-megosztás,krfb,vnc,megosztás,rdp,krdc,csatlakozás távoli munkaasztalhoz,rdp
Keywords[is]=skjáborðsmiðlun,miðlun,krfb,vnc,rdp,krdc,fjarvinnsla,remote desktop connection,rdp
Keywords[it]=condivisione desktop,krfb,vnc,condivisione,rdp,krdc, connessione desktop remoto,rdp
Keywords[ja]=デスクトップ共有,krfb,vnc,共有,rdp,krdc,リモートデスクトップ接続,rdp
Keywords[lt]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp, dalinimasis darbastaliu,prisijungimas prie nutolusio darbastalio
Keywords[nb]=skrivebordsdeling,krfb,vnc,deling,rdp,krdc,fjernt skrivebord,rdp
Keywords[nl]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,verbinding,bureaubladvrijgave,bureaublad op afstand
Keywords[nn]=skrivebordsdeling,krfb,vnc,deling,rdp,krdc,nettverksskrivebord
Keywords[nso]=kabagano ya Desktop,krfb,vnc,kabagano,rdp,krdc,kopantšho desktop ya remote, rdp
Keywords[pl]=współdzielenie pulpitu,krfb,vnc,współdzielenie,rdp,krdc,zdalne połączenie
Keywords[pt]=partilha do ecrã,krfb,vnc,partilha,rdp,krdc,ligação a um ecrã remoto,rdp
Keywords[pt_BR]=compartilhamento de desktop,krfb,vnc,sharing,rdp,krdc,conexão a desktop remoto,rdp
Keywords[sk]=zdieľanie plochy,krfb,vnc,zdieľanie,rdp,krdc,pripojenie vzdialenej pracovnej plochy,rdp
Keywords[sl]=namizje,deljenje,krfb,vnc,rdp,krdc,povezava oddaljenega namizja,rdp
Keywords[sv]=dela skrivbord,krfb,vnc,dela,rdp,krdc,fjärrskrivbordsanslutning,rdp
Keywords[th]=การใช้งานพื้นที่ทำงานร่วมกัน,krfb,vnc,ใช้ทรัพยากรร่วมกัน,rdp,krdc,เชื่อมต่อพื้นที่ทำงานระยะไกล,rdp
Keywords[uk]=спільні стільниці,krfb,vnc,спільний,rdp,krdc,з'єднання віддаленої стільниці,rdp
Keywords[ven]=U kovhekana ha desktop,krfb,vnc,kovhekana,rdp,krdc,vhukwamani ha desktop ya kule, rdp
Keywords[xh]=usebenziso oluhlangeneyo lwe desktop,krfb,vnc, ukusebenzisa ngokuhlangeneyo,rdp,krdc,uxhumaniso lwe desktop elikude,rdp
Keywords[zh_CN]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,桌面共享,共享,远程桌面连接
Keywords[zh_TW]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,桌面分享,分享,遠端桌面連線
Keywords[zu]=ukuhlukaniselana kwe-desktop,krfb,vnc,ukuhlukaniselana,rdp,krdc,ukuxhumanisela kude kwe-desktop,rdp

View File

@@ -1,20 +0,0 @@
########### next target ###############
set(kded_kinetd_PART_SRCS kinetd.cpp)
message(STATUS "Port to krfb DBUS")
# kde4_add_dcop_skels(kded_kinetd_PART_SRCS kinetd.h )
kde4_add_plugin(kded_kinetd ${kded_kinetd_PART_SRCS})
target_link_libraries(kded_kinetd ${KDE4_KIO_LIBS} ${KDE4_KDNSSD_LIBS})
install(TARGETS kded_kinetd DESTINATION ${PLUGIN_INSTALL_DIR})
########### install files ###############
install(FILES kinetd.notifyrc DESTINATION ${DATA_INSTALL_DIR}/krfb)
install(FILES kinetdmodule.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR})
install(FILES kinetd.desktop DESTINATION ${SERVICES_INSTALL_DIR}/kded)

30
kinetd/Makefile.am Normal file
View File

@@ -0,0 +1,30 @@
METASOURCES = AUTO
# Code
kde_module_LTLIBRARIES = kded_kinetd.la
kded_kinetd_la_SOURCES = kinetd.cpp kinetd.skel
kded_kinetd_la_LDFLAGS = $(all_libraries) -module -avoid-version
kded_kinetd_la_LIBADD = ../srvloc/libsrvloc.la $(LIB_KIO)
# Services
kde_servicetypes_DATA = kinetdmodule.desktop
kdeddir = $(kde_servicesdir)/kded
kded_DATA = kinetd.desktop
EXTRA_DIST = $(kded_kinetd_la_SOURCES)\
$(kded_DATA) \
$(kde_servicetypes_DATA) \
eventsrc README.debugging
KDE_ICON = kinetd
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(kde_datadir)/kinetd
$(INSTALL_DATA) $(srcdir)/eventsrc $(DESTDIR)$(kde_datadir)/kinetd/eventsrc
# set the include path for X, qt and KDE
INCLUDES= -I$(top_srcdir)/krfb/srvloc $(all_includes)
messages: rc.cpp
$(XGETTEXT) *.cpp -o $(podir)/kinetd.pot

View File

@@ -1,2 +0,0 @@
#! /bin/sh
$XGETTEXT *.cpp -o $podir/kinetd.pot

174
kinetd/eventsrc Normal file
View File

@@ -0,0 +1,174 @@
[!Global!]
IconName=kinetd
Comment=KInetD
Comment[sv]=Kinetd
[IncomingConnection]
Name=IncomingConnection
Name[ar]=اتصال وارد
Name[ca]=Connexió entrant
Name[cs]=Příchozí spojení
Name[da]=IndkommendeForbindelse
Name[de]=Eingehende Verbindung
Name[el]=Εισερχόμενη σύνδεση
Name[eo]=EnvenantaKonekto
Name[es]=Conexión entrante
Name[et]=SissetulevÜhendus
Name[fi]=Saapuva yhteys
Name[fr]=Connexion entrante
Name[he]=חיבור נכנס
Name[hr]=DolaznaVeza
Name[hu]=Bejövő kapcsolat
Name[it]=Connessioni in entrata
Name[ja]=外部からの接続
Name[lt]=Ateinantis prisijungimas
Name[mk]=ВлезнаВрска
Name[mt]=KonnessjonijiDieħla
Name[nb]=Innkommende tilknytning
Name[nl]=Inkomende verbinding
Name[nn]=Innkomande samband
Name[nso]=Kgokagano yeo e Tsenago
Name[pl]=Połączenia przychodzące
Name[pt_BR]=Conexões de Entrada
Name[ro]=Conexiune de intrare
Name[ru]=Входящее соединение
Name[sk]=Prichádzajúce spojenia
Name[sl]=Prihajajoča povezava
Name[sv]=Inkommande anslutning
Name[th]=มีการเชื่อมต่อเข้ามา
Name[tr]=Gelen Bağlantı
Name[uk]=ВхіднеЗ'єднання
Name[ven]=Vhukwamanihanga ngomu
Name[xh]=Uxhumaniso Olungenayo
Name[zh_CN]=进入的连接
Name[zh_TW]=進來的連接
Name[zu]=UkuxhumanaOkuzayo
Comment=Received incoming connection
Comment[af]=Ontvang inkomende verbinding
Comment[ar]=تم استلام اتصال وارد
Comment[bg]=Получена Входяща Връзка
Comment[bs]=Primio dolaznu konekciju
Comment[ca]=Rebuda connexió entrant
Comment[cs]=Obdrženo příchozí spojení
Comment[da]=Modtog indkommende forbindelse
Comment[de]=Verbindungsanfrage eingegangen
Comment[el]=Λήψη εισερχόμενης σύνδεσης
Comment[eo]=Ricevantaj envenantaj konektoj
Comment[es]=Recibida conexión entrante
Comment[et]=Saadi sissetulev ühendus
Comment[fi]=Vastaanotettiin saapuva yhteys
Comment[fr]=Reçu une connexion entrante
Comment[he]=נתקבל חיבור נכנס
Comment[hr]=Primio dolaznu vezu
Comment[hu]=Csatlakozási kérés érkezett
Comment[is]=Tók á móti uppkalli
Comment[it]=Connessione in entrata stabilita
Comment[ja]=着信した外部からの接続
Comment[lt]=Gautas įeinantis prisijungimas
Comment[mk]=Примена влезна врска
Comment[mt]=Irċevejt konnessjoni dieħla
Comment[nb]=Motta innkommende tilknytning
Comment[nl]=Ontving een inkomende verbinding
Comment[nn]=Motta innkomande samband
Comment[nso]=Amogetše kgokagano yeo e tsenago
Comment[pl]=Otrzymano połącznie przychodzące
Comment[pt]=Foi recebida uma ligação
Comment[pt_BR]=Recebendo conexão de entrada
Comment[ro]=Conexiune de intrare recepţionată
Comment[ru]=Входящее соединение завершилось успешно
Comment[sk]=Prijaté príchodzie spojenia
Comment[sl]=Prejeta je prihajajoča povezava
Comment[sv]=Tar emot inkommande anslutning
Comment[th]=ได้รับการเชื่อมต่อเข้ามา
Comment[tr]=Gelen bağlantı alınıyor
Comment[uk]=Отримано вхідне з'єднання
Comment[ven]=Vhukwamani hau dzhena ho tanganedzhwaho
Comment[xh]=Uxhulumano olungenayo olufunyenweyo
Comment[zh_CN]=收到进入的连接
Comment[zh_TW]=已接收的進來的連線
Comment[zu]=Ukuxhumanisa okungenayo okutholakele
default_presentation=4
[ProcessFailed]
Name=ProcessFailed
Name[ar]=فشلت العملية
Name[bg]=Пропаднал Процес
Name[ca]=Procés fallit
Name[cs]=Proces selhal
Name[da]=ProcesMislykkedes
Name[de]=Prozess fehlgeschlagen
Name[el]=Η επεξεργασία απέτυχε
Name[eo]=ProcezoFiaskis
Name[es]=Proceso fallido
Name[et]=ProtsessEbaõnnestus
Name[fi]=Prosessi epäonnistui
Name[fr]=Échec du processus
Name[he]=תהליך נכשל
Name[hr]=ProcesNeuspješan
Name[hu]=Hibás folyamat
Name[it]=Processo fallito
Name[ja]=プロセス失敗
Name[lt]=Procesas nepavyko
Name[mk]=ПроцесотНеУспеа
Name[mt]=ProċessFalla
Name[nb]=Prosess mislyktes
Name[nl]=Proces faalde
Name[nn]=Prosess mislukkast
Name[nso]=Tiragalo e Paletšwe
Name[pl]=Błąd procesu
Name[pt_BR]=Falha de Processo
Name[ro]=Proces eşuat
Name[ru]=Ошибка процесса
Name[sk]=Proces neúspešný
Name[sl]=Proces ni uspel
Name[sv]=Process misslyckades
Name[th]=โปรเซสล้มเหลว
Name[uk]=ПомилкаПроцесу
Name[ven]=Tshitenwa tsho bala
Name[xh]=Inkqubo Yahlulekile
Name[zh_CN]=处理失败
Name[zh_TW]=程序失敗
Name[zu]=UkwenzekaKuhlulekile
Comment=Could not call process to handle connection
Comment[af]=Kon nie roep proses na handvatsel verbinding
Comment[ar]=لم أستطع استحضار العملية لحمل المكالمة
Comment[bg]=Не мога да извикам процес за подръжка на страницата
Comment[bs]=Ne mogu pokrenuti proces koji upravlja konekcijom
Comment[ca]=No es pot cridar al procés per a manejar la connexió
Comment[cs]=Nelze spustit proces k obsluze spojení
Comment[da]=Kunne ikke kalde proces til at håndtere forbindelse
Comment[de]=Der Prozess zur Bearbeitung der Verbindungsanfrage wurde nicht gefunden
Comment[el]=Δεν ήταν δυνατή η κλήση της διεργασίας για τον έλεγχο της σύνδεσης
Comment[eo]=Ne eblis lanĉi instancon por prizorgi la konekton
Comment[es]=Imposible lanzar proceso para manejar conexión
Comment[et]=Ei suuda käivitada protsessi ühenduse käsitsemiseks
Comment[fi]=Ei voitu kutsua prosessia yhteyden hoitamiseksi
Comment[fr]=Impossible d'appeler le processus pour gérer la connexion
Comment[he]=אין אפשרות לקרוא לתהליך על מנת לטפל בחיבור
Comment[hr]=Nisam mogao pozvati proces za kontrolu veze
Comment[hu]=A kapcsolat kezelése nem sikerült
Comment[is]=Gat ekki kallað á forrit til að höndla tengingu
Comment[it]=Impossibile richiamare il processo per gestire la connessione
Comment[ja]=接続を扱うプロセスを呼び出せません
Comment[lt]=Negaliu iškviesti proceso prisijungimui apdoroti
Comment[mk]=Не може да повикам процес да ја превземе врската
Comment[mt]=Ma stajtx insejjaħ proċess biex jieħu ħsieb il-konnessjoni
Comment[nb]=Kunne ikke kalle en prosess for å håndtere tilknytningen
Comment[nl]=Het proces om de verbinding af te handelen kon niet worden aangeroepen
Comment[nn]=Klarte ikkje kalla prosess for sambandshandtering
Comment[nso]=Ebe ekase bitše tiragalo go swara kopantšho
Comment[pl]=Nie można było uruchomić procesu obsługi połączenia
Comment[pt]=Não foi possível chamar o processo de tratamento da ligação
Comment[pt_BR]=Não foi possível chamar o processo de controle da conexão
Comment[ru]=Не удается запустить процесс обработки соединения
Comment[sk]=Nemohol som zavolať proces pre spracovanie spojenia
Comment[sl]=Ni možno poklicati procesa za upravljanje s povezavo
Comment[sv]=Kunde inte anropa process för att hantera anslutning
Comment[th]=ไม่สามารถเรียกโปรเซสเพื่อรับการเชื่อมต่อได้
Comment[uk]=Неможливо викликати процес для обробки з'єднання
Comment[ven]=Ingasi vhidze tshitenwa uitela u fara vhukwamani
Comment[xh]=Ayikwazanga ukubiza inkqubo ezakuphatha uxhulumano
Comment[zh_CN]=无法调用进程处理连接
Comment[zh_TW]=無法呼叫處理連線的程序
Comment[zu]=Ayikwazanga ukubiza umsebenzi ukuzophatha ukuxhumanisa
default_presentation=4

File diff suppressed because it is too large Load Diff

View File

@@ -1,157 +1,91 @@
[Desktop Entry]
Encoding=UTF-8
Type=Service
X-KDE-ServiceTypes=KDEDModule
ServiceTypes=KDEDModule
X-KDE-ModuleType=Library
X-KDE-Library=kinetd
X-KDE-FactoryName=kinetd
X-KDE-Kded-autoload=true
Name=KDE Internet Daemon
Name[af]=Kde Internet Bediener
Name[ar]=كيدي إنترنت مراقب
Name[ast]=Degorriu d'Internet de KDE
Name[bg]=Интернет демон (KDE)
Name[bn]=কে-ডি-ই ইন্টারনেট ডিমন
Name[br]=Diaoul kenrouedad KDE
Name[bs]=KDE-ov Internet Demon
Name[ar]=مراقب انترنت كيدي
Name[bg]=KDE Демон на Интернет
Name[ca]=Dimoni d'Internet per al KDE
Name[ca@valencia]=Dimoni d'Internet per al KDE
Name[cs]=KDE Internet démon
Name[cy]=Daemon Rhyngrwyd KDE
Name[da]=KDE Internet-dæmon
Name[de]=Internet-Dienst
Name[el]=Δαίμονας διαδικτύου για το KDE
Name[en_GB]=KDE Internet Dæmon
Name[eo]=KDE interreta demono
Name[de]=KDE Internet-Dämon
Name[el]=Δαίμονας ίντερνετ για το KDE
Name[eo]=Retodemono
Name[es]=Demonio de Internet de KDE
Name[et]=KDE internetideemon
Name[eu]=KDEren interneteko daemona
Name[fa]=شبح اینترنتی KDE
Name[fi]=KDE:n Internet-palvelin
Name[fi]=KDE Internet palvelin
Name[fr]=Démon Internet de KDE
Name[ga]=Deamhan Idirlín KDE
Name[gl]=Daemon de internet de KDE
Name[he]=תהליך הרקע האינטרנטי של KDE
Name[hi]=केडीई इंटरनेट डेमन
Name[hne]=केडीई इंटरनेट डेमन
Name[hr]=KDE Internet Daemon
Name[he]=תהליך שירות האינטרנט של KDE
Name[hu]=KDE internetes szolgáltatás
Name[ia]=Demone Internet de KDE
Name[is]=KDE Internetþjónn
Name[it]=Demone Internet di KDE
Name[it]=Demone internet di KDE
Name[ja]=KDE インターネットデーモン
Name[kk]=KDE Интернет қызметі
Name[km]=ដេមិន​អ៊ីនធឺណិត​របស់ KDE
Name[ko]=KDE 인터넷 데몬
Name[lt]=KDE interneto tarnyba
Name[lv]=KDE Interneta dēmons
Name[mk]=Даемон за Интернет на KDE
Name[ml]=കെഡിഈ ഇന്റര്‍നെറ്റ് സഹായി
Name[ms]=Daemon Internet KDE
Name[lt]=KDE Interneto tarnyba
Name[mk]=KDE Интернет Демон
Name[mt]=Daemon tal-internet KDE
Name[nb]=KDEs Internett-nisse
Name[nds]=KDE-Internetdämoon
Name[ne]=केडीई इन्टरनेट डेइमोन
Name[nl]=KDE Internet Daemon
Name[nn]=KDE-Internett-teneste
Name[pa]=KDE ਇੰਟਰਨੈੱਟ ਡੈਮਨ
Name[pl]=Internet/sieć
Name[nn]=KDE-Internett-nisse
Name[nso]=Daemon ya Internet ya KDE
Name[pl]=Demon internetowy KDE
Name[pt]=Servidor de Internet do KDE
Name[pt_BR]=Servidor de Internet do KDE
Name[ro]=Demon de Internet KDE
Name[ru]=Доступ к Интернету
Name[se]=KDE-Interneahtta-duogášprográmma
Name[si]=KDE ජාල ඩීමනය
Name[pt_BR]=Servidor Internet do do KDE
Name[ro]=Demon internet KDE
Name[ru]=Интернет-демон KDE
Name[sk]=KDE Internet démon
Name[sl]=Internetni strežnik za KDE
Name[sq]=KDE Internet Daemon
Name[sr]=КДЕ‑ов интернет демон
Name[sr@ijekavian]=КДЕ‑ов интернет демон
Name[sr@ijekavianlatin]=KDEov internet demon
Name[sr@latin]=KDEov internet demon
Name[sv]=KDE:s Internetdemon
Name[ta]=கேடிஇ இணைய டேமொன்
Name[tg]=KDE Азозили Интернет
Name[th]=ดีมอนอินเทอร์เน็ตของ KDE
Name[th]=เดมอนอินเตอร์เน็ต KDE
Name[tr]=KDE İnternet Programı
Name[uk]=Фонова служба Інтернет KDE
Name[uz]=KDE Internet demoni
Name[uz@cyrillic]=KDE Интернет демони
Name[vi]=Trình nền Mạng KDE
Name[xh]=KDE Internet Daemon
Name[x-test]=xxKDE Internet Daemonxx
Name[uk]=Демон Інтернет KDE
Name[zh_CN]=KDE Internet 守护进程
Name[zh_HK]=KDE 互聯網系統程式
Name[zh_TW]=KDE Internet 伺服程式
Name[zu]=KDE Internet ye-Daemon
Comment=An Internet daemon that starts network services on demand
Comment[ar]=رقيب الإنترنت بدأ خدمة الشبكة على الرقيب
Comment[ast]=Un degorriu d'Internet qu'entama los servicios de rede baxo demanda
Comment[bg]=Интернет демон, който зарежда мрежови услуги при поискване
Comment[bn]=একটি ইন্টারনেট ডিমন যে চাহিদা ভিত্তিক নেটওয়ার্ক সার্ভিস আরম্ভ করে
Comment[bs]=Internet daemon koji pokreće mrežne servise po zahtijevu
Comment[ar]=مراقب انترنت يقوم ببدء خدمات الشبكة عند الطلب
Comment[bg]=Демон на Интернет който стартира мрежови обслужвания при поискване
Comment[bs]=Internet daemon koji pokreće mrežne servise po potrebi
Comment[ca]=Un dimoni d'Internet que arrenca els serveis de xarxa sota demanda
Comment[ca@valencia]=Un dimoni d'Internet que arrenca els serveis de xarxa sota demanda
Comment[cs]=Internetový démon spouštějící síťové služby na požádání
Comment[cy]=Daemon Rhyngrwyd sy'n cychwyn gwasanaethau rhwydwaith ar alw
Comment[da]=En internet-dæmon der starter netværkstjenester efter forespørgsel
Comment[de]=Startet Netzwerkdienste bei Bedarf
Comment[el]=Ένας δαίμονας για το διαδίκτυο ο οποίος ξεκινάει τις υπηρεσίες δικτύου όταν απαιτείται
Comment[en_GB]=An Internet dæmon that starts network services on demand
Comment[eo]=Interreta demono kiu lanĉas retajn servojn laŭ bezono
Comment[de]=Ein Internet-Dämon, der Netzwerkdienste bei Bedarf startet
Comment[el]=Ένας δαίμονας για το ίντερνετ ο οποίος ξεκινάει τις υπηρεσίες δικτύου βάση αίτησης
Comment[eo]=retdemono kiu lanĉas retajn servojn laŭ bezono
Comment[es]=Un demonio de Internet que inicia los servicios de red a demanda
Comment[et]=Internetideemon, mis käivitab nõudmisel võrguteenused
Comment[eu]=Sareko zerbitzuak eskatzean abiarazten dituen Interneteko daemona
Comment[fa]=یک شبح اینترنتی که خدمات شبکه را بر اساس تقاضا آغاز می‌کند
Comment[fi]=Internet-palvelin, joka käynnistää verkkopalveluita
Comment[fi]=Internet palvelin, joka käynnistää verkkopalveluita
Comment[fr]=Un démon Internet qui démarre le service réseau à la demande
Comment[ga]=Deamhan Idirlín a thosaíonn seirbhísí líonra ar éileamh
Comment[gl]=Un daemon de Internet que inicia servizos de rede baixo demanda
Comment[he]=תהליך רקע של אינטרנט שמתחיל שירותי רשת לפי דרישה
Comment[hi]=एक इंटरनेट डेमन जो मांग पर नेटवर्क सेवा प्रारंभ करता है
Comment[hne]=एक इंटरनेट डेमन जऊन मांग मं नेटवर्क सेवा चालू करथे
Comment[he]=תהליך שירות אינטרנט שמתחיל שירותי רשת לפי דרישה
Comment[hr]=Internet daemon koji pokreće mrežne usluge kada su zatražene
Comment[hu]=A hálózati szolgáltatások vezérlését biztosító program
Comment[ia]=Un demone internet que starta servicios de rete sur requesta
Comment[is]=Internetþjónn sem ræsir tengingar við Internetið eftir þörfum
Comment[it]=Un demone Internet che avvia i servizi di rete a richiesta
Comment[it]=Un demone internet che avvia i servizi di rete a richiesta
Comment[ja]=要求時にネットワークサービスを起動するインターネットデーモン
Comment[kk]=Талап етілгенде керек желі қызметтерді жегетін қызмет
Comment[km]=ដេមិន​អ៊ីនធឺណិត​ដែល​ចាប់ផ្ដើម​សេវា​បណ្ដាញ​នៅ​ពេល​ត្រូវការ
Comment[ko]=요청에 따라 네트워크 서비스를 시작하는 인터넷 데몬
Comment[lt]=Interneto tarnyba, paleidžianti tinklo tarnybas esant poreikiui
Comment[lv]=Interneta dēmons pēc vajadzības palaiž tīkla servisus
Comment[mk]=Даемон за Интернет кој ги вклучува мрежните сервиси на барање
Comment[ml]=ആവശ്യ‌പ്പെടുമ്പോള്‍ ശൃംഖലാസേവനം തുടങ്ങുന്ന ഒരു ഇന്റര്‍നെറ്റ് സഹായി
Comment[ms]=Daemon Internet yang memulakan servis jaringan di atas permintaan
Comment[mk]=Интернет демон кој стартува мрежни сервиси на побарување
Comment[mt]=Proċess tal-internet li jħaddem servizzi skond il-bżonn
Comment[nb]=Internett-nisse som starter nettverkstjenester ved behov
Comment[nds]=En Internet-Dämoon, wat Nettwarkdeensten op Anfraag start
Comment[ne]=एउटा इन्टरनेट डेइमोन जसले मागमा सञ्जाल सेवा सुरु गर्दछ
Comment[nl]=Een internetdaemon die netwerkdiensten op afroep start
Comment[nn]=Internett-teneste som startar nettverkstenester når dei trengst
Comment[pa]=ਇੱਕ ਇੰਟਰਨੈੱਟ ਡੈਮਨ, ਜੋ ਕਿ ਲੋੜ ਪੈਣ ਉੱਤੇ ਨੈੱਟਵਰਕ ਸਰਵਿਸਾਂ ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ।
Comment[pl]=Uruchamianie usług na żądanie
Comment[nl]=Een Internetdaemon die netwerkdiensten op afroep start
Comment[nn]=Internett-nisse som startar nettverkstenester når dei trengst
Comment[nso]=Daemon ya Internet yeo e thomišago ditirelo tša kgokagano ge e nyakilwe
Comment[pl]=Demon internetowy, który uruchamia na żądanie usługi sieciowe
Comment[pt]=Um servidor da Internet que inicia os serviços de rede a pedido
Comment[pt_BR]=Um servidor Internet que inicia os serviços de rede por demanda
Comment[ro]=Un demon de Internet ce pornește serviciile de rețea la cerere
Comment[ru]=Служба установления подключения при запросе сетевых ресурсов
Comment[se]=Interneahtta-duogášprográmma mii álggaha fierpmádatbálvalusaid go dárbbašuvvo
Comment[si]=ඉල්ලුම පරිදි ජාල සේවා ආරම්භ කරන අන්තර්ජාල ඩීමනය
Comment[sk]=Internetový démon, ktorý spúšťa sieťové služby na požiadanie
Comment[ro]=Un demone internet care porneşte serviciile de reţea la cerere
Comment[ru]=Сетевой демон, запускающий серверы по запросу из сети
Comment[sk]=Internetový démon ktorý spúšťa sieťové služby na požiadanie
Comment[sl]=Internetni strežnik, ki zažene omrežne storitve na zahtevo
Comment[sr]=Интернет демон који покреће мрежне сервисе по захтеву
Comment[sr@ijekavian]=Интернет демон који покреће мрежне сервисе по захтјеву
Comment[sr@ijekavianlatin]=Internet demon koji pokreće mrežne servise po zahtjevu
Comment[sr@latin]=Internet demon koji pokreće mrežne servise po zahtevu
Comment[sv]=Internetdemon som startar nätverkstjänster vid behov
Comment[ta]=ஒரு இணைய டேமொன், டேமொன் பிணைய சேவையை ஆரம்பிக்கிறது
Comment[tg]=Азозили шабакавие, ки хидматрасони шабакавиро бо дархост сар медиҳад
Comment[th]=ดมอนอินเทอร์เน็ตซึ่งจะเริ่มทำงานบริการเครือข่ายเมื่อมีความต้องการใช้
Comment[tr]=Başlangıçta ağ servisleri tarafından istenen Internet hayalet programı
Comment[uk]=Фонова служба Інтернет, що запускає служби мережі при запиті
Comment[uz]=Talab qilinganda tarmoq xizmatlarini ishga tushuruvchi Internet demoni
Comment[uz@cyrillic]=Талаб қилинганда тармоқ хизматларини ишга тушурувчи Интернет демони
Comment[vi]=Một trình nền Mạng mà chạy các dịch vụ mạng theo nhu cầu
Comment[th]=เดมอนอินเตอร์เน็ตซึ่งจะเริ่มทำงานบริการเครือข่ายเมื่อมีความต้องการ
Comment[uk]=Демон Інтернет, що запускає служби мережі при запиті
Comment[ven]=Internet daemon ine ya thoma tshumelo ya vhukwamani kha muthetho
Comment[xh]=Internet daemon eqala iinkonzo zomsebenzi wonatha xa zifunwa
Comment[x-test]=xxAn Internet daemon that starts network services on demandxx
Comment[zh_CN]=按需启动网络服务的守护进程
Comment[zh_HK]=自動依需求起動網絡服務的互聯網系統程式
Comment[zh_TW]=依要求起動網路服務的 Internet 伺服程式
Comment[zu]=I-Internet ye-daemon eqala ama-sevisi we-network adingekayo

View File

@@ -21,180 +21,163 @@
#include <kdedmodule.h>
#include <kservice.h>
#include <k3process.h>
#include <ksock.h>
#include <kprocess.h>
#include <qstringlist.h>
#include <qstring.h>
#include <qdatetime.h>
#include <qtimer.h>
#include <kserversocket.h>
#include <dnssd/publicservice.h>
#include <q3ptrlist.h>
#include "kserviceregistry.h"
class PortListener : public QObject
{
Q_OBJECT
class PortListener : public QObject {
Q_OBJECT
private:
bool m_valid;
QString m_serviceName;
QString m_serviceURL, m_serviceAttributes;
QStringList m_registeredServiceURLs;
QString m_dnssdName, m_dnssdType;
QMap<QString, QString> m_dnssdData;
int m_serviceLifetime;
int m_port;
int m_portBase, m_autoPortRange;
int m_defaultPortBase, m_defaultAutoPortRange;
bool m_multiInstance;
QString m_execPath;
QString m_argument;
bool m_enabled;
bool m_serviceRegistered, m_registerService;
bool m_dnssdRegister, m_dnssdRegistered;
QDateTime m_expirationTime;
QDateTime m_slpLifetimeEnd;
QString m_uuid;
bool m_valid;
QString m_serviceName;
QString m_serviceURL, m_serviceAttributes, m_registeredServiceURL;
int m_port;
int m_portBase, m_autoPortRange;
int m_defaultPortBase, m_defaultAutoPortRange;
bool m_multiInstance;
QString m_execPath;
QString m_argument;
bool m_enabled;
bool m_serviceRegistered, m_registerService;
QDateTime m_expirationTime;
KNetwork::KServerSocket *m_socket;
K3Process m_process;
KServerSocket *m_socket;
KProcess m_process;
KConfig *m_config;
KServiceRegistry *m_srvreg;
DNSSD::PublicService *m_dnssdreg;
KConfig *m_config;
KServiceRegistry *m_srvreg;
void freePort();
void loadConfig(KService::Ptr s);
void setEnabledInternal(bool e, const QDateTime &ex);
void dnssdRegister(bool enabled);
void setServiceRegistrationEnabledInternal(bool enabled);
void freePort();
void loadConfig(KService::Ptr s);
void setEnabledInternal(bool e, const QDateTime &ex);
void setServiceRegistrationEnabledInternal(bool enabled);
public:
PortListener(KService::Ptr s, KConfig *c, KServiceRegistry *srvreg);
~PortListener();
PortListener(KService::Ptr s, KConfig *c, KServiceRegistry *srvreg);
~PortListener();
bool acquirePort();
bool isValid();
QString name();
void setEnabled(bool enabled);
void setEnabled(const QDateTime &expiration);
void setServiceRegistrationEnabled(bool enabled);
bool isServiceRegistrationEnabled();
QDateTime expiration();
QDateTime serviceLifetimeEnd();
bool isEnabled();
int port();
QStringList processServiceTemplate(const QString &a);
bool setPort(int port = -1, int autoProbeRange = 1);
void refreshRegistration();
bool acquirePort();
bool isValid();
QString name();
void setEnabled(bool enabled);
void setEnabled(const QDateTime &expiration);
void setServiceRegistrationEnabled(bool enabled);
bool isServiceRegistrationEnabled();
QDateTime expiration();
bool isEnabled();
int port();
QString processServiceTemplate(const QString &a);
bool setPort(int port = -1, int autoProbeRange = 1);
private slots:
void accepted(KSocket *);
void accepted(KSocket*);
};
class KInetD : public KDEDModule
{
Q_OBJECT
class KInetD : public KDEDModule {
Q_OBJECT
K_DCOP
public slots:
/**
* Returns a list of all registered services in KInetd.
* To add a service you need to add a .desktop file with
* the servicetype "KInetDModule" into the services director
* (see kinetdmodule.desktop in servicetypes dir).
* @return a list with the names of all services
*/
QStringList services();
k_dcop:
/**
* Returns a list of all registered services in KInetd.
* To add a service you need to add a .desktop file with
* the servicetype "KInetDModule" into the services director
* (see kinetdmodule.desktop in servicetypes dir).
* @return a list with the names of all services
*/
QStringList services();
/**
* Returns true if the service exists and is available.
* @param service name of a service as specified in its .desktop file
* @return true if a service with the given name exists and is enabled
*/
bool isEnabled(QString service);
/**
* Returns true if the service exists and is available.
* @param service name of a service as specified in its .desktop file
* @return true if a service with the given name exists and is enabled
*/
bool isEnabled(QString service);
/**
* Enables or disabled the given service. Ignored if the given service
* does not exist.
* @param service name of a service as specified in its .desktop file
* @param enable true to enable, false to disable.
*/
void setEnabled(QString service, bool enable);
/**
* Enables or disabled the given service. Ignored if the given service
* does not exist.
* @param service name of a service as specified in its .desktop file
* @param enable true to enable, false to disable.
*/
void setEnabled(QString service, bool enable);
/**
* Enables the given service until the given time. Ignored if the given
* service does not exist.
* @param service name of a service as specified in its .desktop file
* @param expiration the time the service will be disabled at
*/
void setEnabled(QString service, QDateTime expiration);
/**
* Enables the given service until the given time. Ignored if the given
* service does not exist.
* @param service name of a service as specified in its .desktop file
* @param expiration the time the service will be disabled at
*/
void setEnabled(QString service, QDateTime expiration);
/**
* Returns the port of the service, or -1 if not listening.
* @param service name of a service as specified in its .desktop file
* @return the port or -1 if no port used or service does not exist
*/
int port(QString service);
/**
* Returns the port of the service, or -1 if not listening.
* @param service name of a service as specified in its .desktop file
* @return the port or -1 if no port used or service does not exist
*/
int port(QString service);
/**
* Sets the port of the service, and possibly a range of ports to try.
* It will return true if a port could be found. If it did not find one
* but is enabled it will start a timer that probes that port every 30s.
* @param service name of a service as specified in its .desktop file
* @param port the first port number to try or -1 to restore defaults
* @param autoPortRange the number of ports to try
* @return true if a port could be found or service is disabled, false
* otherwise.
*/
bool setPort(QString service, int port = -1, int autoPortRange = 1);
/**
* Sets the port of the service, and possibly a range of ports to try.
* It will return true if a port could be found. If it didnt find one but is
* enabled it will start a timer that probes that port every 30s.
* @param service name of a service as specified in its .desktop file
* @param port the first port number to try or -1 to restore defaults
* @param autoPortRange the number of ports to try
* @return true if a port could be found or service is disabled, false
* otherwise.
*/
bool setPort(QString service, int port = -1, int autoPortRange = 1);
/**
* Tests whether the given service is installed..
* @param service name of a service as specified in its .desktop file
* @return true if installed, false otherwise
*/
bool isInstalled(QString service);
/**
* Tests whether the given service is installed..
* @param service name of a service as specified in its .desktop file
* @return true if installed, false otherwise
*/
bool isInstalled(QString service);
/**
* Enables or disables the SLP registration. Ignored if the service does
* not have a service URL. If the service is disabled the service will
* registered as soon as it is enabled.
* @param service name of a service as specified in its .desktop file
* @param enable true to enable, false to disable.
*/
void setServiceRegistrationEnabled(QString service, bool enabled);
/**
* Enables or disables the SLP registration. Ignored if the service does
* not have a service URL. If the service is disabled the service will
* registered as soon as it is enabled.
* @param service name of a service as specified in its .desktop file
* @param enable true to enable, false to disable.
*/
void setServiceRegistrationEnabled(QString service, bool enabled);
/**
* Returns true if service registration for the given service is enabled.
* Note that this does not mean that the service is currently registered,
* because the service may be disabled.
* @param service name of a service as specified in its .desktop file
* @return true if service registration is enabled
*/
bool isServiceRegistrationEnabled(QString service);
/**
* Returns true if service registration for the given service is enabled.
* Note that this does not mean that the service is currently registered,
* because the service may be disabled.
* @param service name of a service as specified in its .desktop file
* @return true if service registration is enabled
*/
bool isServiceRegistrationEnabled(QString service);
private:
QDateTime getNextExpirationTime();
void setPortRetryTimer(bool retry);
void setReregistrationTimer();
private:
QDateTime getNextExpirationTime();
void setPortRetryTimer(bool retry);
KConfig *m_config;
KServiceRegistry *m_srvreg;
Q3PtrList<PortListener> m_portListeners;
QTimer m_expirationTimer;
QTimer m_portRetryTimer;
QTimer m_reregistrationTimer;
KConfig *m_config;
KServiceRegistry *m_srvreg;
QPtrList<PortListener> m_portListeners;
QTimer m_expirationTimer;
QTimer m_portRetryTimer;
private slots:
void setExpirationTimer();
void expirationTimer();
void portRetryTimer();
void reregistrationTimer();
private slots:
void setExpirationTimer();
void portRetryTimer();
public:
KInetD(QObject *parent, const QList<QVariant>&);
virtual ~KInetD();
void loadServiceList();
PortListener *getListenerByName(QString name);
public:
KInetD(QCString &n);
virtual ~KInetD();
void loadServiceList();
PortListener *getListenerByName(QString name);
};

View File

@@ -1,344 +0,0 @@
[Global]
IconName=kinetd
Comment=KInetD
Comment[ar]=KInetD
Comment[ast]=KInetD
Comment[bg]=KInetD
Comment[bn]=কে-আইনেট-ডি
Comment[br]=KInetD
Comment[bs]=KInetD
Comment[ca]=KInetD
Comment[ca@valencia]=KInetD
Comment[cs]=KInetD
Comment[cy]=KInetD
Comment[da]=KInetD
Comment[de]=KInetD
Comment[el]=KInetD
Comment[en_GB]=KInetD
Comment[eo]=KInetD
Comment[es]=KInetD
Comment[et]=KInetD
Comment[eu]=KInetD
Comment[fi]=KInetD
Comment[fr]=KInetD
Comment[ga]=KInetD
Comment[gl]=KInetD
Comment[he]=KInetD
Comment[hi]=के-इनिट-डी
Comment[hne]=के-इनिट-डी
Comment[hr]=KInetD
Comment[hu]=KInetD
Comment[ia]=KInetD
Comment[is]=KInetD
Comment[it]=KInetD
Comment[ja]=KInetD
Comment[kk]=KInetD
Comment[km]=KInetD
Comment[ko]=KInetD
Comment[lt]=KInetD
Comment[lv]=KInetD
Comment[mk]=KInetD
Comment[ml]=കെഐനെറ്റ്ഡി
Comment[ms]=KInetD
Comment[nb]=KInetD
Comment[nds]=KInetD
Comment[nl]=KInetD
Comment[nn]=KInetD
Comment[pa]=KInetD
Comment[pl]=KInetD
Comment[pt]=KInetD
Comment[pt_BR]=KInetD
Comment[ro]=KInetD
Comment[ru]=KInetD
Comment[si]=KInetD
Comment[sk]=KInetD
Comment[sl]=KInetD
Comment[sq]=KInetD
Comment[sr]=КинетД
Comment[sr@ijekavian]=КинетД
Comment[sr@ijekavianlatin]=KInetD
Comment[sr@latin]=KInetD
Comment[sv]=Kinetd
Comment[ta]=KInetD
Comment[tg]=KInetD
Comment[tr]=KInetD
Comment[uk]=KInetD
Comment[wa]=KInetD
Comment[xh]=KInetD
Comment[x-test]=xxKInetDxx
Comment[zh_CN]=KInetD
Comment[zh_HK]=KInetD
Comment[zh_TW]=KInetD
[Event/IncomingConnection]
Name=IncomingConnection
Name[ar]=اتصال وارد
Name[ast]=Conexón entrante
Name[bg]=Входяща връзка
Name[bn]=অন্তর্মুখী সংযোগ
Name[br]=Kevreadenn resev
Name[bs]=Dolazna veza
Name[ca]=Connexió entrant
Name[ca@valencia]=Connexió entrant
Name[cs]=Příchozí spojení
Name[cy]=CysylltiadCyrraedd
Name[da]=IndkommendeForbindelse
Name[de]=Eingehende Verbindung
Name[el]=Εισερχόμενη σύνδεση
Name[en_GB]=IncomingConnection
Name[eo]=Envenanta konekto
Name[es]=Conexión entrante
Name[et]=Sissetulev ühendus
Name[eu]=Sarrerako konexioa
Name[fi]=Saapuva yhteys
Name[fr]=Connexion entrante
Name[ga]=Ceangal Isteach
Name[gl]=Conexión entrante
Name[he]=חיבור נכנס
Name[hi]=आवक-कनेक्शन
Name[hne]=आवक-कनेक्सन
Name[hr]=DolaznaVeza
Name[hu]=Bejövő kapcsolat
Name[ia]=Connexion in arrivata
Name[is]=IncomingConnection
Name[it]=Connessioni in entrata
Name[ja]=外部からの接続
Name[kk]=Кіріс қосылым
Name[km]=ការ​តភ្ជាប់​ចូល
Name[ko]=IncomingConnection
Name[lt]=Gautas kvietimas ryšiui
Name[lv]=IenākošaisSavienojums
Name[mk]=Дојдовно поврзување
Name[ml]=ആഗമനബന്ധം
Name[ms]=Sambungan Masuk
Name[nb]=Innkommende tilkobling
Name[nds]=RinkamenVerbinnen
Name[nl]=Inkomende_verbinding
Name[nn]=Innkommande tilkopling
Name[pa]=ਆ ਰਹੇ ਕੁਨੈਕਸ਼ਨ
Name[pl]=Połączenia przychodzące
Name[pt]=IncomingConnection
Name[pt_BR]=Conexões de entrada
Name[ro]=ConexiuneDeIntrare
Name[ru]=Входящее соединение
Name[si]=පැමිණෙන සබැඳිය
Name[sk]=Prichádzajúce pripojenie
Name[sl]=Prejeta povezava
Name[sr]=Долазна веза
Name[sr@ijekavian]=Долазна веза
Name[sr@ijekavianlatin]=Dolazna veza
Name[sr@latin]=Dolazna veza
Name[sv]=Inkommande anslutning
Name[ta]=உள்வரும் இணைப்புகள்
Name[tg]=Пайвастшавии Воридшаванда
Name[th]=มีการเชื่อมต่อเข้ามา
Name[tr]=Gelen Bağlantı
Name[uk]=IncomingConnection
Name[xh]=Uxhumaniso Olungenayo
Name[x-test]=xxIncomingConnectionxx
Name[zh_CN]=进入的连接
Name[zh_HK]=進入連線
Name[zh_TW]=進來的連線
Comment=Received incoming connection
Comment[af]=Ontvang inkomende verbinding
Comment[ar]=تلقي اتصال وارد
Comment[ast]=Recibida conexón entrante
Comment[bg]=Получана е входяща връзка
Comment[bn]=অন্তর্মুখী সংযোগ গ্রহণ করল
Comment[bs]=Primljena dolazeća veza
Comment[ca]=Rebuda connexió entrant
Comment[ca@valencia]=Rebuda connexió entrant
Comment[cs]=Obdrženo příchozí spojení
Comment[cy]=Derbynwyd cysylltiad a gyrhaeddodd
Comment[da]=Modtog indkommende forbindelse
Comment[de]=Verbindungsanfrage eingegangen
Comment[el]=Λήφθηκε μια εισερχόμενη σύνδεση
Comment[en_GB]=Received incoming connection
Comment[eo]=Ricevis envenantan konekton
Comment[es]=Recibida conexión entrante
Comment[et]=Saadi sissetulev ühendus
Comment[eu]=Sarrerako konexio bat jaso da
Comment[fi]=Vastaanotettiin saapuva yhteys
Comment[fr]=Reçu une connexion entrante
Comment[ga]=Fuarthas ceangal isteach
Comment[gl]=Recibiuse unha conexión entrante
Comment[he]=נתקבל חיבור נכנס
Comment[hi]=आवक कनेक्शन प्राप्त
Comment[hne]=आवक कनेक्सन प्राप्त
Comment[hr]=Primio dolaznu vezu
Comment[hu]=Csatlakozási kérés érkezett
Comment[ia]=Connexion in arrivata recipite
Comment[is]=Tók á móti uppkalli
Comment[it]=Ricevuta connessione in entrata
Comment[ja]=外部からの接続がありました
Comment[kk]=Кіріс қосылым ұсынылды
Comment[km]=បាន​ទទួល​ការ​តភ្ជាប់​ចូល
Comment[ko]=들어오는 연결을 받았습니다
Comment[lt]=Gautas kvietimas ryšiui
Comment[lv]=Saņemts ienākošs savienojums
Comment[mk]=Примено е дојдовно поврзување
Comment[ml]=ആഗമനബന്ധം ലഭിച്ചു
Comment[ms]=Menerima sambungan masuk
Comment[nb]=Mottok innkommende tilkobling
Comment[nds]=Tokoppelanfraag kregen
Comment[nl]=Inkomende verbinding ontvangen
Comment[nn]=Fekk ei innkommande tilkopling
Comment[pa]=ਮਿਲੇ ਆ ਰਹੇ ਕੁਨੈਕਸ਼ਨ
Comment[pl]=Otrzymano połączenie przychodzące
Comment[pt]=Foi recebida uma ligação
Comment[pt_BR]=Recebendo conexão de entrada
Comment[ro]=Conexiune de intrare recepționată
Comment[ru]=Входящее соединение завершилось успешно
Comment[si]=ලැබුනු පැමිණෙන සබැඳිය
Comment[sk]=Prijaté prichádzajúce pripojenie
Comment[sl]=Prejeta je prihajajoča povezava
Comment[sr]=Примљена је долазна веза
Comment[sr@ijekavian]=Примљена је долазна веза
Comment[sr@ijekavianlatin]=Primljena je dolazna veza
Comment[sr@latin]=Primljena je dolazna veza
Comment[sv]=Tar emot inkommande anslutning
Comment[tg]=Пайвастшавии воридшаванда қабул гардид
Comment[th]=ได้รับการเชื่อมต่อเข้ามา
Comment[tr]=Gelen bağlantı alınıyor
Comment[uk]=Отримано вхідне з’єднання
Comment[xh]=Uxhulumano olungenayo olufunyenweyo
Comment[x-test]=xxReceived incoming connectionxx
Comment[zh_CN]=收到进入的连接
Comment[zh_HK]=已接收的進入連線
Comment[zh_TW]=接收到進來的連線
Action=None
[Event/ProcessFailed]
Name=ProcessFailed
Name[ar]=فشلت العملية
Name[ast]=Procesu fallíu
Name[bn]=প্রসেস ব্যর্থ
Name[bs]=Neuspio proces
Name[ca]=Procés erroni
Name[ca@valencia]=Procés erroni
Name[cs]=Proces selhal
Name[cy]=MethoddProses
Name[da]=ProcesMislykkedes
Name[de]=Prozess fehlgeschlagen
Name[el]=Η διεργασία απέτυχε
Name[en_GB]=ProcessFailed
Name[eo]=Procezo fiaskis
Name[es]=Proceso fallido
Name[et]=Protsess nurjus
Name[eu]=Prozesuak huts egin du
Name[fi]=Prosessi epäonnistui
Name[fr]=Échec du processus
Name[ga]=PróiseasTeipthe
Name[gl]=Fallou o proceso
Name[he]=תהליך נכשל
Name[hi]=प्रक्रिया-असफल
Name[hne]=काम-फेल
Name[hr]=ProcesNeuspješan
Name[hu]=Hibás folyamat
Name[ia]=Processo falleva
Name[is]=ProcessFailed
Name[it]=Processo non riuscito
Name[ja]=プロセス失敗
Name[kk]=Процес жаңылысы
Name[km]=ដំណើរ​ការ​បាន​បរាជ័យ
Name[ko]=ProcessFailed
Name[lt]=Procesas nepavyko
Name[lv]=ProcessNeveiksmīgs
Name[mk]=Процесот не успеа
Name[ml]=പ്രക്രിയ പരാജയപ്പെട്ടു
Name[ms]=Proses Gagal
Name[nb]=Prosessen mislyktes
Name[nds]=PerzessFehlslaan
Name[nl]=Proces_mislukt
Name[nn]=Prosessen feila
Name[pa]=ਪਰੋਸੈਸ ਫੇਲ੍ਹ
Name[pl]=Błąd procesu
Name[pt]=ProcessFailed
Name[pt_BR]=Falha de processo
Name[ro]=ProcesEșuat
Name[ru]=Ошибка процесса
Name[si]=සැකසුම අසාර්ථකයි
Name[sk]=Proces zlyhal
Name[sl]=Proces ni uspel
Name[sr]=Процес није успео
Name[sr@ijekavian]=Процес није успио
Name[sr@ijekavianlatin]=Proces nije uspio
Name[sr@latin]=Proces nije uspeo
Name[sv]=Process misslyckades
Name[ta]=செயல் தோல்வியுற்றது
Name[tg]=Ҷараён бо Нокомӣ анҷомид
Name[th]=โพรเซสล้มเหลว
Name[tr]=Başarısız İşlemler
Name[uk]=ProcessFailed
Name[xh]=Inkqubo Yahlulekile
Name[x-test]=xxProcessFailedxx
Name[zh_CN]=处理失败
Name[zh_HK]=程序失敗
Name[zh_TW]=行程失敗
Comment=Could not call process to handle connection
Comment[af]=Kon nie roep proses na handvatsel verbinding
Comment[ar]= لا يمكن نداء الإجراء إلى مؤشر الاتصال
Comment[ast]=Nun puede llamase a un procesu pa remanar la conexón
Comment[bn]=সংযোগ পরিচালনা করতে প্রসেস শুরু করতে পারল না
Comment[bs]=Nisam mogao da pozovem proces da opsluži vezu
Comment[ca]=No es pot cridar al procés per a manejar la connexió
Comment[ca@valencia]=No es pot cridar al procés per a manejar la connexió
Comment[cs]=Nelze spustit proces k obsluze spojení
Comment[cy]=Methu galw proses i drin y cysylltiad
Comment[da]=Kunne ikke kalde proces til at håndtere forbindelse
Comment[de]=Der Prozess zur Bearbeitung der Verbindungsanfrage kann nicht gestartet werden
Comment[el]=Αδύνατη η κλήση της διεργασίας για τη διαχείριση της σύνδεσης
Comment[en_GB]=Could not call process to handle connection
Comment[eo]=Ne eblis lanĉi la procezon por trakti la konekton
Comment[es]=No se puede llamar un proceso para manejar la conexión
Comment[et]=Ei suuda käivitada protsessi ühenduse käsitsemiseks
Comment[eu]=Ezin izan da konexioa kudeatzeko prozesua deitu
Comment[fi]=Ei voitu kutsua prosessia yhteyden hoitamiseksi
Comment[fr]=Impossible d'appeler le processus pour gérer la connexion
Comment[ga]=Níorbh fhéidir próiseas a thosú chun an ceangal a láimhseáil
Comment[gl]=Non foi posíbel chamar ao proceso que xestiona a conexión
Comment[he]=אין אפשרות לקרוא לתהליך על מנת לטפל בחיבור
Comment[hi]=कनेक्शन हैंडल करने के लिए प्रक्रिया काल नहीं कर सका
Comment[hne]=कनेक्सन हेंडल करे बर काम काल नइ कर सकिस
Comment[hr]=Nisam mogao pozvati proces za kontrolu veze
Comment[hu]=A kapcsolat kezelése nem sikerült
Comment[ia]=Il non pote appellar processo pro manear connexion
Comment[is]=Gat ekki kallað á forrit til að höndla tengingu
Comment[it]=Impossibile richiamare il processo per gestire la connessione
Comment[ja]=接続を扱うプロセスを呼び出せません
Comment[kk]=Қосылыммен айналысатын процесс шақырылмады
Comment[km]=មិន​អាច​ហៅ​ដំណើរ​ការ ដើម្បី​ដោះស្រាយ​ការ​ត​ភ្ជាប់​បាន​ឡើយ
Comment[ko]=연결을 처리하기 위한 프로세스를 부를 수 없습니다
Comment[lt]=Nepavyko iškviesti proceso apdoroti prisijungimui
Comment[lv]=Neizdevās izsaukt procesu savienojuma apstrādei
Comment[mk]=Не може да се повика процесот за ракување со поврзувањето
Comment[ml]=ബന്ധം കൈകാര്യം ചെയ്യാന്‍ പ്രക്രിയയെ വിളിക്കാന്‍ കഴിഞ്ഞില്ല
Comment[ms]=Tidak dapat memanggil proses untuk mengendalikan sambungan
Comment[nb]=Klarte ikke kalle på prosess for å håndtere tilkobling
Comment[nds]=Perzess för't Verarbeiden vun Tokoppelanfragen lett sik nich opropen
Comment[nl]=Kon geen proces aanroepen om de verbinding af te handelen
Comment[nn]=Klarte ikkje kalla på prosessen som skulle handtera tilkoplinga
Comment[pl]=Nie można było uruchomić procesu obsługi połączenia
Comment[pt]=Não foi possível invocar o processo para lidar com as ligações
Comment[pt_BR]=Não foi possível chamar o processo de controle da conexão
Comment[ro]=Procesul ce manipulează conexiunea nu a putut fi apelat
Comment[ru]=Не удаётся запустить процесс обработки соединения
Comment[si]=සබඳතාව හැසිරවීම සඳහා සැකසීම නොකැඳවන්න
Comment[sk]=Nepodarilo sa spustiť proces na spracovanie pripojenia
Comment[sl]=Ni možno poklicati procesa za upravljanje s povezavo
Comment[sr]=Нисам могао да позовем процес да опслужи везу
Comment[sr@ijekavian]=Нисам могао да позовем процес да опслужи везу
Comment[sr@ijekavianlatin]=Nisam mogao da pozovem proces da opsluži vezu
Comment[sr@latin]=Nisam mogao da pozovem proces da opsluži vezu
Comment[sv]=Kunde inte anropa process för att hantera anslutning
Comment[ta]=இணைப்பை கையாள செயற்பாட்டை அழைக்க முடியவில்லை
Comment[tg]=Барои даскории пайвастшавӣ ҷараён бозхонда нашуд
Comment[th]=ไม่สามารถเรียกโพรเซสเพื่อจัดการรับการเชื่อมต่อได้
Comment[tr]=Elle bağlantıda başarısız çağrı işlemleri
Comment[uk]=Не вдалося викликати процес для з’єднання
Comment[xh]=Ayikwazanga ukubiza inkqubo ezakuphatha uxhulumano
Comment[x-test]=xxCould not call process to handle connectionxx
Comment[zh_CN]=无法调用进程处理连接
Comment[zh_HK]=無法呼叫處理連線的程序
Comment[zh_TW]=無法呼叫行程來處理此連線
Action=None

View File

@@ -4,76 +4,47 @@
Type=ServiceType
X-KDE-ServiceType=KInetDModule
Name=KInetD Module Type
Name[ar]=KInetD نوع الوحدة
Name[ast]=Triba de módulu KInetD
Name[bg]=Модул на KInetD
Name[bn]=কে-আইনেট-ডি মডিউল ধরন
Name[br]=Seurt ar mollad KInetD
Name[bs]=Vrsta modula KInetD-a
Name[ar]=KInetD نوع وحدة
Name[bg]=KInetD Тип на Модул
Name[bs]=KInetD tip modula
Name[ca]=Tipus de mòdul del KInetD
Name[ca@valencia]=Tipus de mòdul del KInetD
Name[cs]=Typ modulu KInetD
Name[cy]=Math Modiwl KInetD
Name[da]=KInetD-modultype
Name[de]=KInetD-Modultyp
Name[de]=KInetD Modultyp
Name[el]=Τύπος αρθρώματος KInetD
Name[en_GB]=KInetD Module Type
Name[eo]=KInetD modulotipo
Name[eo]=KInetD-modulotipo
Name[es]=Tipo de módulo KInetD
Name[et]=KInetD mooduli tüüp
Name[eu]=KInetD modulu mota
Name[fa]=نوع پیمانه KInetD
Name[fi]=KInetD-moduulityyppi
Name[fi]=KInetD modulityyppi
Name[fr]=Type de module de KInetD
Name[ga]=Cineál Modúil KInetD
Name[gl]=Tipo de módulo KInetD
Name[he]=סוג מודול של KInetD
Name[hi]=के-इनिट-डी मॉड्यूल प्रकार
Name[hne]=के-इनिट-डी माड्यूल किसम
Name[hr]=Tip KInetD Modula
Name[hu]=KInetD modultípus
Name[ia]=Typo de modulo KInetD
Name[is]=KInetD Module tegund
Name[it]=Tipo di modulo KInetD
Name[it]=Tipo modulo KInetD
Name[ja]=KInetD モジュールタイプ
Name[kk]=KInetD модулі
Name[km]=ប្រភេទ​ម៉ូលឌុល KInetD
Name[ko]=KInetD 모듈 종류
Name[lt]=KInetD modulio tipas
Name[lv]=KInetD moduļa tips
Name[mk]=Тип на модул за KInetD
Name[ml]=കെഐനെറ്റ് ഘടക രീതി
Name[ms]=Jenis Modul KInetD
Name[mk]=KInetD Тип на Модул
Name[mt]=Tip ta' modulu KInetD
Name[nb]=KInetd-programtillegstype
Name[nds]=KInetD-Moduultyp
Name[ne]=KInetD मोड्युल प्रकार
Name[nl]=KInetD-moduletype
Name[nn]=KInetD-programtilleggstype
Name[pa]=KInetD ਮੋਡੀਊਲ ਟਾਈਪ
Name[nso]=Mohuta wa Seripa sa KInetD
Name[pl]=Typ modułu KInetD
Name[pt]=Tipo de Módulo do KInetD
Name[pt_BR]=Módulo KInetD
Name[ro]=Tip modul KInetD
Name[ru]=Модуль KInetD
Name[se]=KInetD-moduvlašládja
Name[si]=KInetD මොඩියුල වර්‍ගය
Name[sk]=Typ modulu KInetD
Name[sl]=Vrsta modula KInetD
Name[sr]=Врста модула КинетД‑а
Name[sr@ijekavian]=Врста модула КинетД‑а
Name[sr@ijekavianlatin]=Vrsta modula KInetDa
Name[sr@latin]=Vrsta modula KInetDa
Name[sv]=Kinetd-modultyp
Name[ta]=KInetD கூறு வகை
Name[tg]=Навъи Модули KInetD
Name[tr]=KInetD Modül Türü
Name[tr]=KDED Modül Türü
Name[uk]=Тип модулю KinetD
Name[vi]=Kiểu môđun KInetD
Name[ven]=Lushaka lwa Modulu ya KInetD
Name[xh]=Udidi Lomqongo womlinganiselo we KInetD
Name[x-test]=xxKInetD Module Typexx
Name[zh_CN]=KInetD 模块类型
Name[zh_HK]=KInetD 模組類型
Name[zh_TW]=KInetD 模組類型
Name[zu]=KInetD Uhlobo Lokwenza
# id to manipulate the service
[PropertyDef::X-KDE-KINETD-id]
@@ -102,15 +73,12 @@ Type=QString
[PropertyDef::X-KDE-KINETD-multiInstance]
Type=bool
# if set, kinetd will register the given URL at the local SLP SA while
# the port is open. It will register one URL for each IP address of the
# host.
# The following strings will be substituted:
# if set, kinetd will register the given URL at the local SLP SA while
# the port is open. The following strings will be substituted:
# %h with the local IP address
# %p with the port number
# %u with the user's login name
# %f with the user's full name
# %i with a UUID thats identical in all URLs of this service
[PropertyDef::X-KDE-KINETD-serviceURL]
Type=QString
@@ -120,35 +88,6 @@ Type=QString
# %p with the port number
# %u with the user's login name
# %f with the user's full name
# %i with a UUID thats identical in all URLs of this service
[PropertyDef::X-KDE-KINETD-serviceAttributes]
Type=QString
# the lifetime of a service in seconds. kinets will renew the service
# automatically. Max 65535, never use anything under 2 min. Something like
# 5-20 minutes is a sane value for most desktop applications.
[PropertyDef::X-KDE-KINETD-serviceLifetime]
Type=int
# if set, kinetd will announce service with given name on local network while
# the port is open.
# The following strings will be substituted:
# %h with the local IP address
# %f with the user's full name
# %p with the port number
[PropertyDef::X-KDE-KINETD-DNSSD-Name]
Type=QString
# if kinetd announces service on network using DNS-SD, this string will be used as service
# type. It must be in form _yourservice._udp or _yourservice._tcp
# it uses the same substitution rules as X-KDE-KINETD-DNSSD-Name
[PropertyDef::X-KDE-KINETD-DNSSD-Type]
Type=QString
# defines list of text properties for service announced via DNS-SD
# it uses the same substitution rules as X-KDE-KINETD-DNSSD-Name
[PropertyDef::X-KDE-KINETD-DNSSD-Properties]
Type=QStringList

View File

@@ -1,144 +0,0 @@
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config-krfb.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/config-krfb.h
)
#####################################
# First target: libkrfbprivate - a library
# for linking plugins against.
set (krfbprivate_SRCS
framebuffer.cpp
framebufferplugin.cpp
)
kde4_add_library (krfbprivate
SHARED
${krfbprivate_SRCS}
)
target_link_libraries (krfbprivate
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
${X11_X11_LIB}
)
set_target_properties (krfbprivate PROPERTIES
VERSION ${GENERIC_LIB_VERSION}
SOVERSION ${GENERIC_LIB_VERSION}
)
install (TARGETS krfbprivate
${INSTALL_TARGETS_DEFAULT_ARGS}
LIBRARY NAMELINK_SKIP
)
install (FILES
krfb-framebuffer.desktop
DESTINATION ${SERVICETYPES_INSTALL_DIR}
)
#####################################
# Second target: krfb - the app
# itself.
if(BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
add_definitions(-DKRFB_WITH_TELEPATHY_TUBES)
include_directories(${TELEPATHY_QT4_INCLUDE_DIR})
endif(BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
set (krfb_SRCS
connectiondialog.cpp
events.cpp
framebuffermanager.cpp
invitation.cpp
invitedialog.cpp
invitationmanager.cpp
main.cpp
manageinvitationsdialog.cpp
personalinvitedialog.cpp
sockethelpers.cpp
trayicon.cpp
rfbservermanager.cpp
rfbserver.cpp
rfbclient.cpp
invitationsrfbserver.cpp
invitationsrfbclient.cpp
)
if (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
set (krfb_SRCS
${krfb_SRCS}
tubesrfbserver.cpp
tubesrfbclient.cpp
tubesclienthandler.cpp
)
endif (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
kde4_add_kcfg_files (krfb_SRCS
krfbconfig.kcfgc
)
kde4_add_ui_files (krfb_SRCS
ui/configtcp.ui
ui/configsecurity.ui
ui/connectionwidget.ui
ui/invitewidget.ui
ui/manageinvitations.ui
ui/personalinvitewidget.ui
)
if (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
kde4_add_ui_files(krfb_SRCS ui/tubesconnectionwidget.ui)
endif(BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
kde4_add_executable (krfb
${krfb_SRCS}
)
target_link_libraries (krfb
krfbprivate
vncserver
${JPEG_LIBRARIES}
${X11_Xext_LIB}
${X11_X11_LIB}
${X11_Xdamage_LIB}
${QT_QTNETWORK_LIBRARY}
${KDE4_KDNSSD_LIBS}
${KDE4_KDEUI_LIBS}
)
if (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
target_link_libraries(krfb
${TELEPATHY_QT4_LIBRARIES}
)
endif (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
if (X11_XTest_FOUND)
target_link_libraries (krfb
${X11_XTest_LIB}
)
endif (X11_XTest_FOUND)
install (TARGETS krfb
${INSTALL_TARGETS_DEFAULT_ARGS}
)
if (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
configure_file(org.freedesktop.Telepathy.Client.krfb_rfb_handler.service.in
org.freedesktop.Telepathy.Client.krfb_rfb_handler.service)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Telepathy.Client.krfb_rfb_handler.service
DESTINATION ${DBUS_SERVICES_INSTALL_DIR})
install(FILES krfb_rfb_handler.client DESTINATION ${CMAKE_INSTALL_PREFIX}/share/telepathy/clients/)
endif (BUILD_EXPERIMENTAL_TUBES_SUPPORT AND TELEPATHY_QT4_FOUND)
########### install files ###############
install (PROGRAMS krfb.desktop
DESTINATION ${XDG_APPS_INSTALL_DIR}
)
install (FILES krfb.notifyrc
DESTINATION ${DATA_INSTALL_DIR}/krfb
)

38
krfb/Makefile.am Normal file
View File

@@ -0,0 +1,38 @@
KDE_CXXFLAGS = $(USE_THREADS)
METASOURCES = AUTO
noinst_LTLIBRARIES = libkrfbconfig.la
libkrfbconfig_la_SOURCES = configuration.cc manageinvitations.ui \
personalinvitation.ui invite.ui invitation.cc
libkrfbconfig_la_LIBADD = ../srvloc/libsrvloc.la $(LIB_KDEUI)
bin_PROGRAMS = krfb
krfb_SOURCES = rfbcontroller.cc xupdatescanner.cc main.cpp \
newconnectiondialog.ui krfbifaceimpl.cc krfbiface.skel \
trayicon.cpp
krfb_LDADD = libkrfbconfig.la ../libvncserver/libvncserver.la ../srvloc/libsrvloc.la -lXtst $(LIB_KDEUI) $(LIBJPEG)
krfb_LDFLAGS = $(all_libraries) $(KDE_RPATH)
noinst_HEADER = configuration.h invitation.h invite.h krfbiface.h \
krfbifaceimpl.h rfbcontroller.h trayicon.h xupdatescanner.h
datadir = $(kde_datadir)/krfb/pics
data_DATA = eyes-open24.png eyes-closed24.png connection-side-image.png
kde_services_DATA = kinetd_krfb.desktop
lnkdir = $(kde_appsdir)/System
lnk_DATA = krfb.desktop
appdir = $(kde_datadir)/krfb
app_DATA = eventsrc
KDE_ICON = krfb
INCLUDES= -I$(top_srcdir)/krfb/libvncserver -I$(top_srcdir)/krfb/srvloc \
$(all_includes)
messages: rc.cpp
$(XGETTEXT) rc.cpp *.cpp *.cc -o $(podir)/krfb.pot

View File

@@ -1,3 +0,0 @@
#! /bin/sh
$EXTRACTRC ui/*.ui *.kcfg >> rc.cpp
$XGETTEXT *.cpp -o $podir/krfb.pot

View File

@@ -1,11 +0,0 @@
/* Define to 1 if you have the `getifaddrs' function. */
#cmakedefine HAVE_GETIFADDRS 1
/* Define if SLP is available */
#cmakedefine HAVE_SLP 1
/* Define if XDamage is available */
#cmakedefine HAVE_XDAMAGE 1
/* Define if XShm is available */
#cmakedefine HAVE_XSHM 1

483
krfb/configuration.cc Normal file
View File

@@ -0,0 +1,483 @@
/***************************************************************************
configuration.cpp
-------------------
begin : Tue Dec 11 2001
copyright : (C) 2001-2002 by Tim Jansen
email : tim@tjansen.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "configuration.h"
#include "kinetaddr.h"
#include <kglobal.h>
#include <klocale.h>
#include <kapplication.h>
#include <kmessagebox.h>
#include <kprocess.h>
#include <qdatastream.h>
#include <dcopclient.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qcheckbox.h>
ManageInvitationsDialog2::ManageInvitationsDialog2() :
ManageInvitationsDialog(0, 0, false, WShowModal)
{ }
void ManageInvitationsDialog2::closeEvent(QCloseEvent *)
{ emit closed(); }
InvitationDialog2::InvitationDialog2() :
InvitationDialog(0, 0, false, WShowModal)
{ }
void InvitationDialog2::closeEvent(QCloseEvent *)
{ emit closed(); }
PersonalInvitationDialog2::PersonalInvitationDialog2() :
PersonalInvitationDialog(0, 0, false, WShowModal)
{ }
void PersonalInvitationDialog2::closeEvent(QCloseEvent *)
{ emit closed(); }
Configuration::Configuration(krfb_mode mode) :
m_mode(mode),
portNum(-1)
{
loadFromKConfig();
saveToDialogs();
doKinetdConf();
connect(invMngDlg.closeButton, SIGNAL(clicked()), SLOT(invMngDlgClosed()));
connect(&invMngDlg, SIGNAL(closed()), SLOT(invMngDlgClosed()));
connect(invMngDlg.newPersonalInvitationButton, SIGNAL(clicked()),
SLOT(showPersonalInvitationDialog()));
connect(invMngDlg.newEmailInvitationButton, SIGNAL(clicked()), SLOT(inviteEmail()));
connect(invMngDlg.deleteOneButton, SIGNAL(clicked()), SLOT(invMngDlgDeleteOnePressed()));
connect(invMngDlg.deleteAllButton, SIGNAL(clicked()), SLOT(invMngDlgDeleteAllPressed()));
invMngDlg.listView->setSelectionMode(QListView::Extended);
invMngDlg.listView->setMinimumSize(QSize(400, 100)); // QTs size is much to small
connect(invDlg.closeButton, SIGNAL(clicked()), SLOT(invDlgClosed()));
connect(&invDlg, SIGNAL(closed()), SLOT(invDlgClosed()));
connect(invDlg.createInvitationButton, SIGNAL(clicked()),
SLOT(showPersonalInvitationDialog()));
connect(invDlg.createInvitationEMailButton, SIGNAL(clicked()),
SLOT(inviteEmail()));
connect(invDlg.manageInvitationButton, SIGNAL(clicked()),
SLOT(showManageInvitationsDialog()));
connect(this, SIGNAL(invitationNumChanged(int)), this, SLOT(changeInvDlgNum(int)));
connect(this, SIGNAL(invitationNumChanged(int)),
&invMngDlg, SLOT(listSizeChanged(int)));
emit invitationNumChanged(invitationList.size());
connect(persInvDlg.closeButton, SIGNAL(clicked()), SLOT(persInvDlgClosed()));
connect(&persInvDlg, SIGNAL(closed()), SLOT(persInvDlgClosed()));
connect(&refreshTimer, SIGNAL(timeout()), SLOT(refreshTimeout()));
refreshTimer.start(1000*60);
}
Configuration::~Configuration() {
save();
}
void Configuration::setKInetdEnabled(bool enabled) {
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
arg << enabled;
d->send ("kded", "kinetd", "setEnabled(QString,bool)", sdata);
}
void Configuration::setKInetdEnabled(const QDateTime &date) {
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
arg << date;
d->send ("kded", "kinetd", "setEnabled(QString,QDateTime)", sdata);
}
void Configuration::setKInetdServiceRegistrationEnabled(bool enabled) {
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
arg << enabled;
d->send ("kded", "kinetd", "setServiceRegistrationEnabled(QString,bool)", sdata);
}
void Configuration::getPortFromKInetd() {
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata, rdata;
QCString replyType;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
if (!d->call ("kded", "kinetd", "port(QString)", sdata, replyType, rdata))
return; // nicer error here
if (replyType != "int")
return; // nicer error here
QDataStream answer(rdata, IO_ReadOnly);
answer >> portNum;
}
void Configuration::setKInetdPort(int p) {
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata, rdata;
QCString replyType;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb") << p << 1;
if (!d->call ("kded", "kinetd", "setPort(QString,int,int)", sdata, replyType, rdata))
return; // nicer error here
}
void Configuration::removeInvitation(QValueList<Invitation>::iterator it) {
invitationList.remove(it);
save();
}
void Configuration::doKinetdConf() {
setKInetdPort(preferredPortNum);
if (allowUninvitedFlag) {
setKInetdEnabled(true);
setKInetdServiceRegistrationEnabled(enableSLPFlag);
getPortFromKInetd();
return;
}
QDateTime lastExpiration;
QValueList<Invitation>::iterator it = invitationList.begin();
while (it != invitationList.end()) {
Invitation &ix = (*it);
QDateTime t = ix.expirationTime();
if (t > lastExpiration)
lastExpiration = t;
it++;
}
if (lastExpiration.isNull() || (lastExpiration < QDateTime::currentDateTime())) {
setKInetdEnabled(false);
portNum = -1;
}
else {
setKInetdServiceRegistrationEnabled(false);
setKInetdEnabled(lastExpiration);
getPortFromKInetd();
}
}
void Configuration::loadFromKConfig() {
KConfig c("krfbrc");
allowUninvitedFlag = c.readBoolEntry("allowUninvited", false);
enableSLPFlag = c.readBoolEntry("enableSLP", true);
askOnConnectFlag = c.readBoolEntry("confirmUninvitedConnection", true);
allowDesktopControlFlag = c.readBoolEntry("allowDesktopControl", false);
preferredPortNum = c.readNumEntry("preferredPort", -1);
if (c.hasKey("uninvitedPasswordCrypted"))
passwordString = cryptStr(c.readEntry("uninvitedPasswordCrypted", ""));
else
passwordString = c.readEntry("uninvitedPassword", "");
unsigned int invNum = invitationList.size();
invitationList.clear();
c.setGroup("invitations");
int num = c.readNumEntry("invitation_num", 0);
for (int i = 0; i < num; i++)
invitationList.push_back(Invitation(&c, i));
invalidateOldInvitations();
if (invNum != invitationList.size())
emit invitationNumChanged(invitationList.size());
}
void Configuration::saveToKConfig() {
KConfig c("krfbrc");
c.writeEntry("confirmUninvitedConnection", askOnConnectFlag);
c.writeEntry("allowDesktopControl", allowDesktopControlFlag);
c.writeEntry("allowUninvited", allowUninvitedFlag);
c.writeEntry("enableSLP", enableSLPFlag);
c.writeEntry("preferredPort", preferredPortNum);
c.writeEntry("uninvitedPasswordCrypted", cryptStr(passwordString));
c.deleteEntry("uninvitedPassword");
c.setGroup("invitations");
int num = invitationList.count();
c.writeEntry("invitation_num", num);
int i = 0;
while (i < num) {
invitationList[i].save(&c, i);
i++;
}
}
void Configuration::saveToDialogs() {
invalidateOldInvitations();
QValueList<Invitation>::iterator it = invitationList.begin();
while (it != invitationList.end()) {
Invitation &inv = *(it++);
if (!inv.getViewItem())
inv.setViewItem(new KListViewItem(invMngDlg.listView,
inv.creationTime().toString(Qt::LocalDate),
inv.expirationTime().toString(Qt::LocalDate)));
}
invMngDlg.adjustSize();
}
void Configuration::save() {
saveToKConfig();
saveToDialogs();
doKinetdConf();
}
void Configuration::update() {
loadFromKConfig();
saveToDialogs();
}
Invitation Configuration::createInvitation() {
Invitation inv;
invitationList.push_back(inv);
return inv;
}
void Configuration::invalidateOldInvitations() {
QValueList<Invitation>::iterator it = invitationList.begin();
while (it != invitationList.end()) {
if (!(*it).isValid())
it = invitationList.remove(it);
else
it++;
}
}
void Configuration::refreshTimeout() {
unsigned int invNum = invitationList.size();
loadFromKConfig();
saveToDialogs();
if (invNum != invitationList.size())
emit invitationNumChanged(invitationList.size());
}
QString Configuration::hostname() const
{
KInetAddress *a = KInetAddress::getPrivateInetAddress();
QString hostName = a->nodeName();
delete a;
return hostName;
}
///////// properties ///////////////////////////
krfb_mode Configuration::mode() const {
return m_mode;
}
bool Configuration::askOnConnect() const {
return askOnConnectFlag;
}
bool Configuration::allowDesktopControl() const {
return allowDesktopControlFlag;
}
bool Configuration::allowUninvitedConnections() const {
return allowUninvitedFlag;
}
bool Configuration::enableSLP() const {
return enableSLPFlag;
}
QString Configuration::password() const {
return passwordString;
}
QValueList<Invitation> &Configuration::invitations() {
return invitationList;
}
void Configuration::setAllowUninvited(bool allowUninvited) {
allowUninvitedFlag = allowUninvited;
}
void Configuration::setEnableSLP(bool e) {
enableSLPFlag = e;
}
void Configuration::setAskOnConnect(bool askOnConnect)
{
askOnConnectFlag = askOnConnect;
}
void Configuration::setAllowDesktopControl(bool allowDesktopControl)
{
allowDesktopControlFlag = allowDesktopControl;
}
void Configuration::setPassword(QString password)
{
passwordString = password;
}
int Configuration::port() const
{
if ((portNum < 5900) || (portNum >= 6000))
return portNum;
else
return portNum - 5900;
}
// use p=-1 for defaults
void Configuration::setPreferredPort(int p)
{
preferredPortNum = p;
}
int Configuration::preferredPort() const
{
return preferredPortNum;
}
////////////// invitation manage dialog //////////////////////////
void Configuration::showManageInvitationsDialog() {
loadFromKConfig();
saveToDialogs();
invMngDlg.show();
}
void Configuration::invMngDlgClosed() {
invMngDlg.hide();
}
void Configuration::invMngDlgDeleteOnePressed() {
QValueList<Invitation>::iterator it = invitationList.begin();
while (it != invitationList.end()) {
Invitation &ix = (*it);
KListViewItem *iv = ix.getViewItem();
if (iv && iv->isSelected())
it = invitationList.remove(it);
else
it++;
}
saveToKConfig();
doKinetdConf();
emit invitationNumChanged(invitationList.size());
}
void Configuration::invMngDlgDeleteAllPressed() {
invitationList.clear();
saveToKConfig();
doKinetdConf();
emit invitationNumChanged(invitationList.size());
}
////////////// invitation dialog //////////////////////////
void Configuration::showInvitationDialog() {
invDlg.show();
}
void Configuration::invDlgClosed() {
closeInvDlg();
emit invitationFinished();
}
void Configuration::closeInvDlg() {
saveToKConfig();
invDlg.hide();
}
void Configuration::changeInvDlgNum(int newNum) {
invDlg.manageInvitationButton->setText( i18n("Manage Invitations (%1)...").arg(newNum) );
}
////////////// personal invitation dialog //////////////////////////
void Configuration::showPersonalInvitationDialog() {
loadFromKConfig();
Invitation inv = createInvitation();
save();
emit invitationNumChanged(invitationList.size());
invDlg.createInvitationButton->setEnabled(false);
invMngDlg.newPersonalInvitationButton->setEnabled(false);
persInvDlg.hostLabel->setText(QString("%1:%2").arg(hostname()).arg(port()));
persInvDlg.passwordLabel->setText(inv.password());
persInvDlg.expirationLabel->setText(
inv.expirationTime().toString(Qt::LocalDate));
persInvDlg.show();
}
void Configuration::persInvDlgClosed() {
persInvDlg.hide();
invDlg.createInvitationButton->setEnabled(true);
invMngDlg.newPersonalInvitationButton->setEnabled(true);
}
////////////// invite email //////////////////////////
void Configuration::inviteEmail() {
int r = KMessageBox::warningContinueCancel(0,
i18n("When sending an invitation by email, note that everybody who reads this email "
"will be able to connect to your computer for one hour, or until the first "
"successful connection took place, whatever comes first. \n"
"You should either encrypt the email or at least send it only in a "
"secure network, but not over the Internet."),
i18n("Send Invitation via Email"),
KStdGuiItem::cont(),
"showEmailInvitationWarning");
if (r == KMessageBox::Cancel)
return;
loadFromKConfig();
Invitation inv = createInvitation();
save();
emit invitationNumChanged(invitationList.size());
KApplication *app = KApplication::kApplication();
app->invokeMailer(QString::null, QString::null, QString::null,
i18n("Desktop Sharing (VNC) invitation"),
i18n("You have been invited to a VNC session. If you have the KDE Remote "
"Desktop Connection installed, just click on the link below.\n\n"
"vnc://invitation:%1@%2:%3\n\n"
"Otherwise you can use any VNC client with the following parameters:\n\n"
"Host: %4:%5\n"
"Password: %6\n\n"
"For security reasons this invitation will expire at %7.")
.arg(inv.password())
.arg(hostname())
.arg(port())
.arg(hostname())
.arg(port())
.arg(inv.password())
.arg(KGlobal::locale()->formatDateTime(inv.expirationTime())));
}
#include "configuration.moc"

151
krfb/configuration.h Normal file
View File

@@ -0,0 +1,151 @@
/***************************************************************************
configuration.h
-------------------
begin : Tue Dec 11 2001
copyright : (C) 2001-2002 by Tim Jansen
email : tim@tjansen.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#include "invitation.h"
#include "manageinvitations.h"
#include "personalinvitation.h"
#include "invite.h"
#include <kconfig.h>
#include <qtimer.h>
#include <qobject.h>
#include <qvalidator.h>
#include <qstring.h>
enum krfb_mode {
KRFB_UNKNOWN_MODE = 0,
KRFB_KINETD_MODE,
KRFB_INVITATION_MODE,
KRFB_CONFIGURATION_MODE
};
class ManageInvitationsDialog2 : public ManageInvitationsDialog {
Q_OBJECT
public:
ManageInvitationsDialog2();
virtual void closeEvent(QCloseEvent *);
signals:
void closed();
};
class InvitationDialog2 : public InvitationDialog {
Q_OBJECT
public:
InvitationDialog2();
virtual void closeEvent(QCloseEvent *);
signals:
void closed();
};
class PersonalInvitationDialog2 : public PersonalInvitationDialog {
Q_OBJECT
public:
PersonalInvitationDialog2();
virtual void closeEvent(QCloseEvent *);
signals:
void closed();
};
/**
* This class stores the app's configuration, manages the
* standalone-config-dialog and all the invitation dialogs
* @author Tim Jansen
*/
class Configuration : public QObject {
Q_OBJECT
public:
Configuration(krfb_mode mode);
~Configuration();
krfb_mode mode() const;
bool askOnConnect() const;
bool allowDesktopControl() const;
bool allowUninvitedConnections() const;
bool enableSLP() const;
QString password() const;
QString hostname() const;
int port() const;
int preferredPort() const;
void setAllowUninvited(bool allowUninvited);
void setEnableSLP(bool e);
void setAskOnConnect(bool askOnConnect);
void setPassword(QString password);
void setPreferredPort(int p);
void save();
void update();
QValueList<Invitation> &invitations();
void removeInvitation(QValueList<Invitation>::iterator it);
signals:
void invitationFinished();
void invitationNumChanged(int num);
public slots:
void setAllowDesktopControl(bool allowDesktopControl);
void showManageInvitationsDialog();
void showInvitationDialog();
void showPersonalInvitationDialog();
void inviteEmail();
private:
void loadFromKConfig();
void loadFromDialogs();
void saveToKConfig();
void saveToDialogs();
Invitation createInvitation();
void closeInvDlg();
void invalidateOldInvitations();
void setKInetdEnabled(const QDateTime &date);
void setKInetdEnabled(bool enabled);
void setKInetdServiceRegistrationEnabled(bool enabled);
void getPortFromKInetd();
void setKInetdPort(int port);
void doKinetdConf();
krfb_mode m_mode;
ManageInvitationsDialog2 invMngDlg;
InvitationDialog2 invDlg;
PersonalInvitationDialog2 persInvDlg;
QTimer refreshTimer;
bool askOnConnectFlag;
bool allowDesktopControlFlag;
bool allowUninvitedFlag;
bool enableSLPFlag;
int portNum, preferredPortNum;
QString passwordString;
QValueList<Invitation> invitationList;
private slots:
void refreshTimeout();
void invMngDlgClosed();
void invMngDlgDeleteOnePressed();
void invMngDlgDeleteAllPressed();
void invDlgClosed();
void changeInvDlgNum(int newNum);
void persInvDlgClosed();
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -1,88 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2010 Collabora Ltd <info@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2004 Nadeem Hasan <nhasan@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "connectiondialog.h"
#include <KIconLoader>
#include <KLocale>
#include <KStandardGuiItem>
#include <QtGui/QCheckBox>
#include <QtGui/QLabel>
template <typename UI>
ConnectionDialog<UI>::ConnectionDialog(QWidget *parent)
: KDialog(parent)
{
setCaption(i18n("New Connection"));
setButtons(Ok | Cancel);
setDefaultButton(Cancel);
setModal(true);
setMinimumSize(500, 200);
m_connectWidget = new QWidget(this);
m_ui.setupUi(m_connectWidget);
m_ui.pixmapLabel->setPixmap(KIcon("krfb").pixmap(128));
KGuiItem accept = KStandardGuiItem::ok();
accept.setText(i18n("Accept Connection"));
setButtonGuiItem(Ok, accept);
KGuiItem refuse = KStandardGuiItem::cancel();
refuse.setText(i18n("Refuse Connection"));
setButtonGuiItem(Cancel, refuse);
setMainWidget(m_connectWidget);
}
//**********
InvitationsConnectionDialog::InvitationsConnectionDialog(QWidget *parent)
: ConnectionDialog<Ui::ConnectionWidget>(parent)
{
}
void InvitationsConnectionDialog::setRemoteHost(const QString &host)
{
m_ui.remoteHost->setText(host);
}
//**********
#ifdef KRFB_WITH_TELEPATHY_TUBES
TubesConnectionDialog::TubesConnectionDialog(QWidget *parent)
: ConnectionDialog<Ui::TubesConnectionWidget>(parent)
{
}
void TubesConnectionDialog::setContactName(const QString & name)
{
QString txt = i18n("You have requested to share your desktop with %1. If you proceed, "
"you will allow the remote user to watch your desktop.", name);
m_ui.mainTextLabel->setText(txt);
}
#endif // KRFB_WITH_TELEPATHY_TUBES
#include "connectiondialog.moc"

View File

@@ -1,82 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2010 Collabora Ltd <info@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2004 Nadeem Hasan <nhasan@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef CONNECTIONDIALOG_H
#define CONNECTIONDIALOG_H
#include "ui_connectionwidget.h"
#include <KDialog>
template <typename UI>
class ConnectionDialog : public KDialog
{
public:
ConnectionDialog(QWidget *parent);
~ConnectionDialog() {};
void setAllowRemoteControl(bool b);
bool allowRemoteControl();
protected:
QWidget *m_connectWidget;
UI m_ui;
};
template <typename UI>
void ConnectionDialog<UI>::setAllowRemoteControl(bool b)
{
m_ui.cbAllowRemoteControl->setChecked(b);
m_ui.cbAllowRemoteControl->setVisible(b);
}
template <typename UI>
bool ConnectionDialog<UI>::allowRemoteControl()
{
return m_ui.cbAllowRemoteControl->isChecked();
}
//*********
class InvitationsConnectionDialog : public ConnectionDialog<Ui::ConnectionWidget>
{
Q_OBJECT
public:
InvitationsConnectionDialog(QWidget *parent);
void setRemoteHost(const QString & host);
};
//*********
#ifdef KRFB_WITH_TELEPATHY_TUBES
# include "ui_tubesconnectionwidget.h"
class TubesConnectionDialog : public ConnectionDialog<Ui::TubesConnectionWidget>
{
Q_OBJECT
public:
TubesConnectionDialog(QWidget *parent);
void setContactName(const QString & name);
};
#endif // KRFB_WITH_TELEPATHY_TUBES
#endif // CONNECTIONDIALOG_H

BIN
krfb/cr32-app-krfb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

BIN
krfb/cr48-app-krfb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,200 +0,0 @@
/*
This file is part of the KDE project
Copyright (C) 2010 Collabora Ltd.
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "events.h"
#include <QtGui/QApplication>
#include <QtGui/QX11Info>
#include <QtGui/QDesktopWidget>
#include <KGlobal>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
enum {
LEFTSHIFT = 1,
RIGHTSHIFT = 2,
ALTGR = 4
};
class EventData
{
public:
EventData();
//keyboard
Display *dpy;
signed char modifiers[0x100];
KeyCode keycodes[0x100];
KeyCode leftShiftCode;
KeyCode rightShiftCode;
KeyCode altGrCode;
char modifierState;
//mouse
int buttonMask;
private:
void init();
};
K_GLOBAL_STATIC(EventData, data)
EventData::EventData()
{
init();
}
void EventData::init()
{
dpy = QX11Info::display();
buttonMask = 0;
//initialize keycodes
KeySym key, *keymap;
int i, j, minkey, maxkey, syms_per_keycode;
memset(modifiers, -1, sizeof(modifiers));
XDisplayKeycodes(dpy, &minkey, &maxkey);
Q_ASSERT(minkey >= 8);
Q_ASSERT(maxkey < 256);
keymap = (KeySym *) XGetKeyboardMapping(dpy, minkey,
(maxkey - minkey + 1),
&syms_per_keycode);
Q_ASSERT(keymap);
for (i = minkey; i <= maxkey; i++) {
for (j = 0; j < syms_per_keycode; j++) {
key = keymap[(i-minkey)*syms_per_keycode+j];
if (key >= ' ' && key < 0x100 && i == XKeysymToKeycode(dpy, key)) {
keycodes[key] = i;
modifiers[key] = j;
}
}
}
leftShiftCode = XKeysymToKeycode(dpy, XK_Shift_L);
rightShiftCode = XKeysymToKeycode(dpy, XK_Shift_R);
altGrCode = XKeysymToKeycode(dpy, XK_Mode_switch);
XFree((char *)keymap);
}
/* this function adjusts the modifiers according to mod (as from modifiers) and data->modifierState */
static void tweakModifiers(signed char mod, bool down)
{
bool isShift = data->modifierState & (LEFTSHIFT | RIGHTSHIFT);
if (mod < 0) {
return;
}
if (isShift && mod != 1) {
if (data->modifierState & LEFTSHIFT) {
XTestFakeKeyEvent(data->dpy, data->leftShiftCode,
down, CurrentTime);
}
if (data->modifierState & RIGHTSHIFT) {
XTestFakeKeyEvent(data->dpy, data->rightShiftCode,
down, CurrentTime);
}
}
if (!isShift && mod == 1) {
XTestFakeKeyEvent(data->dpy, data->leftShiftCode,
down, CurrentTime);
}
if ((data->modifierState & ALTGR) && mod != 2) {
XTestFakeKeyEvent(data->dpy, data->altGrCode,
!down, CurrentTime);
}
if (!(data->modifierState & ALTGR) && mod == 2) {
XTestFakeKeyEvent(data->dpy, data->altGrCode,
down, CurrentTime);
}
}
void EventHandler::handleKeyboard(bool down, rfbKeySym keySym)
{
#define ADJUSTMOD(sym,state) \
if(keySym==sym) { if(down) data->modifierState|=state; else data->modifierState&=~state; }
ADJUSTMOD(XK_Shift_L, LEFTSHIFT);
ADJUSTMOD(XK_Shift_R, RIGHTSHIFT);
ADJUSTMOD(XK_Mode_switch, ALTGR);
if (keySym >= ' ' && keySym < 0x100) {
KeyCode k;
if (down) {
tweakModifiers(data->modifiers[keySym], True);
}
k = data->keycodes[keySym];
if (k != NoSymbol) {
XTestFakeKeyEvent(data->dpy, k, down, CurrentTime);
}
if (down) {
tweakModifiers(data->modifiers[keySym], False);
}
} else {
KeyCode k = XKeysymToKeycode(data->dpy, keySym);
if (k != NoSymbol) {
XTestFakeKeyEvent(data->dpy, k, down, CurrentTime);
}
}
}
void EventHandler::handlePointer(int buttonMask, int x, int y)
{
QDesktopWidget *desktopWidget = QApplication::desktop();
int screen = desktopWidget->screenNumber();
if (screen < 0) {
screen = 0;
}
XTestFakeMotionEvent(data->dpy, screen, x, y, CurrentTime);
for (int i = 0; i < 5; i++) {
if ((data->buttonMask&(1 << i)) != (buttonMask&(1 << i))) {
XTestFakeButtonEvent(data->dpy,
i + 1,
(buttonMask&(1 << i)) ? True : False,
CurrentTime);
}
}
data->buttonMask = buttonMask;
}

View File

@@ -1,37 +0,0 @@
/*
This file is part of the KDE project
Copyright (C) 2010 Collabora Ltd.
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef EVENTS_H
#define EVENTS_H
#include "rfb.h"
class EventHandler
{
public:
static void handleKeyboard(bool down, rfbKeySym key);
static void handlePointer(int buttonMask, int x, int y);
};
#endif

817
krfb/eventsrc Normal file
View File

@@ -0,0 +1,817 @@
[!Global!]
IconName=krfb
Comment=Desktop Sharing
Comment[af]=Werkskerm Deeling
Comment[ar]=مشاركة سطح المكتب
Comment[bg]=Споделяне на Работно място
Comment[bs]=Dijeljenje desktopa
Comment[ca]=Compartició de l'escriptori
Comment[cs]=Sdílení pracovní plochy
Comment[da]=Skrivebordsdeling
Comment[de]=Arbeitsfläche freigeben
Comment[el]=Μοίρασμα επιφάνειας εργασίας
Comment[eo]=Tabula fordonado
Comment[es]=Compartición de escritorio
Comment[et]=Töölaua jagamine
Comment[fi]=Työpöytien jako
Comment[fr]=Partage du bureau
Comment[he]=שיתוף שולחנות עבודה
Comment[hr]=Dijeljenje radne površine
Comment[hu]=Munkaasztal-megosztás
Comment[is]=Skjáborðamiðlun
Comment[it]=Condivisione desktop
Comment[ja]=デスクトップ共有
Comment[lt]=Dalinimasis darbastaliu
Comment[mk]=Десктоп Делење
Comment[mt]=Qsim tad-desktop
Comment[nb]=Skrivebordsdeling
Comment[nl]=Bureaubladvrijgave
Comment[nn]=Skrivebordsdeling
Comment[nso]=Kabagano ya Desktop
Comment[pl]=Współdzielenie pulpitu
Comment[pt]=Partilha do Ecrã
Comment[pt_BR]=Compartilhamento do Ambiente de Trabalho
Comment[ro]=Partajare ecran
Comment[ru]=Параметры общего рабочего стола
Comment[sk]=Zdieľanie pracovnej plochy
Comment[sl]=Deljenje namizja
Comment[sv]=Dela ut skrivbord
Comment[th]=ใช้งานพื้นที่ทำงานร่วมกัน
Comment[tr]=Masaüstü Paylaşımı
Comment[uk]=Спільні стільниці
Comment[ven]=U kovhekana ha desikithopo
Comment[xh]=Ukwahlulelano kwe Desktop
Comment[zh_CN]=桌面共享
Comment[zh_TW]=桌面分享
Comment[zu]=Ukuhlukaniselana kwe-Desktop
[UserAcceptsConnection]
Name=UserAcceptsConnection
Name[ar]=المستخدم قبل الاتصال
Name[bg]=Потребител Приема Връзка
Name[ca]=L'usuari accepta la connexió
Name[cs]=Uživatel přijímá spojení
Name[da]=BrugerAcceptererForbindelse
Name[de]=BenutzerBestätigtVerbindung
Name[el]=Ο χρήστης δέχεται σύνδεση
Name[eo]=UzantoAkceptasKonektojn
Name[es]=El usuario acepta la conexión
Name[et]=KasutajaÜhendusegaNõus
Name[fr]=L'utilisateur accepte les connexions
Name[he]=משתמש מקבל חיבור
Name[hr]=KorisnikPrihvaćaVezu
Name[hu]=KapcsolatElfogadva
Name[is]=NotandiSamþykkirTengingar
Name[it]=L'utente accetta la connessione
Name[ja]=ユーザが許可した接続
Name[lt]=Vartotojas priima prisijungima
Name[mk]=КорисникотПрифатиВрска
Name[mt]=UserJaċċettaKonnessjoni
Name[nb]=Bruker aksepterer oppkobling
Name[nl]=Gebruiker accepteert verbinding
Name[nn]=Brukar godtek samband
Name[nso]=Modiriši o Amogela Kgokagano
Name[pl]=Połączenie akceptowane przez użytkownika
Name[pt_BR]=Aceita Conexões do Usuário
Name[ro]=Conexiune acceptată de utilizator
Name[ru]=Пользователь принимает соединения
Name[sk]=Užívateľ akceptoval spojenie
Name[sl]=Uporabnik sprejema povezavo
Name[sv]=Användare accepterar anslutning
Name[th]=ผู้ใช้ยอมรับการเชื่อมต่อ
Name[uk]=КористувачПриймаєЗ'єднання
Name[ven]=Mushumisi o tanganedza vhukwamani
Name[xh]=Umsebenzisi Wamkela Uxhulumaniso
Name[zh_CN]=用户接受连接
Name[zh_TW]=使用者接受連線
Name[zu]=UmsebenziUvumelaUkuxhumana
Comment=User accepts connection
Comment[af]=Gebruiker aanvaar verbinding
Comment[ar]=المستخدم قبل الإتصال
Comment[bg]=Потребител приема връзка
Comment[bs]=Korisnik prihvata konekciju
Comment[ca]=L'usuari accepta la connexió
Comment[cs]=Uživatel přijímá spojení
Comment[da]=Bruger accepterer forbindelse
Comment[de]=Der Benutzer bestätigt die Verbindung
Comment[el]=Ο χρήστης δέχεται σύνδεση
Comment[eo]=Uzanto akceptas konektojn
Comment[es]=El usuario acepta la conexión
Comment[et]=Kasutaja nõustub ühendusega
Comment[fi]=Käyttäjä hyväksyy yhteyden
Comment[fr]=l'utilisateur accepte les connexions
Comment[he]=המשתמש מקבל את החיבור
Comment[hr]=Korisnik prihvaća vezu
Comment[hu]=A felhasználó elfogadja a csatlakozási kérést
Comment[is]=Notandi samþykkir tengingu
Comment[it]=L'utente accetta la connessione
Comment[ja]=ユーザが接続を許可
Comment[lt]=Vartotojas priima prisijungimą
Comment[mk]=Корисникот ја прифати врската
Comment[mt]=User jaċċetta l-konnessjoni
Comment[nb]=Bruker aksepterer oppkobling
Comment[nl]=Gebruiker accepteert verbinding
Comment[nn]=Brukar godtek samband
Comment[nso]=Modiriši o Amogela Kgokagano
Comment[pl]=Użytkownik akceptuje połączenie
Comment[pt]=O utilizador aceita a ligação
Comment[pt_BR]=O usuário aceita a conexão
Comment[ro]=Utilizatorul acceptă conexiunea
Comment[ru]=Пользователь принимает соединения
Comment[sk]=Užívateľ akceptoval spojenie
Comment[sl]=Uporabnik sprejema povezavo
Comment[sv]=Användaren accepterar anslutning
Comment[th]=ผู้ใช้ยอมรับการเชื่อมต่อ
Comment[tr]=Kullanıcı bağlantıyı kabul etti
Comment[uk]=Користувач приймає з'єднання
Comment[ven]=Mushumisi o tanganedza vhukwamani
Comment[xh]=Umsebenzisi wamkela uxhulumaniso
Comment[zh_CN]=用户接受连接
Comment[zh_TW]=使用者接受的連線
Comment[zu]=Umsebenzi uyakuvumela ukuxhumana
default_presentation=4
[UserRefusesConnection]
Name=UserRefusesConnection
Name[ar]=المستخدم رفض الاتصال
Name[bg]=Потребител Отказва Връзка
Name[ca]=L'usuari refusa la connexió
Name[cs]=Uživatel odmítá spojení
Name[da]=BrugerAfslårForbindelse
Name[de]=BenutzerLehntVerbindungAb
Name[el]=Ο χρήστης δε δέχεται σύνδεση
Name[eo]=UzantoRifuzasKonektojn
Name[es]=El usuario rechaza la conexión
Name[et]=KasutajaKeeldubÜhendusest
Name[fr]=L'utilisateur refuse les connexions
Name[he]=משתמש דוחה חיבור
Name[hr]=KorisnikOdbijaVezu
Name[hu]=KapcsolatVisszautasítva
Name[is]=NotandiHafnarTengingum
Name[it]=L'utente rifiuta la connessione
Name[ja]=ユーザが拒否した接続
Name[lt]=Vartotojas atmeta prisijungimą
Name[mk]=КорисникотОдбиВрска
Name[mt]=UserJirrifjutaKonnessjoni
Name[nb]=Bruker avviser oppkobling
Name[nl]=Gebruiker weigert verbinding
Name[nn]=Brukar nektar samband
Name[nso]=Modiriši o Gana Kgokagano
Name[pl]=Połączenie odrzucone przez użytkownika
Name[pt_BR]=Rejeita Conexões do Usuário
Name[ro]=Conexiune respinsă de utilizator
Name[ru]=Пользователь не принимает соединения
Name[sk]=Užívateľ zamietol spojenie
Name[sl]=Uporabnik zavrača povezavo
Name[sv]=Användaren vägrar anslutning
Name[th]=ผู้ใช้ปฏิเสธการเชื่อมต่อ
Name[uk]=КористувачВідмовляєУЗ'єднанні
Name[ven]=Mushumisi o hana Vhukwamani
Name[xh]=Umsebenzisi Uyalwala Uxhulumaniso
Name[zh_CN]=用户拒绝连接
Name[zh_TW]=使用者拒絕連線
Name[zu]=UmsebenzisiWalaUxhumaniso
Comment=User refuses connection
Comment[af]=Gebruiker weier verbinding
Comment[ar]=المستخدم رفض الاتصال
Comment[bg]=Потребител отказва връзка
Comment[bs]=Korisnik odbija konekciju
Comment[ca]=L'usuari refusa la connexió
Comment[cs]=Uživatel odmítá spojení
Comment[da]=Bruger afslår forbindelse
Comment[de]=Der Benutzer lehnt die Verbindung ab
Comment[el]=Ο χρήστης δε δέχεται σύνδεση
Comment[eo]=Uzanto rifuzas konektojn
Comment[es]=El usuario rechaza la conexión
Comment[et]=Kasutaja keeldub ühendusest
Comment[fi]=Käyttäjä hylkää yhteyden
Comment[fr]=L'utilisateur refuse les connexions
Comment[he]=המשתמש מסרב לחיבור
Comment[hr]=Korisnik odbija vezu
Comment[hu]=A felhasználó visszautasítja a csatlakozási kérést
Comment[is]=Notandi hafnar tengingu
Comment[it]=L'utente rifiuta la connessione
Comment[ja]=ユーザが接続を拒否
Comment[lt]=Vartotojas atmeta prisijungimą
Comment[mk]=Корисникот ја одби врската
Comment[mt]=User jiċħad il-konnessjoni
Comment[nb]=Bruker avviser oppkobling
Comment[nl]=Gebruiker weigert verbinding
Comment[nn]=Brukar nektar samband
Comment[nso]=Modiriši o gana kgokagano
Comment[pl]=Użytkownik odrzuca połączenie
Comment[pt]=O utilizador recusa a ligação
Comment[pt_BR]=O usuário rejeita a conexão
Comment[ro]=Utilizatorul refuză conexiunea
Comment[ru]=Пользователь не принимает соединения
Comment[sk]=Užívateľ odmietol spojenie
Comment[sl]=Uporabnik zavrnil povezavo
Comment[sv]=Användaren vägrar anslutning
Comment[th]=ผู้ใช้ปฏิเสธการเชื่อมต่อ
Comment[tr]=Kullanıcı bağlantıyı iptal etti
Comment[uk]=Користувач відмовляє у з'єднанні
Comment[ven]=Mushumisi o hana vhukwamani
Comment[xh]=Umsebenzisi wala uxhulumaniso
Comment[zh_CN]=用户拒绝连接
Comment[zh_TW]=使用者拒絕的連線
Comment[zu]=Umsebenzi awukuvumeli ukuxhumana
default_presentation=4
[ConnectionClosed]
Name=ConnectionClosed
Name[ar]=اتصال مغلق
Name[bg]=Връзката е Затворена
Name[ca]=Connexió tancada
Name[cs]=Spojení ukončeno
Name[da]=ForbindelseLukket
Name[de]=VerbindungGeschlossen
Name[el]=Η σύνδεση έκλεισε
Name[eo]=KonektoFermita
Name[es]=Conexión cerrada
Name[et]=ÜhendusSuletud
Name[fr]=Connexion fermée
Name[he]=חיבור נסגר
Name[hr]=VezaPrekinuta
Name[hu]=KapcsolatBezárva
Name[is]=TenginguLokað
Name[it]=Connessione chiusa
Name[ja]=接続切断
Name[lt]=Prisijungimas uždarytas
Name[mk]=ВрскатаЗатворена
Name[mt]=KonnessjonijiMagħluqa
Name[nb]=Kobling stengt
Name[nl]=Verbinding gesloten
Name[nn]=Samband stengt
Name[nso]=Kgokagano e Tswaletšwe
Name[pl]=Połączenia zakończone
Name[pt_BR]=Conexão fechada
Name[ro]=Conexiune închisă
Name[ru]=Соединение закрыто
Name[sk]=Spojenie ukončené
Name[sl]=Povezava zaprta
Name[sv]=Anslutning stängd
Name[th]=การเชื่อมต่อยุติ
Name[tr]=Bağlantı Kapatıldı
Name[uk]=З'єднанняЗакрито
Name[ven]=Vhukwamani ho valwa
Name[xh]=Uxhulumaniso Luvaliwe
Name[zh_CN]=连接关闭
Name[zh_TW]=連線已關閉
Name[zu]=UkuxhumanisaKuvaliwe
Comment=Connection closed
Comment[af]=Verbinding gesluit
Comment[ar]=الاتصال قُطع
Comment[bg]=Връзката е затворена
Comment[bs]=Konekcija prekinuta
Comment[ca]=Connexió tancada
Comment[cs]=Spojení ukončeno
Comment[da]=Forbindelse lukket
Comment[de]=Verbindung geschlossen
Comment[el]=Η σύνδεση έκλεισε
Comment[eo]=Konekto fermita
Comment[es]=Conexión rechazada
Comment[et]=Ühendus suletud
Comment[fi]=Yhteys suljettu
Comment[fr]=Connexion coupée
Comment[he]=החיבור נסגר
Comment[hr]=Veza prekinuta
Comment[hu]=A kapcsolat bezárva
Comment[is]=Tengingu lokað
Comment[it]=Connessione chiusa
Comment[ja]=接続が閉じられました
Comment[lt]=Prisijungimas uždarytas
Comment[mk]=Врската е затворена
Comment[mt]=Konnessjoni magħluqa
Comment[nb]=Oppkobling stengt
Comment[nl]=Verbinding verbroken
Comment[nn]=Samband stengt
Comment[nso]=Kopantšho e tswaletšwe
Comment[pl]=Połączenie zakończone
Comment[pt]=Ligação fechada
Comment[pt_BR]=conexão encerrada
Comment[ro]=Conexiune închisă
Comment[ru]=Соединение закрыто
Comment[sk]=Spojenie ukončené
Comment[sl]=Povezava zaprta
Comment[sv]=Anslutning stängd
Comment[th]=การเชื่อมต่อยุติ
Comment[tr]=Bağlantı kesildi
Comment[uk]=З'єднання закрито
Comment[ven]=Vhukwamani ho valwa
Comment[xh]=Uxhulumaniso luvaliwe
Comment[zh_CN]=连接关闭
Comment[zh_TW]=連線已關閉
Comment[zu]=Ukuxhumana kuvaliwe
default_presentation=4
[InvalidPassword]
Name=InvalidPassword
Name[ar]=كلمة مرور غير صالحة
Name[be]=Некарэктны пароль
Name[bg]=Грешна Парола
Name[ca]=Contrasenya no vàlida
Name[cs]=Neplatné heslo
Name[da]=UgyldigtKodeord
Name[de]=UngültigesPasswort
Name[el]=Λάθος κωδικός πρόσβασης
Name[eo]=NevalidaPasvorto
Name[es]=Contraseña errónea
Name[et]=ValeParool
Name[fr]=Mots de passe non valable
Name[he]=סיסמה לא תקפה
Name[hr]=NevažećaLozinka
Name[hu]=ÉrvénytelenJelszó
Name[is]=ÓgiltLykilorð
Name[it]=Password non valida
Name[ja]=不正なパスワード
Name[lt]=Neteisingas slaptažodžis
Name[mk]=НевалиднаЛозинка
Name[mt]=PasswordĦażin
Name[nb]=Ugyldig passord
Name[nl]=Ongeldig wachtwoord
Name[nn]=Ugyldig passord
Name[nso]=Lentšuphetišo gase la Nnete
Name[pl]=Błędne hasło
Name[pt_BR]=Senha inválida
Name[ro]=Parolă eronată
Name[ru]=Неверный пароль
Name[sk]=Zlé heslo
Name[sl]=Nepravilno geslo
Name[sv]=Ogiltigt lösenord
Name[th]=รหัสผ่านไม่ถูกต้อง
Name[tr]=Geçersiz Parola
Name[uk]=НевірнийПароль
Name[ven]=Phasiwede asi yone
Name[xh]=Igama lokugqitha Elingasebenziyo
Name[zh_CN]=无效口令
Name[zh_TW]=無效的密碼
Name[zu]=IgamaEliyimfihloLokudlulaOkungasiyilona
Comment=Invalid password
Comment[af]=Ongeldige wagwoord
Comment[ar]=كلمة مرور غير صالحة
Comment[be]=Некарэктны пароль
Comment[bg]=Грешна парола
Comment[bs]=Neispravna šifra
Comment[ca]=Contrasenya no vàlida
Comment[cs]=Neplatné heslo
Comment[da]=Ugyldigt kodeord
Comment[de]=Ungültiges Passwort
Comment[el]=Λάθος κωδικός πρόσβασης
Comment[eo]=nevalida pasvorto
Comment[es]=Contraseña errónea
Comment[et]=Vale parool
Comment[fi]=Virheellinen salasana
Comment[fr]=Mot de passe non valable
Comment[he]=הסיסמה אינה תקפה
Comment[hr]=Nevažeća šifra
Comment[hu]=Érvénytelen jelszó
Comment[is]=Lykilorð ógilt
Comment[it]=Password non valida
Comment[ja]=不正なパスワード
Comment[lt]=Neteisingas slaptažodis
Comment[mk]=Невалидна лозинка
Comment[mt]=Password ħażin
Comment[nb]=Ugyldig passord
Comment[nl]=Ongeldig wachtwoord
Comment[nn]=Ugyldig passord
Comment[nso]=Lentšuphetišo gase la nnete
Comment[pl]=Błędne hasło
Comment[pt]=Senha inválida
Comment[pt_BR]=senha inválida
Comment[ro]=Parolă eronată
Comment[ru]=Неверный пароль
Comment[sk]=Zlé heslo
Comment[sl]=Nepravilno geslo
Comment[sv]=Ogiltigt lösenord
Comment[th]=รหัสผ่านไม่ถูกต้อง
Comment[tr]=Geçersiz parola
Comment[uk]=Невірний пароль
Comment[ven]=Phasiwede isa shumi
Comment[xh]=Igama lokugqitha elingasebenziyo
Comment[zh_CN]=无效口令
Comment[zh_TW]=無效的密碼
Comment[zu]=Igama elifihlikeli
default_presentation=4
[InvalidPasswordInvitations]
Name=InvalidPasswordInvitations
Name[ar]=دعوات كلمات مرور غير صالحة
Name[bg]=Грешна Парола за Покана
Name[ca]=Contrasenya convidats no vàlides
Name[cs]=Neplatné hesla výzev
Name[da]=UgyldigtKodeordInvitationer
Name[de]=UngültigePasswortAnfragen
Name[eo]=NevalidaPasvortoInvito
Name[es]=Invitación de contraseñas erróneas
Name[et]=ValeParoolKutsed
Name[fr]=Invitations de mot de passe non valable
Name[he]=סיסמת לא תקפה - הזמנות
Name[hr]=KrivePizovniceŠifri
Name[hu]=ÉrvénytelenJelszóMeghívások
Name[is]=ÓgildLykilorðsBoð
Name[it]=Invito password non valida
Name[ja]=不正なパスワードの招待
Name[lt]=Neteisingo slaptažodžio kvietimai
Name[mk]=ПоканиСоНевалидниЛозинки
Name[mt]=PasswordĦażinaStediniet
Name[nb]=Ugyldig passord ved invitasjon
Name[nl]=Ongeldige wachtwoordaanvragen
Name[nn]=Ugyldige passordinvitasjonar
Name[nso]=Ditaletšo tša Mantsuphetišo tšeo esego tša Nnete
Name[pl]=Informacja o błędnym haśle
Name[pt_BR]=Aviso de senha inválida
Name[ru]=Неверный запрос пароля
Name[sk]=Zlé heslo pozvánky
Name[sl]=Povabila z nepravilnimi gesli
Name[sv]=Ogiltigt lösenord vid inbjudan
Name[uk]=ЗапрошенняЗНевірнимПаролем
Name[ven]=Mbidzo ya phasiwede isi yone
Name[xh]=IzimemoZegamalokugqithaEzingasebebenziyo
Name[zh_CN]=无效口令邀请
Name[zh_TW]=無效的密碼邀請函
Name[zu]=IsimemoSegamaEliyimfihloLokudlulaOkungasiyilona
Comment=The invited party sent an invalid password. Connection refused.
Comment[af]=Die uitgenooi party gestuur 'n ongeldige wagwoord. Verbinding geweier.
Comment[ar]=الجهة المدعوة أرسلت كلمة مرور غير صالحة. الاتصال رُفض
Comment[bs]=Pozvana strana je poslala neispravnu šifru. Konekcija je odbijena.
Comment[ca]=La part invitada ha enviat una contrasenya no vàlida. Connexió refusada.
Comment[cs]=Pozvaná strana poslala neplatné heslo. Spojení odmítnuto.
Comment[da]=Den inviterede part sendte et ugyldigt kodeord. Forbindelse afslået.
Comment[de]=Die eingeladene Partei hat ein ungültiges Passwort gesendet: Verbindung abgelehnt.
Comment[el]=Η προσκαλεσμένη ομάδα έστειλε άκυρο κωδικό πρόσβασης. Η σύνδεση απορρίφθηκε.
Comment[eo]=La invitita kliento sendis nevalidan pasvorton. Konekto rifuzita.
Comment[es]=La parte invitada envió una contraseña incorrecta. Conexión rechazada
Comment[et]=Kutsutu saatis vigase parooli. Ühendusest keelduti.
Comment[fi]=Kutsuttu taho lähetti virheellisen salasanan. Yhteys hylättiin.
Comment[fr]=La partie invitée a envoyé un mot de passe non valable. Connexion refusée.
Comment[he]=הצד המוזמן שלח סיסמה לא תקפה. החיבור נדחה.
Comment[hr]=Stranka koju ste pozvali je poslala nevažeću šifru. Veza odbijena.
Comment[hu]=A meghívott fél érvénytelen jelszót küldött. A csatlakozás nem sikerült.
Comment[is]=Boðinn aðili sendi ógilt lykilorð. Tengingu hafnað
Comment[it]=La festa invitata ha inviato una password non valida. Connessione rifiutata.
Comment[ja]=招待された人が不正なパスワードを送って来ました。接続は拒否されました。
Comment[lt]=Kviečiančioji pusė atsiuntė blogą slaptažodį. Prisijungimas atmestas.
Comment[mk]=Поканетата странка испрати невалидна лозинка. Врската одбиена.
Comment[mt]=Il-persuna mistiedna bagħtet password ħażin. Konnessjoni miċħuda.
Comment[nb]=Den inviterte parten sendte ugyldig passord. Oppkobling avvist.
Comment[nl]=De uitgenodigde partij stuurde een ongeldig wachtwoord. Verbinding geweigerd.
Comment[nn]=Den inviterte parten sende eit ugyldig passord. Sambandet vart nekta.
Comment[nso]=Sehlopha seo se memilwego se romela lentšuphetišo leo esego la nnete. Kgokagano e gannwe.
Comment[pl]=Z drugiej strony podano błędne hasło. Połączenie odrzucone.
Comment[pt]=O convidado enviou uma senha inválida. A ligação foi recusada.
Comment[pt_BR]=A parte "convidada" enviou uma senha inválida. Conexão recusada.
Comment[ru]=Удалённый пользователь ввёл неверный пароль. В доступе отказано.
Comment[sk]=Pozvaný účastník poslal zlé heslo. Spojenie zamietnuté.
Comment[sl]=Povabljena stranka je poslala nepravilno geslo. Povezava zavrnjena.
Comment[sv]=Den inbjudna personen skickade ett ogiltigt lösenord. Anslutning vägrades.
Comment[th]=ผู้เข้าร่วมการเชิญชวนส่งรหัสผ่านมาไม่ถูกต้อง ทำการปฏิเสธการเชื่อมต่อ
Comment[uk]=Запрошена сторона надіслала невірний пароль. У з'єднанні відмовлено.
Comment[ven]=Murado o rambiwaho o rumela phasiwede isa shumi. Vhukwamani ho hanwa.
Comment[xh]=Umhlangano omenyiweyo uthumele igama lokugqitha elisebenzayo. Uxhulumano lwa liwe.
Comment[zh_CN]=受邀请方发送的口令不对。连接被拒绝。
Comment[zh_TW]=被邀請的一方送出無效的密碼。已拒絕連線。
Comment[zu]=Ingxenye emenyiwe ithumele igama lokungena alivunyelwanga. Ukuxhumana kwaliwe.
default_presentation=2
[NewConnectionOnHold]
Name=NewConnectionOnHold
Name[ar]=اتصال جديد على الانتظار
Name[bg]=Поддържа Нова Връзка
Name[ca]=Nova connexió en espera
Name[cs]=Nové spojení pozdrženo
Name[da]=NyForbindelseSatPåHold
Name[de]=NeueVerbindungWartet
Name[el]=Νέα σύνδεση σε αναμονή
Name[eo]=NovaKonektoAtendante
Name[es]=Nueva conexión en espera
Name[et]=UusÜhendusOotel
Name[fr]=Nouvelle connexion au raccroché
Name[he]=חיבור חדש בהמתנה
Name[hr]=NovaVezaNaČekanju
Name[hu]=ÚjKapcsolatTartva
Name[is]=NýTengingÁBið
Name[it]=Nuova connessione da tenere
Name[ja]=維持中の新規接続
Name[lt]=Naujas prisijungimas sulaikytas
Name[mk]=НоваВрскаНаПочек
Name[mt]=KonnessjoniĠdidaMiżmuma
Name[nb]=Ny oppkobling venter
Name[nl]=Nieuwe verbinding is wachtende
Name[nn]=Nytt samband ventar
Name[nso]=Kgokagano ye Ntshwa e Emišitšwe
Name[pl]=Nowe połączenie wstrzymane
Name[pt_BR]=Nova Conexão
Name[ro]=Conexiune nouă în aşteptare
Name[ru]=Новое соединение отключено
Name[sk]=Nové spojenie podržané
Name[sl]=Nova povezava na čakanju
Name[sv]=Ny anslutning väntar
Name[uk]=ОчікуютьНовіЗ'єднання
Name[ven]=Vhukwamani vhuswa ho imiswa
Name[xh]=Uxhulumano Olutsha Lumisiwe
Name[zh_CN]=新连接暂时搁置
Name[zh_TW]=保持的新連線
Name[zu]=UkuxhumanisaOkushaKubanjiwe
Comment=Connection requested, user must accept
Comment[af]=Verbinding versoekte, gebruiker moet aanvaar
Comment[ar]=طلب اتصال, يجب أن يقبل المستخدم
Comment[bg]=Заявка за връзка, потребителя трябва да приеме
Comment[bs]=Zatražena konekcija, korisnik mora prihvatiti
Comment[ca]=Connexió solicitada, l'usuari ha d'acceptar-la
Comment[cs]=Vyžadováno spojení, uživatel musí přijmout
Comment[da]=Forbindelse forespurgt, bruger skal acceptere
Comment[de]=Verbindungsanfrage, Benutzer muss bestätigen
Comment[el]=Ζητήθηκε σύνδεση, ο χρήστης πρέπει να αποδεχθεί
Comment[eo]=Konekto pridemandita, uzanto devas akcepti
Comment[es]=Conexón solicitada, el usuario debe aceptar
Comment[et]=Nõutakse ühendust, kasutaja peab seda lubama
Comment[fi]=Yhteyttä pyydettiin, käyttäjän tulee hyväksyä
Comment[fr]=Connexion demandée, l'utilisateur doit accepter
Comment[he]=נתבקש חיבור, על המשתמש לקבלו
Comment[hr]=Veza je zatražena, korisnik mora prihvatiti
Comment[hu]=Csatlakozási kérés, megerősítés szükséges
Comment[is]=Beiðni um tengingu, notandi verður að samþykkja
Comment[it]=Connessione richiesta, l'utente deve accettare
Comment[ja]=接続が要求されています。ユーザは受け入れなければなりません。
Comment[lt]=Paprašyta prisijungimo, vartotojas turėtų priimti prašymą
Comment[mk]=Врска е побарана, корисникот мора да прифати
Comment[mt]=Konnessjoni mitluba, user irid jaċċetta
Comment[nb]=Oppkobling ønskes, bruker må akseptere.
Comment[nl]=Verbinding verzocht, gebruiker dient te accepteren
Comment[nn]=Samband førespurd, brukar må godta
Comment[nso]=Kgokagano e kgopetšwe, modiriši o swanetše go dumela
Comment[pl]=Próba połączenia, musi być zaakceptowana przez użytkownika
Comment[pt]=A ligação foi pedida e o utilizador deve aceitar
Comment[pt_BR]=Conexão requisitada; o usuário deve aceitar
Comment[ro]=Cerere de conectare; utilizatorul trebuie să accepte
Comment[ru]=Запрос на соединение, требуется подтверждение пользователя
Comment[sk]=Vyžiadané spojenie, užívateľ musí akceptovať
Comment[sl]=Povezava vzpostavljena, uporabnik mora sprejeti
Comment[sv]=Anslutning begärd, användaren måste acceptera
Comment[th]=มีการร้องขอเชื่อมต่อ ผู้ใช้ต้องทำการยอมรับ
Comment[uk]=Запрошено з'єднання, користувач має прийняти
Comment[ven]=Vhukwamani ho humbelwa, mushumisi u fanela u tanganedza
Comment[xh]=Uxhulumaniso luceliwe, umsebenzisi kufanele amkele
Comment[zh_CN]=连接已请求,用户必须接受
Comment[zh_TW]=已請求連線,使用者必須接受
Comment[zu]=Ukuxhumanisa kuceliwe, umsebenzi kumele ivunyelwe
default_presentation=4
[NewConnectionAutoAccepted]
Name=NewConnectionAutoAccepted
Name[ar]=اتصال جديد مقبول تلقائياً
Name[bg]=Автоматично Приема Нова Връзка
Name[ca]=Nova connexió auto-acceptada
Name[cs]=Nové spojení automaticky přijato
Name[da]=NyForbindelseAutomatiskAccepteret
Name[de]=NeueVerbindungAutomatischAkzeptiert
Name[el]=Αυτόματη αποδοχή νέας σύνδεσης
Name[eo]=NovaKonektoAŭtomateAkceptita
Name[es]=Nueva conexión auto aceptada
Name[et]=UueÜhendusegaAutomaatseltNõus
Name[fr]=Nouvelle connexion auto-acceptée
Name[he]=חיבור חדש נתקבל אוטומטית
Name[hr]=NovaVezaAutoPrihvaćena
Name[hu]=ÚjKapcsolatAutoElfogadva
Name[is]=NýTengingSjálfvirktSamþykkt
Name[it]=Accettata nuova connessione automatica
Name[ja]=新規接続の新規受け入れ
Name[lt]=Naujas prisijungimas automatiškai priimtas
Name[mk]=НоваВрскаАвтоматскиПрифатена
Name[mt]=KonnessjoniĠdidaAwtoAċċettata
Name[nb]=Ny oppkobling aksepteres automatisk
Name[nl]=Nieuwe verbinding automatisch geaccepteerd
Name[nn]=Nytt samband automatisk godteke
Name[nso]=Kgokagano ye Ntshwa yago Itiriša e Amogetšwe
Name[pl]=Nowe połączenie automatycznie przyjęte
Name[pt_BR]=Nova Conexão com aceitação automática
Name[ro]=Conexiune nouă acceptată automat
Name[ru]=Соединение создается автоматически
Name[sk]=Nové spojenie automaticky akceptované
Name[sl]=Nova povezava samodejno sprejeta
Name[sv]=Ny anslutning accepterades automatiskt
Name[th]=รับการเชื่อมต่ออัตโนมัติ
Name[uk]=НовіЗ'єднанняАвтоматичноПрийняті
Name[ven]=Vhukwamani vhuswa ho tanganedzhwa
Name[xh]=Uxhulumano Olutsha Lwamkelwe Ngokuzenzekelayo
Name[zh_CN]=新连接自动接受
Name[zh_TW]=自動接受的新連線
Name[zu]=UkuxhumanisaOkushaKokuzenzakalelaKuvunyelwe
Comment=New connection automatically established
Comment[af]=Nuwe verbinding automaties vasgestel
Comment[ar]=اتصالات جديدة أُنشئت تلقائياً
Comment[bg]=Автоматично установяване на нова връзка
Comment[bs]=Automatski uspostavljena nova konekcija
Comment[ca]=Nova connexió establerta automàticament
Comment[cs]=Automaticky navázáno nové spojení
Comment[da]=Ny forbindelse automatisk etableret
Comment[de]=Neue Verbindung automatisch hergestellt
Comment[el]=Νέα σύνδεση αυτόματα αποκαταστάθηκε
Comment[eo]=Nova konekto aŭtomate akceptita
Comment[es]=Nueva conexión establecida automáticamente
Comment[et]=Uus ühendus automaatselt loodud
Comment[fi]=Uisi yhteys muodostettu automaattisesti
Comment[fr]=Nouvelle connexion établie automatiquement
Comment[he]=נוצר חיבור חדש באופן אוטומטי
Comment[hr]=Nova veza automatski prihvaćena
Comment[hu]=Automatikusan létrejött az új kapcsolat
Comment[is]=Nýjar tengingar sjálfkrafa samþykktar
Comment[it]=Stabilita nuova connessione automaticamente
Comment[ja]=新規接続は自動的に確立されます
Comment[lt]=Naujas prisijungimas sukurtas automatiškai
Comment[mk]=Нова врска автоматски поставена
Comment[mt]=Konnessjoni ġdida aċċettata awtomatikament
Comment[nb]=Ny oppkobling automatisk opprettet
Comment[nl]=Nieuwe verbinding automatisch opgebouwd
Comment[nn]=Nytt samband automatisk oppretta
Comment[nso]=Kgokagano ye ntshwa e hlagišitšwe kago itiriša
Comment[pl]=Nowe połączenie ustanowiono automatycznie
Comment[pt]=A nova ligação foi estabelecida automaticamente
Comment[pt_BR]=Nova conexão estabelecida automaticamente
Comment[ro]=Conexiune nouă stabilită automat
Comment[ru]=Новое соединение устанавливается автоматически
Comment[sk]=Nové spojenie automaticky vytvorené
Comment[sl]=Nova povezava samodejno vzpostavljena
Comment[sv]=Ny anslutning automatiskt upprättad
Comment[th]=เปิดการเชื่อมต่อใหม่อัตโนมัติ
Comment[uk]=Автоматично встановлено нове з'єднання
Comment[ven]=Vhukwamani vhuswa ho itwa na zwenezwo
Comment[xh]=Uxhulumaniso olutsha lufunyenwe ngokuzenzekelayo
Comment[zh_CN]=自动建立新连接
Comment[zh_TW]=已自動建立新連線
Comment[zu]=Ukuxhumana okusha kuyazisungulela
default_presentation=4
[TooManyConnections]
Name=TooManyConnections
Name[ar]=اتصالات عديدة جداً
Name[bg]=Твърде Много Връзки
Name[ca]=Masses connexions
Name[cs]=Příliš mnoho spojení
Name[da]=ForMangeForbindelser
Name[de]=ZuVieleVerbindungen
Name[el]=Πάρα πολλές συνδέσεις
Name[eo]=TroMultajKonektoj
Name[es]=Demasiadas conexiones
Name[et]=LiigaPaljuÜhendusi
Name[fr]=Trop de connexions
Name[he]=יותר מדיי חיבורים
Name[hr]=PrevišeVeza
Name[hu]=TúlSokKapcsolat
Name[is]=OfMargarTengingar
Name[it]=Troppe Connessioni
Name[ja]=多すぎる接続
Name[lt]=Per daug prisijungimų
Name[mk]=ПремногуВрски
Name[mt]=WisqKonnessjonijiet
Name[nb]=For mange oppkoblinger
Name[nl]=Teveel verbindingen
Name[nn]=For mange samband
Name[nso]=Dikgokagano tše Ntšhi Kudu
Name[pl]=Zbyt wiele połączeń
Name[pt_BR]=Conexões em excesso
Name[ro]=Prea multe conexiuni
Name[ru]=Слишком много соединений
Name[sk]=Príliš veľa spojení
Name[sl]=Preveč povezav
Name[sv]=För många anslutningar
Name[th]=มีการเชื่อมต่อมากเกินไป
Name[tr]=ÇokFazlaBağlantı
Name[uk]=ЗабагатоЗ'єднань
Name[ven]=Vhukwamani vhunzhi
Name[xh]=Uxhulumaniso Oluninzi Kakhulu
Name[zh_CN]=连接太多
Name[zh_TW]=太多連線
Name[zu]=UkuxhumanaOkuningi
Comment=Busy, connection refused
Comment[af]=Besig, verbinding geweier
Comment[ar]=مشغول , الاتصال رُفض
Comment[bg]=Заето, връзката е отказана
Comment[bs]=Zauzet, konekcija odbijena
Comment[ca]=Ocupat, connexió refusada
Comment[cs]=Zaneprázdněn, spojení odmítnuto
Comment[da]=Optaget, forbindelse afslået
Comment[de]=Beschäftigt, Verbindung abgelehnt
Comment[el]=Απασχολημένο, η σύνδεση απορρίφθηκε
Comment[eo]=Laborante, konekto rifuzita
Comment[es]=Ocupado, conexión rechazada
Comment[et]=Hõivatud, ühendusest keelduti
Comment[fi]=Varattu, yhteys hylättiin
Comment[fr]=Occupé, connexion refusée
Comment[he]=תפוס, החיבור נדחה
Comment[hr]=Zauzeto, veza odbijena
Comment[hu]=Foglalt, a csatlakozási kérés visszautasítva
Comment[is]=Uptekinn, tengingu hafnað
Comment[it]=Occupato, connessione rifiutata
Comment[ja]=ビジーです。接続は拒否されました
Comment[lt]=Užimtas, prisijungimas atmestas
Comment[mk]=Зафатено, врската одбиена
Comment[mt]=Okkupat, konnessjoni miċħuda
Comment[nb]=Opptatt, oppkobling avvist
Comment[nl]=Bezig, verbinding geweigerd
Comment[nn]=Oppteken, samband nekta
Comment[nso]=E swaregile, kgokagano e gannwe
Comment[pl]=Zajęte, połączenie odrzucone
Comment[pt]=Ocupado, a ligação foi recusada
Comment[pt_BR]=Ocupado; conexão recusada
Comment[ro]=Ocupat; conexiune refuzată
Comment[ru]=Занято, соединение закрыто
Comment[sk]=Zaneprázdnený, spojenie odmietnuté
Comment[sl]=zaposlen, povezava zavrnjena
Comment[sv]=Upptagen, anslutning vägras
Comment[th]=ยังไม่ว่าง ทำการปฏิเสธการเชื่อมต่อ
Comment[uk]=Зайнято, у з'єднанні відмовлено
Comment[ven]=U farakanea, vhukwamani ho hanwa
Comment[xh]=Uxhulumaniso, olu xakekileyo lwaliwe
Comment[zh_CN]=占线,连接拒绝
Comment[zh_TW]=忙碌,已拒絕連線
Comment[zu]=Imatasa,ukuxhumana kwaliwe
default_presentation=4
default_logfile=
[UnexpectedConnection]
Name=UnexpectedConnection
Name[ar]=اتصال غير متوقع
Name[bg]=Неочаквана Връзка
Name[ca]=Connexió inesperada
Name[cs]=Neočekávané spojení
Name[da]=UventetForbindelse
Name[de]=UnerwarteteVerbindung
Name[el]=Μη αναμενόμενη σύνδεση
Name[eo]=NeatenditaKonekto
Name[es]=Conexión inesperada
Name[et]=OotamatuÜhendus
Name[fr]=Connexion inattendue
Name[he]=חיבור בלתי צפוי
Name[hr]=NeočekivanaVeza
Name[hu]=NemVártKapcsolat
Name[is]=ÓvæntTenging
Name[it]=Connessione inaspettata
Name[ja]=予期しない接続
Name[lt]=Netikėtas prisijungimas
Name[mk]=НеочекуванаВрска
Name[mt]=KonnessjonijietMhuxMistennija
Name[nb]=Uventet oppkobling
Name[nl]=Onverwachte verbinding
Name[nn]=Uventa samband
Name[nso]=Kgokagano yeo ebego esa Emelwa
Name[pl]=Niespodziewane połączenie
Name[pt_BR]=Conexão não-aceita
Name[ro]=Conexiune neaşteptată
Name[ru]=Неожиданное соединение
Name[sk]=Neočakávane spojenie
Name[sl]=Nepričakovana povezava
Name[sv]=Oväntad anslutning
Name[th]=การเชื่อมต่อที่ไม่คาดหวัง
Name[tr]=Beklenmedik Bağlantı
Name[uk]=НеочікуванеЗ'єднання
Name[ven]=Vhukwamani vhu songo lavhelelwaho
Name[xh]=Uxhulumaniso Olungalindelwanga
Name[zh_CN]=未料到的连接
Name[zh_TW]=非預期的連線
Name[zu]=UkuxhumanaOkungalindelwe
Comment=Received unexpected connection, abort
Comment[af]=Ontvang onverwagte verbinding, staak
Comment[ar]=تم استلام اتصال غير متوقع , اقطع
Comment[bg]=Получи се неочаквана връзка, прекъсва
Comment[bs]=Primio neočekivanu konekciju, prekidam
Comment[ca]=Rebuda una connexió inesperada, abortant
Comment[cs]=Obdrženo neočekávané spojení, přerušeno
Comment[da]=Modtog uventet forbindelse, afbrød
Comment[de]=Unerwartete Verbindung hergestallt, Abbruch
Comment[el]=Λήψη μη αναμενόμενης σύνδεσης, διακοπή
Comment[eo]=Ricevis neatenditan konekton, haltis
Comment[es]=Recibida conexión inesperada, abortar
Comment[et]=Saadi ootamatu ühendus, loobuti
Comment[fi]=Vastaanotettiin odottamaton yhteys, lopeta
Comment[fr]=Reçu une connexion inattendue, interruption
Comment[he]=נתקבל חיבור בלתי צפוי, בוטל
Comment[hr]=Primio sam neočekivanu vezu, prekid
Comment[hu]=Nem várt csatlakozási kérés, kilépés
Comment[is]=Tók á móti óvæntri tengingu, hætti
Comment[it]=Ricevuta connessione inaspettata, termina
Comment[ja]=予期しない接続を受信しました。廃棄します。
Comment[lt]=Gautas netikėtas prisijungimas, nutraukiama
Comment[mk]=Примена неочекувана врска, прекини
Comment[mt]=Irċevejt konnessjoni mhux mistennija, ieqaf
Comment[nb]=Mottok uventet oppkobling, avbryt
Comment[nl]=Ontving een onverwachte verbinding, gestopt
Comment[nn]=Mottok uventa samband, avbryt
Comment[nso]=Amogetše kgokagano yeo ebego esa emelwa, bolaya
Comment[pl]=Otrzymano niespodziewane połączenie. Przerwane.
Comment[pt]=Foi recebida uma ligação inesperada, a interromper
Comment[pt_BR]=conexão recebida inesperadamente; abortar
Comment[ro]=A fost recepţionată o conexiune neaşteptată şi a fost anulată
Comment[ru]=Получено неожиданное соединение. Отключение
Comment[sk]=Prijaté neočakávane spojenie, ukončujem
Comment[sl]=Prejeta nepričakovana povezava, prekinjam
Comment[sv]=Tog emot oväntad anslutning, avbryter
Comment[th]=ได้รับการเชื่อมต่อที่ไม่คาดหวัง ทำการยกเลิก
Comment[uk]=Отримано неочікуване з'єднання, скасовую
Comment[ven]=Vhukwamani vhu songo lavhelelwaho ho tanganedzhwaho, litsha
Comment[xh]=Ufumene uxhulumaniso olungalindelekanga, lahla
Comment[zh_CN]=收到未料到连接,中止
Comment[zh_TW]=接收到非預期的連線,放棄
Comment[zu]=Isithole ukuxhumana okungalindelekanga, hushula
default_presentation=4

BIN
krfb/eyes-closed24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

BIN
krfb/eyes-open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

BIN
krfb/eyes-open24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

View File

@@ -1,73 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#include "framebuffer.h"
#include "config-krfb.h"
#include <X11/Xutil.h>
FrameBuffer::FrameBuffer(WId id, QObject *parent)
: QObject(parent), win(id)
{
}
FrameBuffer::~FrameBuffer()
{
delete fb;
}
char *FrameBuffer::data()
{
return fb;
}
QList< QRect > FrameBuffer::modifiedTiles()
{
QList<QRect> ret = tiles;
tiles.clear();
return ret;
}
int FrameBuffer::width()
{
return 0;
}
int FrameBuffer::height()
{
return 0;
}
void FrameBuffer::getServerFormat(rfbPixelFormat &)
{
}
int FrameBuffer::depth()
{
return 32;
}
int FrameBuffer::paddedWidth()
{
return width() * depth() / 8;
}
void FrameBuffer::startMonitor()
{
}
void FrameBuffer::stopMonitor()
{
}
#include "framebuffer.moc"

View File

@@ -1,57 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#ifndef FRAMEBUFFER_H
#define FRAMEBUFFER_H
#include "rfb.h"
#include <kdemacros.h>
#include <QtCore/QObject>
#include <QtCore/QRect>
#include <QtCore/QList>
#include <QtGui/QWidget>
class FrameBuffer;
/**
@author Alessandro Praduroux <pradu@pradu.it>
*/
class KDE_EXPORT FrameBuffer : public QObject
{
Q_OBJECT
public:
explicit FrameBuffer(WId id, QObject *parent = 0);
virtual ~FrameBuffer();
char *data();
virtual QList<QRect> modifiedTiles();
virtual int paddedWidth();
virtual int width();
virtual int height();
virtual int depth();
virtual void startMonitor();
virtual void stopMonitor();
virtual void getServerFormat(rfbPixelFormat &format);
protected:
WId win;
char *fb;
QList<QRect> tiles;
private:
Q_DISABLE_COPY(FrameBuffer)
};
#endif

View File

@@ -1,134 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "framebuffermanager.h"
#include "framebufferplugin.h"
#include "krfbconfig.h"
#include <KDebug>
#include <KGlobal>
#include <KServiceTypeTrader>
#include <QtCore/QSharedPointer>
class FrameBufferManagerStatic
{
public:
FrameBufferManager instance;
};
K_GLOBAL_STATIC(FrameBufferManagerStatic, frameBufferManagerStatic)
FrameBufferManager::FrameBufferManager()
{
kDebug();
loadPlugins();
}
FrameBufferManager::~FrameBufferManager()
{
kDebug();
}
FrameBufferManager *FrameBufferManager::instance()
{
kDebug();
return &frameBufferManagerStatic->instance;
}
void FrameBufferManager::loadPlugins()
{
kDebug();
// Load the all the plugin factories here, for use later.
KService::List offers = KServiceTypeTrader::self()->query("krfb/framebuffer");
KService::List::const_iterator iter;
for (iter = offers.constBegin(); iter < offers.constEnd(); ++iter) {
QString error;
KService::Ptr service = *iter;
KPluginFactory *factory = KPluginLoader(service->library()).factory();
if (!factory) {
kWarning() << "KPluginFactory could not load the plugin:" << service->library();
continue;
}
FrameBufferPlugin *plugin = factory->create<FrameBufferPlugin>(this);
if (plugin) {
kDebug() << "Loaded plugin:" << service->name();
m_plugins.insert(service->library(), plugin);
} else {
kDebug() << error;
}
}
}
QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id)
{
kDebug();
// See if there is still an existing framebuffer to this WId.
if (m_frameBuffers.contains(id)) {
QWeakPointer<FrameBuffer> weakFrameBuffer = m_frameBuffers.value(id);
if (weakFrameBuffer) {
kDebug() << "Found cached frame buffer.";
return weakFrameBuffer.toStrongRef();
} else {
kDebug() << "Found deleted cached frame buffer. Don't use.";
m_frameBuffers.remove(id);
}
}
// We don't already have that frame buffer.
QMap<QString, FrameBufferPlugin *>::const_iterator iter = m_plugins.constBegin();
while (iter != m_plugins.constEnd()) {
if (iter.key() == KrfbConfig::preferredFrameBufferPlugin()) {
kDebug() << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin();
QSharedPointer<FrameBuffer> frameBuffer(iter.value()->frameBuffer(id));
if (frameBuffer) {
m_frameBuffers.insert(id, frameBuffer.toWeakRef());
return frameBuffer;
}
}
++iter;
}
// No valid framebuffer plugin found.
kDebug() << "No valid framebuffer found. returning null.";
return QSharedPointer<FrameBuffer>();
}
#include "framebuffermanager.moc"

View File

@@ -1,63 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KRFB_FRAMEBUFFERMANAGER_H
#define KRFB_FRAMEBUFFERMANAGER_H
#include "framebuffer.h"
#include <kdemacros.h>
#include <QtCore/QMap>
#include <QtCore/QObject>
#include <QtCore/QSharedPointer>
#include <QtCore/QWeakPointer>
#include <QtGui/QWidget>
class FrameBufferPlugin;
class KPluginFactory;
class KDE_EXPORT FrameBufferManager : public QObject
{
Q_OBJECT
friend class FrameBufferManagerStatic;
public:
static FrameBufferManager *instance();
virtual ~FrameBufferManager();
QSharedPointer<FrameBuffer> frameBuffer(WId id);
private:
Q_DISABLE_COPY(FrameBufferManager)
FrameBufferManager();
void loadPlugins();
QMap<QString, FrameBufferPlugin *> m_plugins;
QMap<WId, QWeakPointer<FrameBuffer> > m_frameBuffers;
};
#endif // Header guard

View File

@@ -1,36 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "framebufferplugin.h"
#include "framebuffer.h"
FrameBufferPlugin::FrameBufferPlugin(QObject *parent, const QVariantList &)
: QObject(parent)
{
}
FrameBufferPlugin::~FrameBufferPlugin()
{
}
#include "framebufferplugin.moc"

View File

@@ -1,45 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef LIB_KRFB_FRAMEBUFFERPLUGIN_H
#define LIB_KRFB_FRAMEBUFFERPLUGIN_H
#include <kdemacros.h>
#include <QtCore/QVariantList>
#include <QtGui/QWidget>
class FrameBuffer;
class KDE_EXPORT FrameBufferPlugin : public QObject
{
Q_OBJECT
public:
FrameBufferPlugin(QObject *parent, const QVariantList &args);
virtual ~FrameBufferPlugin();
virtual FrameBuffer *frameBuffer(WId id) = 0;
};
#endif // Header guard

102
krfb/invitation.cc Normal file
View File

@@ -0,0 +1,102 @@
/***************************************************************************
invitation.cpp
-------------------
begin : Sat Mar 30 2002
copyright : (C) 2002 by Tim Jansen
(C) Stefan Taferner (password encryption)
email : tim@tjansen.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "invitation.h"
/*
* Function for (en/de)crypting strings for config file, taken from KMail
* Author: Stefan Taferner <taferner@alpin.or.at>
*/
QString cryptStr(const QString &aStr) {
QString result;
for (unsigned int i = 0; i < aStr.length(); i++)
result += (aStr[i].unicode() < 0x20) ? aStr[i] :
QChar(0x1001F - aStr[i].unicode());
return result;
}
Invitation::Invitation() :
m_viewItem(0) {
m_password = KApplication::randomString(4)+
"-"+
KApplication::randomString(4);
m_creationTime = QDateTime::currentDateTime();
m_expirationTime = QDateTime::currentDateTime().addSecs(INVITATION_DURATION);
}
Invitation::Invitation(const Invitation &x) :
m_password(x.m_password),
m_creationTime(x.m_creationTime),
m_expirationTime(x.m_expirationTime),
m_viewItem(0) {
}
Invitation::Invitation(KConfig* config, int num) {
m_password = cryptStr(config->readEntry(QString("password%1").arg(num), ""));
m_creationTime = config->readDateTimeEntry(QString("creation%1").arg(num));
m_expirationTime = config->readDateTimeEntry(QString("expiration%1").arg(num));
m_viewItem = 0;
}
Invitation::~Invitation() {
if (m_viewItem)
delete m_viewItem;
}
Invitation &Invitation::operator= (const Invitation&x) {
m_password = x.m_password;
m_creationTime = x.m_creationTime;
m_expirationTime = x.m_expirationTime;
if (m_viewItem)
delete m_viewItem;
m_viewItem = 0;
return *this;
}
void Invitation::save(KConfig *config, int num) const {
config->writeEntry(QString("password%1").arg(num), cryptStr(m_password));
config->writeEntry(QString("creation%1").arg(num), m_creationTime);
config->writeEntry(QString("expiration%1").arg(num), m_expirationTime);
}
QString Invitation::password() const {
return m_password;
}
QDateTime Invitation::expirationTime() const {
return m_expirationTime;
}
QDateTime Invitation::creationTime() const {
return m_creationTime;
}
bool Invitation::isValid() const {
return m_expirationTime > QDateTime::currentDateTime();
}
void Invitation::setViewItem(KListViewItem *i) {
if (m_viewItem)
delete m_viewItem;
m_viewItem = i;
}
KListViewItem *Invitation::getViewItem() const{
return m_viewItem;
}

View File

@@ -1,120 +0,0 @@
/***************************************************************************
Copyright 2002 Tim Jansen <tim@tjansen.de>
Copyright 2002 Stefan Taferner <taferner@kde.org>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "invitation.h"
#include <KConfigGroup>
#include <KDebug>
#include <KRandom>
#include <KStringHandler>
// a random string that doesn't contain i, I, o, O, 1, 0
// based on KRandom::randomString()
static QString readableRandomString(int length)
{
QString str;
while (length) {
int r = KRandom::random() % 62;
r += 48;
if (r > 57) {
r += 7;
}
if (r > 90) {
r += 6;
}
char c = char(r);
if ((c == 'i') ||
(c == 'I') ||
(c == '1') ||
(c == 'o') ||
(c == 'O') ||
(c == '0')) {
continue;
}
str += c;
length--;
}
return str;
}
Invitation::Invitation()
{
m_password = readableRandomString(4) + '-' + readableRandomString(3);
m_creationTime = QDateTime::currentDateTime();
m_expirationTime = QDateTime::currentDateTime().addSecs(INVITATION_DURATION);
}
Invitation::Invitation(const Invitation &x)
: m_password(x.m_password), m_creationTime(x.m_creationTime), m_expirationTime(x.m_expirationTime)
{
}
Invitation::Invitation(const KConfigGroup &config)
{
m_password = KStringHandler::obscure(config.readEntry("password", QString()));
kDebug() << "read: " << config.readEntry("password", QString()) << " = " << m_password;
m_creationTime = config.readEntry("creation", QDateTime());
m_expirationTime = config.readEntry("expiration", QDateTime());
}
Invitation::~Invitation()
{
}
Invitation &Invitation::operator= (const Invitation &x)
{
m_password = x.m_password;
m_creationTime = x.m_creationTime;
m_expirationTime = x.m_expirationTime;
return *this;
}
void Invitation::save(KConfigGroup &config) const
{
config.writeEntry("password", KStringHandler::obscure(m_password));
config.writeEntry("creation", m_creationTime);
config.writeEntry("expiration", m_expirationTime);
}
QString Invitation::password() const
{
return m_password;
}
QDateTime Invitation::expirationTime() const
{
return m_expirationTime;
}
QDateTime Invitation::creationTime() const
{
return m_creationTime;
}
bool Invitation::isValid() const
{
return m_expirationTime > QDateTime::currentDateTime();
}
bool Invitation::operator ==(const Invitation &ot)
{
return m_creationTime == ot.m_creationTime && m_password == ot.m_password;
}

View File

@@ -18,36 +18,40 @@
#ifndef INVITATION_H
#define INVITATION_H
#include <KApplication>
#include <KConfig>
#include <kapplication.h>
#include <klistview.h>
#include <kconfig.h>
#include <qobject.h>
#include <qstring.h>
#include <qdatetime.h>
#include <QtCore/QDateTime>
#include <QtCore/QObject>
const int INVITATION_DURATION = 60 * 60;
const int INVITATION_DURATION = 60*60;
class Invitation
{
QString cryptStr(const QString &aStr);
class Invitation {
public:
Invitation();
~Invitation();
Invitation(const KConfigGroup &config);
Invitation(const Invitation &x);
Invitation &operator= (const Invitation &x);
Invitation();
~Invitation();
Invitation(KConfig* config, int num);
Invitation(const Invitation &x);
Invitation &operator= (const Invitation&x);
bool operator == (const Invitation &ot);
QString password() const;
QDateTime expirationTime() const;
QDateTime creationTime() const;
bool isValid() const;
QString password() const;
QDateTime expirationTime() const;
QDateTime creationTime() const;
bool isValid() const;
void save(KConfigGroup &config) const;
void setViewItem(KListViewItem*);
KListViewItem* getViewItem() const;
void save(KConfig *config, int num) const;
private:
QString m_password;
QDateTime m_creationTime;
QDateTime m_expirationTime;
QString m_password;
QDateTime m_creationTime;
QDateTime m_expirationTime;
KListViewItem *m_viewItem;
};
#endif

View File

@@ -1,130 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#include "invitationmanager.h"
#include "invitationmanager.moc"
#include <KConfigGroup>
#include <KConfig>
#include <KGlobal>
#include <QtCore/QTimer>
class InvitationManagerPrivate
{
public:
InvitationManager instance;
};
K_GLOBAL_STATIC(InvitationManagerPrivate, invitationManagerPrivate)
InvitationManager *InvitationManager::self()
{
return &invitationManagerPrivate->instance;
}
InvitationManager::InvitationManager()
{
loadInvitations();
QTimer *refreshTimer = new QTimer(this);
connect(refreshTimer, SIGNAL(timeout()), SLOT(loadInvitations()));
refreshTimer->start(1000 * 60);
}
InvitationManager::~InvitationManager()
{
}
void InvitationManager::invalidateOldInvitations()
{
int invNum = invitationList.size();
while (invNum--) {
if (!invitationList[invNum].isValid()) {
invitationList.removeAt(invNum);
}
}
saveInvitations();
}
void InvitationManager::loadInvitations()
{
int invNum = invitationList.size();
KSharedConfigPtr conf = KGlobal::config();
KConfigGroup invitationConfig(conf, "Invitations");
int numInv = invitationConfig.readEntry("invitation_num", 0);
invitationList.clear();
for (int i = 0; i < numInv; i++) {
KConfigGroup ic(conf, QString("Invitation_%1").arg(i));
invitationList.append(Invitation(ic));
}
invalidateOldInvitations();
if (numInv != invNum) {
emit invitationNumChanged(invitationList.size());
}
}
Invitation InvitationManager::addInvitation()
{
Invitation i;
invitationList.append(i);
emit invitationNumChanged(invitationList.size());
saveInvitations();
return i;
}
const QList< Invitation > & InvitationManager::invitations()
{
return invitationList;
}
void InvitationManager::saveInvitations()
{
KSharedConfigPtr conf = KGlobal::config();
KConfigGroup invitationConfig(conf, "Invitations");
int invNum = invitationList.size();
invitationConfig.writeEntry("invitation_num", invNum);
for (int i = 0; i < invNum; i++) {
KConfigGroup ic(conf, QString("Invitation_%1").arg(i));
invitationList[i].save(ic);
}
conf->sync();
}
int InvitationManager::activeInvitations()
{
invalidateOldInvitations();
return invitationList.size();
}
void InvitationManager::removeInvitation(const Invitation &inv)
{
invitationList.removeAll(inv);
saveInvitations();
emit invitationNumChanged(invitationList.size());
}
void InvitationManager::removeAllInvitations()
{
invitationList.clear();
saveInvitations();
emit invitationNumChanged(invitationList.size());
}

View File

@@ -1,58 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#ifndef INVITATIONMANAGER_H
#define INVITATIONMANAGER_H
#include "invitation.h"
#include <QtCore/QList>
#include <QtCore/QObject>
class InvitationManagerPrivate;
/**
@author Alessandro Praduroux <pradu@pradu.it>
*/
class InvitationManager : public QObject
{
Q_OBJECT
friend class InvitationManagerPrivate;
public:
static InvitationManager *self();
~InvitationManager();
Invitation addInvitation();
int activeInvitations();
void removeInvitation(const Invitation &inv);
void removeAllInvitations();
const QList<Invitation> &invitations();
signals:
void invitationNumChanged(int);
public Q_SLOTS:
void loadInvitations();
void saveInvitations();
private:
void invalidateOldInvitations();
InvitationManager();
static InvitationManager *_self;
QList<Invitation> invitationList;
};
#endif

View File

@@ -1,112 +0,0 @@
/*
Copyright (C) 2009-2010 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "invitationsrfbclient.h"
#include "invitationmanager.h"
#include "krfbconfig.h"
#include "sockethelpers.h"
#include "connectiondialog.h"
#include <KNotification>
#include <KLocale>
bool InvitationsRfbClient::checkPassword(const QByteArray & encryptedPassword)
{
bool allowUninvited = KrfbConfig::allowUninvitedConnections();
QByteArray password = KrfbConfig::uninvitedConnectionPassword().toLocal8Bit();
bool authd = false;
kDebug() << "about to start autentication";
if (allowUninvited) {
authd = vncAuthCheckPassword(password, encryptedPassword);
}
if (!authd) {
QList<Invitation> invlist = InvitationManager::self()->invitations();
foreach(const Invitation & it, invlist) {
kDebug() << "checking password";
if (vncAuthCheckPassword(it.password().toLocal8Bit(), encryptedPassword)
&& it.isValid())
{
authd = true;
InvitationManager::self()->removeInvitation(it);
break;
}
}
}
if (!authd) {
if (InvitationManager::self()->invitations().size() > 0) {
KNotification::event("InvalidPasswordInvitations",
i18n("Failed login attempt from %1: wrong password", name()));
} else {
KNotification::event("InvalidPassword",
i18n("Failed login attempt from %1: wrong password", name()));
}
return false;
}
return true;
}
void PendingInvitationsRfbClient::processNewClient()
{
QString host = peerAddress(m_rfbClient->sock) + ":" + QString::number(peerPort(m_rfbClient->sock));
bool allowUninvited = KrfbConfig::allowUninvitedConnections();
if (!allowUninvited && InvitationManager::self()->activeInvitations() == 0) {
KNotification::event("UnexpectedConnection",
i18n("Refused uninvited connection attempt from %1", host));
reject();
} else if (!KrfbConfig::askOnConnect()) {
KNotification::event("NewConnectionAutoAccepted",
i18n("Accepted connection from %1", host));
accept(new InvitationsRfbClient(m_rfbClient, parent()));
} else {
KNotification::event("NewConnectionOnHold",
i18n("Received connection from %1, on hold (waiting for confirmation)",
host));
InvitationsConnectionDialog *dialog = new InvitationsConnectionDialog(0);
dialog->setRemoteHost(host);
dialog->setAllowRemoteControl(KrfbConfig::allowDesktopControl());
connect(dialog, SIGNAL(okClicked()), SLOT(dialogAccepted()));
connect(dialog, SIGNAL(cancelClicked()), SLOT(reject()));
dialog->show();
}
}
void PendingInvitationsRfbClient::dialogAccepted()
{
InvitationsConnectionDialog *dialog = qobject_cast<InvitationsConnectionDialog *>(sender());
Q_ASSERT(dialog);
InvitationsRfbClient *client = new InvitationsRfbClient(m_rfbClient, parent());
client->setControlEnabled(dialog->allowRemoteControl());
accept(client);
}
#include "invitationsrfbclient.moc"

View File

@@ -1,48 +0,0 @@
/*
Copyright (C) 2010 Collabora Ltd <info@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef INVITATIONSRFBCLIENT_H
#define INVITATIONSRFBCLIENT_H
#include "rfbclient.h"
class InvitationsRfbClient : public RfbClient
{
public:
InvitationsRfbClient(rfbClientPtr client, QObject* parent = 0)
: RfbClient(client, parent) {}
protected:
virtual bool checkPassword(const QByteArray & encryptedPassword);
};
class PendingInvitationsRfbClient : public PendingRfbClient
{
Q_OBJECT
public:
PendingInvitationsRfbClient(rfbClientPtr client, QObject *parent = 0)
: PendingRfbClient(client, parent) {}
protected Q_SLOTS:
virtual void processNewClient();
private Q_SLOTS:
void dialogAccepted();
};
#endif // INVITATIONSRFBCLIENT_H

View File

@@ -1,71 +0,0 @@
/*
Copyright (C) 2009-2010 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "invitationsrfbserver.h"
#include "invitationsrfbclient.h"
#include "krfbconfig.h"
#include "rfbservermanager.h"
#include <QtCore/QTimer>
#include <QtGui/QApplication>
#include <QtNetwork/QHostInfo>
#include <KNotification>
#include <KLocale>
#include <KMessageBox>
#include <KUser>
#include <DNSSD/PublicService>
void InvitationsRfbServer::init()
{
InvitationsRfbServer *server;
server = new InvitationsRfbServer;
server->setListeningPort(KrfbConfig::port());
server->setListeningAddress("0.0.0.0"); // Listen on all available network addresses
server->setPasswordRequired(true);
QTimer::singleShot(0, server, SLOT(startAndCheck()));
}
PendingRfbClient* InvitationsRfbServer::newClient(rfbClientPtr client)
{
return new PendingInvitationsRfbClient(client, this);
}
void InvitationsRfbServer::startAndCheck()
{
if (!start()) {
KMessageBox::error(0, i18n("Failed to start the krfb server. Invitation-based sharing "
"will not work. Try setting another port in the settings and "
"restart krfb."));
} else {
//publish service
if (KrfbConfig::publishService()) {
DNSSD::PublicService *service = new DNSSD::PublicService(i18n("%1@%2 (shared desktop)",
KUser().loginName(),
QHostInfo::localHostName()),
"_rfb._tcp",
listeningPort());
service->publishAsync();
}
//disconnect when qApp quits
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(stop()));
}
}
#include "invitationsrfbserver.moc"

View File

@@ -1,43 +0,0 @@
/*
Copyright (C) 2009-2010 Collabora Ltd <info@collabora.co.uk>
@author George Goldberg <george.goldberg@collabora.co.uk>
@author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef INVITATIONSRFBSERVER_H
#define INVITATIONSRFBSERVER_H
#include "rfbserver.h"
class InvitationsRfbServer : public RfbServer
{
Q_OBJECT
public:
static void init();
protected:
InvitationsRfbServer() : RfbServer(0) {}
virtual PendingRfbClient* newClient(rfbClientPtr client);
private Q_SLOTS:
void startAndCheck();
private:
Q_DISABLE_COPY(InvitationsRfbServer)
};
#endif // INVITATIONSRFBSERVER_H

260
krfb/invite.ui Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,87 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2004 Nadeem Hasan <nhasan@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "invitedialog.h"
#include <KIconLoader>
#include <KLocale>
#include <KStandardGuiItem>
#include <QtGui/QCursor>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QToolTip>
InviteDialog::InviteDialog(QWidget *parent)
: KDialog(parent)
{
setCaption(i18n("Invitation"));
setButtons(User1 | Close | Help);
setHelp(QString(), "krfb");
setDefaultButton(NoDefault);
setMinimumSize(500, 300);
m_inviteWidget = new QWidget(this);
setupUi(m_inviteWidget);
pixmapLabel->setPixmap(KIcon("krfb").pixmap(128));
setMainWidget(m_inviteWidget);
setButtonGuiItem(User1, KStandardGuiItem::configure());
connect(btnCreateInvite, SIGNAL(clicked()),
SIGNAL(createInviteClicked()));
connect(btnEmailInvite, SIGNAL(clicked()),
SIGNAL(emailInviteClicked()));
connect(btnManageInvite, SIGNAL(clicked()),
SIGNAL(manageInviteClicked()));
connect(helpLabel, SIGNAL(linkActivated(QString)),
SLOT(showWhatsthis()));
}
void InviteDialog::slotUser1()
{
emit configureClicked();
}
void InviteDialog::enableInviteButton(bool enable)
{
btnCreateInvite->setEnabled(enable);
}
void InviteDialog::setInviteCount(int count)
{
btnManageInvite->setText(
i18n("&Manage Invitations (%1)...", count));
}
void InviteDialog::showWhatsthis()
{
QToolTip::showText(QCursor::pos(),
i18n("An invitation creates a one-time password that allows the receiver to connect to your desktop.\n"
"It is valid for only one successful connection and will expire after an hour if it has not been used. \n"
"When somebody connects to your computer a dialog will appear and ask you for permission.\n "
"The connection will not be established before you accept it. In this dialog you can also\n restrict "
"the other person to view your desktop only, without the ability to move your\n mouse pointer or press "
"keys.\nIf you want to create a permanent password for Desktop Sharing, allow 'Uninvited Connections' \n"
"in the configuration."));
}
#include "invitedialog.moc"

View File

@@ -1,57 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2004 Nadeem Hasan <nhasan@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef INVITEDIALOG_H
#define INVITEDIALOG_H
#include "ui_invitewidget.h"
#include <KDialog>
class QWidget;
class InviteDialog : public KDialog, public Ui::InviteWidget
{
Q_OBJECT
public:
InviteDialog(QWidget *parent);
~InviteDialog() {}
void enableInviteButton(bool enable);
public Q_SLOTS:
void setInviteCount(int count);
void showWhatsthis();
signals:
void createInviteClicked();
void emailInviteClicked();
void manageInviteClicked();
void configureClicked();
protected Q_SLOTS:
void slotUser1();
protected:
QWidget *m_inviteWidget;
};
#endif // INVITEDIALOG_H

101
krfb/kinetd_krfb.desktop Normal file
View File

@@ -0,0 +1,101 @@
[Desktop Entry]
Encoding=UTF-8
Type=Service
ServiceTypes=KInetDModule
Exec=krfb
X-KDE-FactoryName=kinetd
X-KDE-KINETD-id=krfb
X-KDE-KINETD-port=5900
X-KDE-KINETD-autoPortRange=100
X-KDE-KINETD-enabled=false
X-KDE-KINETD-argument=--kinetd
X-KDE-KINETD-multiInstance=false
X-KDE-KINETD-serviceURL=service:remotedesktop.kde:vnc://%h:%p;(type=shared),(username=%u),(fullname=%f)
X-KDE-KINETD-serviceAttributes=(type=shared),(username=%u),(fullname=%f)
Name=KRfb Desktop Sharing
Name[ar]=KRfb مشاركة سطح المكتب
Name[bg]=Споделяне на Работно място KRfb
Name[bs]=KRfb dijeljenje desktopa
Name[ca]=Compartició de l'escriptori KRfb
Name[cs]=Sdílení pracovní plochy KRfb
Name[da]=KRfb Skrivebordsdeling
Name[de]=KRfb Arbeitsfläche freigeben
Name[el]=KRfb μοίρασμα επιφάνειας εργασίας
Name[eo]=KRfb Tabula fordonado
Name[es]=Compartición de escritorio KRfb
Name[et]=KRfb Töölaua jagamine
Name[fi]=KRfb työpöytien jako
Name[fr]=Partage de bureau KRfb
Name[he]=שיתוף שולחנות עבודה של KRfb
Name[hr]=KRfb dijeljenje radne površine
Name[hu]=KRfb munkaasztal-megosztás
Name[is]=KRfb Skjáborðsmiðlun
Name[it]=Condivisione desktop KRfb
Name[ja]=KRfb デスクトップ共有
Name[lt]=KRfb dalinimasis darbastaliu
Name[mk]=KRfb Десктоп Делење
Name[mt]=Qsim tad-desktop KRfb
Name[nb]=KRfb skrivebordsdeling
Name[nn]=KRfb-skrivebordsdeling
Name[nso]=Kabagano ya Desktop ya KRfp
Name[pl]=KRfb Współdzielenie pulpitu
Name[pt]=Partilha do Ecrã KRfb
Name[pt_BR]=Compartilhamento do Ambiente de Trabalho KRfb
Name[ro]=Partajare ecran KRfb
Name[ru]=Общий рабочий стол KRfb
Name[sk]=KRfb zdieľanie pracovnej plochy
Name[sl]=Deljenje namizja z KRfb
Name[sv]=Krfb dela ut skrivbord
Name[th]=แบ่งการใช้งานพื้นที่ทำงานร่วมกัน
Name[tr]=KRfb Masaüstü Paylaşımı
Name[uk]=Спільні стільниця KRfb
Name[ven]=U kovhekana ha Desikithopo ya KRfb
Name[xh]=Desktop ye KRfb Isebenza ngokuhlangeneyo
Name[zh_CN]=KRfb 桌面共享
Name[zh_TW]=KRfb 桌面分享
Name[zu]=KRfb ukwahlukanisela kwe-Desktop Sharing
Comment=A daemon that allows you to share your desktop
Comment[af]='n bediener wat laat toe jy na deel jou werkskerm
Comment[ar]=مراقب يسمح لك بمشاركة سطح مكتبك
Comment[bg]=Демон който ви позволява да споделяте работното място
Comment[bs]=Daemon koji vam omogućuje da dijelite vaš desktop
Comment[ca]=Un dimoni que us permetrà compartir el vostre escriptori
Comment[cs]=Démon umožňující sdílení vaší plochy
Comment[da]=En dæmon der tillader dig at dele dit skrivebord
Comment[de]=Ein Dämon, der die Freigabe der Arbeitsfläche erlaubt
Comment[el]=Ένας δαίμονας που σας επιτρέπει να μοιραστείτε την επιφάνεια εργασίας σας
Comment[eo]=demono por permesi retan fordonadon de via tabulo
Comment[es]=Un demonio que le permite compartir su escritorio
Comment[et]=Deemon, mis lubab sul töölauda jagada
Comment[fi]=Palvelin joka mahdollistaa työpöytien jaon
Comment[fr]=Un démon qui vous permet de partager votre bureau
Comment[he]=תהליך שירות שמאפשר לך לשתף את שולחן העבודה שלך
Comment[hr]=Daemon koji vam omogućuje da dijelite svoju radnu površinu s drugima
Comment[hu]=Munkaasztal-megosztási szolgáltatás
Comment[is]=Þjónn sem leyfir þér að miðla skjáborðinu þínu
Comment[it]=Un demone che permette di condividere il tuo desktop
Comment[ja]=デスクトップ共有を可能にするデーモン
Comment[lt]=Tarnyba, leidžianti jums dalintis savo darbastaliu
Comment[mk]=Демон што дозволува да го делиш десктопот
Comment[mt]=Daemon li jħallik taqsam id-desktop ma' ħaddieħor
Comment[nb]=En programnisse som tillater deling av ditt skrivebord med andre
Comment[nl]=Een daemon waarmee u uw bureaublad kunt vrijgeven om te delen
Comment[nn]=Ein nisse som let deg dela skrivebordet
Comment[nso]=Daemon yeo ego dumelelago go abelana ka desktop ya gago
Comment[pl]=Usługa, która pozwala na współdzielenie pulpitu
Comment[pt]=Um servidor que lhe permite partilhar o seu ecrã
Comment[pt_BR]=Um servidor que permite a você compartilhar o seu ambiente de trabalho
Comment[ro]=Un demon care vă permite saă partajaţi sistemul dumneavoastră
Comment[ru]=Демон общего доступа к рабочему столу
Comment[sk]=Démon ktorý umožní zdieľať vašu pracovnú plochu
Comment[sl]=Demon, s katerim lahko delite vaše namizje
Comment[sv]=Demon som låter dig dela ut skrivbordet
Comment[th]=เดมอนอนุญาตให้คุณแบ่งการใช้งานพื้นที่ทำงานร่วมกัน
Comment[uk]=Демон, що дозволяє спільне використання стільниць
Comment[ven]=Daemon ine yani tendela nitshi kovhekana desktop yanu
Comment[xh]=Daemon ekuvumela ukuba wabe i desktop yakho
Comment[zh_CN]=允许您共享桌面的守护进程
Comment[zh_TW]=讓您分享您的桌面的伺服程式
Comment[zu]=I-daemoni ekuvumela uhlukaniselana nge-desktop

View File

@@ -1,51 +0,0 @@
[Desktop Entry]
Type=ServiceType
X-KDE-ServiceType=krfb/framebuffer
Comment=Frame Buffer plugins for KRfb
Comment[ast]=Complementu de buffer pa KRfb
Comment[bs]=Priključci framebafera za KRfb
Comment[ca]=Connectors de «framebuffer» per al KRfb.
Comment[ca@valencia]=Connectors de «framebuffer» per al KRfb.
Comment[cs]=Moduly Frame bufferu pro KRfb
Comment[da]=Framebuffer-plugins til KRfb
Comment[de]=Framebuffer-Module für KRfb
Comment[en_GB]=Frame Buffer plugins for KRfb
Comment[es]=Complementos de memoria intermedia de vídeo para KRfb
Comment[et]=KRfb kaadripuhvri plugin
Comment[eu]=Irteerako bideoaren pluginak KRfb-rentzako
Comment[fi]=Kehyspuskuriliitännäinen kohteelle KRfb
Comment[fr]=Modules de sortie vidéo pour KRfb
Comment[ga]=Breiseáin Mhaoláin Fráma le haghaidh KRfb
Comment[gl]=Engadido de frame buffer para KRfb
Comment[hr]=Priključci za međuspremnike okvira za KRfb
Comment[ia]=Plug-ins de Frame Buffer per KRfb
Comment[it]=Estensioni del framebuffer per KRfb
Comment[ja]=KRfb の フレームバッファプラグイン
Comment[kk]=KRfb кадр буфер плагині
Comment[km]=កម្មវិធី​ជំនួយ​ Frame Buffer សម្រាប់ KRfb
Comment[ko]=KRfb 프레임버퍼 플러그인
Comment[lt]=Frame Buffer priedai skirti KRfb
Comment[lv]=Kadru bufera sprudņi priekš KRfb
Comment[nb]=Rammebuffer-programtillegg for KRfb
Comment[nds]=Bildpuffer-Modulen för KRfb
Comment[nl]=Framebuffer-plugins voor KRfb
Comment[nn]=Framebuffer-tillegg KRfb
Comment[pa]=KRfb ਲਈ ਫਰੇਮ ਬਫ਼ਰ ਪਲੱਗਇਨ
Comment[pt]='Plugins' de 'framebuffers' para o KRfb
Comment[pt_BR]=Plug-ins de framebuffers para o KRfb
Comment[ru]=Модуль буфера кадров для KRfb
Comment[si]=KRfb සඳහා රාමු බෆර ප්ලගින
Comment[sk]=Frame Buffer modul pre KRfb
Comment[sl]=Vstavki slikovnih medpomnilnikov za KRFB
Comment[sr]=Прикључци кадробафера за КРФБ
Comment[sr@ijekavian]=Прикључци кадробафера за КРФБ
Comment[sr@ijekavianlatin]=Priključci kadrobafera za KRFB
Comment[sr@latin]=Priključci kadrobafera za KRFB
Comment[sv]=Insticksprogram med rambuffert för Krfb
Comment[th]=ส่วนเสริมของ KRfb สำหรับจัดการเฟรมบัฟเฟอร์
Comment[tr]=KRfb için Çerçeve Tamponu eklentileri
Comment[uk]=Додатки буфера кадрів для KRfb
Comment[x-test]=xxFrame Buffer plugins for KRfbxx
Comment[zh_CN]=KRfb 帧缓冲插件
Comment[zh_TW]=KRfb 的 Frame Buffer 外掛程式

188
krfb/krfb.desktop Executable file → Normal file
View File

@@ -1,143 +1,51 @@
# KDE Config File
# KDE Config File
[Desktop Entry]
Type=Application
Exec=krfb -caption "%c" %i
Exec=krfb -caption "%c" %i %m
Icon=krfb
X-DocPath=krfb/index.html
Terminal=false
Name=Krfb
Name[ar]=Krfb
Name[ast]=Krfb
Name[bg]=Krfb
Name[bn]=কে-আর-এফ-বি
Name[br]=Krfb
Name[bs]=Krfb
Name[ca]=Krfb
Name[ca@valencia]=Krfb
Name[cs]=Krfb
Name[da]=Krfb
Name[de]=Krfb
Name[el]=Krfb
Name[en_GB]=Krfb
Name[eo]=Krfb
Name[es]=Krfb
Name[et]=Krfb
Name[eu]=Krfb
Name[fi]=Krfb
Name[fr]=Krfb
Name[ga]=Krfb
Name[gl]=Krfb
Name[he]=Krfb
Name[hi]=केआरएफबी
Name[hne]=केआरएफबी
Name[hr]=Krfb
Name[hu]=Krfb
Name[ia]=Krfb
Name[is]=Krfb
Name[it]=Krfb
Name[ja]=Krfb
Name[kk]=Krfb
Name[km]=Krfb
Name[ko]=Krfb
Name[lt]=Krfb
Name[lv]=Krfb
Name[ml]=കെആര്‍എഫ്ബി
Name[nb]=Krfb
Name[nds]=KRfb
Name[ne]=Krfb
Name[nl]=Krfb
Name[nn]=Krfb
Name[pa]=Krfb
Name[pl]=Krfb
Name[pt]=Krfb
Name[pt_BR]=Krfb
Name[ro]=Krfb
Name[ru]=Krfb
Name[si]=Krfb
Name[sk]=Krfb
Name[sl]=Krfb
Name[sq]=Krfb
Name[sr]=КРФБ
Name[sr@ijekavian]=КРФБ
Name[sr@ijekavianlatin]=KRFB
Name[sr@latin]=KRFB
Name[sv]=Krfb
Name[tr]=Krfb
Name[uk]=Krfb
Name[uz]=Krfb
Name[uz@cyrillic]=Krfb
Name[vi]=Krfb
Name[x-test]=xxKrfbxx
Name[zh_CN]=Krfb
Name[zh_HK]=Krfb
Name[zh_TW]=桌面分享_Krfb
GenericName=Desktop Sharing
GenericName[ar]=مشاركة سطح المكتب
GenericName[ast]=Escritoriu compartíu
GenericName[bg]=Споделяне на работния плот
GenericName[bn]=ডেস্কটপ ভাগাভাগি
GenericName[br]=Rannañ ar vurev
GenericName[bs]=Dijeljenje radne površine
GenericName[ca]=Compartició de l'escriptori
GenericName[ca@valencia]=Compartició de l'escriptori
GenericName[cs]=Sdílení pracovní plochy
GenericName[cy]=Rhannu Penbwrdd
GenericName[da]=Desktopdeling
GenericName[de]=Arbeitsfläche freigeben
GenericName[el]=Κοινή χρήση επιφάνειας εργασίας
GenericName[en_GB]=Desktop Sharing
GenericName[eo]=Tabula komunigado
GenericName[es]=Escritorio compartido
GenericName[et]=Töölaua jagamine
GenericName[eu]=Mahaigaina partekatzea
GenericName[fa]=اشتراک رومیزی
GenericName[fi]=Työpöydän jakaminen
GenericName[fr]=Partage de bureau
GenericName[ga]=Roinnt Deisce
GenericName[gl]=Compartimento de escritorio
GenericName[he]=שיתוף שולחנות עבודה
GenericName[hi]=डेस्कटॉप साझेदारी
GenericName[hne]=डेस्कटाप साझेदारी
GenericName[hr]=Dijeljenje radne površine
GenericName[hu]=Munkaasztal-megosztás
GenericName[ia]=Compartir de scriptorio
GenericName[is]=Skjáborðsmiðlun
GenericName[it]=Condivisione del desktop
GenericName[ja]=デスクトップ共有
GenericName[kk]=Үстелді ортақтастыру
GenericName[km]=ការ​ចែក​រំលែក​ផ្ទៃ​តុ
GenericName[ko]=데스크톱 공유
GenericName[lt]=Dalinimasis darbastaliu
GenericName[lv]=Darbvirsmas koplietošana
GenericName[ml]=പണിയിടം പങ്കുവെക്കല്‍
GenericName[nb]=Delte skrivebord
GenericName[nds]=Schriefdisch-Freegaav
GenericName[ne]=डेस्कटप साझेदारी
GenericName[nl]=Bureaublad delen
GenericName[nn]=Skrivebordsdeling
GenericName[pa]=ਡੈਸਕਟਾਪ ਸ਼ੇਅਰਿੰਗ
GenericName[pl]=Współdzielenie pulpitu
GenericName[pt]=Partilha do Ecrã
GenericName[pt_BR]=Compartilhamento de ambiente de trabalho
GenericName[ro]=Partajare birou
GenericName[ru]=Общий рабочий стол
GenericName[si]=වැඩතල හවුල්
GenericName[sk]=Zdieľanie pracovnej plochy
GenericName[sl]=Deljenje namizja
GenericName[sr]=Дељење површи
GenericName[sr@ijekavian]=Дијељење површи
GenericName[sr@ijekavianlatin]=Dijeljenje površi
GenericName[sr@latin]=Deljenje površi
GenericName[sv]=Dela ut skrivbordet
GenericName[th]=ใช้งานพื้นที่ทำงานร่วมกัน
GenericName[tr]=Masaüstü Paylaşımı
GenericName[ug]=ئۈستەلئۈستىنى ھەمبەھىرلەش
GenericName[uk]=Спільні стільниці
GenericName[uz]=Ish stoli bilan boʻlishish
GenericName[uz@cyrillic]=Иш столи билан бўлишиш
GenericName[vi]=Chia sẻ màn hình nền
GenericName[x-test]=xxDesktop Sharingxx
GenericName[zh_CN]=桌面共享
GenericName[zh_HK]=桌面分享
GenericName[zh_TW]=桌面分享
Categories=Qt;KDE;System;Network;RemoteAccess;
DocPath=krfb/index.html
Terminal=0
Name=Desktop Sharing
Name[af]=Werkskerm Deeling
Name[ar]=مشاركة سطح المكتب
Name[bg]=Споделяне на Работно място
Name[bs]=Dijeljenje desktopa
Name[ca]=Compartició de l'escriptori
Name[cs]=Sdílení pracovní plochy
Name[da]=Skrivebordsdeling
Name[de]=Arbeitsfläche freigeben
Name[el]=Μοίρασμα της επιφάνειας εργασίας
Name[eo]=Tabuloj komunaj
Name[es]=Compartición de escritorio
Name[et]=Töölaua jagamine
Name[fi]=Työpöytien jako
Name[fr]=Partage de bureau
Name[he]=שיתוף שולחנות עבודה
Name[hr]=Dijeljenje radne površine
Name[hu]=Munkaasztal-megosztás
Name[is]=Skjáborðamiðlun
Name[it]=Condivisione Desktop
Name[ja]=デスクトップ共有
Name[lt]=Dalinimasis darbastaliu
Name[mk]=Десктоп Делење
Name[mt]=Qsim tad-desktop
Name[nb]=Delte skrivebord
Name[nl]=Bureaubladvrijgave
Name[nn]=Skrivebordsdeling
Name[nso]=Kabagano ya Desktop
Name[pl]=Współdzielenie pulpitu
Name[pt]=Partilha do Ambiente de Trabalho
Name[pt_BR]=Compartilhamento do Desktop
Name[ro]=Partajare ecran
Name[ru]=Общий рабочий стол
Name[sk]=Zdieľanie pracovnej plochy
Name[sl]=Deljenje namizja
Name[sv]=Dela ut skrivbordet
Name[th]=ใช้งานพื้นที่ทำงานร่วมกัน
Name[tr]=Masaüstü Paylaşımı
Name[uk]=Спільні стільниці
Name[ven]=U kovhekana ha Desikithopo
Name[xh]=Ukwehlulelana kwe Desktop
Name[zh_CN]=桌面共享
Name[zh_TW]=桌面分享
Name[zu]=Ukwahlulelana kwe-Desktop

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kcfg SYSTEM
"http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
<kcfg>
<kcfgfile />
<group name="TCP">
<entry name="useDefaultPort" type="Bool">
<label>Use the default port for VNC (5900)</label>
<default>true</default>
</entry>
<entry name="port" type="Int">
<label>This is the port on which krfb will listen.</label>
<default>5900</default>
</entry>
<entry name="publishService" type="Bool">
<label>Announce the service on the local network</label>
<default>true</default>
</entry>
</group>
<group name="Security">
<entry name="allowDesktopControl" type="Bool">
<label>Allow remote connections to manage the desktop.</label>
<default>true</default>
</entry>
<entry name="askOnConnect" type="Bool">
<label>Ask before allowing a remote connection.</label>
<default>true</default>
</entry>
<entry name="allowUninvitedConnections" type="Bool">
<label>Allow connections without an invitation.</label>
<default>false</default>
</entry>
<entry name="uninvitedConnectionPassword" type="String">
<label>Password for uninvited connections.</label>
</entry>
</group>
<group name="FrameBuffer">
<entry name="preferredFrameBufferPlugin" type="String">
<label>Preferred Frame Buffer Plugin</label>
<default>krfb_framebuffer_x11</default>
</entry>
</group>
</kcfg>

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -1,3 +0,0 @@
File=krfb.kcfg
ClassName=KrfbConfig
Singleton=true

24
krfb/krfbiface.h Normal file
View File

@@ -0,0 +1,24 @@
#ifndef __KRFB_IFACE_H
#define __KRFB_IFACE_H
#include <dcopobject.h>
class krfbIface : virtual public DCOPObject
{
K_DCOP
k_dcop:
/**
* Quits krfb, connected clients will be disconnected.
*/
virtual void exit() = 0;
/**
* If this feature is activated krfb allows the connecting client to
* control the desktop (pointer & keyboard).
* @return a true to activate desktop control
*/
virtual void setAllowDesktopControl(bool a) = 0;
};
#endif

28
krfb/krfbifaceimpl.cc Normal file
View File

@@ -0,0 +1,28 @@
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "krfbifaceimpl.h"
KRfbIfaceImpl::KRfbIfaceImpl(Configuration *c) :
DCOPObject("krfbIface"),
configuration(c)
{
}
void KRfbIfaceImpl::exit()
{
emit exitApp();
}
void KRfbIfaceImpl::setAllowDesktopControl(bool b)
{
configuration->setAllowDesktopControl(b);
configuration->save();
}
#include "krfbifaceimpl.moc"

22
krfb/krfbifaceimpl.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef __KRFB_IFACE_IMPL_H
#define __KRFB_IFACE_IMPL_H
#include <qobject.h>
#include "configuration.h"
#include "krfbiface.h"
class KRfbIfaceImpl : public QObject, public virtual krfbIface
{
Q_OBJECT
private:
Configuration *configuration;
public:
KRfbIfaceImpl(Configuration *c);
signals:
void exitApp();
public:
void exit();
void setAllowDesktopControl(bool);
};
#endif

BIN
krfb/lo16-app-krfb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

BIN
krfb/lo32-app-krfb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

View File

@@ -2,7 +2,7 @@
main.cpp
-------------------
begin : Sat Dec 8 03:23:02 CET 2001
copyright : (C) 2001-2003 by Tim Jansen
copyright : (C) 2001-2002 by Tim Jansen
email : tim@tjansen.de
***************************************************************************/
@@ -15,116 +15,185 @@
* *
***************************************************************************/
#include "manageinvitationsdialog.h"
#include "trayicon.h"
#include "invitationsrfbserver.h"
#include "configuration.h"
#include "krfbifaceimpl.h"
#include "rfbcontroller.h"
#include <KAboutApplicationDialog>
#include <KAboutData>
#include <KAction>
#include <KApplication>
#include <KCmdLineArgs>
#include <KDebug>
#include <KLocale>
#include <KMessageBox>
#include <KNotification>
#include <QtGui/QPixmap>
#include <QtGui/qwindowdefs.h>
#ifdef KRFB_WITH_TELEPATHY_TUBES
# include "tubesclienthandler.h"
# include <TelepathyQt4/ClientRegistrar>
#endif
#include <kpixmap.h>
#include <kaction.h>
#include <kdebug.h>
#include <kapplication.h>
#include <knotifyclient.h>
#include <ksystemtray.h>
#include <kcmdlineargs.h>
#include <kaboutdata.h>
#include <kaboutapplication.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <qobject.h>
#include <qwindowdefs.h>
#include <qcstring.h>
#include <qdatastream.h>
#include <dcopclient.h>
#include <signal.h>
#include <X11/extensions/XTest.h>
static const char description[] = I18N_NOOP("VNC-compatible server to share "
"KDE desktops");
#define VERSION "1.0"
static bool checkX11Capabilities()
static const char *description = I18N_NOOP("VNC-compatible server to share "
"KDE desktops");
#define ARG_KINETD "kinetd"
static KCmdLineOptions options[] =
{
int bp1, bp2, majorv, minorv;
Bool r = XTestQueryExtension(QX11Info::display(), &bp1, &bp2,
&majorv, &minorv);
{ ARG_KINETD " ", I18N_NOOP("Used for calling from kinetd."), 0},
{ 0, 0, 0 }
};
if ((!r) || (((majorv * 1000) + minorv) < 2002)) {
KMessageBox::error(0,
i18n("Your X11 Server does not support the required XTest extension "
"version 2.2. Sharing your desktop is not possible."),
i18n("Desktop Sharing Error"));
return false;
}
/*
* TODO:
* - fix bug on 'close connection' in kinetd mode
*/
return true;
void checkKInetd(bool &kinetdAvailable, bool &krfbAvailable) {
kinetdAvailable = false;
krfbAvailable = false;
DCOPClient *d = KApplication::dcopClient();
QByteArray sdata, rdata;
QCString replyType;
QDataStream arg(sdata, IO_WriteOnly);
arg << QString("krfb");
if (!d->call ("kded", "kinetd", "isInstalled(QString)", sdata, replyType, rdata))
return;
if (replyType != "bool")
return;
QDataStream answer(rdata, IO_ReadOnly);
answer >> krfbAvailable;
kinetdAvailable = true;
}
int main(int argc, char *argv[])
{
KAboutData aboutData("krfb", 0, ki18n("Desktop Sharing"), KDE_VERSION_STRING,
ki18n(description), KAboutData::License_GPL,
ki18n("(c) 2009-2010, Collabora Ltd.\n"
"(c) 2007, Alessandro Praduroux\n"
"(c) 2001-2003, Tim Jansen\n"
"(c) 2001, Johannes E. Schindelin\n"
"(c) 2000-2001, Const Kaplinsky\n"
"(c) 2000, Tridia Corporation\n"
"(c) 1999, AT&T Laboratories Boston\n"));
aboutData.addAuthor(ki18n("George Goldberg"),
ki18n("Telepathy tubes support"),
"george.goldberg@collabora.co.uk");
aboutData.addAuthor(ki18n("George Kiagiadakis"),
KLocalizedString(),
"george.kiagiadakis@collabora.co.uk");
aboutData.addAuthor(ki18n("Alessandro Praduroux"), ki18n("KDE4 porting"), "pradu@pradu.it");
aboutData.addAuthor(ki18n("Tim Jansen"), ki18n("Original author"), "tim@tjansen.de");
aboutData.addCredit(ki18n("Johannes E. Schindelin"),
ki18n("libvncserver"));
aboutData.addCredit(ki18n("Const Kaplinsky"),
ki18n("TightVNC encoder"));
aboutData.addCredit(ki18n("Tridia Corporation"),
ki18n("ZLib encoder"));
aboutData.addCredit(ki18n("AT&T Laboratories Boston"),
ki18n("original VNC encoders and "
"protocol design"));
KCmdLineArgs::init(argc, argv, &aboutData);
KAboutData aboutData( "krfb", I18N_NOOP("Desktop Sharing"),
VERSION, description, KAboutData::License_GPL,
"(c) 2001-2002, Tim Jansen\n"
"(c) 2001, Johannes E. Schindelin\n"
"(c) 2000, heXoNet Support GmbH, D-66424 Homburg\n"
"(c) 2000-2001, Const Kaplinsky\n"
"(c) 2000, Tridia Corporation\n"
"(c) 1999, AT&T Laboratories Cambridge\n",
0, "", "ml@tjansen.de");
aboutData.addAuthor("Tim Jansen", "", "tim@tjansen.de");
aboutData.addAuthor("Ian Reinhart Geiser", "DCOP interface", "geiseri@kde.org");
aboutData.addCredit("Johannes E. Schindelin",
I18N_NOOP("libvncserver"));
aboutData.addCredit("Const Kaplinsky",
I18N_NOOP("TightVNC encoder"));
aboutData.addCredit("Tridia Corporation",
I18N_NOOP("ZLib encoder"));
aboutData.addCredit("AT&T Laboratories Cambridge",
I18N_NOOP("original VNC encoders and "
"protocol design"));
aboutData.addCredit("Jens Wagner (heXoNet Support GmbH)",
I18N_NOOP("X11 update scanner, "
"original code base"));
aboutData.addCredit("Jason Spisak",
I18N_NOOP("Connection side image"),
"kovalid@yahoo.com");
KCmdLineArgs::init(argc, argv, &aboutData);
KCmdLineArgs::addCmdLineOptions(options);
KCmdLineOptions options;
options.add("nodialog", ki18n("Do not show the invitations management dialog at startup"));
KCmdLineArgs::addCmdLineOptions(options);
KApplication app;
KApplication app;
app.setQuitOnLastWindowClosed(false);
Configuration *config;
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
QString fdString;
if (!args->isSet(ARG_KINETD)) {
bool kinetdA, krfbA;
checkKInetd(kinetdA, krfbA);
if (!kinetdA) {
KMessageBox::error(0,
i18n("Cannot find KInetD. "
"Have you restarted KDE after installation?"),
i18n("Desktop Sharing Error"));
return 1;
}
if (!krfbA) {
KMessageBox::error(0,
i18n("Cannot find KInetD service for Desktop Sharing (KRfb). "
"Have you restarted KDE after installation?"),
i18n("Desktop Sharing Error"));
return 1;
}
if (!checkX11Capabilities()) {
return 1;
}
config = new Configuration(KRFB_INVITATION_MODE);
config->showInvitationDialog();
QObject::connect(config, SIGNAL(invitationFinished()),
&app, SLOT(quit()));
return app.exec();
}
fdString = args->getOption(ARG_KINETD);
config = new Configuration(KRFB_KINETD_MODE);
args->clear();
//init the core
InvitationsRfbServer::init();
if ((!config->allowUninvitedConnections()) && (config->invitations().size() == 0)) {
KNotifyClient::event("UnexpectedConnection");
return 1;
}
#ifdef KRFB_WITH_TELEPATHY_TUBES
Tp::ClientRegistrarPtr clientRegistrar = Tp::ClientRegistrar::create();
clientRegistrar->registerClient(Tp::AbstractClientPtr(new TubesClientHandler),
"krfb_rfb_handler");
#endif
if (!RFBController::checkX11Capabilities())
return 1;
//init the GUI
ManageInvitationsDialog invitationsDialog;
TrayIcon trayicon(&invitationsDialog);
TrayIcon trayicon(new KAboutApplication(&aboutData),
config);
KRfbIfaceImpl dcopiface(config);
RFBController controller(config);
if (app.isSessionRestored() && KMainWindow::canBeRestored(1)) {
invitationsDialog.restore(1, false);
} else if (KCmdLineArgs::parsedArgs()->isSet("dialog")) {
invitationsDialog.show();
}
QObject::connect(&app, SIGNAL(lastWindowClosed()), // dont show passivepopup
&trayicon, SLOT(prepareQuit()));
QObject::connect(&app, SIGNAL(lastWindowClosed()),
&controller, SLOT(closeConnection()));
sigset_t sigs;
sigemptyset(&sigs);
sigaddset(&sigs, SIGPIPE);
sigprocmask(SIG_BLOCK, &sigs, 0);
QObject::connect(&trayicon, SIGNAL(showManageInvitations()),
config, SLOT(showManageInvitationsDialog()));
QObject::connect(&trayicon, SIGNAL(enableDesktopControl(bool)),
&controller, SLOT(enableDesktopControl(bool)));
QObject::connect(&trayicon, SIGNAL(diconnectedMessageDisplayed()),
&app, SLOT(quit()));
return app.exec();
QObject::connect(&dcopiface, SIGNAL(exitApp()),
&controller, SLOT(closeConnection()));
QObject::connect(&controller, SIGNAL(sessionRefused()),
&app, SLOT(quit()));
QObject::connect(&controller, SIGNAL(sessionEstablished()),
&trayicon, SLOT(showConnectedMessage()));
QObject::connect(&controller, SIGNAL(sessionFinished()),
&trayicon, SLOT(showDisconnectedMessage()));
QObject::connect(&controller, SIGNAL(desktopControlSettingChanged(bool)),
&trayicon, SLOT(setDesktopControlSetting(bool)));
QObject::connect(&controller, SIGNAL(quitApp()),
&app, SLOT(quit()));
sigset_t sigs;
sigemptyset(&sigs);
sigaddset(&sigs, SIGPIPE);
sigprocmask(SIG_BLOCK, &sigs, 0);
bool ok;
int fdNum = fdString.toInt(&ok);
if (!ok) {
kdError() << "kinetd fd was not numeric." << endl;
return 2;
}
controller.startServer(fdNum);
return app.exec();
}

210
krfb/manageinvitations.ui Normal file
View File

@@ -0,0 +1,210 @@
<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
<class>ManageInvitationsDialog</class>
<widget class="QDialog">
<property name="name">
<cstring>ManageInvitationsDialog</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>680</width>
<height>350</height>
</rect>
</property>
<property name="caption">
<string>Manage Invitations - Desktop Sharing</string>
</property>
<property name="icon">
<pixmap>image0</pixmap>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>11</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<spacer row="7" column="0">
<property name="name">
<cstring>Spacer10</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
<spacer row="0" column="1">
<property name="name">
<cstring>Spacer7</cstring>
</property>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
<widget class="KListView" row="0" column="0" rowspan="5" colspan="1">
<column>
<property name="text">
<string>Created</string>
</property>
<property name="clickable">
<bool>true</bool>
</property>
<property name="resizable">
<bool>true</bool>
</property>
</column>
<column>
<property name="text">
<string>Expiration</string>
</property>
<property name="clickable">
<bool>true</bool>
</property>
<property name="resizable">
<bool>true</bool>
</property>
</column>
<property name="name">
<cstring>listView</cstring>
</property>
<property name="hScrollBarMode">
<enum>AlwaysOff</enum>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<property name="fullWidth">
<bool>true</bool>
</property>
<property name="toolTip" stdset="0">
<string></string>
</property>
<property name="whatsThis" stdset="0">
<string>Displays the open invitations. Use the buttons on the right to delete them or create a new invitation.</string>
</property>
</widget>
<widget class="QPushButton" row="1" column="1">
<property name="name">
<cstring>newPersonalInvitationButton</cstring>
</property>
<property name="text">
<string>New &amp;Personal Invitation...</string>
</property>
<property name="toolTip" stdset="0">
<string>Create a new personal invitation...</string>
</property>
<property name="whatsThis" stdset="0">
<string>Click this button to create a new personal invitation.</string>
</property>
</widget>
<widget class="QPushButton" row="2" column="1">
<property name="name">
<cstring>newEmailInvitationButton</cstring>
</property>
<property name="text">
<string>&amp;New Email Invitation...</string>
</property>
<property name="toolTip" stdset="0">
<string>Send a new invitation via email...</string>
</property>
<property name="whatsThis" stdset="0">
<string>Click this button to send a new invitation via email.</string>
</property>
</widget>
<widget class="QPushButton" row="3" column="1">
<property name="name">
<cstring>deleteAllButton</cstring>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Delete All</string>
</property>
<property name="toolTip" stdset="0">
<string>Delete all invitations</string>
</property>
<property name="whatsThis" stdset="0">
<string>Deletes all open invitations.</string>
</property>
</widget>
<widget class="QPushButton" row="4" column="1">
<property name="name">
<cstring>deleteOneButton</cstring>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Delete</string>
</property>
<property name="toolTip" stdset="0">
<string>Delete the selected invitation</string>
</property>
<property name="whatsThis" stdset="0">
<string>Delete the selected invitation. The invited person will not be able to connect using this invitation anymore.</string>
</property>
</widget>
<widget class="QPushButton" row="6" column="1" rowspan="2" colspan="1">
<property name="name">
<cstring>closeButton</cstring>
</property>
<property name="text">
<string>&amp;Close</string>
</property>
<property name="toolTip" stdset="0">
<string>Closes this window.</string>
</property>
<property name="whatsThis" stdset="0">
<string>Closes this window.</string>
</property>
</widget>
</grid>
</widget>
<images>
<image name="image0">
<data format="XPM.GZ" length="6958">789cdd9859531b490cc7dff914aee82db5a5784e7b6a6b1f38c219ee9bad7d98d30718830f8c9ddaefbe6a493d10e3002178b3b55118fae7eed1bf5b52f78cf9f4b172b6b75df9f869a13f8807adb49236e35ee56336ec74c67ffef5c7d7850f7ebd42ff1dcfadb81f7e5bf8b03fa8a4959dee756e00ae08a04aff6a09736eb9ee19c65ac9dc8fa1e5c8e7f159c929f3a5e598fbf1dc72227c5672c67c68390d984f4b96fe03cb19f7435ab2ccbf69390f79fc45c9dc8f27960bee878eb25fe3f5c1c4b2eaed5b56bdcfc28ece07162dabbfbeb0ab7ab02a1c44da7fcb5cafd6450f772cc71c2fdcb62ceb8742390d63e62f9625bec8ec98f948bcf6947d8d77ddb2c403968483a028981bcc75a71e88ff7dcb1a8fad92a51e362d6bbeaf95d3808b09ba865d5abf2ffe7acc915bf722e663cbbec3f35b2f59c6b72cebfc6e94534fc6af5956bd6d61cfe667201c3a723f8261cff1aa7aff96b22f0c27caaa8f3e73e4e97c715339558e0dfb8e5f95f9436259eb6b45d9d7fe53e5bacc17b97e2839566fd5b2ae676c59d7bfae9ceaf8c8b2f61f088781d6cbb270acf945ce6fe00655d55f560e546f47b816e8fed915ae47124fbc638e8348ea03772d6bfe374a967a5c52ce74fcd070e8864e28faf7ca8132d747188791d437562debfc27ca99d6ff9a701c6b3febd7bc9aa3fb69ac1c68fdee0947819e375c1fb5a416493d63a29c29733dd73d2a70f1776c59f55aca81f483c3fce0af2b5c8ff47c4c95336138128e023d1f797f46be9d2f16c29123f1c54be540e31d5bd6fc1f0a27a19c4731af274aed786c2bdbfce4ca99ea73bd53b9e97ce14cd8eac7a0ace331138e1d3d5f46ca8130f0f91ea736ff712c5cc62b52b67aae70b9debe302558f43acab930048613bfdccf8bc289abf9bd520e95f9fc48b224d6e7cbad722e0cf796f57ce4e7451ad8fd0255655bff4de1d4d5fd36520e953de6ccae1fee84d3589f17fcbccc02738232b785b350f33954ce95f9799be56eeacaf913081b63762cebf815e15c3946c37958c6eb48387775bd9c5f1aaefb095039d7f38cf3531485dd6f9e7221bc3f98affd9f3410e66ba5463c37b31a312698cec5128c4b8d14b3b9583aa59163f18e2b28c8df538d021bef988706f97baa919a0cbd9b953e9f6accae716cceb6efed89ff9606fbc9b0856dbca4e85e71555c61472bc6d83576f1e6a9de6b34749eb7747fce1a09f6c87797ae7da201b5867847bf5bd4eab3ca08afdfa47143f36ea9c63d5f8734f3312915e47fc8b59ee084567963d6f4231aec7d848b1497019f0009f99d50db5cc506fa8999c1907efab49ecb8798bd42e396fc7769de19fb3171e991cfa527d721f7f6e85ad03cda1cdb9b576a8c38d366a6e6c744fe8ebc4e5f87dcdbd331268a661f775fd6e0f57668dd63f6dda3eb32aeccb4cf94233be68eb506a4d6650fcf6bdc92f5b56e96e94468e02aaee1fa0c5ba39e86da1d6e908a5961ca1e9ed71891b5343e0ddcc42df2f505b77167cab6e9d335ea15dbd4188e295ac6c3f31a05d958e3d3a0f5ece21eeee3011e4ed9017dba47bd976c5d1a2bd11b53f693173436c8861a81091ee1319ee029f93cc3f34776469f9ce20556d141173d1a3729a3b644f6bcc626994f639b18d09d6ea9718e21d6d442a24356a963442a1e8d3ba2f14dd618e04b7565ec1efb80e801400c09a4460132c8a180065941ad4c54a0092d6893061bddd327ff26332f6be85dd0260f4df6750957d0816bd30bd7d4ba82cba71a6ced979f1fdfd5e840176e58e3865a9db968dc42cf3ee3a047f4abd66132dffa098dd7e4c35470fc4a8db1d655a931bbae20853e0c60a833baa3353cbc75bc74ee0236608401dcc39876c0a9a84cef0f98c0222cc132ac689452f1fecab31df8fda8813db8a79d7c317b9fc36758853552d07d0eeb3fa2c1634ce4d731850dd8842df8327d5ec136ecc02eec51ee8ca546e14def25e51b19ec4f9fbb7000877044275b39e68def3e0f1ac7d34f0f3881533a69e39fd598a5366deff79ef8a3f6eb35decd666bd8ef1f9b6ffecef1f2f70ff91ed5a593e41ae7f43d0acee01c2ea00a0e16e08247ed7338d3ef756d7e9728f4cefc51fbdbde6f3f7faae1430021d4a04e1a11a52624f675acbc5b9bb774d1e896edc7bd8fc7ccd488c1fc9196bc2798533ba2b61f838ecdf5ccc855232fdb8f7b1f8f99d6f0f91d791eb684febffab78c796afcfdfbc23fde05c197</data>
</image>
</images>
<connections>
<connection>
<sender>listView</sender>
<signal>selectionChanged()</signal>
<receiver>ManageInvitationsDialog</receiver>
<slot>listSelectionChanged()</slot>
</connection>
</connections>
<includes>
<include location="global" impldecl="in declaration">klistview.h</include>
<include location="local" impldecl="in implementation">manageinvitations.ui.h</include>
</includes>
<slots>
<slot>listSizeChanged( int i )</slot>
<slot>listSelectionChanged()</slot>
</slots>
<layoutdefaults spacing="6" margin="11"/>
<includehints>
<includehint>klistview.h</includehint>
</includehints>
</UI>

View File

@@ -0,0 +1,15 @@
void ManageInvitationsDialog::listSizeChanged(int i) {
deleteAllButton->setEnabled(i);
}
void ManageInvitationsDialog::listSelectionChanged() {
QListViewItem *i = listView->firstChild();
while(i) {
if (i->isSelected()) {
deleteOneButton->setEnabled(true);
return;
}
i = i->nextSibling();
}
deleteOneButton->setEnabled(false);
}

View File

@@ -1,253 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#include "manageinvitationsdialog.h"
#include "invitationmanager.h"
#include "invitation.h"
#include "krfbconfig.h"
#include "personalinvitedialog.h"
#include "ui_configtcp.h"
#include "ui_configsecurity.h"
#include <KConfigDialog>
#include <KGlobal>
#include <KIconLoader>
#include <KLocale>
#include <KMessageBox>
#include <KStandardGuiItem>
#include <KSystemTimeZone>
#include <KToolInvocation>
#include <KStandardAction>
#include <KActionCollection>
#include <QtGui/QWidget>
#include <QtGui/QToolTip>
#include <QtGui/QCursor>
#include <QtCore/QDateTime>
#include <QtNetwork/QNetworkInterface>
class TCP: public QWidget, public Ui::TCP
{
public:
TCP(QWidget *parent = 0) : QWidget(parent) {
setupUi(this);
}
};
class Security: public QWidget, public Ui::Security
{
public:
Security(QWidget *parent = 0) : QWidget(parent) {
setupUi(this);
}
};
ManageInvitationsDialog::ManageInvitationsDialog(QWidget *parent)
: KXmlGuiWindow(parent)
{
setAttribute(Qt::WA_DeleteOnClose, false);
QWidget *mainWidget = new QWidget;
m_ui.setupUi(mainWidget);
m_ui.pixmapLabel->setPixmap(KIcon("krfb").pixmap(128));
setCentralWidget(mainWidget);
connect(m_ui.helpLabel, SIGNAL(linkActivated(QString)), SLOT(showWhatsthis()));
connect(m_ui.newPersonalInvitationButton, SIGNAL(clicked()), SLOT(inviteManually()));
connect(m_ui.newEmailInvitationButton, SIGNAL(clicked()), SLOT(inviteByMail()));
connect(InvitationManager::self(), SIGNAL(invitationNumChanged(int)), SLOT(reloadInvitations()));
connect(m_ui.deleteAllButton, SIGNAL(clicked()), SLOT(deleteAll()));
connect(m_ui.deleteOneButton, SIGNAL(clicked()), SLOT(deleteCurrent()));
connect(m_ui.invitationWidget, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()));
KStandardAction::quit(QCoreApplication::instance(), SLOT(quit()), actionCollection());
KStandardAction::preferences(this, SLOT(showConfiguration()), actionCollection());
setupGUI(QSize(550, 330));
setAutoSaveSettings();
reloadInvitations();
}
ManageInvitationsDialog::~ManageInvitationsDialog()
{
}
void ManageInvitationsDialog::showWhatsthis()
{
QToolTip::showText(QCursor::pos(),
i18n("An invitation creates a one-time password that allows the receiver to connect to your desktop.\n"
"It is valid for only one successful connection and will expire after an hour if it has not been used. \n"
"When somebody connects to your computer a dialog will appear and ask you for permission.\n"
"The connection will not be established before you accept it. In this dialog you can also\nrestrict "
"the other person to view your desktop only, without the ability to move your\nmouse pointer or press "
"keys.\nIf you want to create a permanent password for Desktop Sharing, allow 'Uninvited Connections' \n"
"in the configuration."));
}
void ManageInvitationsDialog::inviteManually()
{
Invitation inv = InvitationManager::self()->addInvitation();
PersonalInviteDialog *pid = new PersonalInviteDialog(this);
pid->setPassword(inv.password());
pid->setExpiration(inv.expirationTime());
pid->show();
}
void ManageInvitationsDialog::inviteByMail()
{
int r = KMessageBox::warningContinueCancel(this,
i18n("When sending an invitation by email, note that everybody who reads this email "
"will be able to connect to your computer for one hour, or until the first "
"successful connection took place, whichever comes first. \n"
"You should either encrypt the email or at least send it only in a "
"secure network, but not over the Internet."),
i18n("Send Invitation via Email"),
KStandardGuiItem::cont(),
KStandardGuiItem::cancel(),
"showEmailInvitationWarning");
if (r == KMessageBox::Cancel) {
return;
}
QList<QNetworkInterface> ifl = QNetworkInterface::allInterfaces();
QString host;
int port = KrfbConfig::port();
foreach(const QNetworkInterface & nif, ifl) {
if (nif.flags() & QNetworkInterface::IsLoopBack) {
continue;
}
if (nif.flags() & QNetworkInterface::IsRunning) {
if (!nif.addressEntries().isEmpty()) {
host = nif.addressEntries()[0].ip().toString();
}
}
}
Invitation inv = InvitationManager::self()->addInvitation();
KUrl invUrl(QString("vnc://invitation:%1@%2:%3").arg(inv.password()).arg(host).arg(port));
KToolInvocation::invokeMailer(QString(), QString(), QString(),
i18n("Desktop Sharing (VNC) invitation"),
ki18n("You have been invited to a VNC session. If you have the KDE Remote "
"Desktop Connection installed, just click on the link below.\n\n"
"%1\n\n"
"Otherwise you can use any VNC client with the following parameters:\n\n"
"Host: %2:%3\n"
"Password: %4\n\n"
"For security reasons this invitation will expire at %5 (%6).")
.subs(invUrl.url())
.subs(host)
.subs(QString::number(port))
.subs(inv.password())
.subs(KGlobal::locale()->formatDateTime(inv.expirationTime()))
.subs(KSystemTimeZones::local().name())
.toString());
}
void ManageInvitationsDialog::reloadInvitations()
{
m_ui.invitationWidget->clear();
KLocale *loc = KGlobal::locale();
foreach(const Invitation & inv, InvitationManager::self()->invitations()) {
QStringList strs;
strs << loc->formatDateTime(inv.creationTime()) << loc->formatDateTime(inv.expirationTime());
QTreeWidgetItem *it = new QTreeWidgetItem(strs);
m_ui.invitationWidget->addTopLevelItem(it);
it->setData(0, Qt::UserRole + 1, inv.creationTime());
}
m_ui.invitationWidget->resizeColumnToContents(0);
m_ui.deleteAllButton->setEnabled(InvitationManager::self()->activeInvitations() > 0);
}
void ManageInvitationsDialog::showConfiguration()
{
if (KConfigDialog::showDialog("settings")) {
return;
}
KConfigDialog *dialog = new KConfigDialog(this, "settings", KrfbConfig::self());
dialog->addPage(new TCP, i18n("Network"), "network-workgroup");
dialog->addPage(new Security, i18n("Security"), "security-high");
dialog->setHelp(QString(), "krfb");
dialog->show();
}
void ManageInvitationsDialog::deleteAll()
{
if (KMessageBox::warningContinueCancel(this,
i18n("<qt>Are you sure you want to delete all invitations?</qt>"),
i18n("Confirm delete Invitations"),
KStandardGuiItem::ok(),
KStandardGuiItem::cancel(),
QString("krfbdeleteallinv")) !=
KMessageBox::Continue) {
return;
}
InvitationManager::self()->removeAllInvitations();
}
void ManageInvitationsDialog::deleteCurrent()
{
if (KMessageBox::warningContinueCancel(this,
i18n("<qt>Are you sure you want to delete this invitation?</qt>"),
i18n("Confirm delete Invitations"),
KStandardGuiItem::ok(),
KStandardGuiItem::cancel(),
QString("krfbdeleteoneinv")) !=
KMessageBox::Continue) {
return;
}
// disable updates while deleting items, otherwise the list would invalidate itself
disconnect(InvitationManager::self(), SIGNAL(invitationNumChanged(int)),
this, SLOT(reloadInvitations()));
QList<QTreeWidgetItem *> itl = m_ui.invitationWidget->selectedItems();
foreach(QTreeWidgetItem * itm, itl) {
foreach(const Invitation & inv, InvitationManager::self()->invitations()) {
if (inv.creationTime() == itm->data(0, Qt::UserRole + 1)) {
InvitationManager::self()->removeInvitation(inv);
}
}
}
// update it manually
reloadInvitations();
connect(InvitationManager::self(), SIGNAL(invitationNumChanged(int)),
SLOT(reloadInvitations()));
}
void ManageInvitationsDialog::selectionChanged()
{
m_ui.deleteOneButton->setEnabled(m_ui.invitationWidget->selectedItems().size() > 0);
}
void ManageInvitationsDialog::readProperties(const KConfigGroup& group)
{
if (group.readEntry("Visible", true)) {
show();
}
KMainWindow::readProperties(group);
}
void ManageInvitationsDialog::saveProperties(KConfigGroup& group)
{
group.writeEntry("Visible", isVisible());
KMainWindow::saveProperties(group);
}
#include "manageinvitationsdialog.moc"

View File

@@ -1,46 +0,0 @@
/* This file is part of the KDE project
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
*/
#ifndef MANAGEINVITATIONSDIALOG_H
#define MANAGEINVITATIONSDIALOG_H
#include "ui_manageinvitations.h"
#include <KXmlGuiWindow>
/**
@author Alessandro Praduroux <pradu@pradu.it>
*/
class ManageInvitationsDialog : public KXmlGuiWindow
{
Q_OBJECT
public:
ManageInvitationsDialog(QWidget *parent = 0);
~ManageInvitationsDialog();
public Q_SLOTS:
void showWhatsthis();
void inviteManually();
void inviteByMail();
void reloadInvitations();
void showConfiguration();
void deleteAll();
void deleteCurrent();
void selectionChanged();
protected:
virtual void readProperties(const KConfigGroup & group);
virtual void saveProperties(KConfigGroup & group);
private:
Ui::ManageInvitationsDialog m_ui;
};
#endif

366
krfb/newconnectiondialog.ui Normal file

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More