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
"""
#create client observer
client = RDPClientQt(controller)
client = RDPClientQt(controller, self._width, self._height)
#create qt widget
self._w = client.getWidget()
self._w.resize(self._width, self._height)
self._w.setWindowTitle('rdpy-rdpclient')
self._w.show()
#resize session
controller.setScreen(self._width, self._height)
controller.setUsername(self._username)
controller.setPassword(self._passwod)
controller.setDomain(self._domain)

View File

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