Ecore_X: Merge Tizen changes to upstream EFL.
authorChristopher Michael <cpmichael1@comcast.net>
Tue, 3 Jul 2012 07:36:55 +0000 (07:36 +0000)
committerChristopher Michael <cpmichael1@comcast.net>
Tue, 3 Jul 2012 07:36:55 +0000 (07:36 +0000)
SVN revision: 73203

legacy/ecore/src/lib/ecore_x/Ecore_X.h
legacy/ecore/src/lib/ecore_x/Ecore_X_Atoms.h
legacy/ecore/src/lib/ecore_x/ecore_x_atoms_decl.h
legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c
legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c
legacy/ecore/src/lib/ecore_x/xlib/ecore_x_e.c
legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c

index 97163ec..1443957 100644 (file)
@@ -337,6 +337,20 @@ typedef enum _Ecore_X_Randr_Property_Change
    ECORE_X_RANDR_PROPERTY_CHANGE_DEL
 } Ecore_X_Randr_Property_Change;
 
+typedef enum _Ecore_X_Netwm_Direction
+{
+   ECORE_X_NETWM_DIRECTION_SIZE_TL = 0,
+   ECORE_X_NETWM_DIRECTION_SIZE_T = 1,
+   ECORE_X_NETWM_DIRECTION_SIZE_TR = 2,
+   ECORE_X_NETWM_DIRECTION_SIZE_R = 3,
+   ECORE_X_NETWM_DIRECTION_SIZE_BR = 4,
+   ECORE_X_NETWM_DIRECTION_SIZE_B = 5,
+   ECORE_X_NETWM_DIRECTION_SIZE_BL = 6,
+   ECORE_X_NETWM_DIRECTION_SIZE_L = 7,
+   ECORE_X_NETWM_DIRECTION_MOVE = 8,
+   ECORE_X_NETWM_DIRECTION_CANCEL = 11,
+} Ecore_X_Netwm_Direction;
+
 /**
  * @typedef _Ecore_X_Error_Code
  * Defines the error codes of Ecore_X which wraps the X Window Systems
@@ -866,6 +880,63 @@ struct _Ecore_X_Event_Window_Delete_Request
    Ecore_X_Time   time;
 };
 
+struct _Ecore_X_Event_Window_Prop_Title_Change
+{
+   Ecore_X_Window win;
+   char          *title;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Visible_Title_Change
+{
+   Ecore_X_Window win;
+   char          *title;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Icon_Name_Change
+{
+   Ecore_X_Window win;
+   char          *name;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Visible_Icon_Name_Change
+{
+   Ecore_X_Window win;
+   char          *name;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Client_Machine_Change
+{
+   Ecore_X_Window win;
+   char          *name;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Name_Class_Change
+{
+   Ecore_X_Window win;
+   char          *name;
+   char          *clas;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Pid_Change
+{
+   Ecore_X_Window win;
+   pid_t          pid;
+   Ecore_X_Time   time;
+};
+
+struct _Ecore_X_Event_Window_Prop_Desktop_Change
+{
+   Ecore_X_Window win;
+   long           desktop;
+   Ecore_X_Time   time;
+};
+
 struct _Ecore_X_Event_Startup_Sequence
 {
    Ecore_X_Window win;
@@ -1157,6 +1228,12 @@ typedef enum _Ecore_X_Illume_Indicator_Opacity_Mode
    ECORE_X_ILLUME_INDICATOR_TRANSPARENT
 } Ecore_X_Illume_Indicator_Opacity_Mode;
 
+typedef enum _Ecore_X_Illume_Window_State
+{
+   ECORE_X_ILLUME_WINDOW_STATE_NORMAL = 0,
+   ECORE_X_ILLUME_WINDOW_STATE_FLOATING
+} Ecore_X_Illume_Window_State;
+
 /* Window layer constants */
 #define ECORE_X_WINDOW_LAYER_BELOW  2
 #define ECORE_X_WINDOW_LAYER_NORMAL 4
@@ -2288,6 +2365,13 @@ EAPI Ecore_X_Illume_Indicator_Opacity_Mode ecore_x_e_illume_indicator_opacity_ge
 
 EAPI void                                  ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win, Ecore_X_Illume_Indicator_Opacity_Mode mode);
 
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state);
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win);
+
 #ifdef __cplusplus
 }
 #endif // ifdef __cplusplus
