void clientlist_init() { // init regex simple.. fetch_colors(); g_wmatom[WMProtocols] = XInternAtom(g_display, "WM_PROTOCOLS", False); g_wmatom[WMDelete] = XInternAtom(g_display, "WM_DELETE_WINDOW", False); g_wmatom[WMState] = XInternAtom(g_display, "WM_STATE", False); g_wmatom[WMTakeFocus] = XInternAtom(g_display, "WM_TAKE_FOCUS", False); // init actual client list g_client_object = hsobject_create_and_link(hsobject_root(), "clients"); g_clients = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, (GDestroyNotify)client_destroy); }
void settings_init() { // recreate all strings -> move them to heap for (int i = 0; i < LENGTH(g_settings); i++) { if (g_settings[i].type == HS_String) { g_settings[i].value.str = g_string_new(g_settings[i].value.s_init); } if (g_settings[i].type == HS_Int) { g_settings[i].old_value_i = 1; } } settings_find("monitors_locked")->value.i = g_initial_monitors_locked; // create a settings object g_settings_object = hsobject_create_and_link(hsobject_root(), "settings"); // ensure everything is nulled that is not explicitely initialized HSAttribute* attributes = g_new0(HSAttribute, LENGTH(g_settings)+1); HSAttribute last = ATTRIBUTE_LAST; attributes[LENGTH(g_settings)] = last; for (int i = 0; i < LENGTH(g_settings); i++) { SettingsPair* sp = g_settings + i; if (sp->type == HS_String) { HSAttribute cur = ATTRIBUTE(sp->name, sp->value.str, cb_on_change); attributes[i] = cur; } else if (sp->type == HS_Int) { HSAttribute cur = ATTRIBUTE(sp->name, sp->value.i, cb_on_change); attributes[i] = cur; } else if (sp->type == HS_Compatiblity) { HSAttribute cur = ATTRIBUTE_CUSTOM(sp->name, (HSAttributeCustom)cb_read_compat, cb_write_compat); cur.data = sp; attributes[i] = cur; } } hsobject_set_attributes(g_settings_object, attributes); g_free(attributes); }
void object_tree_init() { hsobject_init(&g_root_object); g_tmp_object = hsobject_create_and_link(&g_root_object, TMP_OBJECT_PATH); }