From ecf6a18309d5022fc5856dc07e9238bb46acb75c Mon Sep 17 00:00:00 2001 From: uwolfer Date: Wed, 5 Dec 2007 22:40:13 +0000 Subject: [PATCH] Handle VNC framebuffer size changes correctly. Such changes are for example used by the QEMU VNC output git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/KDE/kdenetwork@745303 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- krdc/vnc/vncview.cpp | 18 +++++++++++------- krdc/vnc/vncview.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/krdc/vnc/vncview.cpp b/krdc/vnc/vncview.cpp index bdf322bb5..123813e4b 100644 --- a/krdc/vnc/vncview.cpp +++ b/krdc/vnc/vncview.cpp @@ -189,6 +189,8 @@ void VncView::updateImage(int x, int y, int w, int h) m_w = w; m_h = h; + m_frame = vncThread.image(); + if (!m_initDone) { setAttribute(Qt::WA_StaticContents); setAttribute(Qt::WA_OpaquePaintEvent); @@ -198,10 +200,9 @@ void VncView::updateImage(int x, int y, int w, int h) setMouseTracking(true); // get mouse events even when there is no mousebutton pressed setFocusPolicy(Qt::WheelFocus); - QImage frame = vncThread.image(); - setFixedSize(frame.width(), frame.height()); + setFixedSize(m_frame.width(), m_frame.height()); setStatus(Connected); - emit changeSize(frame.width(), frame.height()); + emit changeSize(m_frame.width(), m_frame.height()); emit connected(); m_initDone = true; @@ -210,6 +211,11 @@ void VncView::updateImage(int x, int y, int w, int h) } } + if ((y == 0 && x == 0) && (m_frame.size() != size())) { + setFixedSize(m_frame.width(), m_frame.height()); + emit changeSize(m_frame.width(), m_frame.height()); + } + m_repaint = true; repaint(x, y, w, h); m_repaint = false; @@ -231,14 +237,12 @@ void VncView::paintEvent(QPaintEvent *event) QPainter painter(this); - if (m_repaint) { // kDebug(5011) << "normal repaint"; - painter.drawImage(QRect(m_x, m_y, m_w, m_h), vncThread.image(m_x, m_y, m_w, m_h)); + painter.drawImage(QRect(m_x, m_y, m_w, m_h), m_frame.copy(m_x, m_y, m_w, m_h)); } else { // kDebug(5011) << "resize repaint"; - QImage frame = vncThread.image(); - painter.drawImage(frame.rect(), frame); + painter.drawImage(m_frame.rect(), m_frame); } QWidget::paintEvent(event); diff --git a/krdc/vnc/vncview.h b/krdc/vnc/vncview.h index 22442ff56..08838266b 100644 --- a/krdc/vnc/vncview.h +++ b/krdc/vnc/vncview.h @@ -74,6 +74,7 @@ private: bool m_firstPasswordTry; bool m_dontSendClipboard; VncHostPreferences *m_hostPreferences; + QImage m_frame; private slots: void updateImage(int x, int y, int w, int h); -- 2.11.4.GIT