Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_actions.c e_actions.h e_bindings.c e_bindings.h e_border.c 
        e_border.h e_font.c e_main.c e_manager.c e_manager.h e_zone.c 
        e_zone.h 


Log Message:


key bindings... um.. kinda... work...

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_actions.c 29 Apr 2005 16:04:42 -0000      1.2
+++ e_actions.c 29 Apr 2005 19:42:14 -0000      1.3
@@ -18,6 +18,13 @@
    }
 #define ACT_FN_GO_MOUSE(act) \
    static void _e_actions_act_##act##_go_mouse(E_Object *obj, char *params, 
Ecore_X_Event_Mouse_Button_Down *ev)
+#define ACT_GO_KEY(name) \
+   { \
+      act = e_action_set(#name); \
+      if (act) act->func.go_key = _e_actions_act_##name##_go_key; \
+   }
+#define ACT_FN_GO_KEY(act) \
+   static void _e_actions_act_##act##_go_key(E_Object *obj, char *params, 
Ecore_X_Event_Key_Down *ev)
 #define ACT_END(name) \
    { \
       act = e_action_set(#name); \
@@ -32,6 +39,13 @@
    }
 #define ACT_FN_END_MOUSE(act) \
    static void _e_actions_act_##act##_end_mouse(E_Object *obj, char *params, 
Ecore_X_Event_Mouse_Button_Up *ev)
+#define ACT_END_KEY(name) \
+   { \
+      act = e_action_set(#name); \
+      if (act) act->func.end_key = _e_actions_act_##name##_end_key; \
+   }
+#define ACT_FN_END_KEY(act) \
+   static void _e_actions_act_##act##_end_key(E_Object *obj, char *params, 
Ecore_X_Event_Key_Up *ev)
 
 /* local subsystem functions */
 
@@ -40,24 +54,28 @@
 ACT_FN_GO(window_move)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_move_begin((E_Border *)obj, NULL);
 }
 ACT_FN_GO_MOUSE(window_move)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_move_begin((E_Border *)obj, ev);
 }
 ACT_FN_END(window_move)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_move_end((E_Border *)obj, NULL);
 }
 ACT_FN_END_MOUSE(window_move)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_move_end((E_Border *)obj, ev);
 }
@@ -66,24 +84,28 @@
 ACT_FN_GO(window_resize)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_resize_begin((E_Border *)obj, NULL);
 }
 ACT_FN_GO_MOUSE(window_resize)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_resize_begin((E_Border *)obj, ev);
 }
 ACT_FN_END(window_resize)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_resize_end((E_Border *)obj, NULL);
 }
 ACT_FN_END_MOUSE(window_resize)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_resize_end((E_Border *)obj, ev);
 }
@@ -92,16 +114,100 @@
 ACT_FN_GO(window_menu)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_menu_begin((E_Border *)obj, NULL);
 }
 ACT_FN_GO_MOUSE(window_menu)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
    if (obj->type != E_BORDER_TYPE) return;
    e_border_act_menu_begin((E_Border *)obj, ev);
 }
 
