[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/krfb
From:       George Goldberg <grundleborg () googlemail ! com>
Date:       2009-09-23 20:57:48
Message-ID: 1253739468.284363.11072.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1027330 by gberg:

Framebuffers are now plugins. This means we can switch between the Qt and X11 \
framebuffers at runtime.

- Currently there is no configuration UI, so you have to edit the krfbrc by hand to \
                select the framebuffer plugin to use. This will be fixed later.
- Framebuffers are shared, so that when krfb supports having mutliple servers \
running, the framebuffer can be shared between them (when appropriate) for better \
                performance.
- Currently defaults to the X11 framebuffer, since this is what was hardcoded before.

 M  +71 -4     CMakeLists.txt  
 M  +0 -25     framebuffer.cpp  
 M  +7 -5      framebuffer.h  
 A             framebuffermanager.cpp   [License: GPL (v2+)]
 A             framebuffermanager.h   [License: GPL (v2+)]
 A             framebufferplugin.cpp   [License: GPL (v2+)]
 A             framebufferplugin.h   [License: GPL (v2+)]
 A             framebuffers (directory)  
 A             framebuffers/CMakeLists.txt  
 A             framebuffers/qt (directory)  
 A             framebuffers/qt/CMakeLists.txt  
 A             framebuffers/qt/krfb_framebuffer_qt.desktop  
 A             framebuffers/qt/qtframebuffer.cpp   [License: GPL (v2+)]
 A             framebuffers/qt/qtframebuffer.h   [License: GPL (v2+)]
 A             framebuffers/qt/qtframebufferplugin.cpp   [License: GPL (v2+)]
 A             framebuffers/qt/qtframebufferplugin.h   [License: GPL (v2+)]
 A             framebuffers/x11 (directory)  
 A             framebuffers/x11/CMakeLists.txt  
 A             framebuffers/x11/krfb_framebuffer_x11.desktop  
 A             framebuffers/x11/x11framebuffer.cpp   [License: GPL (v2+)]
 A             framebuffers/x11/x11framebuffer.h   [License: GPL (v2+)]
 A             framebuffers/x11/x11framebufferplugin.cpp   [License: GPL (v2+)]
 A             framebuffers/x11/x11framebufferplugin.h   [License: GPL (v2+)]
 A             krfb-framebuffer.desktop  
 M  +6 -0      krfb.kcfg  
 M  +5 -5      krfbserver.cpp  


--- trunk/KDE/kdenetwork/krfb/CMakeLists.txt #1027329:1027330
@@ -16,6 +16,64 @@
 #add_subdirectory(kcm_krfb)
 if (HAVE_LIBVNCSERVER)
 
+#####################################
+# First target: libkrfb - a library
+# for linking plugins against.
+
+set (libkrfb_SRCS
+     framebuffer.cpp
+     framebufferplugin.cpp
+)
+
+set (libkrfb_HDRS
+     framebuffer.h
+     framebufferplugin.h
+)
+
+kde4_add_library (libkrfb
+                  SHARED
+                  ${libkrfb_SRCS}
+)
+
+target_link_libraries (libkrfb
+                       ${QT_QTCORE_LIBRARY}
+                       ${QT_QTGUI_LIBRARY}
+                       ${X11_X11_LIB}
+)
+
+# This is needed because otherwise we have two targets called krfb (application and \
library) +set_target_properties (libkrfb PROPERTIES
+                       OUTPUT_NAME krfb
+)
+
+set_target_properties (libkrfb PROPERTIES
+                       VERSION ${GENERIC_LIB_VERSION}
+                       SOVERSION ${GENERIC_LIB_VERSION}
+)
+
+install (TARGETS libkrfb
+         ${INSTALL_TARGETS_DEFAULT_ARGS}
+)
+
+install (FILES ${libkrfb_HDRS}
+         DESTINATION ${INCLUDE_INSTALL_DIR}/KRfb
+)
+
+install (FILES
+         krfb-framebuffer.desktop
+         DESTINATION ${SERVICETYPES_INSTALL_DIR}
+)
+
+#####################################
+# Build the plugins
+
+include_directories (${CMAKE_CURRENT_SOURCE_DIR})
+add_subdirectory (framebuffers)
+
+#####################################
+# Second target: krfb - the app
+# itself.
+
 set(krfb_SRCS
    main.cpp
    trayicon.cpp
@@ -28,9 +86,7 @@
    personalinvitedialog.cpp
    connectioncontroller.cpp
    events.cpp
-   framebuffer.cpp
-   qtframebuffer.cpp
-   x11framebuffer.cpp
+   framebuffermanager.cpp
 )
 
 kde4_add_kcfg_files(krfb_SRCS krfbconfig.kcfgc)
@@ -45,7 +101,18 @@
 
 kde4_add_executable(krfb ${krfb_SRCS})
 
