Exemple #1
0
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;
	}
Exemple #3
0
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;
}
Exemple #4
0
/**
 * @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;
}
Exemple #5
0
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);
}
Exemple #6
0
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;
}