[X2Go-Commits] [x2gokdriveclient] 01/01: Focus handling
git-admin at x2go.org
git-admin at x2go.org
Thu Feb 3 17:07:36 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 1b656c77bf7f181cda1272046ccffce31d974b89
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date: Thu Feb 3 10:07:28 2022 -0600
Focus handling
---
client.cpp | 6 ++++--
extwin.cpp | 38 +++++++++++++++++++++++++++-----------
extwin.h | 3 +++
3 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/client.cpp b/client.cpp
index 9e8aa29..d267821 100644
--- a/client.cpp
+++ b/client.cpp
@@ -1858,12 +1858,13 @@ void Client::changeWindow(ExtWin* win)
uint32_t extWinId=win->getExtWinId();
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();
etype=WINCHANGE;
- KDRStdErr()<<"Request change for "<<KDR_HEX<<extWinId<<KDR_ENDL;
+ // KDRStdErr()<<"Request change for "<<KDR_HEX<<extWinId<<KDR_ENDL;
memcpy(evmsg,(char*)&etype,4);
memcpy(evmsg+4,(char*)&extWinId,4);
memcpy(evmsg+8,(char*)&sibId,4);
@@ -1871,8 +1872,9 @@ void Client::changeWindow(ExtWin* win)
memcpy(evmsg+14,(char*)&y,2);
memcpy(evmsg+16,(char*)&w,2);
memcpy(evmsg+18,(char*)&h,2);
+ memcpy(evmsg+20,(char*)&focus,1);
sendEvent(evmsg);
- QTimer::singleShot(1,win,SLOT(update()));
+// QTimer::singleShot(1,win,SLOT(update()));
}
//requesting on demand selection
diff --git a/extwin.cpp b/extwin.cpp
index 354e212..6979da5 100644
--- a/extwin.cpp
+++ b/extwin.cpp
@@ -32,7 +32,6 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, Qt::WindowFla
setWindowIcon(QIcon(":res/x2goclient.png"));
this->extWinId=extWinId;
this->client=client;
- setFocusPolicy(Qt::StrongFocus);
// QTimer::singleShot(10,this,SLOT(update()));
switch(windowType)
{
@@ -49,6 +48,7 @@ ExtWin::ExtWin(uint32_t extWinId, Client *client, QWidget* parent, Qt::WindowFla
setAttribute(Qt::WA_X11NetWmWindowTypeToolTip);
break;
}
+ setFocusPolicy(Qt::NoFocus);
}
void ExtWin::setWinSize(int w, int h)
@@ -313,20 +313,36 @@ 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))
+ if((windowType == WINDOW_TYPE_DROPDOWN_MENU)||(windowType == WINDOW_TYPE_POPUP_MENU))
{
- return QMainWindow::nativeEvent(eventType, message, result);
- }*/
+ return QMainWindow::nativeEvent(eventType, message, result);
+ }
if(!eventType.compare("xcb_generic_event_t") && parentId==0)
{
slotCheckStackOrder();
- /* xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
-
- Client::KDRStdErr()<<"XCB EV "<<(ev->response_type & ~0x80) <<" "<<Client::QRectToStr(geometry())<<KDR_ENDL;
- return QMainWindow::nativeEvent(eventType, message, result);*/
-
-// Client::KDRStdErr()<<"Check win: "<<KDR_HEX<<extWinPtr<<KDR_ENDL;
+ // if(windowType == WINDOW_TYPE_DROPDOWN_MENU || windowType == WINDOW_TYPE_POPUP_MENU)
+ {
+ xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
+ switch((ev->response_type & ~0x80))
+ {
+ case XCB_FOCUS_IN:
+ Client::KDRStdErr()<<"FOCUS IN "<<KDR_HEX<<extWinId<<KDR_ENDL;
+ if(!hasFocus())
+ {
+ setHasFocus(true);
+ client->changeWindow(this);
+ }
+ break;
+ case XCB_FOCUS_OUT:
+ Client::KDRStdErr()<<"FOCUS OUT "<<KDR_HEX<<extWinId<<KDR_ENDL;
+ if(hasFocus())
+ {
+ setHasFocus(false);
+ client->changeWindow(this);
+ }
+ break;
+ }
+ }
}
return QMainWindow::nativeEvent(eventType, message, result);
}
diff --git a/extwin.h b/extwin.h
index b9fad18..74047f2 100644
--- a/extwin.h
+++ b/extwin.h
@@ -49,6 +49,8 @@ public:
DisplayArea* getDisplayArea(){return displayArea;}
void setModality(int mod){modality=mod;}
QRect adjustGeometry();
+ void setHasFocus( bool f){focus=f;}
+ uint8_t getHasFocus(){return focus;}
private:
ExtWin* findWinByTopWinId(xcb_window_t topWinId, QList<ExtWin*> &siblings);
@@ -64,6 +66,7 @@ private:
xcb_window_t topWinId=0;
int zOrderInd;
int modality=MOD_NONE;
+ bool focus=0;
private slots:
void slotCheckStackOrder();
--
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