This event consists of a single serialized map containing a property
+change (string)+ which indicates the type of the change ("focus", "init",
-"empty", "urgent").
+"empty", "urgent"). Additionally, when the change is "focus", an +old
+(object)+ and a +current (object)+ properties will be present with the
+previous and current workspace respectively.
*Example:*
---------------------
-{ "change": "focus" }
+{
+ "change": "focus",
+ "current": {
+ "id": 28489712,
+ "type":4,
+ ...
+ }
+ "old": {
+ "id": 28489715,
+ "type": 4,
+ ...
+ }
+}
---------------------
=== output event
*
*/
#include "all.h"
+#include "yajl_utils.h"
+
+#include <yajl/yajl_gen.h>
/* Stores a copy of the name of the last used workspace for the workspace
* back-and-forth switching. */
FREE(con->urgency_timer);
}
+/*
+ * For the "focus" event we send, along the usual "change" field, also the
+ * current and previous workspace, in "current" and "old" respectively.
+ */
+static void _workspace_focus_event(Con *current, Con *old) {
+ yajl_gen gen = ygenalloc();
+
+ y(map_open);
+
+ ystr("change");
+ ystr("focus");
+
+ ystr("current");
+ dump_node(gen, current, false);
+
+ ystr("old");
+ dump_node(gen, old, false);
+
+ y(map_close);
+
+ const unsigned char *payload;
+ ylength length;
+ y(get_buf, &payload, &length);
+
+ ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, (const char *)payload);
+ y(free);
+}
+
static void _workspace_show(Con *workspace) {
Con *current, *old = NULL;
/* Update the EWMH hints */
ewmh_update_current_desktop();
- ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"focus\"}");
+ _workspace_focus_event(workspace, current);
}
/*