[X2Go-Commits] [x2gokdriveclient] 01/02: reduce window updates when moving windows in rootless mode

git-admin at x2go.org git-admin at x2go.org
Wed Apr 6 12:29:20 CEST 2022


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 at 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 at 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


More information about the x2go-commits mailing list