index fdac658..c9af5bf 100644 (file)
@@ -252,6 +252,9 @@ EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV;
@@ -273,4 +276,15 @@ EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_PIXMAP;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_PARENT;
 EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_POSITION;
 
+/* currently elementary and E specific extension */
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_PROFILE;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_PROFILE_LIST;
+
+/* for sliding window */
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY;
+
+/* for SDB(Samsung Debug Bridge) */
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_SDB_SERVER_CONNECT;
+EAPI extern Ecore_X_Atom ECORE_X_ATOM_SDB_SERVER_DISCONNECT;
 #endif /* _ECORE_X_ATOMS_H */
index 66800ee..706fccd 100644 (file)
@@ -278,6 +278,9 @@ EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV = 0;
@@ -301,6 +304,18 @@ EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_PIXMAP = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_PARENT = 0;
 EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_POSITION = 0;
 
+/* for sliding window */
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY = 0;
+
+/* for SDB(Samsung Debug Bridge) */
+EAPI Ecore_X_Atom ECORE_X_ATOM_SDB_SERVER_CONNECT = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_SDB_SERVER_DISCONNECT = 0;
+
+/* currently elementary and E specific extension */
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_PROFILE = 0;
+EAPI Ecore_X_Atom ECORE_X_ATOM_E_PROFILE_LIST = 0;
+
 typedef struct _Atom_Item Atom_Item;
 
 struct _Atom_Item
index 93b8cd9..d86d0c7 100644 (file)
@@ -126,6 +126,124 @@ ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
 }
 
 EAPI void
+ecore_x_e_window_profile_list_set(Ecore_X_Window  win,
+                                  const char    **profiles,
+                                  unsigned int    num_profiles)
+{
+   Ecore_X_Atom *atoms;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win)
+     return;
+
+   if (!num_profiles)
+     ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE_LIST);
+   else
+     {
+        atoms = alloca(num_profiles * sizeof(Ecore_X_Atom));
+        ecore_x_atoms_get(profiles, num_profiles, atoms);
+        ecore_x_window_prop_property_set(win,
+                                         ECORE_X_ATOM_E_PROFILE_LIST,
+                                         ECORE_X_ATOM_ATOM, 32, (void *)atoms,
+                                         num_profiles);
+     }
+}
+
+EAPI Eina_Bool
+ecore_x_e_window_profile_list_get(Ecore_X_Window   win,
+                                  const char    ***profiles,
+                                  int             *ret_num)
+{
+   unsigned char *data = NULL;
+   Ecore_X_Atom *atoms;
+   int num, i;
+
+   if (ret_num)
+     *ret_num = 0;
+
+   if (profiles)
+     *profiles = NULL;
+
+   if (!win)
+     return EINA_FALSE;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_property_get(win,
+                                         ECORE_X_ATOM_E_PROFILE_LIST,
+                                         ECORE_X_ATOM_ATOM, 32, &data, &num))
+     return EINA_FALSE;
+
+   if (ret_num)
+     *ret_num = num;
+
+   if (profiles)
+     {
+        (*profiles) = calloc(num, sizeof(char *));
+        if (!(*profiles))
+          {
+             if (ret_num)
+               *ret_num = 0;
+
+             if (data)
+               free(data);
+
+             return EINA_FALSE;
+          }
+
+        atoms = (Ecore_X_Atom *)data;
+        for (i = 0; i < num; i++)
+           (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
+     }
+
+   if (data)
+     free(data);
+
+   return EINA_TRUE;
+}
+
+EAPI void
+ecore_x_e_window_profile_set(Ecore_X_Window win,
+                             const char    *profile)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win)
+     return;
+
+   if (!profile)
+     ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE);
+   else
+     {
+        atom = ecore_x_atom_get(profile);
+        ecore_x_window_prop_property_set(win, ECORE_X_ATOM_E_PROFILE,
+                                         ECORE_X_ATOM_ATOM, 32, (void *)&atom, 1);
+     }
+}
+
+EAPI char *
+ecore_x_e_window_profile_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom *atom = NULL;
+   unsigned char *data;
+   char *profile = NULL;
+   int num;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_PROFILE,
+                                         ECORE_X_ATOM_ATOM, 32, &data, &num))
+     return NULL;
+
+   if (data)
+     atom = (Ecore_X_Atom *)data;
+
+   if (atom)
+     profile = ecore_x_atom_name_get(atom[0]);
+
+   return profile;
+}
+
+EAPI void
 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
                                   Eina_Bool      enabled)
 {
@@ -1377,3 +1495,58 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
                                  0, 0, 0, 0);
 }
 
+static Ecore_X_Atom
+_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
+{
+   switch (state)
+     {
+      case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+
+      case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
+
+      default:
+        break;
+     }
+   return 0;
+}
+
+static Ecore_X_Illume_Window_State
+_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
+{
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
+     return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
+
+   return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+}
+
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state)
+{
+   Ecore_X_Atom atom = 0;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   atom = _ecore_x_e_illume_window_state_atom_get(state);
+   ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                &atom, 1);
+}
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_atom_get(win,
+                                     ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                     &atom, 1))
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   return _ecore_x_e_illume_window_state_get(atom);
+}
+
index 53869aa..954e663 100644 (file)
@@ -794,6 +794,35 @@ ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
 }
 
 EAPI void
+ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
+                                      int x,
+                                      int y,
+                                      Ecore_X_Netwm_Direction direction,
+                                      unsigned int button)
+{
+   xcb_client_message_event_t ev;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   CHECK_XCB_CONN;
+
+   memset(&ev, 0, sizeof(xcb_client_message_event_t));
+
+   ev.response_type = XCB_CLIENT_MESSAGE;
+   ev.format = 32;
+   ev.window = win;
+   ev.type = ECORE_X_ATOM_NET_WM_MOVERESIZE;
+   ev.data.data32[0] = x;
+   ev.data.data32[1] = y;
+   ev.data.data32[2] = direction;
+   ev.data.data32[3] = button;
+   ev.data.data32[4] = 1;
+
+   xcb_send_event(_ecore_xcb_conn, 0, win,
+                  (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
+                   XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
+}
+
+EAPI void
 ecore_x_netwm_handled_icons_set(Ecore_X_Window win)
 {
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
index 3930c41..2998c5d 100644 (file)
@@ -927,6 +927,83 @@ ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
    return EINA_TRUE;
 }
 
+/* for sliding window */
+EAPI void 
+ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
+                                       unsigned int   is_visible)
+{
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   ecore_x_window_prop_card32_set(win, 
+                                  ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
+                                  &is_visible, 1);
+} /* ecore_x_e_illume_sliding_win_state_set */
+
+EAPI int 
+ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
+{
+   unsigned int is_visible = 0;
+   
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_card32_get(win,
+                                       ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
+                                       &is_visible, 1))
+      return 0;
+
+   return is_visible;
+}
+
+EAPI void
+ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
+                                          int            x,
+                                          int            y,
+                                          int            w,
+                                          int            h)
+{
+   unsigned int geom[4];
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   geom[0] = x;
+   geom[1] = y;
+   geom[2] = w;
+   geom[3] = h;
+   ecore_x_window_prop_card32_set(win,
+                                  ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
+                                  geom, 4);
+} /* ecore_x_e_illume_sliding_win_geometry_set */
+
+EAPI int 
+ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
+                                          int           *x,
+                                          int           *y,
+                                          int           *w,
+                                          int           *h)
+{
+   int ret = 0;
+   unsigned int geom[4];
+   
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   ret = 
+     ecore_x_window_prop_card32_get(win, 
+                                    ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
+                                    geom, 4);
+   if (ret != 4)
+      return 0;
+   
+   if (x)
+      *x = geom[0];
+   
+   if (y)
+      *y = geom[1];
+   
+   if (w)
+      *w = geom[2];
+   
+   if (h)
+      *h = geom[3];
+   
+   return 1;
+}/* ecore_x_e_illume_sliding_win_geometry_get */
+
 EAPI void
 ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
                                 Ecore_X_Sync_Counter counter)
@@ -1012,6 +1089,124 @@ ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
 }
 
 EAPI void
+ecore_x_e_window_profile_list_set(Ecore_X_Window  win,
+                                  const char    **profiles,
+                                  unsigned int    num_profiles)
+{
+   Ecore_X_Atom *atoms;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win)
+     return;
+
+   if (!num_profiles)
+     ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE_LIST);
+   else
+     {
+        atoms = alloca(num_profiles * sizeof(Ecore_X_Atom));
+        ecore_x_atoms_get(profiles, num_profiles, atoms);
+        ecore_x_window_prop_property_set(win,
+                                         ECORE_X_ATOM_E_PROFILE_LIST,
+                                         XA_ATOM, 32, (void *)atoms,
+                                         num_profiles);
+     }
+}
+
+EAPI Eina_Bool
+ecore_x_e_window_profile_list_get(Ecore_X_Window   win,
+                                  const char    ***profiles,
+                                  int             *ret_num)
+{
+   unsigned char *data;
+   Ecore_X_Atom *atoms;
+   int num, i;
+
+   if (ret_num)
+     *ret_num = 0;
+
+   if (profiles)
+     *profiles = NULL;
+
+   if (!win)
+     return EINA_FALSE;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_property_get(win,
+                                         ECORE_X_ATOM_E_PROFILE_LIST,
+                                         XA_ATOM, 32, &data, &num))
+     return EINA_FALSE;
+
+   if (ret_num)
+     *ret_num = num;
+
+   if (profiles)
+     {
+        (*profiles) = calloc(num, sizeof(char *));
+        if (!(*profiles))
+          {
+             if (ret_num)
+               *ret_num = 0;
+
+             if (data)
+               free(data);
+
+             return EINA_FALSE;
+          }
+
+        atoms = (Ecore_X_Atom *)data;
+        for (i = 0; i < num; i++)
+           (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
+     }
+
+   if (data)
+     XFree(data);
+
+   return EINA_TRUE;
+}
+
+EAPI void
+ecore_x_e_window_profile_set(Ecore_X_Window win,
+                             const char    *profile)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!win)
+     return;
+
+   if (!profile)
+     ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE);
+   else
+     {
+        atom = ecore_x_atom_get(profile);
+        ecore_x_window_prop_property_set(win, ECORE_X_ATOM_E_PROFILE,
+                                         XA_ATOM, 32, (void *)&atom, 1);
+     }
+}
+
+EAPI char *
+ecore_x_e_window_profile_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom *atom = NULL;
+   unsigned char *data;
+   char *profile = NULL;
+   int num;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_PROFILE,
+                                         XA_ATOM, 32, &data, &num))
+     return NULL;
+
+   if (data)
+     atom = (Ecore_X_Atom *)data;
+
+   if (atom)
+     profile = ecore_x_atom_name_get(atom[0]);
+
+   return profile;
+}
+
+EAPI void
 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
                                   Eina_Bool enabled)
 {
@@ -1357,3 +1552,58 @@ ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
                                  0, 0, 0, 0);
 }
 
+static Ecore_X_Atom
+_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
+{
+   switch (state)
+     {
+      case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
+
+      case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
+        return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
+
+      default:
+        break;
+     }
+   return 0;
+}
+
+static Ecore_X_Illume_Window_State
+_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
+{
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
+     return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
+
+   return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+}
+
+EAPI void
+ecore_x_e_illume_window_state_set(Ecore_X_Window win,
+                                  Ecore_X_Illume_Window_State state)
+{
+   Ecore_X_Atom atom = 0;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   atom = _ecore_x_e_illume_window_state_atom_get(state);
+   ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                &atom, 1);
+}
+
+EAPI Ecore_X_Illume_Window_State
+ecore_x_e_illume_window_state_get(Ecore_X_Window win)
+{
+   Ecore_X_Atom atom;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   if (!ecore_x_window_prop_atom_get(win,
+                                     ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
+                                     &atom, 1))
+     return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
+
+   return _ecore_x_e_illume_window_state_get(atom);
+}
+
index 5fc580e..5a23a1b 100644 (file)
@@ -1605,6 +1605,33 @@ ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
               SubstructureNotifyMask | SubstructureRedirectMask, &xev);
 }
 
+EAPI void
+ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
+                                      int x,
+                                      int y,
+                                      Ecore_X_Netwm_Direction direction,
+                                      unsigned int button)
+{
+   XEvent xev;
+
+   if (!win)
+     return;
+
+   LOGFN(__FILE__, __LINE__, __FUNCTION__);
+   xev.xclient.window = win;
+   xev.xclient.type = ClientMessage;
+   xev.xclient.message_type = ECORE_X_ATOM_NET_WM_MOVERESIZE;
+   xev.xclient.format = 32;
+   xev.xclient.data.l[0] = x;
+   xev.xclient.data.l[1] = y;
+   xev.xclient.data.l[2] = direction;
+   xev.xclient.data.l[3] = button;
+   xev.xclient.data.l[4] = 1;
+
+   XSendEvent(_ecore_x_disp, win, False,
+              SubstructureNotifyMask | SubstructureRedirectMask, &xev);
+}
+
 int
 _ecore_x_netwm_startup_info_begin(Ecore_X_Window win __UNUSED__,
                                   char *data __UNUSED__)