+/***************************************************************************/
+ACT_FN_GO(window_raise)
+{
+   if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
+   if (obj->type != E_BORDER_TYPE)
+     {
+       obj = E_OBJECT(e_border_focused_get());
+       if (!obj) return;
+     }
+   e_border_raise((E_Border *)obj);
+}
+
+/***************************************************************************/
+ACT_FN_GO(window_lower)
+{
+   if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
+   if (obj->type != E_BORDER_TYPE)
+     {
+       obj = E_OBJECT(e_border_focused_get());
+       if (!obj) return;
+     }
+   e_border_lower((E_Border *)obj);
+}
+
+/***************************************************************************/
+ACT_FN_GO(window_close)
+{
+   if (!obj) obj = E_OBJECT(e_border_focused_get());
+   if (!obj) return;
+   if (obj->type != E_BORDER_TYPE)
+     {
+       obj = E_OBJECT(e_border_focused_get());
+       if (!obj) return;
+     }
+   e_border_act_close_begin((E_Border *)obj);
+}
+
+/***************************************************************************/
+ACT_FN_GO(desk_flip_by)
+{
+   E_Container *con;
+   
+   if (!obj) return;
+   if (obj->type != E_MANAGER_TYPE) return;
+   con = e_manager_container_current_get((E_Manager *)obj);
+   if (con)
+     {
+       E_Zone *zone;
+       
+       zone = e_zone_current_get(con);
+       if (zone)
+         {
+            E_Desk *desk;
+            int dx = 0, dy = 0;
+            
+            if (params)
+              {
+                 if (sscanf(params, "%i %i", &dx, &dy) != 2)
+                   {
+                      dx = 0;
+                      dy = 0;
+                   }
+              }
+            dx = zone->desk_x_current + dx;
+            if (dx < 0) dx = 0;
+            else if (dx >= zone->desk_x_count) dx = zone->desk_x_count  - 1;
+            dy = zone->desk_x_current + dy;
+            if (dy < 0) dy = 0;
+            else if (dy >= zone->desk_y_count) dy = zone->desk_y_count  - 1;
+            desk = e_desk_at_xy_get(zone, dx, dy);
+            if (desk)
+              {  
+                 ecore_x_window_focus(con->manager->root);
+                 e_desk_show(desk);
+                 e_zone_update_flip(zone);
+              }
+         }
+     }
+}
+
 /* local subsystem globals */
 static Evas_Hash *actions = NULL;
 
@@ -125,6 +231,13 @@
    ACT_GO(window_menu);
    ACT_GO_MOUSE(window_menu);
 
+   ACT_GO(window_raise);
+
+   ACT_GO(window_lower);
+   ACT_GO(window_close);
+
+   ACT_GO(desk_flip_by);
+   
    return 1;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_actions.h 29 Apr 2005 16:04:42 -0000      1.2
+++ e_actions.h 29 Apr 2005 19:42:18 -0000      1.3
@@ -9,10 +9,12 @@
 {
    char *name;
    struct {
-      void (*go) (E_Object *obj, char *params);
-      void (*go_mouse) (E_Object *obj, char *params, 
Ecore_X_Event_Mouse_Button_Down *ev);
-      void (*end) (E_Object *obj, char *params);
+      void (*go)        (E_Object *obj, char *params);
+      void (*go_mouse)  (E_Object *obj, char *params, 
Ecore_X_Event_Mouse_Button_Down *ev);
+      void (*go_key)    (E_Object *obj, char *params, Ecore_X_Event_Key_Down 
*ev);
+      void (*end)       (E_Object *obj, char *params);
       void (*end_mouse) (E_Object *obj, char *params, 
Ecore_X_Event_Mouse_Button_Up *ev);
+      void (*end_key)   (E_Object *obj, char *params, Ecore_X_Event_Key_Up 
*ev);
    } func;
 };
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_bindings.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_bindings.c        29 Apr 2005 16:04:42 -0000      1.5
+++ e_bindings.c        29 Apr 2005 19:42:18 -0000      1.6
@@ -38,6 +38,7 @@
 };
 
 static void _e_bindings_mouse_free(E_Binding_Mouse *bind);
+static void _e_bindings_key_free(E_Binding_Key *bind);
 static int _e_bindings_context_match(E_Binding_Context bctxt, 
E_Binding_Context ctxt);
 
 /* local subsystem globals */
@@ -60,12 +61,34 @@
    e_bindings_mouse_add(E_BINDING_CONTEXT_BORDER,
                        3, E_BINDING_MODIFIER_ALT, 0,
                        "window_menu", "");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Left", E_BINDING_MODIFIER_SHIFT | 
E_BINDING_MODIFIER_ALT, 0,
+                     "desk_flip_by", "-1 0");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Right", E_BINDING_MODIFIER_SHIFT | 
E_BINDING_MODIFIER_ALT, 0,
+                     "desk_flip_by", "1 0");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Up", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 
0,
+                     "desk_flip_by", "0 -1");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Down", E_BINDING_MODIFIER_SHIFT | 
E_BINDING_MODIFIER_ALT, 0,
+                     "desk_flip_by", "0 -1");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Up", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
+                     "window_raise", "");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "Down", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 
0,
+                     "window_lower", "");
+   e_bindings_key_add(E_BINDING_CONTEXT_ANY,
+                     "x", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
+                     "window_close", "");
    return 1;
 }
 
 int
 e_bindings_shutdown(void)
 {
+   /* FIXME: free bindings */
    return 1;
 }
 
@@ -118,7 +141,7 @@
        E_Binding_Mouse *bind;
        
        bind = l->data;
-       if (bind->ctxt == ctxt)
+       if (_e_bindings_context_match(bind->ctxt, ctxt))
          {
             int mod;
             
@@ -146,7 +169,7 @@
        E_Binding_Mouse *bind;
        
        bind = l->data;
-       if (bind->ctxt == ctxt)
+       if (_e_bindings_context_match(bind->ctxt, ctxt))
          {
             int mod;
             
@@ -238,17 +261,170 @@
 }
 
 /* FIXME: finish off key bindings */
+void
+e_bindings_key_add(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, 
int any_mod, char *action, char *params)
+{
+   E_Binding_Key *bind;
+   
+   bind = calloc(1, sizeof(E_Binding_Key));
+   bind->ctxt = ctxt;
+   bind->key = strdup(key);
+   bind->mod = mod;
+   bind->any_mod = any_mod;
+   bind->action = strdup(action);
+   bind->params = strdup(params);
+   key_bindings = evas_list_append(key_bindings, bind);
+}
+
+void
+e_bindings_key_del(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, 
int any_mod, char *action, char *params)
+{
+   Evas_List *l;
+   
+   for (l = key_bindings; l; l = l->next)
+     {
+       E_Binding_Key *bind;
+       
+       bind = l->data;
+       if ((bind->ctxt == ctxt) &&
+           (!strcmp(bind->key, key)) &&
+           (bind->mod == mod) &&
+           (bind->any_mod == any_mod) &&
+           (!strcmp(bind->action, action)) &&
+           (!strcmp(bind->params, params)))
+         {
+            _e_bindings_key_free(bind);
+            key_bindings = evas_list_remove_list(key_bindings, l);
+            break;
+         }
+     }
+}
+
+void
+e_bindings_key_grab(E_Binding_Context ctxt, Ecore_X_Window win)
+{
+   Evas_List *l;
+
+   printf("GRAB KEYS %p\n", key_bindings);
+   for (l = key_bindings; l; l = l->next)
+     {
+       E_Binding_Key *bind;
+       
+       bind = l->data;
+       if (_e_bindings_context_match(bind->ctxt, ctxt))
+         {
+            int mod;
+            
+            mod = 0;
+            if (bind->mod & E_BINDING_MODIFIER_SHIFT) mod |= 
ECORE_X_MODIFIER_SHIFT;
+            if (bind->mod & E_BINDING_MODIFIER_CTRL) mod |= 
ECORE_X_MODIFIER_CTRL;
+            if (bind->mod & E_BINDING_MODIFIER_ALT) mod |= 
ECORE_X_MODIFIER_ALT;
+            if (bind->mod & E_BINDING_MODIFIER_WIN) mod |= 
ECORE_X_MODIFIER_WIN;
+            printf("BIND %x %s %x %i\n", win, bind->key, mod, bind->any_mod);
+            ecore_x_window_key_grab(win, bind->key,
+                                    mod, bind->any_mod);
+         }
+     }
+}
+
+void
+e_bindings_key_ungrab(E_Binding_Context ctxt, Ecore_X_Window win)
+{
+   Evas_List *l;
+   
+   for (l = key_bindings; l; l = l->next)
+     {
+       E_Binding_Key *bind;
+       
+       bind = l->data;
+       if (_e_bindings_context_match(bind->ctxt, ctxt))
+         {
+            int mod;
+            
+            mod = 0;
+            if (bind->mod & E_BINDING_MODIFIER_SHIFT) mod |= 
ECORE_X_MODIFIER_SHIFT;
+            if (bind->mod & E_BINDING_MODIFIER_CTRL) mod |= 
ECORE_X_MODIFIER_CTRL;
+            if (bind->mod & E_BINDING_MODIFIER_ALT) mod |= 
ECORE_X_MODIFIER_ALT;
+            if (bind->mod & E_BINDING_MODIFIER_WIN) mod |= 
ECORE_X_MODIFIER_WIN;
+            ecore_x_window_key_ungrab(win, bind->key,
+                                      mod, bind->any_mod);
+         }
+     }
+}
+
 int
 e_bindings_key_down_event_handle(E_Binding_Context ctxt, E_Object *obj, 
Ecore_X_Event_Key_Down *ev)
 {
    E_Binding_Modifier mod = 0;
    Evas_List *l;
-
+   
    if (ev->modifiers & ECORE_X_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT;
    if (ev->modifiers & ECORE_X_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL;
    if (ev->modifiers & ECORE_X_MODIFIER_ALT) mod |= E_BINDING_MODIFIER_ALT;
    if (ev->modifiers & ECORE_X_MODIFIER_WIN) mod |= E_BINDING_MODIFIER_WIN;
+   for (l = key_bindings; l; l = l->next)
+     {
+       E_Binding_Key *bind;
+       
+       bind = l->data;
+       if ((!strcmp(bind->key, ev->keyname)) &&
+           ((bind->any_mod) || (bind->mod == mod)))
+         {
+            if (_e_bindings_context_match(bind->ctxt, ctxt))
+              {
+                 E_Action *act;
+                 
+                 act = e_action_find(bind->action);
+                 if (act)
+                   {
+                      if (act->func.go_key)
+                        act->func.go_key(obj, bind->params, ev);
+                      else if (act->func.go)
+                        act->func.go(obj, bind->params);
+                      return 1;
+                   }
+                 return 0;
+              }
+         }
+     }
+   return 0;
+}
+
+int
+e_bindings_key_up_event_handle(E_Binding_Context ctxt, E_Object *obj, 
Ecore_X_Event_Key_Up *ev)
+{
+   E_Binding_Modifier mod = 0;
+   Evas_List *l;
    
+   if (ev->modifiers & ECORE_X_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT;
+   if (ev->modifiers & ECORE_X_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL;
+   if (ev->modifiers & ECORE_X_MODIFIER_ALT) mod |= E_BINDING_MODIFIER_ALT;
+   if (ev->modifiers & ECORE_X_MODIFIER_WIN) mod |= E_BINDING_MODIFIER_WIN;
+   for (l = key_bindings; l; l = l->next)
+     {
+       E_Binding_Key *bind;
+       
+       bind = l->data;
+       if ((!strcmp(bind->key, ev->keyname)) &&
+           ((bind->any_mod) || (bind->mod == mod)))
+         {
+            if (_e_bindings_context_match(bind->ctxt, ctxt))
+              {
+                 E_Action *act;
+                 
+                 act = e_action_find(bind->action);
+                 if (act)
+                   {
+                      if (act->func.end_key)
+                        act->func.end_key(obj, bind->params, ev);
+                      else if (act->func.end)
+                        act->func.end(obj, bind->params);
+                      return 1;
+                   }
+                 return 0;
+              }
+         }
+     }
    return 0;
 }
 
@@ -271,10 +447,19 @@
    free(bind);
 }
 
+static void
+_e_bindings_key_free(E_Binding_Key *bind)
+{
+   E_FREE(bind->key);
+   E_FREE(bind->action);
+   E_FREE(bind->params);
+   free(bind);
+}
+
 static int
 _e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt)
 {
-   if (bctxt) return 1;
+   if (bctxt == E_BINDING_CONTEXT_ANY) return 1;
    if (ctxt == E_BINDING_CONTEXT_UNKNOWN) return 0;
    if (bctxt == ctxt) return 1;
    return 0;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_bindings.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_bindings.h        29 Apr 2005 16:04:42 -0000      1.5
+++ e_bindings.h        29 Apr 2005 19:42:18 -0000      1.6
@@ -9,6 +9,7 @@
    E_BINDING_CONTEXT_UNKNOWN,
    E_BINDING_CONTEXT_BORDER,
    E_BINDING_CONTEXT_ZONE,
+   E_BINDING_CONTEXT_MANAGER,
    E_BINDING_CONTEXT_ANY
 } E_Binding_Context;
 
@@ -38,7 +39,12 @@
 EAPI int         e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, 
E_Object *obj, Ecore_X_Event_Mouse_Button_Down *ev);
 EAPI int         e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, 
E_Object *obj, Ecore_X_Event_Mouse_Button_Up *ev);
 
+EAPI void        e_bindings_key_add(E_Binding_Context ctxt, char *key, 
E_Binding_Modifier mod, int any_mod, char *action, char *params);
+EAPI void        e_bindings_key_del(E_Binding_Context ctxt, char *key, 
E_Binding_Modifier mod, int any_mod, char *action, char *params);
+EAPI void        e_bindings_key_grab(E_Binding_Context ctxt, Ecore_X_Window 
win);
+EAPI void        e_bindings_key_ungrab(E_Binding_Context ctxt, Ecore_X_Window 
win);
 EAPI int         e_bindings_key_down_event_handle(E_Binding_Context ctxt, 
E_Object *obj, Ecore_X_Event_Key_Down *ev);
+EAPI int         e_bindings_key_up_event_handle(E_Binding_Context ctxt, 
E_Object *obj, Ecore_X_Event_Key_Up *ev);
 
 EAPI int         e_bindings_signal_handle(E_Binding_Context ctxt, E_Object 
*obj, char *sig, char *src);
                                         
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -3 -r1.168 -r1.169
--- e_border.c  29 Apr 2005 16:04:42 -0000      1.168
+++ e_border.c  29 Apr 2005 19:42:18 -0000      1.169
@@ -108,6 +108,8 @@
 static void _e_border_reorder_after(E_Border *bd, E_Border *after);
 static void _e_border_reorder_before(E_Border *bd, E_Border *before);
 
+static int  _e_border_cb_focus_fix(void *data);
+
 /* local subsystem globals */
 static Evas_List *handlers = NULL;
 static Evas_List *borders = NULL;
@@ -116,6 +118,8 @@
 static E_Border    *resize = NULL;
 static E_Border    *move = NULL;
 
+static Ecore_Timer *focus_fix_timer = NULL;
+              
 int E_EVENT_BORDER_ADD = 0;
 int E_EVENT_BORDER_REMOVE = 0;
 int E_EVENT_BORDER_ZONE_SET = 0;
@@ -177,6 +181,8 @@
    E_EVENT_BORDER_LOWER = ecore_event_type_new();
    E_EVENT_BORDER_ICON_CHANGE = ecore_event_type_new();
 
+   focus_fix_timer = ecore_timer_add(0.5, _e_border_cb_focus_fix, NULL);
+   
    return 1;
 }
 
