void RotateTo(int angle) { // Get focus window used by Keyboard and rotate it Display* display = XOpenDisplay(0); if (display) { ::Window focusWindow; int revert; // Get Focus window XGetInputFocus(display, &focusWindow, &revert); ecore_x_window_prop_property_set( focusWindow, ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE, ECORE_X_ATOM_CARDINAL, 32, &angle, 1 ); XCloseDisplay(display); } }
/** * Add a subwindow to the list of windows that need a different colormap installed. * @param win The toplevel window * @param subwin The subwindow to be added to the colormap windows list */ EAPI void ecore_x_icccm_colormap_window_set(Ecore_X_Window win, Ecore_X_Window subwin) { int num = 0, i; unsigned char *old_data = NULL; unsigned char *data = NULL; Window *oldset = NULL; Window *newset = NULL; LOGFN(__FILE__, __LINE__, __FUNCTION__); if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS, XA_WINDOW, 32, &old_data, &num)) { newset = calloc(1, sizeof(Window)); if (!newset) { if (old_data) free(old_data); return; } newset[0] = subwin; num = 1; data = (unsigned char *)newset; } else { newset = calloc(num + 1, sizeof(Window)); oldset = (Window *)old_data; if (!newset) { if (old_data) free(old_data); return; } for (i = 0; i < num; ++i) { if (oldset[i] == subwin) { if (old_data) XFree(old_data); old_data = NULL; free(newset); return; } newset[i] = oldset[i]; } newset[num++] = subwin; if (old_data) XFree(old_data); data = (unsigned char *)newset; } ecore_x_window_prop_property_set(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS, XA_WINDOW, 32, data, num); free(newset); free(old_data); }
/** * Remove a window from the list of colormap windows. * @param win The toplevel window * @param subwin The window to be removed from the colormap window list. */ EAPI void ecore_x_icccm_colormap_window_unset(Ecore_X_Window win, Ecore_X_Window subwin) { int num = 0, i, j, k = 0; unsigned char *old_data = NULL; unsigned char *data = NULL; Window *oldset = NULL; Window *newset = NULL; LOGFN(__FILE__, __LINE__, __FUNCTION__); if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS, XA_WINDOW, 32, &old_data, &num)) { if (old_data) free(old_data); return; } oldset = (Window *)old_data; for (i = 0; i < num; i++) { if (oldset[i] == subwin) { if (num == 1) { XDeleteProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS); if (_ecore_xlib_sync) ecore_x_sync(); if (old_data) XFree(old_data); old_data = NULL; return; } else { newset = calloc(num - 1, sizeof(Window)); data = (unsigned char *)newset; for (j = 0; j < num; ++j) if (oldset[j] != subwin) newset[k++] = oldset[j]; ecore_x_window_prop_property_set( win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS, XA_WINDOW, 32, data, k); if (old_data) XFree(old_data); old_data = NULL; free(newset); return; } } } if (old_data) XFree(old_data); }