Ejemplo n.º 1
0
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);
  }
}
Ejemplo n.º 2
0
/**
 * 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);
}
Ejemplo n.º 3
0
/**
 * 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);
}