Add new subscribe event 'mode' for binding mode changes

Introducing a new event to subscribe called mode. It's fired up
when i3 changes binding mode (like switching from default to resize).
IPC guide adjusted also.
This commit is contained in:
Pavel Löbl 2012-09-22 00:21:39 +02:00 committed by Michael Stapelberg
parent 8c8fce82e5
commit 7cffd79140
3 changed files with 24 additions and 0 deletions

View File

@ -610,6 +610,8 @@ workspace (0)::
output (1):: output (1)::
Sent when RandR issues a change notification (of either screens, Sent when RandR issues a change notification (of either screens,
outputs, CRTCs or output properties). outputs, CRTCs or output properties).
mode (2)::
Sent whenever i3 changes its binding mode.
*Example:* *Example:*
-------------------------------------------------------------------- --------------------------------------------------------------------
@ -651,6 +653,18 @@ This event consists of a single serialized map containing a property
{ "change": "unspecified" } { "change": "unspecified" }
--------------------------- ---------------------------
=== mode event
This event consists of a single serialized map containing a property
+change (string)+ which holds the name of current mode in use. The name
is the same as specified in config when creating a mode. The default
mode is simply named default.
*Example:*
---------------------------
{ "change": "default" }
---------------------------
== See also == See also
For some languages, libraries are available (so you dont have to implement For some languages, libraries are available (so you dont have to implement

View File

@ -84,4 +84,7 @@
/* The output event will be triggered upon changes in the output list */ /* The output event will be triggered upon changes in the output list */
#define I3_IPC_EVENT_OUTPUT (I3_IPC_EVENT_MASK | 1) #define I3_IPC_EVENT_OUTPUT (I3_IPC_EVENT_MASK | 1)
/* The output event will be triggered upon mode changes */
#define I3_IPC_EVENT_MODE (I3_IPC_EVENT_MASK | 2)
#endif #endif

View File

@ -194,6 +194,13 @@ void switch_mode(const char *new_mode) {
bindings = mode->bindings; bindings = mode->bindings;
translate_keysyms(); translate_keysyms();
grab_all_keys(conn, false); grab_all_keys(conn, false);
char *event_msg;
sasprintf(&event_msg, "{\"change\":\"%s\"}", mode->name);
ipc_send_event("mode", I3_IPC_EVENT_MODE, event_msg);
FREE(event_msg);
return; return;
} }