[X2Go-Commits] [x2gokdriveclient] 01/01: Repaint windows after changing number of windows or stack order.
git-admin at x2go.org
git-admin at x2go.org
Tue Feb 15 19:05:20 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 1437664961e8d2dd33e440616ce7d3fc707c8173
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date: Tue Feb 15 12:05:09 2022 -0600
Repaint windows after changing number of windows or stack order.
---
client.cpp | 47 +++++++++++++++++++++++++----------------------
client.h | 4 ++--
displayarea.cpp | 8 +++++---
extwin.cpp | 13 ++++++++++++-
extwin.h | 4 ++--
menuframe.cpp | 1 -
6 files changed, 46 insertions(+), 31 deletions(-)
diff --git a/client.cpp b/client.cpp
index 34041bc..874eb4b 100644
--- a/client.cpp
+++ b/client.cpp
@@ -714,11 +714,6 @@ QPixmap Client::getPixmapFromCache(uint32_t crc)
return frameCache[crc];
}
-void Client::saveDispImage(QString path)
-{
- displayImage.save(path);
-}
-
void Client::renderFrame()
{
QPainter dispImagePainter;
@@ -823,10 +818,11 @@ void Client::renderFrame()
}
}
setUptodate();
+ setDisplayImage();
+}
-
-//////put another func if works
-
+void Client::setDisplayImage()
+{
Frame* currentFrame=this->getCurrentFrame();
QPixmap pix;
if(!currentFrame->crc)
@@ -1120,10 +1116,18 @@ ExtWin* Client::findExtWinById(uint32_t extWinId)
return NULL;
}
+void Client::repaintAllWindows()
+{
+ foreach(ExtWin* w, extWindows)
+ {
+ QTimer::singleShot(10, w->getDisplayArea(), SLOT(repaint()));
+ }
+}
+
void Client::getWinUpdateBuffer()
{
//process window updates from messageBuffer
- KDRStdErr()<<"get winupdate buffer size: "<<winUpdateSize<<KDR_ENDL;
+// KDRStdErr()<<"get winupdate buffer size: "<<winUpdateSize<<KDR_ENDL;
int readFromBuf=0;
while(readFromBuf < winUpdateSize)
{
@@ -1145,10 +1149,11 @@ void Client::getWinUpdateBuffer()
}
if(state==3)
{
- KDRStdErr()<<"win deleted: "<<KDR_HEX<<extWinId<<KDR_ENDL;
+// KDRStdErr()<<"win deleted: "<<KDR_HEX<<extWinId<<KDR_ENDL;
extWindows.removeAll(win);
win->close();
delete win;
+ repaintAllWindows();
}
else
{
@@ -1217,15 +1222,15 @@ void Client::getWinUpdateBuffer()
Qt::WindowFlags flags;
switch(winType)
{
- case WINDOW_TYPE_UTILITY:
case WINDOW_TYPE_DIALOG:
winType=WINDOW_TYPE_DIALOG;
flags=Qt::Dialog;
- KDRStdErr()<<"new win: "<<KDR_HEX<<extWinId<<" Setting dialog flags";
+// KDRStdErr()<<"new win: "<<KDR_HEX<<extWinId<<" Setting dialog flags";
break;
case WINDOW_TYPE_SPLASH:
flags=Qt::SplashScreen;
break;
+ case WINDOW_TYPE_UTILITY:
case WINDOW_TYPE_COMBO:
case WINDOW_TYPE_POPUP_MENU:
case WINDOW_TYPE_DROPDOWN_MENU:
@@ -1237,17 +1242,17 @@ void Client::getWinUpdateBuffer()
default:flags=Qt::Window ;
}
- KDRStdErr()<<"new win: "<<KDR_HEX<<extWinId;
+// KDRStdErr()<<"new win: "<<KDR_HEX<<extWinId;
if(parId==0)
{
- KDRStdErr()<<"win is top window: "<<KDR_HEX<<parId;
+// KDRStdErr()<<"win is top window: "<<KDR_HEX<<parId;
win=new ExtWin(extWinId,this, 0, flags);
win->setParent(0);
}
else
{
ExtWin* parentWin=findExtWinById(parId);
- KDRStdErr()<<"win has parent!!!!!: "<<KDR_HEX<<parId;
+// KDRStdErr()<<"win has parent!!!!!: "<<KDR_HEX<<parId;
if(!parentWin)
{
KDRStdErr()<<"parent Win not found in list: "<<KDR_HEX<<parId;
@@ -1261,11 +1266,11 @@ void Client::getWinUpdateBuffer()
ExtWin* transWin=findExtWinById(transWinId);
if(!transWin)
{
- KDRStdErr()<<"trans Win not found in list: "<<KDR_HEX<<transWinId;
+// KDRStdErr()<<"trans Win not found in list: "<<KDR_HEX<<transWinId;
}
else
{
- KDRStdErr()<<"trans Window: "<<KDR_HEX<<transWinId;
+// KDRStdErr()<<"trans Window: "<<KDR_HEX<<transWinId<<" me: "<<extWinId<<KDR_ENDL;
// win->setParent(transWin);
win->setTransWinId(transWinId);
if(winType==WINDOW_TYPE_DIALOG)
@@ -1293,13 +1298,14 @@ void Client::getWinUpdateBuffer()
win->showNormal();
win->raise();
win->activateWindow();
+ repaintAllWindows();
if(!icon.isNull())
{
win->setWindowIcon(icon);
}
// win->update();
}
- KDRStdErr()<<KDR_DEC<<name<<" "<<x<<":"<<y<<" "<<w<<"x"<<h<<" min size: "<<minw<<"x"<<minh<<" 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)
@@ -1309,17 +1315,15 @@ void Client::getWinUpdateBuffer()
// win->raise();
if(win->getParentId()!=parId)
{
- #warning inplement this
//set new parent and remap window
win->setParentId(parId);
KDRStdErr()<<"Reparent window";
}
if(win->getNextSibId()!=nextSibId)
{
- #warning inplement this
// set sib and restack windows
win->setNextSibId(nextSibId);
- KDRStdErr()<<"Check if need to Restack window???";
+// KDRStdErr()<<"Check if need to Restack window???";
}
}
}
@@ -2050,7 +2054,6 @@ void Client::send_selnotify_to_server(SelectionType selection, SelectionMime mim
}
-
void Client::slotSelectionChanged(QClipboard::Mode mode)
{
diff --git a/client.h b/client.h
index b9c544a..6383c5d 100644
--- a/client.h
+++ b/client.h
@@ -200,11 +200,10 @@ public:
const QList<ExtWin*> getSiblings(ExtWin* win);
ExtWin* findExtWinById(uint32_t extWinId);
QImage* getDisplayImage(){return &displayImage;}
+ void repaintAllWindows();
public slots:
void sendOutputSelChunk();
- void saveDispImage(QString path="/tmp/dispPin.png");
-
private slots:
void sendClientVersion();
@@ -266,6 +265,7 @@ private:
void setFS(int screenNumber);
void reinitCaches();
void initGeometry();
+ void setDisplayImage();
bool wantRepaint=false;
bool hasUpdates=false;
#ifndef Q_OS_LINUX
diff --git a/displayarea.cpp b/displayarea.cpp
index 9b913ea..598996e 100644
--- a/displayarea.cpp
+++ b/displayarea.cpp
@@ -173,12 +173,14 @@ void DisplayArea::paintEvent(QPaintEvent* ev)
{
if(!client->isRootless())
{
-// Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
- painter.drawImage(ev->rect(),*(client->getDisplayImage()),ev->rect());
+ Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
+ painter.drawImage(ev->rect(),*(client->getDisplayImage()),ev->rect());
}
else
{
- painter.drawImage(ev->rect().x(),ev->rect().y(),
+// if(((ExtWin*)parentWidget)->getWindowType()==WINDOW_TYPE_NORMAL)
+// Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
+ painter.drawImage(ev->rect().x(),ev->rect().y(),
*(client->getDisplayImage()), ev->rect().x()+((ExtWin*)parentWidget)->adjustGeometry().x(),
ev->rect().y()+((ExtWin*)parentWidget)->adjustGeometry().y(), ev->rect().width(), ev->rect().height());
}
diff --git a/extwin.cpp b/extwin.cpp
index 4fe46d9..98204de 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -346,6 +346,7 @@ void ExtWin::slotCheckStackOrder()
return ;
}
Client::KDRStdErr()<<"Need to restack "<<KDR_HEX<<extWinId<<" Above "<<newNextSib<<KDR_ENDL;
+ client->repaintAllWindows();
nextSibId=newNextSib;
client->changeWindow(this);
}
@@ -444,13 +445,23 @@ bool ExtWin::nativeEvent(const QByteArray &eventType, void *message, long *resul
break;
case WM_KILLFOCUS:
slotCheckStackOrder();
-// Client::KDRStdErr()<<"FOCUS OUT "<<KDR_HEX<<extWinId<<KDR_ENDL;
+// if(windowType==WINDOW_TYPE_NORMAL)
+ {
+// Client::KDRStdErr()<<"FOCUS OUT "<<KDR_HEX<<extWinId<<KDR_ENDL;
+// QTimer::singleShot(100, this, SLOT(update()));
+ }
if(hasFocus())
{
setHasFocus(false);
client->changeWindow(this);
}
break;
+ case WM_PAINT:
+ if(windowType==WINDOW_TYPE_NORMAL)
+ {
+// Client::KDRStdErr()<<"WM PAINT EVENT: "<<KDR_ENDL;
+ }
+ break;
}
}
}
diff --git a/extwin.h b/extwin.h
index 175edd2..a82498e 100644
--- a/extwin.h
+++ b/extwin.h
@@ -23,8 +23,6 @@
#include <QMainWindow>
#ifdef Q_OS_LINUX
#include <QX11Info>
-#else
-#warning add code for WIN EVENTS
#endif
#include "client.h"
@@ -42,10 +40,12 @@ public:
void setParentId(uint32_t id){parentId=id;}
void setTransWinId(uint32_t id){transWinId=id;}
void setNextSibId(uint32_t id){nextSibId=id;}
+ uint8_t getWindowType(){return windowType;}
void setWindowType(uint8_t tp){windowType=tp;}
uint64_t getParentId(){return parentId;}
uint64_t getNextSibId(){return nextSibId;}
uint64_t getExtWinId(){return extWinId;}
+ uint32_t getTransWinId(){return transWinId;}
DisplayArea* getDisplayArea(){return displayArea;}
void setModality(int mod){modality=mod;}
QRect adjustGeometry();
diff --git a/menuframe.cpp b/menuframe.cpp
index 774b593..62018af 100644
--- a/menuframe.cpp
+++ b/menuframe.cpp
@@ -127,7 +127,6 @@ MenuFrame::MenuFrame(QWidget* parent, QMenu* menu):QFrame(parent)
bDisc->setIcon(QIcon(":res/network-disconnect.svg"));
Client* client=(Client*)parent;
connect(bDisc, SIGNAL(clicked(bool)),client, SLOT(slotDisconnect()));
- connect(bPin, SIGNAL(toggled(bool)), client, SLOT(saveDispImage()));
bMin=new QToolButton(this);
--
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