[X2Go-Commits] [x2gokdriveclient] 01/01: transition between kdrive and virtual desktop coordinates.
git-admin at x2go.org
git-admin at x2go.org
Wed Feb 16 20:42:10 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 972ee17166f206c4fbb2a0af18a3e1159455ecb7
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date: Wed Feb 16 13:41:59 2022 -0600
transition between kdrive and virtual desktop coordinates.
---
client.cpp | 43 ++++++++++++++++++++++++++-----------------
displayarea.cpp | 20 ++++++++++++++------
extwin.cpp | 30 ++++++++++++------------------
extwin.h | 3 ++-
4 files changed, 54 insertions(+), 42 deletions(-)
diff --git a/client.cpp b/client.cpp
index 874eb4b..b19b3fd 100644
--- a/client.cpp
+++ b/client.cpp
@@ -164,11 +164,6 @@ Client::Client()
parseOptions();
if(!rootless)
initDesktopMode();
- else
- {
- hide();
- ((QGuiApplication*)QGuiApplication::instance())->setQuitOnLastWindowClosed(false);
- }
clientSocket=new QTcpSocket(this);
@@ -202,6 +197,11 @@ Client::Client()
slotScreenAdded(screen);
}
QTimer::singleShot(10,this,SLOT(connectToServer()));
+ if(rootless)
+ {
+ hide();
+ ((QGuiApplication*)QGuiApplication::instance())->setQuitOnLastWindowClosed(false);
+ }
}
Client::~Client()
@@ -695,6 +695,10 @@ void Client::connectToServer()
{
// setWindowTitle("X2GO SESSION");
+ if(rootless)
+ {
+ hide();
+ }
KDRStdErr(false)<<"Connecting to remote host "<<host<<":"<<port<<KDR_ENDL;
clientSocket->connectToHost(host, port);
}
@@ -802,7 +806,8 @@ void Client::renderFrame()
ExtWin* win=findExtWinById(currentFrame->winId);
if(win)
{
- win->getDisplayArea()->repaint(currentFrame->x-win->geometry().x(), currentFrame->y-win->geometry().y(), currentFrame->width, currentFrame->height);
+ QPoint kdrPos=win->virtualToKdrivePosition(win->geometry().topLeft());
+ win->getDisplayArea()->repaint(currentFrame->x-kdrPos.x(), currentFrame->y-kdrPos.y(), currentFrame->width, currentFrame->height);
}
else
{
@@ -813,7 +818,8 @@ void Client::renderFrame()
{
foreach(ExtWin* win, extWindows)
{
- win->getDisplayArea()->repaint(currentFrame->x-win->geometry().x(), currentFrame->y-win->geometry().y(), currentFrame->width, currentFrame->height);
+ QPoint kdrPos=win->virtualToKdrivePosition(win->geometry().topLeft());
+ win->getDisplayArea()->repaint(currentFrame->x-kdrPos.x(), currentFrame->y-kdrPos.y(), currentFrame->width, currentFrame->height);
}
}
}
@@ -1209,7 +1215,7 @@ void Client::getWinUpdateBuffer()
}
else
{
- KDRStdErr()<<"load icon: "<<icon.width()<<"x"<<icon.height();
+// KDRStdErr()<<"load icon: "<<icon.width()<<"x"<<icon.height();
}
readFromBuf+=icon_size;
}
@@ -1294,7 +1300,8 @@ void Client::getWinUpdateBuffer()
win->setMinimumHeight(minh);
}
win->resize(w,h);
- win->move(x,y);
+ win->move(win->kdriveToVirtualPosition(QPoint(x,y)));
+// Client::KDRStdErr()<<"new win pos: "<<x<<":"<<y<<" translated to "<< win->kdriveToVirtualPosition(QPoint(x,y)).x()<<":"<<win->kdriveToVirtualPosition(QPoint(x,y)).y()<<KDR_ENDL;
win->showNormal();
win->raise();
win->activateWindow();
@@ -1305,11 +1312,12 @@ void Client::getWinUpdateBuffer()
}
// win->update();
}
+ QPoint adjustedWinPos=win->kdriveToVirtualPosition(QPoint(x,y));
// 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)
- win->move(x,y);
+ if(win->geometry().x()!=adjustedWinPos.x() || win->geometry().y()!=adjustedWinPos.y())
+ win->move(adjustedWinPos);
if(win->windowTitle()!=name)
win->setWindowTitle(name);
// win->raise();
@@ -1854,7 +1862,7 @@ void Client::sendGeometryEvent()
{
bool isPrimary=(i==primaryScreenIndex);
QRect* scr=&ephyrScreens[i];
-// KDRStdErr()<<"X2GoKDrive-"<<i<<scr->size().width()<<scr->size().height()<<scr->topLeft().x()<<scr->topLeft().y()<<isPrimary;
+ KDRStdErr()<<"X2GoKDrive-"<<i<<" "<<scr->size().width()<<"x"<<scr->size().height()<<" "<<scr->topLeft().x()<<":"<<scr->topLeft().y()<<" isPrimary: "<<isPrimary<<KDR_ENDL;
if(isPrimary)
{
memcpy(evmsg+8,(char*)&i,1);
@@ -1912,12 +1920,13 @@ void Client::changeWindow(ExtWin* win, uint8_t newState)
uint32_t sibId=win->getNextSibId();
uint16_t x,y,w,h;
uint8_t focus=win->getHasFocus();
- x=win->adjustGeometry().x();
- y=win->adjustGeometry().y();
- w=win->adjustGeometry().width();
- h=win->adjustGeometry().height();
+ QPoint kdrPoint=win->virtualToKdrivePosition(QPoint(win->geometry().topLeft()));
+ x=kdrPoint.x();
+ y=kdrPoint.y();
+ w=win->geometry().width();
+ h=win->geometry().height();
etype=WINCHANGE;
- // KDRStdErr()<<"Request change for "<<KDR_HEX<<extWinId<<KDR_ENDL;
+// KDRStdErr()<<"win pos "<<x<<":"<<y<<KDR_ENDL;
memcpy(evmsg,(char*)&etype,4);
memcpy(evmsg+4,(char*)&extWinId,4);
memcpy(evmsg+8,(char*)&sibId,4);
diff --git a/displayarea.cpp b/displayarea.cpp
index 598996e..c90242f 100644
--- a/displayarea.cpp
+++ b/displayarea.cpp
@@ -158,7 +158,10 @@ void DisplayArea::paintEvent(QPaintEvent* ev)
{
// if(!disp)
{
- painter.drawPixmap(currentFrame->x-((ExtWin*)parentWidget)->adjustGeometry().x(),currentFrame->y-((ExtWin*)parentWidget)->adjustGeometry().y(),pix);
+ ExtWin* parWin=(ExtWin*)parentWidget;
+ QPoint kdrPos=parWin->virtualToKdrivePosition(parWin->geometry().topLeft());
+ painter.drawPixmap(currentFrame->x-kdrPos.x(),currentFrame->y-kdrPos.y(),pix);
+// Client::KDRStdErr()<<"DRAW pix on: "<<currentFrame->x-kdrPos.x()<<":"<<currentFrame->y-kdrPos.y()<<KDR_ENDL;
}
// else
// {
@@ -173,16 +176,19 @@ void DisplayArea::paintEvent(QPaintEvent* ev)
{
if(!client->isRootless())
{
- Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
+// Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
painter.drawImage(ev->rect(),*(client->getDisplayImage()),ev->rect());
}
else
{
// if(((ExtWin*)parentWidget)->getWindowType()==WINDOW_TYPE_NORMAL)
// Client::KDRStdErr()<<"WM update: "<<Client::QRectToStr(ev->rect())<<KDR_ENDL;
+ ExtWin* parWin=(ExtWin*)parentWidget;
+ QPoint kdrPos=parWin->virtualToKdrivePosition(parWin->geometry().topLeft());
+
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());
+ *(client->getDisplayImage()), ev->rect().x()+kdrPos.x(),
+ ev->rect().y()+kdrPos.y(), ev->rect().width(), ev->rect().height());
}
}
painter.end();
@@ -237,8 +243,10 @@ void DisplayArea::mouseMoveEvent(QMouseEvent* event)
}
else
{
- x=event->x()+parentWidget->geometry().x();
- y=event->y()+parentWidget->geometry().y();
+ ExtWin* w=(ExtWin*) parentWidget;
+ QPoint parTopLeft=w->virtualToKdrivePosition(w->geometry().topLeft());
+ x=event->x()+parTopLeft.x();
+ y=event->y()+parTopLeft.y();
}
memcpy(evmsg,(char*)&etype,4);
diff --git a/extwin.cpp b/extwin.cpp
index 98204de..dab59d6 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -23,6 +23,7 @@
#include <QApplication>
#include <QTimer>
#include <QCloseEvent>
+#include <QScreen>
ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, Qt::WindowFlags flags): QMainWindow(parent, flags)
@@ -78,7 +79,7 @@ void ExtWin::closeEvent(QCloseEvent* ev)
{
if((windowType == WINDOW_TYPE_NORMAL)||(windowType == WINDOW_TYPE_DIALOG))
{
- Client::KDRStdErr()<<"Request window close ";
+// Client::KDRStdErr()<<"Request window close ";
client->changeWindow(this,DELETED);
ev->ignore();
}
@@ -244,23 +245,16 @@ ExtWin* ExtWin::findWinByZInd(int zInd, QList<ExtWin*> &siblings)
return 0;
}
-QRect ExtWin::adjustGeometry()
+QPoint ExtWin::virtualToKdrivePosition(QPoint virtPos)
{
- return geometry();
- /*
- if(transWinId)
- {
- ExtWin* trwin=client->findExtWinById(transWinId);
- if(!trwin)
- {
- Client::KDRStdErr()<<"Error finding trans window "<<transWinId<<KDR_ENDL;
- return geometry();
- }
- QRect trGeom=trwin->adjustGeometry();
- QRect geom=geometry();
- return QRect(trGeom.x()+geom.x(), trGeom.y()+geom.y(),geom.width(),geom.height());
- }
- return geometry();*/
+ QRect avGeom=((QGuiApplication*)QGuiApplication::instance())->screens()[0]->availableVirtualGeometry();
+ return QPoint(virtPos.x()-avGeom.x(),virtPos.y()-avGeom.y());
+}
+
+QPoint ExtWin::kdriveToVirtualPosition(QPoint kdrPos)
+{
+ QRect avGeom=((QGuiApplication*)QGuiApplication::instance())->screens()[0]->availableVirtualGeometry();
+ return QPoint(kdrPos.x()+avGeom.x(),kdrPos.y()+avGeom.y());
}
void ExtWin::slotCheckStackOrder()
@@ -345,7 +339,7 @@ void ExtWin::slotCheckStackOrder()
QTimer::singleShot(5,this,SLOT(slotCheckStackOrder()));
return ;
}
- Client::KDRStdErr()<<"Need to restack "<<KDR_HEX<<extWinId<<" Above "<<newNextSib<<KDR_ENDL;
+// Client::KDRStdErr()<<"Need to restack "<<KDR_HEX<<extWinId<<" Above "<<newNextSib<<KDR_ENDL;
client->repaintAllWindows();
nextSibId=newNextSib;
client->changeWindow(this);
diff --git a/extwin.h b/extwin.h
index a82498e..7bf6c4f 100644
--- a/extwin.h
+++ b/extwin.h
@@ -48,7 +48,8 @@ public:
uint32_t getTransWinId(){return transWinId;}
DisplayArea* getDisplayArea(){return displayArea;}
void setModality(int mod){modality=mod;}
- QRect adjustGeometry();
+ QPoint virtualToKdrivePosition(QPoint virtPos);
+ QPoint kdriveToVirtualPosition(QPoint kdrPos);
void setHasFocus( bool f){focus=f;}
uint8_t getHasFocus(){return focus;}
--
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