[X2Go-Commits] [x2gokdriveclient] 01/01: Cursor, icon handling, min size

git-admin at x2go.org git-admin at x2go.org
Tue Feb 8 21:31:54 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 5120c078b329fff2ae86cddce6cb574341b35c4e
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Tue Feb 8 14:31:41 2022 -0600

    Cursor, icon handling, min size
---
 client.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 extwin.cpp | 17 ++++++++---------
 2 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/client.cpp b/client.cpp
index d267821..798bd14 100644
--- a/client.cpp
+++ b/client.cpp
@@ -897,6 +897,13 @@ void Client::getCursorImage()
     freeMessageBuffer();
     if(!rootless)
         displayArea->setCursor(*cursor);
+    else
+    {
+        for(int i=0;i<extWindows.count();++i)
+        {
+            extWindows[i]->getDisplayArea()->setCursor(*cursor);
+        }
+    }
 }
 
 
@@ -957,6 +964,13 @@ void Client::getCursor()
         }
         if(!rootless)
             displayArea->setCursor(*cursorCache[currentCursor->serialNumber]);
+        else
+        {
+            for(int i=0;i<extWindows.count();++i)
+            {
+                extWindows[i]->getDisplayArea()->setCursor(*cursorCache[currentCursor->serialNumber]);
+            }
+        }
     }
     else
     {
@@ -1122,7 +1136,7 @@ void Client::getWinUpdateBuffer()
             win=getExtWin(extWinId);
             if(!win)
             {
-                KDRStdErr()<<"Error: Wind "<<KDR_HEX<<extWinId<<" not found in the list"<<KDR_DEC<<KDR_ENDL;
+                KDRStdErr()<<"Error: update Wind "<<KDR_HEX<<extWinId<<" not found in the list"<<KDR_DEC<<KDR_ENDL;
                 freeMessageBuffer();
                 return;
             }
@@ -1137,10 +1151,12 @@ void Client::getWinUpdateBuffer()
         else
         {
             int16_t x, y;
-            uint16_t w,h,bw;
+            uint16_t w,h,minw,minh,bw;
             uint8_t visibility;
             uint8_t winType;
             uint16_t nameSize;
+            uint32_t icon_size;
+            QPixmap icon;
             QString name;
             uint32_t parId=*((uint32_t*)(messageBuffer+readFromBuf));
             readFromBuf+=sizeof(uint32_t);
@@ -1156,6 +1172,10 @@ void Client::getWinUpdateBuffer()
             readFromBuf+=sizeof(uint16_t);
             h=*((uint16_t*)(messageBuffer+readFromBuf));
             readFromBuf+=sizeof(uint16_t);
+            minw=*((uint16_t*)(messageBuffer+readFromBuf));
+            readFromBuf+=sizeof(uint16_t);
+            minh=*((uint16_t*)(messageBuffer+readFromBuf));
+            readFromBuf+=sizeof(uint16_t);
             bw=*((uint16_t*)(messageBuffer+readFromBuf));
             readFromBuf+=sizeof(uint16_t);
 
@@ -1172,6 +1192,20 @@ void Client::getWinUpdateBuffer()
                 name=QString::fromUtf8(messageBuffer+readFromBuf, nameSize);
                 readFromBuf+=nameSize;
             }
+            icon_size=*((uint32_t*)(messageBuffer+readFromBuf));
+            readFromBuf+=sizeof(uint32_t);
+            if(icon_size)
+            {
+                if(!icon.loadFromData((const uchar*)(messageBuffer+readFromBuf), icon_size))
+                {
+                    KDRStdErr()<<"Failed load icon from bytes: "<<icon_size;
+                }
+                else
+                {
+                    KDRStdErr()<<"load icon: "<<icon.width()<<"x"<<icon.height();
+                }
+                readFromBuf+=icon_size;
+            }
             if(state==1)
             {
 //                 KDRStdErr()<<"win changed: "<<KDR_HEX<<wptr;
@@ -1190,6 +1224,7 @@ void Client::getWinUpdateBuffer()
                     case WINDOW_TYPE_COMBO:
                     case WINDOW_TYPE_POPUP_MENU:
                     case WINDOW_TYPE_DROPDOWN_MENU:
+                    case WINDOW_TYPE_UTILITY:
                         flags=Qt::Window|Qt::FramelessWindowHint|Qt::BypassWindowManagerHint|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint;
                         break;
                     case WINDOW_TYPE_TOOLTIP:
@@ -1232,6 +1267,7 @@ void Client::getWinUpdateBuffer()
                         if(winType==WINDOW_TYPE_DIALOG)
                         {
                             win->setModality(ExtWin::MOD_SINGLE);
+                            win->setWindowIcon(transWin->windowIcon());
                         }
                     }
                 }
