This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2gokdriveclient.

commit fd71678c3416f1b262e104aa6005d84b0a557664
Author: Oleksandr Shneyder <o.shney...@phoca-gmbh.de>
Date:   Thu Jun 9 14:52:28 2022 -0500

    rootles mode for Windows: disable resize animation, change background of 
display area, don't show window content and don't send geometry events while 
moving/resizing.
---
 client.cpp           |  2 +-
 debian/changelog     |  3 +++
 extwin.cpp           | 56 ++++++++++++++++++++++++++++++++++++++++++++++------
 extwin.h             |  3 +++
 x2gokdriveclient.pro |  5 +++++
 5 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/client.cpp b/client.cpp
index d605de5..dbf1a9e 100644
--- a/client.cpp
+++ b/client.cpp
@@ -1945,7 +1945,7 @@ void Client::changeWindow(ExtWin* win, uint8_t newState)
     w=win->geometry().width();
     h=win->geometry().height();
     etype=WINCHANGE;
-//     KDRStdErr()<<"win pos "<<x<<":"<<y<<KDR_ENDL;
+//     KDRStdErr()<<"win geom "<<w<<"x"<<h<<KDR_ENDL;
     memcpy(evmsg,(char*)&etype,4);
     memcpy(evmsg+4,(char*)&extWinId,4);
     memcpy(evmsg+8,(char*)&sibId,4);
diff --git a/debian/changelog b/debian/changelog
index b096f7d..6df6a0d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -52,5 +52,8 @@ x2gokdriveclient (0.0.0.1-0x2go1) UNRELEASED; urgency=medium
     - rootless mode: if updated window not found, considering it as a new one.
     - rootless mode: update window on focus events.
     - normal mode: update window on focus events (MS Windows).
+    - rootles mode for Windows: disable resize animation,
+      change background of display area,
+      don't show window content and don't send geometry events while 
moving/resizing.
 
  -- Mike Gabriel <mike.gabr...@das-netzwerkteam.de>  Tue, 04 Jun 2019 11:10:43 
+0200
diff --git a/extwin.cpp b/extwin.cpp
index bfd1ffe..a529462 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -24,8 +24,9 @@
 #include <QTimer>
 #include <QCloseEvent>
 #include <QScreen>
-
-
+#ifdef Q_OS_WIN
+#include <dwmapi.h>
+#endif
 ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, uint8_t wt, 
Qt::WindowFlags flags): QMainWindow(parent, flags)
 {
     changeTimer=new QTimer(this);
@@ -33,7 +34,7 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* 
parent, uint8_t wt, Q
     connect(changeTimer, SIGNAL(timeout()), this, SLOT(slotChangeWin()));
     displayArea=new DisplayArea((Client*)client,this);
     displayArea->setObjectName("DisplayArea");
-    displayArea->setStyleSheet("QFrame#DisplayArea{background-color:black;}");
+//     
displayArea->setStyleSheet("QFrame#DisplayArea{background-color:black;}");
     displayArea->show();
     setCentralWidget(displayArea);
     setWindowIcon(QIcon(":res/x2goclient.png"));
@@ -43,6 +44,8 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* 
parent, uint8_t wt, Q
 #ifdef Q_OS_WIN
     if((windowType!=WINDOW_TYPE_NORMAL) && (windowType!=WINDOW_TYPE_DIALOG))
         QTimer::singleShot(10,this,SLOT(slotSetTaskbar()));
+    else
+        QTimer::singleShot(10,this,SLOT(slotSetWinWindow()));
 #endif
 #ifdef Q_OS_LINUX
     switch(windowType)
@@ -79,6 +82,16 @@ void ExtWin::slotSetTaskbar()
         SetWindowLong(hWnd, GWL_EXSTYLE, style);
     }
 }
+
+void ExtWin::slotSetWinWindow()
+{
+    HWND hWnd=(HWND)winId();
+    BOOL fDisable = TRUE;
+    DwmSetWindowAttribute(hWnd,
+                             DWMWA_TRANSITIONS_FORCEDISABLED,
+                             &fDisable,
+                             sizeof(fDisable));
+}
 #endif
 
 void ExtWin::setWinSize(int w, int h)
@@ -101,9 +114,13 @@ void ExtWin::slotChangeWin()
 
 void ExtWin::moveEvent(QMoveEvent* ev)
 {
-    if(((windowType == WINDOW_TYPE_NORMAL)||(windowType == 
WINDOW_TYPE_DIALOG))&&(!ignoreGeometryChangeEvent))
+    if(((windowType == WINDOW_TYPE_NORMAL)||(windowType == 
WINDOW_TYPE_DIALOG))&&(!ignoreGeometryChangeEvent && ! isChanging))
     {
+#ifdef Q_OS_WIN
+        slotChangeWin();
+#else
         changeTimer->start(50);
+#endif
     }
     QMainWindow::moveEvent(ev);
 }
@@ -120,9 +137,17 @@ void ExtWin::closeEvent(QCloseEvent* ev)
 
 void ExtWin::resizeEvent(QResizeEvent* ev)
 {
-    if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
+    if(((windowType == WINDOW_TYPE_NORMAL)||(windowType == 
WINDOW_TYPE_DIALOG))&&!isChanging)
     {
-        slotChangeWin();
+#ifdef Q_OS_WIN
+        displayArea->hide();
+        setWindowOpacity(0.2);
+#endif
+         slotChangeWin();
+         slotChangeWin();
+#ifdef Q_OS_WIN
+         QTimer::singleShot(200, this, SLOT(slotRestoreWin()));
+#endif
     }
     QMainWindow::resizeEvent(ev);
 }
@@ -420,6 +445,14 @@ bool ExtWin::checkModality(QList<ExtWin*> &siblings)
     return mod_res;
 }
 
+#ifdef Q_OS_WIN
+void ExtWin::slotRestoreWin()
+{
+    displayArea->show();
+    setWindowOpacity(1);
+}
+#endif
+
 bool ExtWin::nativeEvent(const QByteArray &eventType, void *message, long 
*result)
 {
 #ifdef Q_OS_LINUX
@@ -460,6 +493,17 @@ bool ExtWin::nativeEvent(const QByteArray &eventType, void 
*message, long *resul
             MSG* ev = static_cast<MSG *>(message);
             switch((ev->message))
             {
+                case WM_ENTERSIZEMOVE:
+                    isChanging=true;
+                    displayArea->hide();
+                    setWindowOpacity(0.2);
+                    break;
+                case WM_EXITSIZEMOVE:
+                    isChanging=false;
+                    slotChangeWin();
+                    QTimer::singleShot(10, this, SLOT(slotChangeWin()));
+                    QTimer::singleShot(200, this, SLOT(slotRestoreWin()));
+                    break;
                 case WM_SETFOCUS:
                     slotCheckStackOrder();
 //                     Client::KDRStdErr()<<"FOCUS IN 
"<<KDR_HEX<<extWinId<<KDR_ENDL;
diff --git a/extwin.h b/extwin.h
index a0f6bdd..ab96a1b 100644
--- a/extwin.h
+++ b/extwin.h
@@ -78,6 +78,7 @@ private:
     int modality=MOD_NONE;
     bool focus=0;
     bool ignoreGeometryChangeEvent=false;
+    bool isChanging=false;
     QTimer* changeTimer;
 
 private slots:
@@ -85,6 +86,8 @@ private slots:
     void slotCheckStackOrder();
 #ifdef Q_OS_WIN
     void slotSetTaskbar();
+    void slotSetWinWindow();
+    void slotRestoreWin();
 #endif
 protected:
     void closeEvent(QCloseEvent*);
diff --git a/x2gokdriveclient.pro b/x2gokdriveclient.pro
index 903bf63..6ef1844 100644
--- a/x2gokdriveclient.pro
+++ b/x2gokdriveclient.pro
@@ -28,4 +28,9 @@ SOURCES += xcbclip.cpp
 HEADERS += xcbclip.h
 }
 
+windows {
+message("Building for Windows")
+LIBS += -ldwmapi
+}
+
 LIBS += -lz

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on 
/srv/git/code.x2go.org/x2gokdriveclient.git
_______________________________________________
x2go-commits mailing list
x2go-commits@lists.x2go.org
https://lists.x2go.org/listinfo/x2go-commits

Reply via email to