From 586da1f353a5ace7ddbcaba451afccb54cfbdb4c Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Thu, 11 Jun 2009 12:33:06 -0400 Subject: [PATCH] Trigger detach events. For detach-events, it's not enough to just listen to 'detach' command, since this command is not used for remote detaches. So scripts looking to do something on a detach event need to hook to this event, instead of hooking to 'cmdexecuted' event and looking for 'detach' command. --- src/lua.c | 7 +++++++ src/process.c | 1 - src/screen.c | 4 ++++ src/script.c | 10 ++++++++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/lua.c b/src/lua.c index 161b47e..5c827f8 100644 --- a/src/lua.c +++ b/src/lua.c @@ -789,6 +789,13 @@ LuaPushParams(lua_State *L, const char *params, va_list va) break; case 'i': lua_pushinteger(L, va_arg(va, int)); + break; + case 'd': + { + struct display *d = va_arg(va, struct display *); + push_display(L, &d); + break; + } } params++; num++; diff --git a/src/process.c b/src/process.c index 65ffe8b..a4991a8 100644 --- a/src/process.c +++ b/src/process.c @@ -4438,7 +4438,6 @@ int key; #ifdef SCRIPT if (nr < RC_LAST) trigger_sevent(&globalevents.cmdexecuted, comms[nr].name, args); - #endif if (display != odisplay) diff --git a/src/screen.c b/src/screen.c index 49a79bb..0506b6e 100644 --- a/src/screen.c +++ b/src/screen.c @@ -1904,6 +1904,7 @@ int mode; case D_DETACH: AddStrSock("detached"); sign = SIG_BYE; + trigger_sevent(&globalevents.detached, display, 0x0); break; #ifdef BSDJOBS case D_STOP: @@ -1914,6 +1915,7 @@ int mode; case D_REMOTE: AddStrSock("remote detached"); sign = SIG_BYE; + trigger_sevent(&globalevents.detached, display, 0x1); break; #endif #ifdef POW_DETACH @@ -1925,6 +1927,7 @@ int mode; AddStr("\r\n"); } sign = SIG_POWER_BYE; + trigger_sevent(&globalevents.detached, display, 0x2); break; #ifdef REMOTE_DETACH case D_REMOTE_POWER: @@ -1935,6 +1938,7 @@ int mode; AddStr("\r\n"); } sign = SIG_POWER_BYE; + trigger_sevent(&globalevents.detached, display, 0x1 | 0x2); /* Remote and power */ break; #endif #endif diff --git a/src/script.c b/src/script.c index 22b8a27..6df0a78 100644 --- a/src/script.c +++ b/src/script.c @@ -139,7 +139,7 @@ struct gevents globalevents; * s: string (char *) * S: string array (char **) * i: signed int - * + * d: display */ struct sev_description { @@ -147,8 +147,14 @@ struct sev_description { char *params; int offset; } event_table[] = { + /* Global events */ {"global_cmdexecuted", "sS", offsetof(struct gevents, cmdexecuted)}, - {"global_detached", "", offsetof(struct gevents, detached)}, + {"global_detached", "di", offsetof(struct gevents, detached)}, + /* The command "detach" triggers both 'cmdexecuted' and 'detached' events. + However, we need the 'detached' event to trigger callbacks from remote detaches. + */ + + /* Window events */ {"window_resize", "", offsetof(struct win, w_sev.resize)}, {"window_can_resize", "", offsetof(struct win, w_sev.canresize)} }; -- 2.11.4.GIT