diff --git a/src/dwm.c b/src/dwm.c index 606eee7..d594fce 100644 --- a/src/dwm.c +++ b/src/dwm.c @@ -561,6 +561,9 @@ Monitor *createmon() { Monitor *const m = ecalloc(1, sizeof(Monitor)); + basic_geometry_init(&m->screen_geometry); + basic_geometry_init(&m->window_area_geometry); + if (!m) goto fail_without_mon; if (!(m->unit = unit_new(UNIT_MONITOR, global_unit))) { @@ -860,6 +863,8 @@ void manage(Window w, XWindowAttributes *wa) { Client *const c = ecalloc(1, sizeof(Client)); + client_state_init(&c->state); + c->win = w; c->state.geometry.basic.x = wa->x; c->state.geometry.basic.y = wa->y; diff --git a/src/state.c b/src/state.c index 04f87a3..fe2713b 100644 --- a/src/state.c +++ b/src/state.c @@ -1,5 +1,46 @@ #include "state.h" +#include + +void basic_geometry_init(const BasicGeometry basic_geometry) +{ + basic_geometry->x = 0; + basic_geometry->y = 0; + basic_geometry->w = 0; + basic_geometry->h = 0; +} + +void client_geometry_init(const ClientGeometry client_geometry) +{ + basic_geometry_init(&client_geometry->basic); + client_geometry->bw = 0; +} + +void client_size_hints_init(const ClientSizeHints client_size_hints) +{ + client_size_hints->mina = 0; + client_size_hints->maxa = 0; + client_size_hints->basew = 0; + client_size_hints->baseh = 0; + client_size_hints->incw = 0; + client_size_hints->inch = 0; + client_size_hints->maxw = 0; + client_size_hints->maxh = 0; + client_size_hints->minw = 0; + client_size_hints->minh = 0; +} + +void client_state_init(const ClientState client_state) +{ + memset(client_state->name, 0, sizeof(client_state->name)); + client_geometry_init(&client_state->geometry); + client_state->is_fixed = false; + client_state->is_floating = false; + client_state->is_urgent = false; + client_state->never_focus = false; + client_state->is_fullscreen = false; +} + void client_size_hints_update( const ClientSizeHints size_hints, const XSizeHints *const size diff --git a/src/state.h b/src/state.h index bedf8c4..ae5f6b7 100644 --- a/src/state.h +++ b/src/state.h @@ -4,25 +4,30 @@ #include #include -struct BasicGeometry { +typedef struct BasicGeometry { int x, y, w, h; -}; +} *BasicGeometry; -struct ClientGeometry { +typedef struct ClientGeometry { struct BasicGeometry basic; int bw; -}; +} *ClientGeometry; typedef struct ClientSizeHints { float mina, maxa; int basew, baseh, incw, inch, maxw, maxh, minw, minh; } *ClientSizeHints; -struct ClientState { +typedef struct ClientState { char name[256]; struct ClientGeometry geometry; bool is_fixed, is_floating, is_urgent, never_focus, is_fullscreen; -}; +} *ClientState; + +void basic_geometry_init(BasicGeometry basic_geometry); +void client_geometry_init(ClientGeometry client_geometry); +void client_size_hints_init(ClientSizeHints client_size_hints); +void client_state_init(ClientState client_state); void client_size_hints_update( ClientSizeHints size_hints,