[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