EAPI void ecore_x_e_comp_sync_supported_set(Ecore_X_Window root, Eina_Bool enabled) { Ecore_X_Window win; if (!root) root = DefaultRootWindow(_ecore_x_disp); LOGFN(__FILE__, __LINE__, __FUNCTION__); if (enabled) { win = ecore_x_window_new(root, 1, 2, 3, 4); ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED, ECORE_X_ATOM_WINDOW, &win, 1); ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED, ECORE_X_ATOM_WINDOW, &win, 1); } else { int ret; ret = ecore_x_window_prop_xid_get(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED, ECORE_X_ATOM_WINDOW, &win, 1); if ((ret == 1) && (win)) { ecore_x_window_prop_property_del(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED); ecore_x_window_free(win); } } }
/* * Set Window (array) property */ EAPI void ecore_x_window_prop_window_set(Ecore_X_Window win, Ecore_X_Atom atom, Ecore_X_Window *list, unsigned int num) { ecore_x_window_prop_xid_set(win, atom, ECORE_X_ATOM_WINDOW, list, num); } /* ecore_x_window_prop_window_set */
/* * Set Window (array) property */ EAPI void ecore_x_window_prop_window_set(Ecore_X_Window win, Ecore_X_Atom atom, Ecore_X_Window *lst, unsigned int num) { LOGFN(__FILE__, __LINE__, __FUNCTION__); ecore_x_window_prop_xid_set(win, atom, XA_WINDOW, lst, num); }
EAPI void ecore_x_e_comp_sync_counter_set(Ecore_X_Window win, Ecore_X_Sync_Counter counter) { LOGFN(__FILE__, __LINE__, __FUNCTION__); if (counter) ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER, ECORE_X_ATOM_CARDINAL, &counter, 1); else ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER); }
EAPI void ecore_x_e_comp_pixmap_set(Ecore_X_Window win, Ecore_X_Pixmap pixmap) { LOGFN(__FILE__, __LINE__, __FUNCTION__); if (pixmap) ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP, ECORE_X_ATOM_PIXMAP, &pixmap, 1); else ecore_x_window_prop_property_del(win, pixmap); } /* ecore_x_e_comp_pixmap_set */
EAPI void ecore_x_window_prop_atom_set(Ecore_X_Window win, Ecore_X_Atom atom, Ecore_X_Atom *list, unsigned int num) { LOGFN(__FILE__, __LINE__, __FUNCTION__); /* xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom, */ /* ECORE_X_ATOM_ATOM, 32, num, list); */ ecore_x_window_prop_xid_set(win, atom, ECORE_X_ATOM_ATOM, list, num); }
/* * Remove/add/toggle X ID list item. */ EAPI void ecore_x_window_prop_xid_list_change(Ecore_X_Window win, Ecore_X_Atom atom, Ecore_X_Atom type, Ecore_X_ID item, int op) { Ecore_X_ID *lst; int i, num; LOGFN(__FILE__, __LINE__, __FUNCTION__); num = ecore_x_window_prop_xid_list_get(win, atom, type, &lst); if (num < 0) { return; /* Error - assuming invalid window */ } /* Is it there? */ for (i = 0; i < num; i++) { if (lst[i] == item) break; } if (i < num) { /* Was in list */ if (op == ECORE_X_PROP_LIST_ADD) goto done; /* Remove it */ num--; for (; i < num; i++) lst[i] = lst[i + 1]; } else { /* Was not in list */ if (op == ECORE_X_PROP_LIST_REMOVE) goto done; /* Add it */ num++; lst = realloc(lst, num * sizeof(Ecore_X_ID)); lst[i] = item; } ecore_x_window_prop_xid_set(win, atom, type, lst, num); done: if (lst) free(lst); }
EAPI void ecore_x_window_prop_xid_list_change(Ecore_X_Window win, Ecore_X_Atom atom, Ecore_X_Atom type, Ecore_X_ID item, int op) { Ecore_X_ID *lst; int i = 0, num = 0; LOGFN(__FILE__, __LINE__, __FUNCTION__); CHECK_XCB_CONN; num = ecore_x_window_prop_xid_list_get(win, atom, type, &lst); if (num < 0) return; for (i = 0; i < num; i++) { if (lst[i] == item) break; } if (i < num) { if (op == ECORE_X_PROP_LIST_ADD) goto done; num--; for (; i < num; i++) lst[i] = lst[i + 1]; } else { if (op == ECORE_X_PROP_LIST_REMOVE) goto done; num++; lst = realloc(lst, num * sizeof(Ecore_X_ID)); lst[i] = item; } ecore_x_window_prop_xid_set(win, atom, type, lst, num); done: if (lst) free(lst); }