memory leak on clients

This commit is contained in:
speyrefitte
2014-07-22 10:58:03 +02:00
parent 01362e8994
commit 3eecf6ace3
2 changed files with 24 additions and 17 deletions

View File

@@ -52,15 +52,12 @@ class RDPClientQtFactory(rdp.ClientFactory):
@param controller: build factory and needed by observer @param controller: build factory and needed by observer
""" """
#create client observer #create client observer
client = RDPClientQt(controller) client = RDPClientQt(controller, self._width, self._height)
#create qt widget #create qt widget
self._w = client.getWidget() self._w = client.getWidget()
self._w.resize(self._width, self._height)
self._w.setWindowTitle('rdpy-rdpclient') self._w.setWindowTitle('rdpy-rdpclient')
self._w.show() self._w.show()
#resize session
controller.setScreen(self._width, self._height)
controller.setUsername(self._username) controller.setUsername(self._username)
controller.setPassword(self._passwod) controller.setPassword(self._passwod)
controller.setDomain(self._domain) controller.setDomain(self._domain)

View File

@@ -75,12 +75,14 @@ class RFBClientQt(RFBClientObserver, QAdaptor):
QAdaptor for specific RFB protocol stack QAdaptor for specific RFB protocol stack
is to an RFB observer is to an RFB observer
""" """
def __init__(self, controller): def __init__(self, controller, width, height):
""" """
@param controller: controller for observer @param controller: controller for observer
@param width: width of widget
@param height: height of widget
""" """
RFBClientObserver.__init__(self, controller) RFBClientObserver.__init__(self, controller)
self._widget = QRemoteDesktop(self) self._widget = QRemoteDesktop(self, width, height)
def getWidget(self): def getWidget(self):
""" """
@@ -138,12 +140,16 @@ class RDPClientQt(RDPClientObserver, QAdaptor):
""" """
Adaptor for RDP client Adaptor for RDP client
""" """
def __init__(self, controller): def __init__(self, controller, width, height):
""" """
@param controller: RDP controller @param controller: RDP controller
@param width: width of widget
@param height: height of widget
""" """
RDPClientObserver.__init__(self, controller) RDPClientObserver.__init__(self, controller)
self._widget = QRemoteDesktop(self) self._widget = QRemoteDesktop(self, width, height)
#set widget screen to RDP stack
controller.setScreen(width, height)
def getWidget(self): def getWidget(self):
""" """
@@ -245,13 +251,15 @@ class QRemoteDesktop(QtGui.QWidget):
""" """
Qt display widget Qt display widget
""" """
def __init__(self, adaptor): def __init__(self, adaptor, width, height):
""" """
@param adaptor: QAdaptor @param adaptor: QAdaptor
""" """
super(QRemoteDesktop, self).__init__() super(QRemoteDesktop, self).__init__()
#adaptor use to send #adaptor use to send
self._adaptor = adaptor self._adaptor = adaptor
#set correct size
self.resize(width, height)
#refresh stack of image #refresh stack of image
#because we can update image only in paint #because we can update image only in paint
#event function. When protocol receive image #event function. When protocol receive image
@@ -260,6 +268,8 @@ class QRemoteDesktop(QtGui.QWidget):
self._refresh = [] self._refresh = []
#bind mouse event #bind mouse event
self.setMouseTracking(True) self.setMouseTracking(True)
#buffer image
self._buffer = QtGui.QImage(width, height, QtGui.QImage.Format_RGB32)
def notifyImage(self, x, y, qimage): def notifyImage(self, x, y, qimage):
""" """
@@ -281,15 +291,15 @@ class QRemoteDesktop(QtGui.QWidget):
#if there is no refresh -> done #if there is no refresh -> done
if self._refresh == []: if self._refresh == []:
return return
#create painter to update background #fill buffer image
qp = QtGui.QPainter() with QtGui.QPainter(self._buffer) as qp:
#draw image #draw image
qp.begin(self) for image in self._refresh:
for image in self._refresh: qp.drawImage(image["x"], image["y"], image["image"])
qp.drawImage(image["x"], image["y"], image["image"]) #draw in widget
qp.end() with QtGui.QPainter(self) as qp:
qp.drawImage(0, 0, self._buffer)
self._lastReceive = [] self._refresh = []
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
""" """