Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_atoms.c e_border.c e_border.h e_hints.c e_intl.c Log Message: fix shaped windows - event loop put some fixme's in for netwm.. too many round trips -especially on map =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_atoms.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- e_atoms.c 12 May 2005 08:50:52 -0000 1.9 +++ e_atoms.c 28 May 2005 13:22:14 -0000 1.10 @@ -23,6 +23,7 @@ E_ATOM_MAPPED = ecore_x_atom_get("__E_WINDOW_MAPPED"); E_ATOM_SHADE_DIRECTION = ecore_x_atom_get("__E_WINDOW_SHADE_DIRECTION"); E_ATOM_HIDDEN = ecore_x_atom_get("__E_WINDOW_HIDDEN"); + return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.228 retrieving revision 1.229 diff -u -3 -r1.228 -r1.229 --- e_border.c 28 May 2005 12:50:22 -0000 1.228 +++ e_border.c 28 May 2005 13:22:14 -0000 1.229 @@ -289,6 +289,40 @@ bd->client.icccm.max_aspect = 0.0; bd->client.icccm.accepts_focus = 1; + { + int at_num = 0, i; + Ecore_X_Atom *atoms; + + atoms = ecore_x_window_prop_list(bd->client.win, &at_num); + if (atoms) + { + for (i = 0; i < at_num; i++) + { + if (atoms[i] == ECORE_X_ATOM_WM_NAME) + bd->client.icccm.fetch.title = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_CLASS) + bd->client.icccm.fetch.name_class = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_ICON_NAME) + bd->client.icccm.fetch.icon_name = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_CLIENT_MACHINE) + bd->client.icccm.fetch.machine = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_HINTS) + bd->client.icccm.fetch.hints = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_NORMAL_HINTS) + bd->client.icccm.fetch.size_pos_hints = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_PROTOCOLS) + bd->client.icccm.fetch.protocol = 1; + else if (atoms[i] == ECORE_X_ATOM_MOTIF_WM_HINTS) + bd->client.mwm.fetch.hints = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_TRANSIENT_FOR) + bd->client.icccm.fetch.transient_for = 1; + else if (atoms[i] == ECORE_X_ATOM_WM_WINDOW_ROLE) + bd->client.icccm.fetch.window_role = 1; + } + free(atoms); + } + } +/* bd->client.icccm.fetch.title = 1; bd->client.icccm.fetch.name_class = 1; bd->client.icccm.fetch.icon_name = 1; @@ -297,8 +331,10 @@ bd->client.icccm.fetch.size_pos_hints = 1; bd->client.icccm.fetch.protocol = 1; bd->client.mwm.fetch.hints = 1; + */ bd->client.border.changed = 1; + /* FIXME; set fetch flags as above */ bd->client.netwm.pid = 0; bd->client.netwm.desktop = 0; bd->client.netwm.state.modal = 0; @@ -1146,7 +1182,8 @@ E_Border *bd; bd = evas_hash_find(borders_hash, _e_border_winid_str_get(win)); - if ((bd) && (!e_object_is_del(E_OBJECT(bd)))) + if ((bd) && (!e_object_is_del(E_OBJECT(bd))) && + (bd->client.win == win)) return bd; return NULL; } @@ -1154,13 +1191,25 @@ E_Border * e_border_find_by_frame_window(Ecore_X_Window win) { - return e_border_find_by_client_window(win); + E_Border *bd; + + bd = evas_hash_find(borders_hash, _e_border_winid_str_get(win)); + if ((bd) && (!e_object_is_del(E_OBJECT(bd))) && + (bd->bg_win == win)) + return bd; + return NULL; } E_Border * e_border_find_by_window(Ecore_X_Window win) { - return e_border_find_by_client_window(win); + E_Border *bd; + + bd = evas_hash_find(borders_hash, _e_border_winid_str_get(win)); + if ((bd) && (!e_object_is_del(E_OBJECT(bd))) && + (bd->win == win)) + return bd; + return NULL; } E_Border * @@ -1444,6 +1493,7 @@ if (bd->client.icccm.class) free(bd->client.icccm.class); if (bd->client.icccm.icon_name) free(bd->client.icccm.icon_name); if (bd->client.icccm.machine) free(bd->client.icccm.machine); + if (bd->client.icccm.window_role) free(bd->client.icccm.window_role); e_object_del(E_OBJECT(bd->shape)); if (bd->icon_object) evas_object_del(bd->icon_object); evas_object_del(bd->bg_object); @@ -1827,6 +1877,16 @@ bd->client.mwm.fetch.hints = 1; bd->changed = 1; } + else if (e->atom == ECORE_X_ATOM_WM_TRANSIENT_FOR) + { + bd->client.icccm.fetch.transient_for = 1; + bd->changed = 1; + } + else if (e->atom == ECORE_X_ATOM_WM_WINDOW_ROLE) + { + bd->client.icccm.fetch.window_role = 1; + bd->changed = 1; + } return 1; } @@ -2918,6 +2978,16 @@ } bd->client.mwm.fetch.hints = 0; } + if (bd->client.icccm.fetch.transient_for) + { + bd->client.icccm.transient_for = ecore_x_icccm_transient_for_get(bd->client.win); + bd->client.icccm.fetch.transient_for = 0; + } + if (bd->client.icccm.fetch.window_role) + { + bd->client.icccm.window_role = ecore_x_icccm_window_role_get(bd->client.win); + bd->client.icccm.fetch.window_role = 0; + } if (bd->changes.shape) { Ecore_X_Rectangle *rects; @@ -3217,6 +3287,7 @@ ecore_event_add(E_EVENT_BORDER_ADD, ev, _e_border_event_border_add_free, NULL); /* Recreate state */ + /* FIXME: this should be split into property fetches and state setup */ e_hints_window_init(bd); ecore_x_icccm_move_resize_send(bd->client.win, =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- e_border.h 26 May 2005 11:48:39 -0000 1.60 +++ e_border.h 28 May 2005 13:22:15 -0000 1.61 @@ -127,20 +127,24 @@ Ecore_X_Pixmap icon_mask; Ecore_X_Window icon_window; Ecore_X_Window window_group; + Ecore_X_Window transient_for; Ecore_X_Gravity gravity; + char *window_role; unsigned char take_focus : 1; unsigned char accepts_focus : 1; unsigned char urgent : 1; unsigned char delete_request : 1; unsigned char request_pos : 1; struct { - unsigned int title : 1; - unsigned int name_class : 1; - unsigned int icon_name : 1; - unsigned int machine : 1; - unsigned int hints : 1; - unsigned int size_pos_hints : 1; - unsigned int protocol : 1; + unsigned char title : 1; + unsigned char name_class : 1; + unsigned char icon_name : 1; + unsigned char machine : 1; + unsigned char hints : 1; + unsigned char size_pos_hints : 1; + unsigned char protocol : 1; + unsigned char transient_for : 1; + unsigned char window_role : 1; } fetch; } icccm; struct { @@ -150,10 +154,11 @@ unsigned char exists : 1; unsigned char borderless : 1; struct { - unsigned int hints : 1; + unsigned char hints : 1; } fetch; } mwm; struct { + /* FIXME: add name field */ pid_t pid; unsigned int desktop; @@ -173,6 +178,14 @@ Ecore_X_Window_Type type; + struct { + unsigned char name : 1; + unsigned char pid : 1; + unsigned char desktop : 1; + unsigned char type : 1; + unsigned char icon_name : 1; + unsigned char state : 1; + } fetch; } netwm; Ecore_X_Window_Attributes initial_attributes; } client; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- e_hints.c 28 May 2005 12:50:22 -0000 1.35 +++ e_hints.c 28 May 2005 13:22:15 -0000 1.36 @@ -244,6 +244,9 @@ void e_hints_window_name_get(E_Border *bd) { + /* FIXME: only call from border_eval() if fetch flag set */ + /* FIXME: split name into icccm and netwm name - prefer netwm name */ + /* if its not NULL */ char *name; name = ecore_x_netwm_name_get(bd->client.win); @@ -318,6 +321,7 @@ void e_hints_window_init(E_Border *bd) { + /* FIXME: only call from border_eval() if fetch flag set */ e_hints_window_state_get(bd); e_hints_window_type_get(bd); @@ -443,6 +447,7 @@ void e_hints_window_type_get(E_Border *bd) { + /* FIXME: only call from border_eval() if fetch flag set */ bd->client.netwm.type = ecore_x_netwm_window_type_get(bd->client.win); } @@ -831,6 +836,7 @@ { int above, below; + /* FIXME: each of these is a round trip. need to make it a single fetch */ bd->client.netwm.state.modal = ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_MODAL); bd->client.netwm.state.sticky = =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_intl.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- e_intl.c 28 May 2005 05:03:26 -0000 1.30 +++ e_intl.c 28 May 2005 13:22:15 -0000 1.31 @@ -99,12 +99,15 @@ /* FIXME: determine if in user or system locale dir */ if (_e_intl_language) free(_e_intl_language); + if (!lang) lang = getenv("LANGUAGE"); + if (!lang) lang = getenv("LC_ALL"); if (!lang) lang = getenv("LANG"); if (lang) { _e_intl_language = strdup(lang); - e_util_env_set("LANG", _e_intl_language); - if (getenv("LC_ALL")) e_util_env_set("LC_ALL", _e_intl_language); + e_util_env_set("LANGUAGE", _e_intl_language); + e_util_env_set("LC_ALL", _e_intl_language); + if (getenv("LANG")) e_util_env_set("LANG", _e_intl_language); } else { ------------------------------------------------------- This SF.Net email is sponsored by Yahoo. Introducing Yahoo! Search Developer Network - Create apps using Yahoo! Search APIs Find out how you can build Yahoo! directly into your own Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs