[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