[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