-target_link_libraries(krfb ${JPEG_LIBRARIES}  ${LIBVNCSERVER_LIBRARIES} \
${X11_Xext_LIB} ${X11_X11_LIB} ${X11_Xdamage_LIB} ${QT_QTNETWORK_LIBRARY} \
${KDE4_KDNSSD_LIBS} ${KDE4_KDEUI_LIBS}) +target_link_libraries(krfb
+                      libkrfb
+                      ${JPEG_LIBRARIES}
+                      ${LIBVNCSERVER_LIBRARIES}
+                      ${X11_Xext_LIB}
+                      ${X11_X11_LIB}
+                      ${X11_Xdamage_LIB}
+                      ${QT_QTNETWORK_LIBRARY}
+                      ${KDE4_KDNSSD_LIBS}
+                      ${KDE4_KDEUI_LIBS}
+)
+
 if(X11_XTest_FOUND)
   target_link_libraries(krfb ${X11_XTest_LIB})
 endif(X11_XTest_FOUND)
--- trunk/KDE/kdenetwork/krfb/framebuffer.cpp #1027329:1027330
@@ -12,26 +12,14 @@
 
 #include <config-krfb.h>
 
-#include <QX11Info>
-
-#include "qtframebuffer.h"
-#include "x11framebuffer.h"
-
 #include <X11/Xutil.h>
 
-#ifdef HAVE_XDAMAGE
-#include <X11/extensions/Xdamage.h>
-#endif
 
-
 FrameBuffer::FrameBuffer(WId id, QObject *parent)
  : QObject(parent), win(id)
 {
-    //TODO: implement reference counting to avoid update the screen
-    // while no client is connected.
 }
 
-
 FrameBuffer::~FrameBuffer()
 {
     delete fb;
@@ -68,18 +56,6 @@
     return 32;
 }
 
-FrameBuffer * FrameBuffer::getFrameBuffer(WId id, QObject * parent)
-{
-#ifdef HAVE_XDAMAGE
-    int tmp, er;
-    if (XDamageQueryExtension(QX11Info::display(), &tmp, &er)) {
-        return new X11FrameBuffer(id, parent);
-    }
-#endif
-    return new QtFrameBuffer(id, parent);
-
-}
-
 int FrameBuffer::paddedWidth()
 {
     return width() * depth() / 8;
@@ -93,4 +69,3 @@
 {
 }
 
-
--- trunk/KDE/kdenetwork/krfb/framebuffer.h #1027329:1027330
@@ -15,19 +15,20 @@
 #include <QList>
 #include <QWidget>
 
+#include <kdemacros.h>
+
 #include <rfb/rfb.h>
 
 class FrameBuffer;
 /**
 	@author Alessandro Praduroux <pradu@pradu.it>
 */
-class FrameBuffer : public QObject
+class KDE_EXPORT FrameBuffer : public QObject
 {
 Q_OBJECT
 public:
+    explicit FrameBuffer(WId id, QObject *parent = 0);
 
-    static FrameBuffer* getFrameBuffer(WId id, QObject *parent);
-
     virtual ~FrameBuffer();
 
     char * data();
@@ -43,12 +44,13 @@
     virtual void getServerFormat(rfbPixelFormat &format);
 
 protected:
-    explicit FrameBuffer(WId id, QObject *parent = 0);
-
     WId win;
     char *fb;
     QList<QRect> tiles;
 
+private:
+    Q_DISABLE_COPY(FrameBuffer);
+
 };
 
 #endif
--- trunk/KDE/kdenetwork/krfb/krfb.kcfg #1027329:1027330
@@ -34,4 +34,10 @@
       <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>
--- trunk/KDE/kdenetwork/krfb/krfbserver.cpp #1027329:1027330
@@ -29,6 +29,7 @@
 
 #include "connectioncontroller.h"
 #include "framebuffer.h"
+#include "framebuffermanager.h"
 #include "krfbconfig.h"
 #include "invitationmanager.h"
 
@@ -117,9 +118,9 @@
 class KrfbServer::KrfbServerP {
 
     public:
-        KrfbServerP() : fb(0), screen(0), numClients(0) {};
+        KrfbServerP() : screen(0), numClients(0) {};
 
-        FrameBuffer *fb;
+        QSharedPointer<FrameBuffer> fb;
         QList< QPointer<ConnectionController> > controllers;
         rfbScreenInfoPtr screen;
         int numClients;
@@ -144,7 +145,7 @@
     :d(new KrfbServerP)
 {
     kDebug() << "starting ";
-    d->fb = FrameBuffer::getFrameBuffer(QApplication::desktop()->winId(), this);
+    d->fb = FrameBufferManager::instance()->frameBuffer(QApplication::desktop()->winId());
  QTimer::singleShot(0, this, SLOT(startListening()));
     connect(InvitationManager::self(), \
SIGNAL(invitationNumChanged(int)),SLOT(updatePassword()));  }
@@ -237,8 +238,7 @@
 {
     rfbShutdownServer(d->screen, true);
     // framebuffer has to be deleted before X11 connection goes down
-    delete d->fb;
-    d->fb = 0;
+    d->fb.clear();
 }
 
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic