ExcCode screen_window_unmaximize(xcb_window_t window) { xcb_atom_t net_wm_state, net_wm_state_maximized_horz, net_wm_state_maximized_vert; TRY(create_atom("_NET_WM_STATE", 0, &net_wm_state)); TRY(create_atom("_NET_WM_STATE_MAXIMIZED_HORZ", 0, &net_wm_state_maximized_horz)); TRY(create_atom("_NET_WM_STATE_MAXIMIZED_VERT", 0, &net_wm_state_maximized_vert)); xcb_client_message_event_t event; event.response_type = XCB_CLIENT_MESSAGE; event.format = 32; event.sequence = 0; event.window = window; event.type = net_wm_state; event.data.data32[0] = 0; // 0 - disable, 1 - enable, 2 - toggle event.data.data32[1] = net_wm_state_maximized_horz; event.data.data32[2] = net_wm_state_maximized_vert; event.data.data32[3] = 0; event.data.data32[4] = 0; xcb_void_cookie_t cookie = xcb_send_event_checked(display, 0, root, XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char*) &event); if (xcb_request_check(display, cookie) != NULL) PANIC(ERR_X_REQUEST, "screen_window_unmaximize (xcb_request_check)"); if (xcb_flush(display) <= 0) PANIC(ERR_X_REQUEST, "screen_window_unmaximize (xcb_flush)"); return 0; }
int find_or_create_atom (char * question, PrologAtom * atom) { PrologDirectory * dir = find_atoms_module (atom); if (dir == NULL) return -1; int module_id = find_or_create_module (question, dir -> name ()); int ind = find_atom_id (question, module_id, atom -> name ()); if (ind < 0) return create_atom (question, module_id, atom -> name ()); return ind; }
void get_client_window(xcb_window_t window, xcb_window_t *res) { xcb_atom_t wm_state; if (create_atom("WM_STATE", 1, &wm_state)) { *res = window; return; } find_window_by_property(window, wm_state, res); if (*res == XCB_WINDOW_NONE) *res = window; }
/** * @brief Create a new MM atom. * * @param tag An arbitrary name string identifying the atom * @param obj_type Identifies the type of backing object with which the * atom is bound. Currently, only disk files are supported as backing objects. * @param access_mode Identifies the type of access required. (E.g. read/write) * See mmacc.h * @param reference Void pointer to a reference structure defining the * backing object. (Remember, right now backing objects are always files.) * @param len Required capacity or size of the backing object in bytes. * @param flags Can be set to private, shared, etc. See mmatom.h * @return Pointer to memory mapped atom handle structure. */ MMA_HANDLE* mma_create( char* tag, // just a logical name for the atom MMA_OBJECT_TYPES obj_type, MMA_ACCESS_MODES access_mode, void* reference, // object reference pointer size_t len, MMA_MAP_FLAGS flags ) { MMA_HANDLE* mmahp; if (reference == NULL) { mma_error = MMA_ERR_NULL_IO_REF; return NULL; } if (tag == NULL) { // Use default tag tag = "NULL-TAG"; } switch (obj_type) { default: case MMT_NONE: mma_error = MMA_ERR_UNSUPPORTED_TYPE; mmahp = NULL; break; case MMT_FILE: if (len > ((MMA_DISK_FILE_REF*)reference)->len) { mmahp = NULL; mma_error = MMA_FILE_MAP_SIZE; } else { mmahp = create_atom( ((MMA_DISK_FILE_REF*)reference)->filedes, access_mode, len, obj_type, flags); } break; } if (mmahp != NULL) { mmahp->obj_type = obj_type; mmahp->u.void_refp = reference; strncpy(mmahp->tag, tag, sizeof(mmahp->tag) - 1); } return mmahp; }
void get_net_frame_window(xcb_window_t window, xcb_window_t *res) { xcb_atom_t net_frame_window; if (create_atom("_NET_FRAME_WINDOW", 1, &net_frame_window)) { *res = window; return; } xcb_get_property_cookie_t cookie = xcb_get_property(display, 0, window, net_frame_window, XCB_ATOM_ANY, 0, 1); xcb_get_property_reply_t *reply = xcb_get_property_reply(display, cookie, NULL); if ( reply == NULL || reply->type == XCB_ATOM_NONE || reply->format != 32 || xcb_get_property_value_length(reply) != sizeof (xcb_window_t) ) { *res = window; return; } *res = *(xcb_window_t *) xcb_get_property_value(reply); free(reply); }
uint32_t atom_create(const char *id, const char *name) { atom_def_t *atom; uint32_t index = ATOM_INVALID_INDEX; if (id && name) { if ((atom = find_atom_by_id(id)) == NULL) { if ((atom = create_atom(id, name)) != NULL) index = atom->index; } else { if (!strcmp(name, atom->name)) index = atom->index; else { OHM_ERROR("videoep: incosistent multiple definition of " "atom '%s' ('%s' vs. '%s')", id, name, atom->name); } } } return index; }