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