Enlightenment CVS committal

Author  : rbdpngn
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src


Modified Files:
        ewl_embed.c ewl_embed.h ewl_widget.c 


Log Message:
Some fixes for event dispatching for the embed.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_embed.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- ewl_embed.c 28 Apr 2004 18:04:44 -0000      1.33
+++ ewl_embed.c 6 May 2004 15:43:10 -0000       1.34
@@ -99,8 +99,10 @@
                             ewl_embed_unrealize_cb, NULL);
        ewl_callback_prepend(EWL_WIDGET(w), EWL_CALLBACK_DESTROY,
                             ewl_embed_destroy_cb, NULL);
+       ewl_callback_prepend(EWL_WIDGET(w), EWL_CALLBACK_CONFIGURE,
+                            ewl_embed_configure_cb, NULL);
 
-       LAYER(w) = -1000;
+       w->max_layer = LAYER(w) = -1000;
 
        ecore_list_append(ewl_embed_list, w);
 
@@ -171,6 +173,23 @@
        DRETURN_PTR(emb->smart, DLEVEL_STABLE);
 }
 
+int ewl_embed_get_max_layer(Ewl_Embed *embed)
+{
+       int layer;
+       DENTER_FUNCTION(DLEVEL_STABLE);
+
+       layer = embed->max_layer;
+
+       DRETURN_INT(layer, DLEVEL_STABLE);
+}
+
+void ewl_embed_set_max_layer(Ewl_Embed *embed, int layer)
+{
+       if (REALIZED(embed))
+               evas_object_layer_set(embed->ev_clip, layer);
+       embed->max_layer = layer;
+}
+
 /**
  * @param embed: the embed where the key event is to occur
  * @param keyname: the key press to trigger
@@ -661,39 +680,49 @@
        Ewl_Embed *emb = EWL_EMBED(w);
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       if (w->fx_clip_box) {
+       emb->ev_clip = evas_object_rectangle_add(emb->evas);
+
+       if (w->fx_clip_box)
                evas_object_clip_set(emb->smart, w->fx_clip_box);
-               evas_object_repeat_events_set(w->fx_clip_box, FALSE);
+
+       if (emb->ev_clip) {
+               /*
+               if (w->fx_clip_box)
+                       evas_object_clip_set(w->fx_clip_box, emb->ev_clip);
+                       */
+               evas_object_color_set(emb->ev_clip, 0, 0, 0, 0);
+               evas_object_show(emb->ev_clip);
+               evas_object_repeat_events_set(emb->ev_clip, FALSE);
 
                /*
                 * Catch mouse events processed through the evas
                 */
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_IN,
                                ewl_embed_evas_mouse_in_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_OUT,
                                ewl_embed_evas_mouse_out_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_DOWN,
                                ewl_embed_evas_mouse_down_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_UP,
                                ewl_embed_evas_mouse_up_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_MOVE,
                                ewl_embed_evas_mouse_move_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_MOUSE_WHEEL,
                                ewl_embed_evas_mouse_wheel_cb, emb);
 
                /*
                 * Catch key events processed through the evas
                 */
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_KEY_DOWN,
                                ewl_embed_evas_key_down_cb, emb);
-               evas_object_event_callback_add(w->fx_clip_box,
+               evas_object_event_callback_add(emb->ev_clip,
                                EVAS_CALLBACK_KEY_UP, ewl_embed_evas_key_up_cb,
                                emb);
        }
