[X2Go-Commits] [x2gokdriveclient] 01/01: Handling minimizing windows.

git-admin at x2go.org git-admin at x2go.org
Wed Feb 9 22:09:50 CET 2022


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

x2go pushed a commit to branch feature/rootless-mode
in repository x2gokdriveclient.

commit e8fbd7782e4a09a7c6ee1ad1ff2fc603a669890d
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Wed Feb 9 15:09:41 2022 -0600

    Handling minimizing windows.
---
 client.cpp | 16 +++-------------
 client.h   |  5 ++---
 extwin.cpp | 43 +++++++++++++++++++++++++++++++------------
 3 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/client.cpp b/client.cpp
index 0d447b2..fcbaee5 100644
--- a/client.cpp
+++ b/client.cpp
@@ -1217,6 +1217,7 @@ void Client::getWinUpdateBuffer()
                 {
                     case WINDOW_TYPE_DIALOG:
                         flags=Qt::Dialog;
+                        KDRStdErr()<<"new win: "<<KDR_HEX<<extWinId<<" Setting dialog flags";
                         break;
                     case WINDOW_TYPE_SPLASH:
                         flags=Qt::SplashScreen;
@@ -1896,7 +1897,7 @@ void Client::sendClientVersion()
 }
 
 
-void Client::changeWindow(ExtWin* win)
+void Client::changeWindow(ExtWin* win, uint8_t newState)
 {
     char evmsg[EVLENGTH]{};
     uint32_t etype;
@@ -1918,22 +1919,11 @@ void Client::changeWindow(ExtWin* win)
     memcpy(evmsg+16,(char*)&w,2);
     memcpy(evmsg+18,(char*)&h,2);
     memcpy(evmsg+20,(char*)&focus,1);
+    memcpy(evmsg+21,(char*)&newState,1);
     sendEvent(evmsg);
     //     QTimer::singleShot(1,win,SLOT(update()));
 }
 
-//request window closing
-void Client::closeWindow(ExtWin* win)
-{
-    char evmsg[EVLENGTH]{};
-    uint32_t etype;
-    uint32_t extWinId=win->getExtWinId();
-    etype=WINCLOSE;
-    memcpy(evmsg,(char*)&etype,4);
-    memcpy(evmsg+4,(char*)&extWinId,4);
-    sendEvent(evmsg);
-}
-
 //requesting on demand selection
 void Client::requestSelectionFromServer(SelectionType sel)
 {
diff --git a/client.h b/client.h
index 976c815..079cd4c 100644
--- a/client.h
+++ b/client.h
@@ -62,7 +62,6 @@ enum OS_VERSION{OS_LINUX, OS_WINDOWS, OS_DARWIN};
 #define KEEPALIVE 12
 #define CACHEREBUILD 13
 #define WINCHANGE 14
-#define WINCLOSE 15
 
 #define ShiftMask (1<<0)
 #define LockMask (1<<1)
@@ -83,6 +82,7 @@ enum OS_VERSION{OS_LINUX, OS_WINDOWS, OS_DARWIN};
 
 
 enum SelectionMime{STRING,UTF_STRING,PIXMAP};
+enum WinState{UNCHANGED, DELETED, ICONIFIED};
 enum SelectionType{PRIMARY,CLIPBOARD};
 enum ClipboardMode{CLIP_BOTH, CLIP_SERVER, CLIP_CLIENT, CLIP_NONE};
 
@@ -195,8 +195,7 @@ public:
     static QTextStream& KDRStdErr(bool dbg=true);
     static QString QRectToStr(const QRect& rec);
     static QString QSizeToStr(const QSizeF& sz);
-    void changeWindow(ExtWin* win);
-    void closeWindow(ExtWin* win);
+    void changeWindow(ExtWin* win, uint8_t newState=UNCHANGED);
     bool isRootless(){return rootless;}
     const QList<ExtWin*> getExtWindows(){return extWindows;}
     const QList<ExtWin*> getSiblings(ExtWin* win);
diff --git a/extwin.cpp b/extwin.cpp
index 5d99b66..ea9c3a7 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -24,6 +24,7 @@
 #include <QTimer>
 #include <QCloseEvent>
 
+
 ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, Qt::WindowFlags flags): QMainWindow(parent, flags)
 {
     displayArea=new DisplayArea((Client*)client,this);
@@ -76,7 +77,7 @@ void ExtWin::closeEvent(QCloseEvent* ev)
     if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
     {
         Client::KDRStdErr()<<"Request window close ";
-        client->closeWindow(this);
+        client->changeWindow(this,DELETED);
         ev->ignore();
     }
 }
