This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch feature/rootless-mode in repository x2gokdriveclient. from a8f41b9 rootless mode for x2gokdriveclient new 1b656c7 Focus handling The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: client.cpp | 6 ++++-- extwin.cpp | 38 +++++++++++++++++++++++++++----------- extwin.h | 3 +++ 3 files changed, 34 insertions(+), 13 deletions(-) -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdriveclient.git
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@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