Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_x


Modified Files:
        Ecore_X.h ecore_x.c ecore_x_events.c ecore_x_netwm.c 
        ecore_x_private.h 


Log Message:
Create event for window state change.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -3 -r1.112 -r1.113
--- Ecore_X.h   28 Apr 2005 07:48:16 -0000      1.112
+++ Ecore_X.h   28 Apr 2005 12:26:32 -0000      1.113
@@ -56,6 +56,58 @@
    unsigned int width, height;
 } Ecore_X_Rectangle;
 
+typedef enum _Ecore_X_Window_State {
+    /** The window is iconified. */
+    ECORE_X_WINDOW_STATE_ICONIFIED,
+
+    /** The window is a modal dialog box. */
+    ECORE_X_WINDOW_STATE_MODAL,
+
+    /** The window manager should keep the window's position fixed
+     * even if the virtual desktop scrolls. */
+    ECORE_X_WINDOW_STATE_STICKY,
+
+    /** The window has the maximum vertical size. */
+    ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
+
+    /** The window has the maximum horizontal size. */
+    ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
+
+    /** The window is shaded. */
+    ECORE_X_WINDOW_STATE_SHADED,
+
+    /** The window should not be included in the taskbar. */
+    ECORE_X_WINDOW_STATE_SKIP_TASKBAR,
+
+    /** The window should not be included in the pager. */
+    ECORE_X_WINDOW_STATE_SKIP_PAGER,
+
+    /** The window is invisible (i.e. minimized/iconified) */
+    ECORE_X_WINDOW_STATE_HIDDEN,
+
+    /** The window should fill the entire screen and have no
+     * window border/decorations */
+    ECORE_X_WINDOW_STATE_FULLSCREEN,
+
+    /* The following are not documented because they are not
+     * intended for use in applications. */
+    ECORE_X_WINDOW_STATE_ABOVE,
+    ECORE_X_WINDOW_STATE_BELOW,
+
+    /* FIXME: Documentation */
+    ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION,
+
+    /* Unknown state */
+    ECORE_X_WINDOW_STATE_UNKNOWN
+
+} Ecore_X_Window_State;
+
+typedef enum _Ecore_X_Window_State_Action {
+     ECORE_X_WINDOW_STATE_ACTION_REMOVE,
+     ECORE_X_WINDOW_STATE_ACTION_ADD,
+     ECORE_X_WINDOW_STATE_ACTION_TOGGLE
+} Ecore_X_Window_State_Action;
+
 #define ECORE_X_SELECTION_TARGET_TARGETS "TARGETS"
 #define ECORE_X_SELECTION_TARGET_TEXT "TEXT"
 #define ECORE_X_SELECTION_TARGET_COMPOUND_TEXT "COMPOUND_TEXT"
@@ -179,6 +231,7 @@
 typedef struct _Ecore_X_Event_Xdnd_Leave               
Ecore_X_Event_Xdnd_Leave;
 typedef struct _Ecore_X_Event_Xdnd_Drop                Ecore_X_Event_Xdnd_Drop;
 typedef struct _Ecore_X_Event_Xdnd_Finished            
Ecore_X_Event_Xdnd_Finished;
+typedef struct _Ecore_X_Event_Window_State             
Ecore_X_Event_Window_State;
 typedef struct _Ecore_X_Event_Client_Message           
Ecore_X_Event_Client_Message;
 typedef struct _Ecore_X_Event_Window_Shape             
Ecore_X_Event_Window_Shape;
 
@@ -537,6 +590,14 @@
    Ecore_X_Atom         action;
 };
 
+struct _Ecore_X_Event_Window_State
+{
+   Ecore_X_Window              win;
+   Ecore_X_Window_State_Action action;
+   Ecore_X_Window_State        state[2];
+   int                         source;
+};
+
 struct _Ecore_X_Event_Client_Message
 {
    Ecore_X_Window       win;
@@ -650,6 +711,7 @@
 extern EAPI int ECORE_X_EVENT_SELECTION_CLEAR;
 extern EAPI int ECORE_X_EVENT_SELECTION_REQUEST;
 extern EAPI int ECORE_X_EVENT_SELECTION_NOTIFY;
+extern EAPI int ECORE_X_EVENT_WINDOW_STATE;
 extern EAPI int ECORE_X_EVENT_CLIENT_MESSAGE;
 extern EAPI int ECORE_X_EVENT_WINDOW_SHAPE;
 
@@ -740,49 +802,6 @@
    ECORE_X_WINDOW_STATE_HINT_ICONIC,
 } Ecore_X_Window_State_Hint;
 
-typedef enum _Ecore_X_Window_State {
-    /** The window is iconified. */
-    ECORE_X_WINDOW_STATE_ICONIFIED,
-
-    /** The window is a modal dialog box. */
-    ECORE_X_WINDOW_STATE_MODAL,
-
-    /** The window manager should keep the window's position fixed
-     * even if the virtual desktop scrolls. */
-    ECORE_X_WINDOW_STATE_STICKY,
-
-    /** The window has the maximum vertical size. */
-    ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
-
-    /** The window has the maximum horizontal size. */
-    ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
-
-    /** The window is shaded. */
-    ECORE_X_WINDOW_STATE_SHADED,
-
-    /** The window should not be included in the taskbar. */
-    ECORE_X_WINDOW_STATE_SKIP_TASKBAR,
-
-    /** The window should not be included in the pager. */
-    ECORE_X_WINDOW_STATE_SKIP_PAGER,
-
-    /** The window is invisible (i.e. minimized/iconified) */
-    ECORE_X_WINDOW_STATE_HIDDEN,
-
-    /** The window should fill the entire screen and have no
-     * window border/decorations */
-    ECORE_X_WINDOW_STATE_FULLSCREEN,
-
-    /* The following are not documented because they are not
-     * intended for use in applications. */
-    ECORE_X_WINDOW_STATE_ABOVE,
-    ECORE_X_WINDOW_STATE_BELOW,
-
-    /* FIXME: Documentation */
-    ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION
-
-} Ecore_X_Window_State;
-
 typedef enum _Ecore_X_Window_Type {
     ECORE_X_WINDOW_TYPE_DESKTOP,
     ECORE_X_WINDOW_TYPE_DOCK,
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -3 -r1.74 -r1.75
--- ecore_x.c   28 Apr 2005 07:48:16 -0000      1.74
+++ ecore_x.c   28 Apr 2005 12:26:33 -0000      1.75
@@ -113,6 +113,7 @@
 int ECORE_X_EVENT_SELECTION_CLEAR = 0;
 int ECORE_X_EVENT_SELECTION_REQUEST = 0;
 int ECORE_X_EVENT_SELECTION_NOTIFY = 0;
+int ECORE_X_EVENT_WINDOW_STATE = 0;
 int ECORE_X_EVENT_CLIENT_MESSAGE = 0;
 int ECORE_X_EVENT_WINDOW_SHAPE = 0;
 
@@ -254,6 +255,7 @@
        ECORE_X_EVENT_SELECTION_CLEAR          = ecore_event_type_new();
        ECORE_X_EVENT_SELECTION_REQUEST        = ecore_event_type_new();
        ECORE_X_EVENT_SELECTION_NOTIFY         = ecore_event_type_new();
+       ECORE_X_EVENT_WINDOW_STATE             = ecore_event_type_new();
        ECORE_X_EVENT_CLIENT_MESSAGE           = ecore_event_type_new();
        ECORE_X_EVENT_WINDOW_SHAPE             = ecore_event_type_new();
        
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- ecore_x_events.c    13 Apr 2005 15:47:52 -0000      1.52
+++ ecore_x_events.c    28 Apr 2005 12:26:34 -0000      1.53
@@ -1359,12 +1359,37 @@
 
        ecore_event_add(ECORE_X_EVENT_XDND_FINISHED, e, NULL, NULL);
      }
+   else if (xevent->xclient.message_type == ECORE_X_ATOM_NET_WM_STATE)
+     {
+       Ecore_X_Event_Window_State *e;
+
+       e = calloc(1, sizeof(Ecore_X_Event_Window_State));
+       if (!e) return;
+       e->win = xevent->xclient.window;
+       if (xevent->xclient.data.l[0] == 0)
+         e->action = ECORE_X_WINDOW_STATE_ACTION_REMOVE;
+       else if (xevent->xclient.data.l[0] == 1)
+         e->action = ECORE_X_WINDOW_STATE_ACTION_ADD;
+       else if (xevent->xclient.data.l[0] == 2)
+         e->action = ECORE_X_WINDOW_STATE_ACTION_TOGGLE;
+       else
+         {
+            free(e);
+            return;
+         }
+       e->state[0] = _ecore_x_netwm_state_get(xevent->xclient.data.l[1]);
+       e->state[1] = _ecore_x_netwm_state_get(xevent->xclient.data.l[2]);
+       e->source = xevent->xclient.data.l[3];
+
+       ecore_event_add(ECORE_X_EVENT_WINDOW_STATE, e, NULL, NULL);
+     }
    else
      {
        Ecore_X_Event_Client_Message *e;
        int i;
 
-       e = (Ecore_X_Event_Client_Message *) calloc(1, 
sizeof(Ecore_X_Event_Client_Message));
+       e = calloc(1, sizeof(Ecore_X_Event_Client_Message));
+       if (!e) return;
        e->win = xevent->xclient.window;
        e->message_type = xevent->xclient.message_type;
        e->format = xevent->xclient.format;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_netwm.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- ecore_x_netwm.c     28 Apr 2005 06:50:11 -0000      1.14
+++ ecore_x_netwm.c     28 Apr 2005 12:26:34 -0000      1.15
@@ -765,6 +765,37 @@
    return ret == 1 ? 1 : 0;
 }
 
+Ecore_X_Window_State
+_ecore_x_netwm_state_get(Ecore_X_Atom a)
+{
+   if (a == ECORE_X_ATOM_NET_WM_STATE_MODAL)
+     return ECORE_X_WINDOW_STATE_MODAL;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_STICKY)
+     return ECORE_X_WINDOW_STATE_STICKY;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT)
+     return ECORE_X_WINDOW_STATE_MAXIMIZED_VERT;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ)
+     return ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_SHADED)
+     return ECORE_X_WINDOW_STATE_SHADED;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR)
+     return ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER)
+     return ECORE_X_WINDOW_STATE_SKIP_PAGER;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_HIDDEN)
+     return ECORE_X_WINDOW_STATE_HIDDEN;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN)
+     return ECORE_X_WINDOW_STATE_FULLSCREEN;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_ABOVE)
+     return ECORE_X_WINDOW_STATE_ABOVE;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_BELOW)
+     return ECORE_X_WINDOW_STATE_BELOW;
+   else if (a == ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION)
+     return ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION;
+   else
+     return ECORE_X_WINDOW_STATE_UNKNOWN;
+}
+
 static Ecore_X_Atom
 _ecore_x_netwm_state_atom_get(Ecore_X_Window_State s)
 {
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- ecore_x_private.h   11 Apr 2005 21:41:45 -0000      1.43
+++ ecore_x_private.h   28 Apr 2005 12:26:34 -0000      1.44
@@ -186,10 +186,14 @@
 int   _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, 
void **data_ret);
 void *_ecore_x_selection_parse(const char *target, unsigned char *data, int 
size);
 
+/* from dnd */
 void _ecore_x_dnd_init(void);
 Ecore_X_DND_Source *_ecore_x_dnd_source_get(void);
 Ecore_X_DND_Target *_ecore_x_dnd_target_get(void);
 void _ecore_x_dnd_drag(int x, int y);
 void _ecore_x_dnd_shutdown(void);
 
+/* from netwm */
+Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
+
 #endif




-------------------------------------------------------
SF.Net email is sponsored by: Tell us your software development plans!
Take this survey and enter to win a one-year sub to SourceForge.net
Plus IDC's 2005 look-ahead and a copy of this survey
Click here to start!  http://www.idcswdc.com/cgi-bin/survey?id=105hix
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to