@@ -191,6 +197,8 @@
        handlers = evas_list_remove_list(handlers, handlers);
        ecore_event_handler_del(h);
      }
+   ecore_timer_del(focus_fix_timer);
+   focus_fix_timer = NULL;
    return 1;
 }
 
@@ -235,6 +243,7 @@
        e_canvas_del(bd->bg_ecore_evas);
        ecore_evas_free(bd->bg_ecore_evas);
        ecore_x_window_del(bd->client.shell_win);
+       e_bindings_mouse_ungrab(E_BINDING_CONTEXT_BORDER, bd->win);
        ecore_x_window_del(bd->win);
        free(bd);
        return NULL;
@@ -703,7 +712,7 @@
        else
          {
 //          printf("remove focus\n");
-            ecore_x_window_focus(bd->container->manager->win);
+            ecore_x_window_focus(bd->container->manager->root);
 //          e_hints_active_window_set(bd->container->manager, NULL);
          }
      }
@@ -1197,7 +1206,7 @@
 }
 
 void
-e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
+e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev)
 {
    if (bd->moving)
      {
@@ -1251,7 +1260,7 @@
 }
 
 void
-e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
+e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev)
 {
    if (bd->resize_mode != RESIZE_NONE)
      {
@@ -1276,6 +1285,21 @@
      }
 }
 
+void
+e_border_act_close_begin(E_Border *bd)
+{
+   if (bd->client.icccm.delete_request)
+     ecore_x_window_delete_request_send(bd->client.win);
+   else
+     {
+       ecore_x_kill(bd->client.win);
+       ecore_x_sync();
+//     ecore_x_window_del(bd->client.win);
+       e_border_hide(bd, 0);
+       e_object_del(E_OBJECT(bd));
+     }
+}
+
 /* local subsystem functions */
 static void
 _e_border_free(E_Border *bd)
@@ -1320,6 +1344,7 @@
    e_canvas_del(bd->bg_ecore_evas);
    ecore_evas_free(bd->bg_ecore_evas);
    ecore_x_window_del(bd->client.shell_win);
+   e_bindings_mouse_ungrab(E_BINDING_CONTEXT_BORDER, bd->win);
    ecore_x_window_del(bd->win);
 
    bd->container->clients = evas_list_remove(bd->container->clients, bd);
@@ -1818,6 +1843,7 @@
        if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR) return 1;
        else if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
        else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) return 1;
+       else if (e->detail == ECORE_X_EVENT_DETAIL_ANCESTOR) return 1;
      }
    else if (e->mode == ECORE_X_EVENT_MODE_UNGRAB)
      {
@@ -2109,16 +2135,7 @@
    printf("action %s\n", source);
    if (!strcmp(source, "close"))
      {
-       if (bd->client.icccm.delete_request)
-         ecore_x_window_delete_request_send(bd->client.win);
-       else
-         {
-            ecore_x_kill(bd->client.win);
-            ecore_x_sync();
-//          ecore_x_window_del(bd->client.win);
-            e_border_hide(bd, 0);
-            e_object_del(E_OBJECT(bd));
-         }
+       e_border_act_close_begin(bd);
      }
    else if (!strcmp(source, "shade_up") || !strcmp(source, "shade"))
      {
@@ -4127,3 +4144,31 @@
        borders = evas_list_prepend(borders, bd);
      }
 }
+
+static int
+_e_border_cb_focus_fix(void *data)
+{
+   if (!focused)
+     {
+/*     
+       Evas_List *managers;
+       E_Manager *man;
+       
+       managers = e_manager_list();
+       if (managers)
+         {
+            E_Container *con;
+            
+            man = managers->data;
+            con = e_manager_container_current_get(man);
+            if (con)
+              {
+                 printf("set foc to %x [%x]\n",
+                        man->focus_win, ecore_x_window_focus_get());
+                 ecore_x_window_focus(man->root);
+              }
+         }
+ */
+     }
+   return 1;
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -3 -r1.38 -r1.39
--- e_border.h  29 Apr 2005 16:04:42 -0000      1.38
+++ e_border.h  29 Apr 2005 19:42:18 -0000      1.39
@@ -348,11 +348,12 @@
 EAPI Evas_List *e_border_clients_get();
 
 EAPI void e_border_act_move_begin(E_Border *bd, 
Ecore_X_Event_Mouse_Button_Down *ev);
-EAPI void e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down 
*ev);
+EAPI void e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up 
*ev);
 EAPI void e_border_act_resize_begin(E_Border *bd, 
Ecore_X_Event_Mouse_Button_Down *ev);
-EAPI void e_border_act_resize_end(E_Border *bd, 
Ecore_X_Event_Mouse_Button_Down *ev);
+EAPI void e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up 
*ev);
 EAPI void e_border_act_menu_begin(E_Border *bd, 
Ecore_X_Event_Mouse_Button_Down *ev);
-
+EAPI void e_border_act_close_begin(E_Border *bd);
+  
 extern EAPI int E_EVENT_BORDER_RESIZE;
 extern EAPI int E_EVENT_BORDER_MOVE;
 extern EAPI int E_EVENT_BORDER_ADD;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_font.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_font.c    29 Apr 2005 10:48:07 -0000      1.7
+++ e_font.c    29 Apr 2005 19:42:18 -0000      1.8
@@ -37,6 +37,7 @@
    
    /* setup edje fallback list */
    blen = sizeof(buf) - 1;
+   buf[0] = 0;
    buf[blen] = 0;
    next = e_config->font_fallbacks;
    if (next)
@@ -49,33 +50,27 @@
             blen -= len;
          }
        next = evas_list_next(next);
-     }
-   else
-     {
-       edje_fontset_append_set(NULL);
-     }
-
-   while (next)
-     {
-       eff = evas_list_data(next);
-       len = 1;
-       if (len < blen)
-         {
-            strcat(buf, ",");
-            blen -= len;
-         }
-       len = strlen(eff->name);
-       if (len < blen)
+       while (next)
          {
-            strcat(buf, eff->name);
-            blen -= len;
+            eff = evas_list_data(next);
+            len = 1;
+            if (len < blen)
+              {
+                 strcat(buf, ",");
+                 blen -= len;
+              }
+            len = strlen(eff->name);
+            if (len < blen)
+              {
+                 strcat(buf, eff->name);
+                 blen -= len;
+              }
+            next = evas_list_next(next);
          }
-       next = evas_list_next(next);
-     }
-   if (buf[0] != 0)
-     {
        edje_fontset_append_set(buf);
      }
+   else
+     edje_fontset_append_set(NULL);
    
    /* setup edje text classes */
    for (next = e_config->font_defaults; next; next = next->next)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -3 -r1.70 -r1.71
--- e_main.c    29 Apr 2005 16:04:43 -0000      1.70
+++ e_main.c    29 Apr 2005 19:42:18 -0000      1.71
@@ -375,6 +375,8 @@
    /* an idle enterer to be called after all others */
    _e_main_idle_enterer_after = ecore_idle_enterer_add(_e_main_cb_idler_after, 
NULL);
 
+   e_managers_keys_grab();
+   
    ecore_x_ungrab();
    
    e_init_title_set(_("Enlightenment"));
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- e_manager.c 13 Apr 2005 06:03:50 -0000      1.19
+++ e_manager.c 29 Apr 2005 19:42:18 -0000      1.20
@@ -8,6 +8,7 @@
 
 static int _e_manager_cb_window_show_request(void *data, int ev_type, void 
*ev);
 static int _e_manager_cb_window_configure(void *data, int ev_type, void *ev);
+static int _e_manager_cb_key_down(void *data, int ev_type, void *ev);
 #if 0 /* use later - maybe */
 static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev);
 static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev);
@@ -85,10 +86,14 @@
      {
        man->win = man->root;
      }
+   man->focus_win = ecore_x_window_override_new(man->root, -1, -1, 1, 1);
+   ecore_x_window_show(man->focus_win);
    h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW_REQUEST, 
_e_manager_cb_window_show_request, man);
    if (h) man->handlers = evas_list_append(man->handlers, h);
    h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE, 
_e_manager_cb_window_configure, man);
    if (h) man->handlers = evas_list_append(man->handlers, h);
+   h = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _e_manager_cb_key_down, 
man);
+   if (h) man->handlers = evas_list_append(man->handlers, h);
    return man;
 }
 
@@ -361,6 +366,34 @@
    return NULL;
 }
 
+void
+e_managers_keys_grab(void)
+{
+   Evas_List *l;
+
+   for (l = managers; l; l = l->next)
+     {
+       E_Manager *man;
+       
+       man = l->data;
+       e_bindings_key_grab(E_BINDING_CONTEXT_ANY, man->root);
+     }
+}
+
+void
+e_managers_keys_ungrab(void)
+{
+   Evas_List *l;
+   
+   for (l = managers; l; l = l->next)
+     {
+       E_Manager *man;
+       
+       man = l->data;
+       e_bindings_key_ungrab(E_BINDING_CONTEXT_ANY, man->root);
+     }
+}
+
 /* local subsystem functions */
 static void
 _e_manager_free(E_Manager *man)
@@ -381,6 +414,7 @@
        l = l->next;
        e_object_del(E_OBJECT(tmp->data));
      }
+   ecore_x_window_del(man->focus_win);
    if (man->root != man->win)
      {
        ecore_x_window_del(man->win);
@@ -390,7 +424,7 @@
 }
 
 static int
-_e_manager_cb_window_show_request(void *data __UNUSED__, int ev_type 
__UNUSED__, void *ev)
+_e_manager_cb_window_show_request(void *data, int ev_type __UNUSED__, void *ev)
 {
    E_Manager *man;
    Ecore_X_Event_Window_Show_Request *e;
@@ -419,7 +453,7 @@
 }
 
 static int
-_e_manager_cb_window_configure(void *data __UNUSED__, int ev_type __UNUSED__, 
void *ev)
+_e_manager_cb_window_configure(void *data, int ev_type __UNUSED__, void *ev)
 {
    E_Manager *man;
    Ecore_X_Event_Window_Configure *e;
@@ -431,6 +465,23 @@
    return 1;
 }
 
+static int
+_e_manager_cb_key_down(void *data, int ev_type __UNUSED__, void *ev)
+{
+   E_Manager *man;
+   Ecore_X_Event_Key_Down *e;
+   
+   man = data;
+   e = ev;
+   printf("KEY %s [%x %x]\n",
+         e->keyname, e->win, e->event_win);
+   if ((e->event_win != man->root) &&
+       (e->event_win != man->focus_win)) return 1;
+   if (e_bindings_key_down_event_handle(E_BINDING_CONTEXT_MANAGER, 
E_OBJECT(man), ev))
+     return 0;
+   return 1;
+}
+
 #if 0 /* use later - maybe */
 static int _e_manager_cb_window_destroy(void *data, int ev_type, void 
*ev){return 1;}
 static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev){return 
1;}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_manager.h 13 Feb 2005 12:31:31 -0000      1.8
+++ e_manager.h 29 Apr 2005 19:42:18 -0000      1.9
@@ -19,6 +19,7 @@
    int                  x, y, w, h;
    char                 visible : 1;
    Ecore_X_Window       root;
+   Ecore_X_Window       focus_win;
    Evas_List           *handlers;
    Evas_List           *containers;
 };
@@ -40,5 +41,8 @@
 EAPI E_Container    *e_manager_container_current_get(E_Manager *man);
 EAPI E_Container    *e_manager_container_number_get(E_Manager *man, int num);
 
+EAPI void            e_managers_keys_grab(void);
+EAPI void            e_managers_keys_ungrab(void);
+    
 #endif
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -3 -r1.38 -r1.39
--- e_zone.c    27 Apr 2005 07:30:37 -0000      1.38
+++ e_zone.c    29 Apr 2005 19:42:18 -0000      1.39
@@ -493,6 +493,12 @@
    *y_count = zone->desk_y_count;
 }
 
+void
+e_zone_update_flip(E_Zone *zone)
+{
+   _e_zone_update_flip(zone);
+}
+
 static void
 _e_zone_event_zone_desk_count_set_free(void *data, void *ev)
 {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- e_zone.h    22 Apr 2005 14:33:34 -0000      1.19
+++ e_zone.h    29 Apr 2005 19:42:19 -0000      1.20
@@ -57,7 +57,8 @@
 EAPI void       e_zone_flip_coords_handle(E_Zone *zone, int x, int y);
 EAPI void       e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count);
 EAPI void       e_zone_desk_count_get(E_Zone *zone, int *x_count, int 
*y_count);
-
+EAPI void       e_zone_update_flip(E_Zone *zone);
+    
 extern EAPI int E_EVENT_ZONE_DESK_COUNT_SET;
 
 #endif




-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit 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