Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_zone.c 


Log Message:
Delete edge input windows when we free the zone.
Handle mouse clicks inside the edge input windows so that menus & such can
still be shown if a user clicks the mouse down while on top of one of the
edge windows.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -3 -r1.129 -r1.130
--- e_zone.c    14 Dec 2007 05:57:15 -0000      1.129
+++ e_zone.c    27 Dec 2007 03:42:04 -0000      1.130
@@ -14,6 +14,7 @@
 static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev);
 static int  _e_zone_cb_mouse_in(void *data, int type, void *event);
 static int  _e_zone_cb_mouse_out(void *data, int type, void *event);
+static int  _e_zone_cb_mouse_down(void *data, int type, void *event);
 static int  _e_zone_cb_timer(void *data);
 static int  _e_zone_cb_desk_show(void *data, int type, void *event);
 static void _e_zone_update_flip(E_Zone *zone);
@@ -95,9 +96,11 @@
                                     
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT,
                                                             
_e_zone_cb_mouse_out, zone));
    zone->handlers = evas_list_append(zone->handlers,
+                                    
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_DOWN,
+                                                            
_e_zone_cb_mouse_down, zone));
+   zone->handlers = evas_list_append(zone->handlers,
                                     ecore_event_handler_add(E_EVENT_DESK_SHOW,
                                                             
_e_zone_cb_desk_show, zone));
-   
 
    snprintf(name, sizeof(name), "Zone %d", zone->num);
    zone->name = evas_stringshare_add(name);
@@ -657,10 +660,22 @@
    Evas_List *l;
    int x, y;
 
+   /* Delete the edge windows if they exist */
+   if (zone->edge.top) ecore_x_window_del(zone->edge.top);
+   if (zone->edge.bottom) ecore_x_window_del(zone->edge.bottom);
+   if (zone->edge.left) ecore_x_window_del(zone->edge.left);
+   if (zone->edge.right) ecore_x_window_del(zone->edge.right);
+
    /* Delete the object event callbacks */
-   evas_object_event_callback_del(zone->bg_event_object, 
EVAS_CALLBACK_MOUSE_DOWN, _e_zone_cb_bg_mouse_down);
-   evas_object_event_callback_del(zone->bg_event_object, 
EVAS_CALLBACK_MOUSE_UP, _e_zone_cb_bg_mouse_up);
-   evas_object_event_callback_del(zone->bg_event_object, 
EVAS_CALLBACK_MOUSE_MOVE, _e_zone_cb_bg_mouse_move);
+   evas_object_event_callback_del(zone->bg_event_object, 
+                                 EVAS_CALLBACK_MOUSE_DOWN, 
+                                 _e_zone_cb_bg_mouse_down);
+   evas_object_event_callback_del(zone->bg_event_object, 
+                                 EVAS_CALLBACK_MOUSE_UP, 
+                                 _e_zone_cb_bg_mouse_up);
+   evas_object_event_callback_del(zone->bg_event_object, 
+                                 EVAS_CALLBACK_MOUSE_MOVE, 
+                                 _e_zone_cb_bg_mouse_move);
 
    if (zone->black_ecore_evas)
      {
@@ -895,6 +910,35 @@
        else if (ev->win == zone->edge.left) zev->edge = E_ZONE_EDGE_LEFT;
        else if (ev->win == zone->edge.right) zev->edge = E_ZONE_EDGE_RIGHT;
        ecore_event_add(E_EVENT_ZONE_EDGE_OUT, zev, NULL, NULL);
+     }
+   return 1;
+}
+
+static int 
+_e_zone_cb_mouse_down(void *data, int type, void *event) 
+{
+   Ecore_X_Event_Mouse_Button_Down *ev;
+   E_Event_Zone_Edge_Out *zev;
+   E_Zone *zone;
+
+   ev = event;
+   zone = data;
+   if ((ev->win == zone->edge.top) ||
+       (ev->win == zone->edge.bottom) ||
+       (ev->win == zone->edge.left) ||
+       (ev->win == zone->edge.right))
+     {
+       zone->cur_mouse_action =
+         e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_ZONE,
+                                            E_OBJECT(zone), ev);
+       if (zone->cur_mouse_action)
+         {
+            if ((!zone->cur_mouse_action->func.end_mouse) &&
+                (!zone->cur_mouse_action->func.end))
+              zone->cur_mouse_action = NULL;
+            if (zone->cur_mouse_action)
+              e_object_ref(E_OBJECT(zone->cur_mouse_action));
+         }
      }
    return 1;
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to