/** * Retrieves the name of the given atom. * * @param atom * @return The name of the atom. * * @ingroup Ecore_X_Atom_Group */ EAPI char * ecore_x_atom_name_get(Ecore_X_Atom atom) { xcb_get_atom_name_cookie_t cookie; xcb_get_atom_name_reply_t *reply; char *name; int len = 0; LOGFN(__FILE__, __LINE__, __FUNCTION__); CHECK_XCB_CONN; cookie = xcb_get_atom_name_unchecked(_ecore_xcb_conn, atom); reply = xcb_get_atom_name_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return NULL; len = xcb_get_atom_name_name_length(reply); name = (char *)malloc(sizeof(char) * (len + 1)); if (!name) { free(reply); return NULL; } memcpy(name, xcb_get_atom_name_name(reply), len); name[len] = '\0'; free(reply); return name; }
static void screen_scan_randr_monitors(lua_State *L, screen_array_t *screens) { xcb_randr_get_monitors_cookie_t monitors_c = xcb_randr_get_monitors(globalconf.connection, globalconf.screen->root, 1); xcb_randr_get_monitors_reply_t *monitors_r = xcb_randr_get_monitors_reply(globalconf.connection, monitors_c, NULL); xcb_randr_monitor_info_iterator_t monitor_iter; if (monitors_r == NULL) { warn("RANDR GetMonitors failed; this should not be possible"); return; } for(monitor_iter = xcb_randr_get_monitors_monitors_iterator(monitors_r); monitor_iter.rem; xcb_randr_monitor_info_next(&monitor_iter)) { screen_t *new_screen; screen_output_t output; xcb_randr_output_t *randr_outputs; xcb_get_atom_name_cookie_t name_c; xcb_get_atom_name_reply_t *name_r; if(!xcb_randr_monitor_info_outputs_length(monitor_iter.data)) continue; new_screen = screen_add(L, screens); new_screen->geometry.x = monitor_iter.data->x; new_screen->geometry.y = monitor_iter.data->y; new_screen->geometry.width = monitor_iter.data->width; new_screen->geometry.height = monitor_iter.data->height; new_screen->xid = monitor_iter.data->name; output.mm_width = monitor_iter.data->width_in_millimeters; output.mm_height = monitor_iter.data->height_in_millimeters; name_c = xcb_get_atom_name_unchecked(globalconf.connection, monitor_iter.data->name); name_r = xcb_get_atom_name_reply(globalconf.connection, name_c, NULL); if (name_r) { const char *name = xcb_get_atom_name_name(name_r); size_t len = xcb_get_atom_name_name_length(name_r); output.name = memcpy(p_new(char *, len + 1), name, len); output.name[len] = '\0'; p_delete(&name_r); } else { output.name = a_strdup("unknown"); } randr_output_array_init(&output.outputs); randr_outputs = xcb_randr_monitor_info_outputs(monitor_iter.data); for(int i = 0; i < xcb_randr_monitor_info_outputs_length(monitor_iter.data); i++) { randr_output_array_append(&output.outputs, randr_outputs[i]); } screen_output_array_append(&new_screen->outputs, output); }