@@ -93,16 +94,33 @@ void ExtWin::resizeEvent(QResizeEvent* ev)
 
 void ExtWin::showEvent(QShowEvent *ev)
 {
-    Client::KDRStdErr()<<"Show "<<Client::QRectToStr(geometry())<<KDR_ENDL;
     QMainWindow::showEvent(ev);
+    if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
+    {
+        Client::KDRStdErr()<<"Show "<<Client::QRectToStr(geometry())<<KDR_ENDL;
+        foreach(ExtWin* w, client->getExtWindows())
+        {
+            if(w->transWinId==extWinId)
+                w->raise();
+        }
+        QTimer::singleShot(5,this,SLOT(slotCheckStackOrder()));
+    }
 }
 
 void ExtWin::hideEvent(QHideEvent *ev)
 {
     QMainWindow::hideEvent(ev);
-    if(isMinimized())
+    if(((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))&&isMinimized())
     {
-        Client::KDRStdErr()<<"Minimized "<<Client::QRectToStr(geometry())<<KDR_ENDL;
+        Client::KDRStdErr()<<"Request window minimize";
+        client->changeWindow(this,ICONIFIED);
+        foreach(ExtWin* w, client->getExtWindows())
+        {
+            if(w->transWinId==extWinId)
+                w->showMinimized();
+            if(w->extWinId==transWinId)
+                w->showMinimized();
+        }
     }
 }
 
@@ -246,31 +264,30 @@ void ExtWin::slotCheckStackOrder()
         {
             xcb_window_t *children = xcb_query_tree_children(reply);
             int z=0;
+            int negative_z=0;
             //                 Client::KDRStdErr()<<"Current stack for parent: "<<KDR_ENDL;
             for (int i = 0; i < xcb_query_tree_children_length(reply); i++)
             {
                 ExtWin* win=findWinByTopWinId(children[i], siblings);
                 if(win)
                 {
-                    win->zOrderInd=z++;
+                    if(!win->isMinimized())
+                        win->zOrderInd=z++;
+                    else
+                        win->zOrderInd=--negative_z;
                     //                         Client::KDRStdErr()<<win->zOrderInd<<" - "<<KDR_HEX<< win->extWinId<<" "<<win->windowTitle()<<"->";
                 }
             }
             free(reply);
             //                 Client::KDRStdErr()<<"End of stack "<<KDR_ENDL;
             uint32_t newNextSib;
-            if(zOrderInd==0)
+            ExtWin* win=findWinByZInd(zOrderInd-1, siblings);
+            if(!win)
             {
                 newNextSib=0;
             }
             else
             {
-                ExtWin* win=findWinByZInd(zOrderInd-1, siblings);
-                if(!win)
-                {
-                    Client::KDRStdErr()<<"Error finding window with z-order "<<zOrderInd-1<<KDR_ENDL;
-                    return ;
-                }
                 newNextSib=win->extWinId;
             }
             if(nextSibId != newNextSib)
@@ -295,6 +312,8 @@ void ExtWin::slotCheckStackOrder()
 
 bool ExtWin::checkModality(QList<ExtWin*> &siblings)
 {
+    if(isMinimized())
+        return true;
     bool mod_res=true;
 
     for(int i=0;i<siblings.count();++i)

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