Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_embed.c ewl_embed.h ewl_table.c ewl_widget.c ewl_window.c Log Message: - fix compiler warning from ewl_table - the embed will now remember the curretnly active embed. When that changes it will send the deselect callback to the currently selected callback in the embed. this fixes the problem where the menu would only open once till you clicked on something else =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- ewl_embed.c 23 Oct 2005 23:02:09 -0000 1.15 +++ ewl_embed.c 28 Oct 2005 02:11:29 -0000 1.16 @@ -3,8 +3,9 @@ #include "ewl_macros.h" #include "ewl_private.h" -Ecore_List *ewl_embed_list = NULL; +Ecore_List *ewl_embed_list = NULL; static Evas_Smart *embedded_smart = NULL; +static Ewl_Embed *ewl_embed_active_embed = NULL; static void ewl_embed_smart_add_cb(Evas_Object *obj); static void ewl_embed_smart_del_cb(Evas_Object *obj); @@ -213,6 +214,63 @@ } /** + * @param embed: The embed to set the active value on + * @param act: The active value to set + * @return Returns no value. + */ +void +ewl_embed_active_set(Ewl_Embed *embed, unsigned int act) +{ + Ewl_Embed *e; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("embed", embed); + DCHECK_TYPE("embed", embed, "embed"); + + /* return if we're seting active and we're already the active embed */ + if (act && (embed == ewl_embed_active_embed)) + DRETURN(DLEVEL_STABLE); + + if (!act) + { + /* if you said false and we aren't actually the active embed + * just exit */ + if (embed != ewl_embed_active_embed) + DRETURN(DLEVEL_STABLE); + + e = embed; + ewl_embed_active_embed = NULL; + } + else + { + e = ewl_embed_active_embed; + ewl_embed_active_embed = embed; + } + + if (e && e->last.clicked) + { + ewl_object_state_remove(EWL_OBJECT(e->last.clicked), + EWL_FLAG_STATE_SELECTED); + ewl_callback_call(e->last.clicked, EWL_CALLBACK_DESELECT); + + e->last.clicked = NULL; + } + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @return Returns the currently active embed + */ +Ewl_Embed * +ewl_embed_active_embed_get(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + DRETURN_PTR(ewl_embed_active_embed, DLEVEL_STABLE); +} + +/** * @param embed: the embed to retrieve maximum layer * @return Returns the layer used for obtaining evas events. * @brief Retrieve the layer being used for receiving evas events. @@ -393,6 +451,8 @@ DCHECK_PARAM_PTR("embed", embed); DCHECK_TYPE("embed", embed, "embed"); + ewl_embed_active_set(embed, TRUE); + widget = ewl_container_child_at_recursive_get(EWL_CONTAINER(embed), x, y); if (!widget) @@ -481,6 +541,8 @@ DCHECK_PARAM_PTR("embed", embed); DCHECK_TYPE("embed", embed, "embed"); + ewl_embed_active_set(embed, TRUE); + ev.modifiers = mods; ev.x = x; ev.y = y; @@ -525,6 +587,8 @@ DCHECK_PARAM_PTR("embed", embed); DCHECK_TYPE("embed", embed, "embed"); + ewl_embed_active_set(embed, TRUE); + ev.modifiers = mods; ev.x = x; ev.y = y; @@ -618,6 +682,8 @@ DCHECK_PARAM_PTR("embed", embed); DCHECK_TYPE("embed", embed, "embed"); + ewl_embed_active_set(embed, TRUE); + ev.modifiers = mods; ev.x = x; ev.y = y; @@ -651,6 +717,8 @@ DCHECK_PARAM_PTR("embed", embed); DCHECK_TYPE("embed", embed, "embed"); + ewl_embed_active_set(embed, TRUE); + ev.modifiers = mods; ev.x = x; ev.y = y; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_embed.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ewl_embed.h 23 Oct 2005 23:02:09 -0000 1.5 +++ ewl_embed.h 28 Oct 2005 02:11:29 -0000 1.6 @@ -77,6 +77,9 @@ void ewl_embed_focus_set(Ewl_Embed *embed, int f); int ewl_embed_focus_get(Ewl_Embed *embed); +void ewl_embed_active_set(Ewl_Embed *embed, unsigned int act); +Ewl_Embed *ewl_embed_active_embed_get(void); + int ewl_embed_max_layer_get(Ewl_Embed *embed); void ewl_embed_max_layer_set(Ewl_Embed *embed, int layer); void ewl_embed_key_down_feed(Ewl_Embed *embed, char *keyname, =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_table.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- ewl_table.c 25 Oct 2005 05:34:20 -0000 1.8 +++ ewl_table.c 28 Oct 2005 02:11:29 -0000 1.9 @@ -387,8 +387,8 @@ Ewl_Grid_Child *gc; DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("t", t); - DCHECK_TYPE("t", t, "table"); + DCHECK_PARAM_PTR_RET("t", t, strdup("")); + DCHECK_TYPE_RET("t", t, "table", strdup("")); children = EWL_CONTAINER(t->grid)->children; ecore_list_goto_first(children); @@ -405,8 +405,6 @@ EWL_CONTAINER(child)->children); DRETURN_PTR(ewl_text_text_get(tw), DLEVEL_STABLE); - - break; } } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_widget.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -3 -r1.31 -r1.32 --- ewl_widget.c 22 Oct 2005 16:11:04 -0000 1.31 +++ ewl_widget.c 28 Oct 2005 02:11:29 -0000 1.32 @@ -614,7 +614,7 @@ * the state parameter. */ void -ewl_widget_state_set(Ewl_Widget * w, char *state) +ewl_widget_state_set(Ewl_Widget *w, char *state) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -1348,6 +1348,7 @@ DCHECK_TYPE("w", w, "widget"); emb = ewl_embed_widget_find(w); + ewl_embed_active_set(emb, TRUE); ewl_embed_focused_widget_set(emb, w); DLEAVE_FUNCTION(DLEVEL_STABLE); @@ -1365,7 +1366,7 @@ DENTER_FUNCTION(DLEVEL_STABLE); - emb = ewl_embed_widget_find(w); + emb = ewl_embed_active_embed_get(); if (emb) w = ewl_embed_focused_widget_get(emb); DRETURN_PTR(w, DLEVEL_STABLE); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_window.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- ewl_window.c 27 Oct 2005 05:32:54 -0000 1.19 +++ ewl_window.c 28 Oct 2005 02:11:29 -0000 1.20 @@ -897,10 +897,9 @@ DCHECK_TYPE("w", w, "widget"); win = EWL_WINDOW(w); - if (win->flags & EWL_WINDOW_GRAB_KEYBOARD) { + if (win->flags & EWL_WINDOW_GRAB_KEYBOARD) ecore_x_keyboard_grab((Ecore_X_Window)win->window); - printf("Grabbed keyboard\n"); - } + if (win->flags & EWL_WINDOW_GRAB_POINTER) { int grabval; @@ -913,8 +912,6 @@ printf("GrabFrozen\n"); else if (grabval == GrabInvalidTime) printf("GrabInvalidTime\n"); - else - printf("Grabbed pointer\n"); } DLEAVE_FUNCTION(DLEVEL_STABLE); @@ -936,14 +933,11 @@ if (strstr(EWL_WINDOW(widget)->render, "x11")) { ecore_x_window_hide((Ecore_X_Window)EWL_EMBED(win)->evas_window); ecore_x_window_hide((Ecore_X_Window)win->window); - if (win->flags & EWL_WINDOW_GRAB_KEYBOARD) { + if (win->flags & EWL_WINDOW_GRAB_KEYBOARD) ecore_x_keyboard_ungrab(); - printf("Ungrabbed keyboard\n"); - } - if (win->flags & EWL_WINDOW_GRAB_POINTER) { + + if (win->flags & EWL_WINDOW_GRAB_POINTER) ecore_x_pointer_ungrab(); - printf("Ungrabbed pointer\n"); - } } #endif ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today * Register for a JBoss Training Course Free Certification Exam for All Training Attendees Through End of 2005 Visit http://www.jboss.com/services/certification for more information _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs