Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_hints.c 


Log Message:
netwm sync

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.244
retrieving revision 1.245
diff -u -3 -r1.244 -r1.245
--- e_border.c  5 Jun 2005 19:14:50 -0000       1.244
+++ e_border.c  6 Jun 2005 15:22:04 -0000       1.245
@@ -38,10 +38,12 @@
 static int _e_border_cb_window_shape(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev);
+static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
+
 static int _e_border_cb_window_state_request(void *data, int ev_type, void 
*ev);
 static int _e_border_cb_window_move_resize_request(void *data, int ev_type, 
void *ev);
 static int _e_border_cb_desktop_change(void *data, int ev_type, void *ev);
-static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
+static int _e_border_cb_sync_alarm(void *data, int ev_type, void *ev);
 
 static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const 
char *emission, const char *source);
 static void _e_border_cb_signal_move_stop(void *data, Evas_Object *obj, const 
char *emission, const char *source);
@@ -124,6 +126,8 @@
 static E_Border    *move = NULL;
 
 static Ecore_Timer *focus_fix_timer = NULL;
+
+static int grabbed = 0;
               
 int E_EVENT_BORDER_ADD = 0;
 int E_EVENT_BORDER_REMOVE = 0;
@@ -165,10 +169,11 @@
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE, _e_border_cb_window_shape, 
NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, 
_e_border_cb_window_focus_in, NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, 
_e_border_cb_window_focus_out, NULL));
+   handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, 
_e_border_cb_client_message, NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, 
_e_border_cb_window_state_request, NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST, 
_e_border_cb_window_move_resize_request, NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_DESKTOP_CHANGE, 
_e_border_cb_desktop_change, NULL));
-   handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, 
_e_border_cb_client_message, NULL));
+   handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_SYNC_ALARM, _e_border_cb_sync_alarm, 
NULL));
    ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL);
 
    E_EVENT_BORDER_ADD = ecore_event_type_new();
@@ -596,6 +601,11 @@
    bd->y = y;
    bd->changed = 1;
    bd->changes.pos = 1;
+   if (bd->client.netwm.sync.request)
+     {
+       bd->client.netwm.sync.wait++;
+       ecore_x_netwm_sync_request_send(bd->client.win, 
bd->client.netwm.sync.serial++);
+     }
    ecore_x_icccm_move_resize_send(bd->client.win,
                                  bd->x + bd->client_inset.l,
                                  bd->y + bd->client_inset.t,
@@ -635,6 +645,11 @@
    bd->client.h = bd->h - (bd->client_inset.t + bd->client_inset.b);
    bd->changed = 1;
    bd->changes.size = 1;
+   if (bd->client.netwm.sync.request)
+     {
+       bd->client.netwm.sync.wait++;
+       ecore_x_netwm_sync_request_send(bd->client.win, 
bd->client.netwm.sync.serial++);
+     }
    ecore_x_icccm_move_resize_send(bd->client.win,
                                  bd->x + bd->client_inset.l,
                                  bd->y + bd->client_inset.t,
@@ -680,6 +695,11 @@
    bd->changed = 1;
    bd->changes.pos = 1;
    bd->changes.size = 1;
+   if (bd->client.netwm.sync.request)
+     {
+       bd->client.netwm.sync.wait++;
+       ecore_x_netwm_sync_request_send(bd->client.win, 
bd->client.netwm.sync.serial++);
+     }
    ecore_x_icccm_move_resize_send(bd->client.win,
                                  bd->x + bd->client_inset.l,
                                  bd->y + bd->client_inset.t,
@@ -1261,6 +1281,23 @@
 }
 
 E_Border *
+e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm)
+{
+   Evas_List *l;
+   
+   for (l = borders; l; l = l->next)
+     {
+       E_Border *bd;
+
+       bd = l->data;
+       if ((bd) && (!e_object_is_del(E_OBJECT(bd))) &&
+           (bd->client.netwm.sync.alarm == alarm))
+         return bd;
+     }
+   return NULL;
+}
+
+E_Border *
 e_border_focused_get(void)
 {
    return focused;
@@ -2027,6 +2064,10 @@
        bd->changed = 1;
      }
    */
+   else if (e->atom == ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER)
+     {
+       printf("ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER\n");
+     }
    return 1;
 }
 
@@ -2186,6 +2227,18 @@
 }
 
 static int
+_e_border_cb_client_message(void *data, int ev_type, void *ev)
+{
+   E_Border *bd;
+   Ecore_X_Event_Client_Message *e;
+
+   e = ev;
+   bd = e_border_find_by_client_window(e->win);
+   if (!bd) return 1;
+   return 1;
+}
+
+static int
 _e_border_cb_window_state_request(void *data, int ev_type, void *ev)
 {
    E_Border *bd;
@@ -2279,7 +2332,7 @@
    bd->moveinfo.down.button = e->button;
    bd->moveinfo.down.mx = e->x;
    bd->moveinfo.down.my = e->y;
-   bd->grab = 1;
+   grabbed = 1;
 
    e_border_raise(bd);
    if (e->direction == RESIZE_TL)
@@ -2385,14 +2438,16 @@
 }
 
 static int
-_e_border_cb_client_message(void *data, int ev_type, void *ev)
+_e_border_cb_sync_alarm(void *data, int ev_type, void *ev)
 {
    E_Border *bd;
-   Ecore_X_Event_Client_Message *e;
+   Ecore_X_Event_Sync_Alarm *e;
 
    e = ev;
-   bd = e_border_find_by_client_window(e->win);
+   bd = e_border_find_by_alarm(e->alarm);
    if (!bd) return 1;
+   bd->client.netwm.sync.wait--;
+   bd->client.netwm.sync.time = ecore_time_get();
    return 1;
 }
 
@@ -2676,6 +2731,7 @@
        (ev->event_win == bd->win))
      return 1;
  */
+   if (grabbed) return 1;
    if (ev->event_win == bd->win)
      {
        /* FIXME: this would normally put focus on the client on pointer */
@@ -2733,6 +2789,7 @@
 #endif
    /* FIXME: this would normally take focus away in pointer focus mode */
 //   if (ev->mode == ECORE_X_EVENT_MODE_UNGRAB) return 1;
+   if (grabbed) return 1;
    if (ev->event_win == bd->win)
      {
        if ((ev->mode == ECORE_X_EVENT_MODE_UNGRAB) &&
@@ -2918,6 +2975,12 @@
        int new_w, new_h;
        Evas_List *skiplist = NULL;
 
+       if ((ecore_time_get() - bd->client.netwm.sync.time) > 0.5)
+         bd->client.netwm.sync.wait = 0;
+       if ((bd->client.netwm.sync.request) &&
+           (bd->client.netwm.sync.alarm) &&
+           (bd->client.netwm.sync.wait > 1)) return 1;
+
        if ((bd->moveinfo.down.button >= 1) && (bd->moveinfo.down.button <= 3))
          {
             x = bd->mouse.last_down[bd->moveinfo.down.button - 1].x +
@@ -2945,6 +3008,12 @@
      }
    else if (bd->resize_mode != RESIZE_NONE)
      {
+       if ((ecore_time_get() - bd->client.netwm.sync.time) > 0.5)
+         bd->client.netwm.sync.wait = 0;
+       if ((bd->client.netwm.sync.request) &&
+           (bd->client.netwm.sync.alarm) &&
+           (bd->client.netwm.sync.wait > 1)) return 1;
+
        _e_border_resize_handle(bd);
      }
    else
@@ -3287,21 +3356,17 @@
             for (i = 0; i < num; i++)
               {
                  if (proto[i] == ECORE_X_WM_PROTOCOL_DELETE_REQUEST)
-                   {
-                      printf("ECORE_X_WM_PROTOCOL_DELETE_REQUEST\n");
-                      bd->client.icccm.delete_request = 1;
-                   }
+                   bd->client.icccm.delete_request = 1;
                  else if (proto[i] == ECORE_X_WM_PROTOCOL_TAKE_FOCUS)
                    bd->client.icccm.take_focus = 1;
                  else if (proto[i] == ECORE_X_NET_WM_PROTOCOL_PING)
-                   {
-                      printf("ECORE_X_NET_WM_PROTOCOL_PING\n");
-                      bd->client.netwm.ping = 1;
-                   }
+                   bd->client.netwm.ping = 1;
                  else if (proto[i] == ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST)
                    {
-                      printf("ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST\n");
-                      bd->client.netwm.sync_request = 1;
+                      bd->client.netwm.sync.request = 1;
+                      if (!ecore_x_netwm_sync_counter_get(bd->client.win,
+                                                          
&bd->client.netwm.sync.counter))
+                        bd->client.netwm.sync.request = 0;
                    }
               }
             free(proto);
@@ -4682,8 +4747,15 @@
        w = (bd->client.w - bd->client.icccm.min_w) / bd->client.icccm.step_w;
        h = (bd->client.h - bd->client.icccm.min_h) / bd->client.icccm.step_h;
      }
-   if (bd->grab)
+   if (grabbed)
      ecore_x_pointer_grab(bd->win);
+   if (bd->client.netwm.sync.request)
+     {
+       bd->client.netwm.sync.alarm = 
ecore_x_sync_alarm_new(bd->client.netwm.sync.counter);
+       bd->client.netwm.sync.serial = 0;
+       bd->client.netwm.sync.wait = 0;
+       bd->client.netwm.sync.time = ecore_time_get();
+     }
    e_resize_begin(bd->zone, w, h);
    resize = bd;
 }
@@ -4691,9 +4763,14 @@
 static void
 _e_border_resize_end(E_Border *bd)
 {
-   if (bd->grab)
+   if (grabbed)
      ecore_x_pointer_ungrab();
-   bd->grab = 0;
+   grabbed = 0;
+   if (bd->client.netwm.sync.alarm)
+     {
+       ecore_x_sync_alarm_free(bd->client.netwm.sync.alarm);
+       bd->client.netwm.sync.alarm = 0;
+     }
    e_resize_end();
    resize = NULL;
 }
@@ -4720,8 +4797,15 @@
 static void
 _e_border_move_begin(E_Border *bd)
 {
-   if (bd->grab)
+   if (grabbed)
      ecore_x_pointer_grab(bd->win);
+   if (bd->client.netwm.sync.request)
+     {
+       bd->client.netwm.sync.alarm = 
ecore_x_sync_alarm_new(bd->client.netwm.sync.counter);
+       bd->client.netwm.sync.serial = 0;
+       bd->client.netwm.sync.wait = 0;
+       bd->client.netwm.sync.time = ecore_time_get();
+     }
    e_move_begin(bd->zone, bd->x, bd->y);
    move = bd;
 }
@@ -4729,9 +4813,14 @@
 static void
 _e_border_move_end(E_Border *bd)
 {
-   if (bd->grab)
+   if (grabbed)
      ecore_x_pointer_ungrab();
-   bd->grab = 0;
+   grabbed = 0;
+   if (bd->client.netwm.sync.alarm)
+     {
+       ecore_x_sync_alarm_free(bd->client.netwm.sync.alarm);
+       bd->client.netwm.sync.alarm = 0;
+     }
    e_move_end();
    move = NULL;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- e_border.h  5 Jun 2005 15:30:46 -0000       1.69
+++ e_border.h  6 Jun 2005 15:22:04 -0000       1.70
@@ -184,7 +184,14 @@
              int bottom_end_x;
         } strut;
         unsigned char ping : 1;
-        unsigned char sync_request : 1;
+        struct {
+             unsigned char        request : 1;
+             unsigned int         wait;
+             Ecore_X_Sync_Alarm   alarm;
+             Ecore_X_Sync_Counter counter;
+             unsigned int         serial;
+             double               time;
+        } sync;
 
         /* NetWM Window state */
         struct {
@@ -249,7 +256,6 @@
    unsigned char   already_unparented : 1;
    unsigned char   need_reparent : 1;
    unsigned char   button_grabbed : 1;
-   unsigned char   grab : 1;
 
    double          ping;
  
@@ -418,6 +424,7 @@
 EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win);
 EAPI E_Border *e_border_find_by_frame_window(Ecore_X_Window win);
 EAPI E_Border *e_border_find_by_window(Ecore_X_Window win);
+EAPI E_Border *e_border_find_by_alarm(Ecore_X_Sync_Alarm alarm);
 EAPI E_Border *e_border_focused_get(void);
 
 EAPI void      e_border_idler_before(void);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -3 -r1.47 -r1.48
--- e_hints.c   5 Jun 2005 15:30:46 -0000       1.47
+++ e_hints.c   6 Jun 2005 15:22:05 -0000       1.48
@@ -17,7 +17,7 @@
        for (i = 0; i < num; i++)
          {
             Ecore_X_Window win;
-            Ecore_X_Atom supported[35];
+            Ecore_X_Atom supported[38];
             int num;
             
             win = ecore_x_window_new(roots[i], -200, -200, 5, 5);
@@ -112,9 +112,9 @@
             /*ecore_x_netwm_supported(roots[i], 
ECORE_X_ATOM_NET_WM_HANDLED_ICONS, 1);*/
             supported[num++] = ECORE_X_ATOM_NET_WM_USER_TIME;
             supported[num++] = ECORE_X_ATOM_NET_FRAME_EXTENTS;
-            /*ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_PING, 1);*/
-            /*ecore_x_netwm_supported(roots[i], 
ECORE_X_ATOM_NET_WM_SYNC_REQUEST, 1);*/
-            /*ecore_x_netwm_supported(roots[i], 
ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER, 1);*/
+            supported[num++] = ECORE_X_ATOM_NET_WM_PING;
+            supported[num++] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
+            supported[num++] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER;
             ecore_x_netwm_supported_set(roots[i], supported, num);
          }
         free(roots);




-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.  How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.  
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to