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