This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch feature/rootless-mode in repository x2gokdrive. from 6f1ffc4 Handling WM_DELETE_WINDOW new cd6bb1d Handling minimizing windows. 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: x2gokdriveremote.c | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- x2gokdriveremote.h | 7 +++++-- 2 files changed, 49 insertions(+), 12 deletions(-) -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdrive.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch feature/rootless-mode in repository x2gokdrive. commit cd6bb1d38399f84642ac620855d5e38a06c9a580 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Wed Feb 9 15:08:25 2022 -0600 Handling minimizing windows. --- x2gokdriveremote.c | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- x2gokdriveremote.h | 7 +++++-- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/x2gokdriveremote.c b/x2gokdriveremote.c index 59d18db..58b262b 100644 --- a/x2gokdriveremote.c +++ b/x2gokdriveremote.c @@ -2586,11 +2586,6 @@ clientReadNotify(int fd, int ready, void *data) client_win_change(buff); break; } - case WINCLOSE: - { - client_win_close(buff); - break; - } default: { EPHYR_DBG("UNSUPPORTED EVENT: %d",event_type); @@ -2652,12 +2647,11 @@ ReflectStackChange(WindowPtr pWin, WindowPtr pSib, VTKind kind) WindowsRestructured(); } -void client_win_close(char* buff) +void client_win_close(uint32_t winId) { WindowPtr pWin; - uint32_t winId=*((uint32_t*)(buff+4)); xEvent e; -// EPHYR_DBG("Client request win close: 0x%x",winId); + // EPHYR_DBG("Client request win close: 0x%x",winId); pWin=remote_find_window_on_screen_by_id(winId, remoteVars.ephyrScreen->pScreen->root); if(!pWin) { @@ -2676,6 +2670,29 @@ void client_win_close(char* buff) DeliverEvents(pWin, &e, 1, NullWindow); } +void client_win_iconify(uint32_t winId) +{ + WindowPtr pWin; + xEvent e; + EPHYR_DBG("Client request win iconify: 0x%x",winId); + pWin=remote_find_window_on_screen_by_id(winId, remoteVars.ephyrScreen->pScreen->root); + if(!pWin) + { + EPHYR_DBG("Window with ID 0x%X not found on current screen",winId); + return; + } + e.u.u.type = ClientMessage; + e.u.u.detail = 32; + e.u.clientMessage.window = winId; + e.u.clientMessage.u.l.type = MakeAtom("WM_CHANGE_STATE",strlen("WM_CHANGE_STATE"),FALSE); + e.u.clientMessage.u.l.longs0 = 3;//iconicState + e.u.clientMessage.u.l.longs1 = 0; + e.u.clientMessage.u.l.longs2 = 0; + e.u.clientMessage.u.l.longs3 = 0; + e.u.clientMessage.u.l.longs4 = 0; + DeliverEvents(pWin->parent, &e, 1, NullWindow); +} + void client_win_change(char* buff) { @@ -2690,8 +2707,9 @@ void client_win_change(char* buff) uint16_t nw=*((int16_t*)(buff+16)); uint16_t nh=*((int16_t*)(buff+18)); uint8_t focus=*((int8_t*)(buff+20)); - + uint8_t newstate=*((int8_t*)(buff+21)); BOOL move=FALSE, resize=FALSE, restack=FALSE; + // EPHYR_DBG("Client request win change: %p %d:%d %dx%d",fptr, nx,ny,nw,nh); pWin=remote_find_window_on_screen_by_id(winId, remoteVars.ephyrScreen->pScreen->root); if(!pWin) @@ -2700,6 +2718,18 @@ void client_win_change(char* buff) return; } + if(newstate==WIN_DELETED) + { + client_win_close(winId); + return; + } + if(newstate==WIN_ICONIFIED) + { + client_win_iconify(winId); + ReflectStackChange(pWin, 0, VTOther); + return; + } + pParent = pWin->parent; pSib=0; if(newSibId) @@ -4014,7 +4044,11 @@ void remote_check_window(WindowPtr win) } } } -/* if(prop->propertyName==MakeAtom("WM_NAME", strlen("WM_NAME"),FALSE) && prop->data) + if(prop->propertyName==MakeAtom("WM_STATE", strlen("WM_STATE"),FALSE) && prop->data) + { + EPHYR_DBG("-- WM_STATE: %d",*((uint32_t*)(prop->data))); + } + /* if(prop->propertyName==MakeAtom("WM_NAME", strlen("WM_NAME"),FALSE) && prop->data) { // EPHYR_DBG("-- Name: %s",(char*)prop->data); } diff --git a/x2gokdriveremote.h b/x2gokdriveremote.h index 6e07a67..eb67378 100644 --- a/x2gokdriveremote.h +++ b/x2gokdriveremote.h @@ -133,6 +133,9 @@ enum WinType{WINDOW_TYPE_DESKTOP, WINDOW_TYPE_DOCK, WINDOW_TYPE_TOOLBAR, WINDOW_ WINDOW_TYPE_DIALOG, WINDOW_TYPE_DROPDOWN_MENU, WINDOW_TYPE_POPUP_MENU, WINDOW_TYPE_TOOLTIP, WINDOW_TYPE_NOTIFICATION, WINDOW_TYPE_COMBO, WINDOW_TYPE_DND, WINDOW_TYPE_NORMAL}; +//new state requested by WINCHANGE event +enum WinState{WIN_UNCHANGED, WIN_DELETED, WIN_ICONIFIED}; + //Size of 1 window update (new or changed window) = 4xwinId + type of update + 7 coordinates + visibility + type of window + size of name buffer + icon_size #define WINUPDSIZE 4*sizeof(uint32_t) + sizeof(int8_t) + 7*sizeof(int16_t) + sizeof(int8_t) + sizeof(int8_t) + sizeof(int16_t) + sizeof(int32_t) //Size of 1 window update (deleted window) = winId + type of update @@ -163,7 +166,6 @@ enum WinType{WINDOW_TYPE_DESKTOP, WINDOW_TYPE_DOCK, WINDOW_TYPE_TOOLBAR, WINDOW_ #define KEEPALIVE 12 #define CACHEREBUILD 13 #define WINCHANGE 14 -#define WINCLOSE 15 #define EVLENGTH 41 @@ -558,7 +560,8 @@ WindowPtr remote_find_window_on_screen_by_id(uint32_t winId, WindowPtr root); void remote_process_window_updates(void); void send_reinit_notification(void); void client_win_change(char* buff); -void client_win_close(char* buff); +void client_win_close(uint32_t winId); +void client_win_iconify(uint32_t winId); void remote_check_rootless_windows_for_updates(KdScreenInfo *screen); #endif /* X2GOKDRIVE_REMOTE_H */ -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdrive.git