4 #include <xcb/xcb_event.h>
11 node_t *make_node(void)
13 node_t *n = malloc(sizeof(node_t));
14 n->parent = n->first_child = n->second_child = NULL;
15 n->split_ratio = SPLIT_RATIO;
16 n->split_type = TYPE_VERTICAL;
22 monitor_t *make_monitor(xcb_rectangle_t *rect)
24 monitor_t *m = malloc(sizeof(monitor_t));
25 snprintf(m->name, sizeof(m->name), "%s%02d", DEFAULT_MON_NAME, ++monitor_uid);
26 m->prev = m->next = NULL;
27 m->desk = m->last_desk = NULL;
31 warn("no rectangle was given for monitor '%s'\n", m->name);
32 m->top_padding = m->right_padding = m->bottom_padding = m->left_padding = 0;
36 monitor_t *find_monitor(char *name)
38 for (monitor_t *m = mon_head; m != NULL; m = m->next)
39 if (strcmp(m->name, name) == 0)
44 void add_monitor(xcb_rectangle_t *rect)
46 monitor_t *m = make_monitor(rect);
59 void remove_monitor(monitor_t *m)
61 while (m->desk_head != NULL)
62 remove_desktop(m, m->desk_head);
63 monitor_t *prev = m->prev;
64 monitor_t *next = m->next;
77 desktop_t *make_desktop(const char *name)
79 desktop_t *d = malloc(sizeof(desktop_t));
81 snprintf(d->name, sizeof(d->name), "%s%02d", DEFAULT_DESK_NAME, ++desktop_uid);
83 strncpy(d->name, name, sizeof(d->name));
84 d->layout = LAYOUT_TILED;
85 d->prev = d->next = NULL;
86 d->root = d->focus = d->last_focus = NULL;
90 void add_desktop(monitor_t *m, char *name)
92 desktop_t *d = make_desktop(name);
93 if (m->desk == NULL) {
98 m->desk_tail->next = d;
99 d->prev = m->desk_tail;
103 ewmh_update_number_of_desktops();
104 ewmh_update_desktop_names();
108 void empty_desktop(desktop_t *d)
110 destroy_tree(d->root);
111 d->root = d->focus = d->last_focus = NULL;
114 void remove_desktop(monitor_t *m, desktop_t *d)
117 desktop_t *prev = d->prev;
118 desktop_t *next = d->next;
123 if (d == m->desk_head)
125 if (d == m->desk_tail)
131 client_t *make_client(xcb_window_t win)
133 client_t *c = malloc(sizeof(client_t));
134 strncpy(c->class_name, MISSING_VALUE, sizeof(c->class_name));
135 c->uid = ++client_uid;
136 c->border_width = border_width;
138 c->floating = c->transient = c->fullscreen = c->locked = c->urgent = false;
142 rule_t *make_rule(void)
144 rule_t *r = malloc(sizeof(rule_t));
146 r->effect.floating = false;
147 r->effect.monitor = NULL;
148 r->effect.desktop = NULL;
154 pointer_state_t *make_pointer_state(void)
156 pointer_state_t *p = malloc(sizeof(pointer_state_t));
159 p->node = p->vertical_fence = p->horizontal_fence = NULL;
161 p->window = XCB_NONE;