This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gokdriveclient. commit 8bc09a4fac41d20611ac5a4a952abae4f0fdf78d Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Wed Apr 6 12:11:02 2022 +0200 reduce window updates when moving windows in rootless mode --- client.cpp | 8 ++++---- debian/changelog | 1 + extwin.cpp | 30 +++++++++++++++++++++++++----- extwin.h | 5 +++++ 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/client.cpp b/client.cpp index f14a488..0ed41da 100644 --- a/client.cpp +++ b/client.cpp @@ -1299,8 +1299,8 @@ void Client::getWinUpdateBuffer() win->setMinimumWidth(minw); win->setMinimumHeight(minh); } - win->resize(w,h); - win->move(win->kdriveToVirtualPosition(QPoint(x,y))); + win->resizeWinFromServer(w,h); + win->moveWinFromServer(win->kdriveToVirtualPosition(QPoint(x,y))); // Client::KDRStdErr()<<"new win pos: "<<x<<":"<<y<<" translated to "<< win->kdriveToVirtualPosition(QPoint(x,y)).x()<<":"<<win->kdriveToVirtualPosition(QPoint(x,y)).y()<<KDR_ENDL; win->showNormal(); win->raise(); @@ -1315,9 +1315,9 @@ void Client::getWinUpdateBuffer() QPoint adjustedWinPos=win->kdriveToVirtualPosition(QPoint(x,y)); // KDRStdErr()<<KDR_DEC<<name<<" "<<x<<":"<<y<<" "<<w<<"x"<<h<<" min size: "<<minw<<"x"<<minh<<" bw - "<<bw<<" "<<visibility<<KDR_ENDL; if(win->geometry().width() != w || win->geometry().height() != h) - win->resize(w,h); + win->resizeWinFromServer(w,h); if(win->geometry().x()!=adjustedWinPos.x() || win->geometry().y()!=adjustedWinPos.y()) - win->move(adjustedWinPos); + win->moveWinFromServer(adjustedWinPos); if(win->windowTitle()!=name) win->setWindowTitle(name); // win->raise(); diff --git a/debian/changelog b/debian/changelog index ccd1953..bb3faad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -46,5 +46,6 @@ x2gokdriveclient (0.0.0.1-0x2go1) UNRELEASED; urgency=medium - replace QByteArray::compare with operator ==. - include <xcb/xproto.h> in extwin.h to fix build on leap423 and co - fix server version checking + - reduce window updates when moving windows in rootless mode -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Tue, 04 Jun 2019 11:10:43 +0200 diff --git a/extwin.cpp b/extwin.cpp index ea61384..8aed559 100644 --- a/extwin.cpp +++ b/extwin.cpp @@ -28,6 +28,9 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, uint8_t wt, Qt::WindowFlags flags): QMainWindow(parent, flags) { + changeTimer=new QTimer(this); + changeTimer->setSingleShot(true); + connect(changeTimer, SIGNAL(timeout()), this, SLOT(slotChangeWin())); displayArea=new DisplayArea((Client*)client,this); displayArea->setObjectName("DisplayArea"); displayArea->setStyleSheet("QFrame#DisplayArea{background-color:black;}"); @@ -83,12 +86,30 @@ void ExtWin::setWinSize(int w, int h) displayArea->resize(w,h); } +void ExtWin::moveWinFromServer(QPoint p) +{ + ignoreGeometryChangeEvent=true; + move(p); + ignoreGeometryChangeEvent=false; +} + +void ExtWin::slotChangeWin() +{ + client->changeWindow(this); +} + +void ExtWin::resizeWinFromServer(int w, int h) +{ + ignoreGeometryChangeEvent=true; + resize(w,h); + ignoreGeometryChangeEvent=false; +} + void ExtWin::moveEvent(QMoveEvent* ev) { - if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG)) + if(((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))&&(!ignoreGeometryChangeEvent)) { -// Client::KDRStdErr()<<"Move "<<Client::QRectToStr(geometry())<<KDR_ENDL; - client->changeWindow(this); + changeTimer->start(50); } QMainWindow::moveEvent(ev); } @@ -107,8 +128,7 @@ void ExtWin::resizeEvent(QResizeEvent* ev) { if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG)) { -// Client::KDRStdErr()<<"Resize "<<Client::QRectToStr(geometry())<<KDR_ENDL; - client->changeWindow(this); + slotChangeWin(); } QMainWindow::resizeEvent(ev); } diff --git a/extwin.h b/extwin.h index db37947..4d22f23 100644 --- a/extwin.h +++ b/extwin.h @@ -53,6 +53,8 @@ public: QPoint kdriveToVirtualPosition(QPoint kdrPos); void setHasFocus( bool f){focus=f;} uint8_t getHasFocus(){return focus;} + void moveWinFromServer(QPoint pos); + void resizeWinFromServer(int w, int h); private: #ifdef Q_OS_LINUX @@ -76,8 +78,11 @@ private: int zOrderInd; int modality=MOD_NONE; bool focus=0; + bool ignoreGeometryChangeEvent=false; + QTimer* changeTimer; private slots: + void slotChangeWin(); void slotCheckStackOrder(); #ifdef Q_OS_WIN void slotSetTaskbar(); -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdriveclient.git