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

Reply via email to