#include "yajl_dumps.h" #include int dump_tag(yajl_gen gen, const char *name, const int tag_mask) { if (!name) return 0; // clang-format off YMAP( YSTR("bit_mask"); YINT(tag_mask); YSTR("name"); YSTR(name); ) // clang-format on return 0; } int dump_tags(yajl_gen gen, int tags_len) { // clang-format off YARR( for (int i = 0; i < tags_len; i++) dump_tag(gen, tagicon(mons, i), 1 << i); ) // clang-format on return 0; } int dump_client(yajl_gen gen, Client *c) { // clang-format off YMAP( YSTR("name"); YSTR(c->name); YSTR("tags"); YINT(c->tags); YSTR("window_id"); YINT(c->win); YSTR("monitor_number"); YINT(c->mon->num); YSTR("geometry"); YMAP( YSTR("current"); YMAP ( YSTR("x"); YINT(c->x); YSTR("y"); YINT(c->y); YSTR("width"); YINT(c->w); YSTR("height"); YINT(c->h); ) YSTR("old"); YMAP( YSTR("x"); YINT(c->oldx); YSTR("y"); YINT(c->oldy); YSTR("width"); YINT(c->oldw); YSTR("height"); YINT(c->oldh); ) ) YSTR("size_hints"); YMAP( YSTR("base"); YMAP( YSTR("width"); YINT(c->basew); YSTR("height"); YINT(c->baseh); ) YSTR("step"); YMAP( YSTR("width"); YINT(c->incw); YSTR("height"); YINT(c->inch); ) YSTR("max"); YMAP( YSTR("width"); YINT(c->maxw); YSTR("height"); YINT(c->maxh); ) YSTR("min"); YMAP( YSTR("width"); YINT(c->minw); YSTR("height"); YINT(c->minh); ) YSTR("aspect_ratio"); YMAP( YSTR("min"); YDOUBLE(c->mina); YSTR("max"); YDOUBLE(c->maxa); ) ) YSTR("border_width"); YMAP( YSTR("current"); YINT(c->bw); YSTR("old"); YINT(c->oldbw); ) YSTR("states"); YMAP( YSTR("is_fixed"); YBOOL(c->isfixed); YSTR("is_floating"); YBOOL(c->isfloating); YSTR("is_urgent"); YBOOL(c->isurgent); YSTR("never_focus"); YBOOL(c->neverfocus); YSTR("old_state"); YBOOL(c->oldstate); YSTR("is_fullscreen"); YBOOL(c->isfullscreen); ) ) // clang-format on return 0; } int dump_monitor(yajl_gen gen, Monitor *mon, int is_selected) { // clang-format off YMAP( YSTR("master_factor"); YDOUBLE(mon->mfact); YSTR("num_master"); YINT(mon->nmaster); YSTR("num"); YINT(mon->num); YSTR("is_selected"); YBOOL(is_selected); YSTR("monitor_geometry"); YMAP( YSTR("x"); YINT(mon->mx); YSTR("y"); YINT(mon->my); YSTR("width"); YINT(mon->mw); YSTR("height"); YINT(mon->mh); ) YSTR("window_geometry"); YMAP( YSTR("x"); YINT(mon->wx); YSTR("y"); YINT(mon->wy); YSTR("width"); YINT(mon->ww); YSTR("height"); YINT(mon->wh); ) YSTR("tagset"); YMAP( YSTR("current"); YINT(mon->tagset[mon->seltags]); YSTR("old"); YINT(mon->tagset[mon->seltags ^ 1]); ) YSTR("tag_state"); dump_tag_state(gen, mon->tagstate); YSTR("clients"); YMAP( YSTR("selected"); YINT(mon->sel ? mon->sel->win : 0); YSTR("stack"); YARR( for (Client* c = mon->stack; c; c = c->snext) YINT(c->win); ) YSTR("all"); YARR( for (Client* c = mon->clients; c; c = c->next) YINT(c->win); ) ) YSTR("layout"); YMAP( YSTR("symbol"); YMAP( YSTR("current"); YSTR(mon->ltsymbol); YSTR("old"); YSTR(mon->lastltsymbol); ) YSTR("address"); YMAP( YSTR("current"); YINT((uintptr_t)mon->lt[mon->sellt]); YSTR("old"); YINT((uintptr_t)mon->lt[mon->sellt ^ 1]); ) ) if (mon->bar) { YSTR("bar"); YMAP( YSTR("y"); YINT(mon->bar->by); YSTR("is_shown"); YBOOL(mon->showbar); YSTR("is_top"); YBOOL(mon->bar->topbar); YSTR("window_id"); YINT(mon->bar->win); ) } ) // clang-format on return 0; } int dump_monitors(yajl_gen gen, Monitor *mons, Monitor *selmon) { // clang-format off YARR( for (Monitor *mon = mons; mon; mon = mon->next) { if (mon == selmon) dump_monitor(gen, mon, 1); else dump_monitor(gen, mon, 0); } ) // clang-format on return 0; } int dump_layouts(yajl_gen gen, const Layout layouts[], const int layouts_len) { // clang-format off YARR( for (int i = 0; i < layouts_len; i++) { YMAP( // Check for a NULL pointer. The cycle layouts patch adds an entry at // the end of the layouts array with a NULL pointer for the symbol YSTR("symbol"); YSTR((layouts[i].symbol ? layouts[i].symbol : "")); YSTR("address"); YINT((uintptr_t)(layouts + i)); ) } ) // clang-format on return 0; } int dump_tag_state(yajl_gen gen, TagState state) { // clang-format off YMAP( YSTR("selected"); YINT(state.selected); YSTR("occupied"); YINT(state.occupied); YSTR("urgent"); YINT(state.urgent); ) // clang-format on return 0; } int dump_tag_event(yajl_gen gen, int mon_num, TagState old_state, TagState new_state) { // clang-format off YMAP( YSTR("tag_change_event"); YMAP( YSTR("monitor_number"); YINT(mon_num); YSTR("old_state"); dump_tag_state(gen, old_state); YSTR("new_state"); dump_tag_state(gen, new_state); ) ) // clang-format on return 0; } int dump_client_focus_change_event(yajl_gen gen, Client *old_client, Client *new_client, int mon_num) { // clang-format off YMAP( YSTR("client_focus_change_event"); YMAP( YSTR("monitor_number"); YINT(mon_num); YSTR("old_win_id"); old_client == NULL ? YNULL() : YINT(old_client->win); YSTR("new_win_id"); new_client == NULL ? YNULL() : YINT(new_client->win); ) ) // clang-format on return 0; } int dump_layout_change_event(yajl_gen gen, const int mon_num, const char *old_symbol, const Layout *old_layout, const char *new_symbol, const Layout *new_layout) { // clang-format off YMAP( YSTR("layout_change_event"); YMAP( YSTR("monitor_number"); YINT(mon_num); YSTR("old_symbol"); YSTR(old_symbol); YSTR("old_address"); YINT((uintptr_t)old_layout); YSTR("new_symbol"); YSTR(new_symbol); YSTR("new_address"); YINT((uintptr_t)new_layout); ) ) // clang-format on return 0; } int dump_monitor_focus_change_event(yajl_gen gen, const int last_mon_num, const int new_mon_num) { // clang-format off YMAP( YSTR("monitor_focus_change_event"); YMAP( YSTR("old_monitor_number"); YINT(last_mon_num); YSTR("new_monitor_number"); YINT(new_mon_num); ) ) // clang-format on return 0; } int dump_focused_title_change_event(yajl_gen gen, const int mon_num, const Window client_id, const char *old_name, const char *new_name) { // clang-format off YMAP( YSTR("focused_title_change_event"); YMAP( YSTR("monitor_number"); YINT(mon_num); YSTR("client_window_id"); YINT(client_id); YSTR("old_name"); YSTR(old_name); YSTR("new_name"); YSTR(new_name); ) ) // clang-format on return 0; } int dump_client_state(yajl_gen gen, const ClientState *state) { // clang-format off YMAP( YSTR("old_state"); YBOOL(state->oldstate); YSTR("is_fixed"); YBOOL(state->isfixed); YSTR("is_floating"); YBOOL(state->isfloating); YSTR("is_fullscreen"); YBOOL(state->isfullscreen); YSTR("is_urgent"); YBOOL(state->isurgent); YSTR("never_focus"); YBOOL(state->neverfocus); ) // clang-format on return 0; } int dump_focused_state_change_event(yajl_gen gen, const int mon_num, const Window client_id, const ClientState *old_state, const ClientState *new_state) { // clang-format off YMAP( YSTR("focused_state_change_event"); YMAP( YSTR("monitor_number"); YINT(mon_num); YSTR("client_window_id"); YINT(client_id); YSTR("old_state"); dump_client_state(gen, old_state); YSTR("new_state"); dump_client_state(gen, new_state); ) ) // clang-format on return 0; } int dump_error_message(yajl_gen gen, const char *reason) { // clang-format off YMAP( YSTR("result"); YSTR("error"); YSTR("reason"); YSTR(reason); ) // clang-format on return 0; }