@@ -714,6 +743,23 @@
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
+void ewl_embed_configure_cb(Ewl_Widget * w, void *ev_data, void *user_data)
+{
+       Ewl_Embed      *emb = EWL_EMBED(w);
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("w", w);
+
+       if (emb->ev_clip) {
+               evas_object_move(emb->ev_clip, (Evas_Coord)(CURRENT_X(w)),
+                                (Evas_Coord)(CURRENT_Y(w)));
+               evas_object_resize(emb->ev_clip, (Evas_Coord)(CURRENT_W(w)),
+                                  (Evas_Coord)(CURRENT_H(w)));
+       }
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
 void ewl_embed_destroy_cb(Ewl_Widget * w, void *ev_data, void *user_data)
 {
        Ewl_Embed      *emb;
@@ -923,7 +969,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_mouse_out(embed, ev->canvas.x, ev->canvas.y,
                                 ewl_ev_get_modifiers());
 
@@ -939,7 +985,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_mouse_down(embed, ev->button, 1, ev->canvas.x,
                                  ev->canvas.y, ewl_ev_get_modifiers());
 
@@ -955,7 +1001,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_mouse_up(embed, ev->button, ev->canvas.x,
                                  ev->canvas.y, ewl_ev_get_modifiers());
 
@@ -971,7 +1017,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_mouse_move(embed, ev->canvas.x, ev->canvas.y,
                                  ewl_ev_get_modifiers());
 
@@ -996,7 +1042,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_key_down(embed, ev->keyname, ewl_ev_get_modifiers());
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -1011,7 +1057,7 @@
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       embed = evas_object_smart_data_get(obj);
+       embed = data;
        ewl_embed_feed_key_up(embed, ev->keyname, ewl_ev_get_modifiers());
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_embed.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- ewl_embed.h 28 Apr 2004 18:05:01 -0000      1.21
+++ ewl_embed.h 6 May 2004 15:43:11 -0000       1.22
@@ -39,13 +39,18 @@
        void           *evas_window; /**< The window holding the evas. */
 
        Evas_Object    *smart; /**< Object to manipulate Ewl_Embed from evas */
-       Ecore_List       *tab_order; /**< Order of widgets to send focus on tab */
+       Evas_Object    *ev_clip; /**< Clip box to receive evas events */
+       Ecore_List     *tab_order; /**< Order of widgets to send focus on tab */
+
+       int             max_layer; /**< The maximum widget layer used */
 };
 
 Ewl_Widget     *ewl_embed_new(void);
 int             ewl_embed_init(Ewl_Embed * win);
 Evas_Object    *ewl_embed_set_evas(Ewl_Embed *emb, Evas *evas,
                                   void *evas_window);
+int             ewl_embed_get_max_layer(Ewl_Embed *embed);
+void            ewl_embed_set_max_layer(Ewl_Embed *embed, int layer);
 void            ewl_embed_feed_key_down(Ewl_Embed *embed, char *keyname,
                                        unsigned int modifiers);
 void            ewl_embed_feed_key_up(Ewl_Embed *embed, char *keyname,
@@ -72,6 +77,7 @@
  */
 void ewl_embed_realize_cb(Ewl_Widget *w, void *ev_data, void *user_data);
 void ewl_embed_unrealize_cb(Ewl_Widget *w, void *ev_data, void *user_data);
+void ewl_embed_configure_cb(Ewl_Widget * w, void *ev_data, void *user_data);
 void ewl_embed_destroy_cb(Ewl_Widget *w, void *ev_data, void *user_data);
 
 /**
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_widget.c,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -3 -r1.112 -r1.113
--- ewl_widget.c        2 May 2004 19:44:10 -0000       1.112
+++ ewl_widget.c        6 May 2004 15:43:11 -0000       1.113
@@ -1009,9 +1009,13 @@
                evas_object_pass_events_set(w->fx_clip_box, TRUE);
        }
 
-       if (w->fx_clip_box)
-               evas_object_layer_set(w->fx_clip_box,
-                               ewl_widget_get_layer_sum(w));
+       if (w->fx_clip_box) {
+               int sum;
+               sum = ewl_widget_get_layer_sum(w);
+               if (sum > ewl_embed_get_max_layer(emb))
+                       ewl_embed_set_max_layer(emb, sum);
+               evas_object_layer_set(w->fx_clip_box, sum);
+       }
 
        pc = EWL_CONTAINER(w->parent);
 




-------------------------------------------------------
This SF.Net email is sponsored by Sleepycat Software
Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to 
deliver higher performing products faster, at low TCO.
http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to