void initialize_positions(void *obj, int offset) { Area *a = (Area *)obj; for (GList *l = a->children; l; l = l->next) { Area *child = ((Area *)l->data); if (panel_horizontal) { child->posy = offset + a->bg->border.width + a->paddingy; child->height = a->height - (2 * (a->bg->border.width + a->paddingy)); if (child->_on_change_layout) child->_on_change_layout(child); initialize_positions(child, child->posy); } else { child->posx = offset + a->bg->border.width + a->paddingy; child->width = a->width - (2 * (a->bg->border.width + a->paddingy)); if (child->_on_change_layout) child->_on_change_layout(child); initialize_positions(child, child->posx); } } }
void set_panel_items_order(Panel *p) { if (p->area.children) { g_list_free(p->area.children); p->area.children = 0; } int i_execp = 0; int i_separator = 0; int i_freespace = 0; for (int k = 0; k < strlen(panel_items_order); k++) { if (panel_items_order[k] == 'L') { p->area.children = g_list_append(p->area.children, &p->launcher); p->launcher.area.resize_needed = 1; } if (panel_items_order[k] == 'T') { for (int j = 0; j < p->num_desktops; j++) p->area.children = g_list_append(p->area.children, &p->taskbar[j]); } #ifdef ENABLE_BATTERY if (panel_items_order[k] == 'B') p->area.children = g_list_append(p->area.children, &p->battery); #endif int i = p - panels; if (panel_items_order[k] == 'S' && systray_on_monitor(i, num_panels)) { p->area.children = g_list_append(p->area.children, &systray); } if (panel_items_order[k] == 'C') p->area.children = g_list_append(p->area.children, &p->clock); if (panel_items_order[k] == 'F') { GList *item = g_list_nth(p->freespace_list, i_freespace); i_freespace++; if (item) p->area.children = g_list_append(p->area.children, (Area *)item->data); } if (panel_items_order[k] == ':') { GList *item = g_list_nth(p->separator_list, i_separator); i_separator++; if (item) p->area.children = g_list_append(p->area.children, (Area *)item->data); } if (panel_items_order[k] == 'E') { GList *item = g_list_nth(p->execp_list, i_execp); i_execp++; if (item) p->area.children = g_list_append(p->area.children, (Area *)item->data); } } initialize_positions(&p->area, 0); }