@@ -1243,14 +1279,23 @@ void Client::getWinUpdateBuffer()
 //                 KDRStdErr()<<"Place above"<<KDR_HEX<<nextSibPtr;
                 win->setNextSibId(nextSibId);
                 extWindows.append(win);
+                if(minh&&minw)
+                {
+                    win->setMinimumWidth(minw);
+                    win->setMinimumHeight(minh);
+                }
                 win->resize(w,h);
                 win->move(x,y);
                 win->showNormal();
                 win->raise();
                 win->activateWindow();
+                if(!icon.isNull())
+                {
+                    win->setWindowIcon(icon);
+                }
 //                 win->update();
             }
-            KDRStdErr()<<KDR_DEC<<name<<" "<<x<<":"<<y<<" "<<w<<"x"<<h<<" bw - "<<bw<<" "<<visibility<<KDR_ENDL;
+            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);
             if(win->geometry().x()!=x || win->geometry().y()!=y)
diff --git a/extwin.cpp b/extwin.cpp
index 6979da5..14230f3 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -47,6 +47,9 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, Qt::WindowFla
         case WINDOW_TYPE_TOOLTIP:
             setAttribute(Qt::WA_X11NetWmWindowTypeToolTip);
             break;
+        case WINDOW_TYPE_UTILITY:
+            setAttribute(Qt::WA_X11NetWmWindowTypeUtility);
+            break;
     }
     setFocusPolicy(Qt::NoFocus);
 }
@@ -58,7 +61,7 @@ void ExtWin::setWinSize(int w, int h)
 
 void ExtWin::moveEvent(QMoveEvent* ev)
 {
-    if((windowType != WINDOW_TYPE_DROPDOWN_MENU)&&(windowType != WINDOW_TYPE_POPUP_MENU))
+    if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
     {
         Client::KDRStdErr()<<"Move "<<Client::QRectToStr(geometry())<<KDR_ENDL;
         client->changeWindow(this);
@@ -69,7 +72,7 @@ void ExtWin::moveEvent(QMoveEvent* ev)
 
 void ExtWin::resizeEvent(QResizeEvent* ev)
 {
-    if((windowType != WINDOW_TYPE_DROPDOWN_MENU)&&(windowType != WINDOW_TYPE_POPUP_MENU))
+    if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
     {
         Client::KDRStdErr()<<"Resize "<<Client::QRectToStr(geometry())<<KDR_ENDL;
         client->changeWindow(this);
@@ -313,15 +316,11 @@ bool ExtWin::checkModality(QList<ExtWin*> &siblings)
 
 bool ExtWin::nativeEvent(const QByteArray &eventType, void *message, long *result)
 {
-    if((windowType == WINDOW_TYPE_DROPDOWN_MENU)||(windowType == WINDOW_TYPE_POPUP_MENU))
-    {
-            return QMainWindow::nativeEvent(eventType, message, result);
-    }
-    if(!eventType.compare("xcb_generic_event_t") && parentId==0)
+    if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
     {
-        slotCheckStackOrder();
-        //         if(windowType == WINDOW_TYPE_DROPDOWN_MENU || windowType == WINDOW_TYPE_POPUP_MENU)
+        if(!eventType.compare("xcb_generic_event_t") && parentId==0)
         {
+            slotCheckStackOrder();
             xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
             switch((ev->response_type & ~0x80))
             {

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