From: Enlightenment C. <no...@cv...> - 2006-05-19 04:31:43
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_box.c Log Message: Found a case where this optimization causes incorrect behavior. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_box.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- ewl_box.c 11 May 2006 04:01:20 -0000 1.27 +++ ewl_box.c 19 May 2006 04:30:16 -0000 1.28 @@ -559,7 +559,7 @@ */ policy = ewl_object_fill_policy_get(child); policy &= ewl_box_info->f_policy; - if (policy && change == initial) + if (policy || change == initial) ecore_dlist_append(ewl_box_spread, child); } } |
From: Enlightenment C. <no...@cv...> - 2006-05-25 04:51:53
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl Modified Files: TODO Log Message: Add a menu TODO. =================================================================== RCS file: /cvs/e/e17/libs/ewl/TODO,v retrieving revision 1.92 retrieving revision 1.93 diff -u -3 -r1.92 -r1.93 --- TODO 23 May 2006 14:51:47 -0000 1.92 +++ TODO 25 May 2006 04:50:19 -0000 1.93 @@ -152,4 +152,5 @@ - [Ewl_Test] More Tutorials in the src/bin/test/*.c files +- Make the popup_destroy_cb's common between the imenu and menu |
From: Enlightenment C. <no...@cv...> - 2006-06-14 15:47:07
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_misc.c Log Message: Temporary change to engine name fetch. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_misc.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -3 -r1.57 -r1.58 --- ewl_misc.c 9 Jun 2006 19:33:14 -0000 1.57 +++ ewl_misc.c 14 Jun 2006 15:47:01 -0000 1.58 @@ -481,10 +481,16 @@ DENTER_FUNCTION(DLEVEL_STABLE); + /* XXX when the engine init stuff is fixed up this should move below + * the if statement. Put it here for now to make sure the engines + * always get init'd */ + engines = ewl_engine_names_get(); + if (!argc || !argv) + { + ecore_list_destroy(engines); DRETURN(DLEVEL_STABLE); - - engines = ewl_engine_names_get(); + } i = 0; while (i < *argc) { |
From: Enlightenment C. <no...@cv...> - 2006-06-20 23:49:24
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_misc.c ewl_embed.c ewl_embed.h Log Message: Abstract evas freeze/thaw into the embed. This may be a bug in evas related to repeated calls to evas_event_freeze followed by an equal number of evas_event_thaw. If only a single freeze/thaw combination is used, objects are correctly positioned after redraw. When multiple freeze/thaws are used, the UI appears to stop responding, but it is actually not updating the interface on render. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_misc.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -3 -r1.58 -r1.59 --- ewl_misc.c 14 Jun 2006 15:47:01 -0000 1.58 +++ ewl_misc.c 21 Jun 2006 04:49:22 -0000 1.59 @@ -363,8 +363,7 @@ */ ecore_list_goto_first(ewl_embed_list); while ((emb = ecore_list_next(ewl_embed_list)) != NULL) { - if (REALIZED(emb) && emb->evas) - evas_event_freeze(emb->evas); + ewl_embed_freeze(emb); } /* @@ -424,7 +423,7 @@ if (REALIZED(emb) && emb->evas) { double render_time = 0; - evas_event_thaw(emb->evas); + ewl_embed_thaw(emb); if (ewl_config.evas.render_debug) { printf("Entering render\n"); render_time = ecore_time_get(); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -3 -r1.70 -r1.71 --- ewl_embed.c 20 Jun 2006 00:55:17 -0000 1.70 +++ ewl_embed.c 21 Jun 2006 04:49:22 -0000 1.71 @@ -1461,17 +1461,17 @@ void ewl_embed_position_get(Ewl_Embed *e, int *x, int *y) { - int sx, sy; + int sx, sy; - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("e", e); - DCHECK_TYPE("e", e, EWL_EMBED_TYPE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("e", e); + DCHECK_TYPE("e", e, EWL_EMBED_TYPE); - evas_object_geometry_get(e->smart, &sx, &sy, NULL, NULL); - if (x) *x = e->x + sx; - if (y) *y = e->y + sy; + evas_object_geometry_get(e->smart, &sx, &sy, NULL, NULL); + if (x) *x = e->x + sx; + if (y) *y = e->y + sy; - DLEAVE_FUNCTION(DLEVEL_STABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** @@ -1486,14 +1486,50 @@ void ewl_embed_window_position_get(Ewl_Embed *e, int *x, int *y) { - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("e", e); - DCHECK_TYPE("e", e, EWL_EMBED_TYPE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("e", e); + DCHECK_TYPE("e", e, EWL_EMBED_TYPE); - if (x) *x = e->x; - if (y) *y = e->y; + if (x) *x = e->x; + if (y) *y = e->y; - DLEAVE_FUNCTION(DLEVEL_STABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param e: the embed to freeze redraws and canvas events + * @return Returns no value. + * @brief Freeze redraws and events on the specified embed. + */ +void +ewl_embed_freeze(Ewl_Embed *e) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("e", e); + DCHECK_TYPE("e", e, EWL_EMBED_TYPE); + + if (REALIZED(e) && e->evas && evas_event_freeze_get(e->evas) < 1) + evas_event_freeze(e->evas); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param e: the embed to thaw redraws and canvas events + * @return Returns no value. + * @brief Thaw redraws and events on the specified embed. + */ +void +ewl_embed_thaw(Ewl_Embed *e) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("e", e); + DCHECK_TYPE("e", e, EWL_EMBED_TYPE); + + if (REALIZED(e) && e->evas && evas_event_freeze_get(e->evas) > 0) + evas_event_thaw(e->evas); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- ewl_embed.h 2 Jun 2006 21:56:51 -0000 1.19 +++ ewl_embed.h 21 Jun 2006 04:49:22 -0000 1.20 @@ -134,6 +134,8 @@ void ewl_embed_mouse_cursor_set(Ewl_Widget *w); void ewl_embed_position_get(Ewl_Embed *e, int *x, int *y); void ewl_embed_window_position_get(Ewl_Embed *e, int *x, int *y); +void ewl_embed_freeze(Ewl_Embed *e); +void ewl_embed_thaw(Ewl_Embed *e); /* * Internally used callbacks, override at your own risk. |
From: Enlightenment C. <no...@cv...> - 2006-06-25 22:09:08
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/data/themes Modified Files: ewl_embed_test.edc Log Message: Add a title that slides with the moving glass to demonstrate moving widgets within an embed. =================================================================== RCS file: /cvs/e/e17/libs/ewl/data/themes/ewl_embed_test.edc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_embed_test.edc 22 Jun 2006 00:25:44 -0000 1.3 +++ ewl_embed_test.edc 26 Jun 2006 03:09:07 -0000 1.4 @@ -133,6 +133,19 @@ rel2.to: "bg"; } } + part { + name: "swallow3"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel1.offset: 30 10; + rel1.to: "glass_left"; + rel2.relative: 1.0 1.0; + rel2.offset: -4 -10; + rel2.to: "glass_left"; + } + } } programs { program { |
From: Enlightenment C. <no...@cv...> - 2006-06-25 22:09:38
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/bin Modified Files: ewl_embed_test.c Log Message: Add a title that slides with the moving glass to demonstrate moving widgets within an embed. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/bin/ewl_embed_test.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- ewl_embed_test.c 22 Jun 2006 00:25:44 -0000 1.13 +++ ewl_embed_test.c 26 Jun 2006 03:09:07 -0000 1.14 @@ -214,6 +214,30 @@ ewl_widget_disable(button[1]); + /* + * Setup the third ewl embed + */ + emb = ewl_embed_new(); + ewl_object_fill_policy_set(EWL_OBJECT(emb), EWL_FLAG_FILL_ALL); + eo = ewl_embed_evas_set(EWL_EMBED(emb), evas, + (void *) ecore_evas_software_x11_window_get(ee)); + ewl_embed_focus_set(EWL_EMBED(emb), TRUE); + ewl_widget_show(emb); + + /* + * swallow it into the edje + */ + edje_object_part_geometry_get(edje, "swallow3", &x, &y, &w, &h); + evas_object_move(eo, x, y); + evas_object_resize(eo, w, h); + edje_object_part_swallow(edje, "swallow3", eo); + evas_object_show(eo); + + wg = ewl_label_new(); + ewl_label_text_set(EWL_LABEL(wg), "Open the glass"); + ewl_container_child_append(EWL_CONTAINER(emb), wg); + ewl_widget_show(wg); + ewl_main(); return 0; |
From: Enlightenment C. <no...@cv...> - 2006-06-29 19:33:14
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/data/themes/e17/bits Modified Files: border-groups.edc Log Message: Use a label for the border text rather than the heavier text widget. =================================================================== RCS file: /cvs/e/e17/libs/ewl/data/themes/e17/bits/border-groups.edc,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- border-groups.edc 10 Nov 2005 03:06:07 -0000 1.1 +++ border-groups.edc 30 Jun 2006 00:33:09 -0000 1.2 @@ -43,8 +43,6 @@ item: "inset/left" "5"; item: "inset/right" "5"; - item: "inset/top" "3"; - item: "inset/bottom" "3"; } parts { @@ -71,6 +69,34 @@ smooth: 0; } } + } + + part { + name, "text"; + type, TEXT; + effect, SOFT_SHADOW; + + description { + state, "default" 0.0; + align, 0.5 0.5; + rel1 { + relative, 0.0 0.0; + offset, 0 0; + } + rel2 { + relative, 1.0 1.0; + offset, -1 -1; + } + color, 0 0 0 255; + color3, 255 255 255 32; + text { + text, "text"; + font, "Vera"; + size, 10; + min, 1 1; + align, 0.5 1.0; + } + } } part { |
From: Enlightenment C. <no...@cv...> - 2006-06-29 19:33:50
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_border.c Log Message: Use a label for the border text rather than the heavier text widget. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_border.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_border.c 15 Feb 2006 16:52:18 -0000 1.12 +++ ewl_border.c 30 Jun 2006 00:33:09 -0000 1.13 @@ -48,7 +48,7 @@ ewl_widget_appearance_set(EWL_WIDGET(b), EWL_BORDER_TYPE); ewl_widget_inherit(EWL_WIDGET(b), EWL_BORDER_TYPE); - b->label = ewl_text_new(); + b->label = ewl_label_new(); ewl_widget_internal_set(b->label, TRUE); ewl_container_child_append(EWL_CONTAINER(b), b->label); ewl_widget_show(b->label); @@ -80,7 +80,7 @@ DCHECK_PARAM_PTR("b", b); DCHECK_TYPE("b", b, EWL_BORDER_TYPE); - ewl_text_text_set(EWL_TEXT(b->label), t); + ewl_label_text_set(EWL_LABEL(b->label), t); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -97,7 +97,7 @@ DCHECK_PARAM_PTR_RET("b", b, NULL); DCHECK_TYPE_RET("b", b, EWL_BORDER_TYPE, NULL); - DRETURN_PTR(ewl_text_text_get(EWL_TEXT(b->label)), DLEVEL_STABLE); + DRETURN_PTR(ewl_label_text_get(EWL_LABEL(b->label)), DLEVEL_STABLE); } /** |
From: Enlightenment C. <no...@cv...> - 2006-06-29 19:33:50
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/data/themes Modified Files: e17.edc Log Message: Use a label for the border text rather than the heavier text widget. =================================================================== RCS file: /cvs/e/e17/libs/ewl/data/themes/e17.edc,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- e17.edc 2 Jun 2006 17:03:57 -0000 1.40 +++ e17.edc 30 Jun 2006 00:33:09 -0000 1.41 @@ -130,7 +130,7 @@ item, "/hseeker/hbutton/group" "hscrollbar_drag"; item, "/border/group" "border"; - item, "/border/text/group" "border/label"; + item, "/border/label/group" "border/label"; item, "/imenu/group" "menu"; item, "/menu/group" "menu"; |
From: Enlightenment C. <no...@cv...> - 2006-07-07 15:27:42
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_widget.c Log Message: Improved debugging output. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_widget.c,v retrieving revision 1.88 retrieving revision 1.89 diff -u -3 -r1.88 -r1.89 --- ewl_widget.c 10 Jun 2006 04:57:03 -0000 1.88 +++ ewl_widget.c 7 Jul 2006 20:27:38 -0000 1.89 @@ -1405,7 +1405,7 @@ DCHECK_PARAM_PTR("w", w); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - printf("%p:%s geometry (%d, %d) %d x %d, %s, %s, %s, %s\n", + printf("%p:%s geometry (%d, %d) %d x %d\n\t%s, %s, %s, %s\n", w, w->appearance, ewl_object_current_x_get(EWL_OBJECT(w)), ewl_object_current_y_get(EWL_OBJECT(w)), @@ -1427,7 +1427,6 @@ ewl_widget_print_verbose(Ewl_Widget *w) { unsigned int flags; - unsigned int matched = 0; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -1435,65 +1434,67 @@ flags = ewl_object_fill_policy_get(EWL_OBJECT(w)); ewl_widget_print(w); - printf("\tPreferred size: %dx%d\n", + printf("\tPreferred size: %dx%d", ewl_object_preferred_w_get(EWL_OBJECT(w)), ewl_object_preferred_h_get(EWL_OBJECT(w))); - printf("\tMinimum size: %dx%d\n", + printf("\tMinimum size: %dx%d", ewl_object_minimum_w_get(EWL_OBJECT(w)), ewl_object_minimum_h_get(EWL_OBJECT(w))); - printf("\tFill policy:\n"); + printf("\tMaximum size: %dx%d\n", + ewl_object_maximum_w_get(EWL_OBJECT(w)), + ewl_object_maximum_h_get(EWL_OBJECT(w))); + printf("\tInsets: %d, %d, %d, %d\n", + ewl_object_insets_left_get(EWL_OBJECT(w)), + ewl_object_insets_right_get(EWL_OBJECT(w)), + ewl_object_insets_top_get(EWL_OBJECT(w)), + ewl_object_insets_bottom_get(EWL_OBJECT(w))); + printf("\tPadding: %d, %d, %d, %d\n", + ewl_object_padding_left_get(EWL_OBJECT(w)), + ewl_object_padding_right_get(EWL_OBJECT(w)), + ewl_object_padding_top_get(EWL_OBJECT(w)), + ewl_object_padding_bottom_get(EWL_OBJECT(w))); + printf("\tFill policy:"); - if (flags & EWL_FLAG_FILL_HSHRINK) { - printf("\t\tHSHRINK\n"); - matched = 1; - } - if (flags & EWL_FLAG_FILL_HFILL) { - printf("\t\tHFILL\n"); - matched = 1; + if (!flags) { + printf(" NONE"); } + else { + if (flags & EWL_FLAG_FILL_HSHRINK) + printf(" HSHRINK"); - if (flags & EWL_FLAG_FILL_VSHRINK) { - printf("\t\tVSHRINK\n"); - matched = 1; - } + if (flags & EWL_FLAG_FILL_HFILL) + printf(" HFILL"); - if (flags & EWL_FLAG_FILL_VFILL) { - printf("\t\tVFILL\n"); - matched = 1; - } + if (flags & EWL_FLAG_FILL_VSHRINK) + printf(" VSHRINK"); - if (!matched) { - printf("\t\tNONE\n"); + if (flags & EWL_FLAG_FILL_VFILL) + printf(" VFILL"); } - - matched = 0; + printf("\n"); flags = ewl_object_alignment_get(EWL_OBJECT(w)); - if (flags & EWL_FLAG_ALIGN_LEFT) { - printf("\t\tLEFT\n"); - matched = 1; - } + printf("\tAlignment:"); - if (flags & EWL_FLAG_ALIGN_RIGHT) { - printf("\t\tRIGHT\n"); - matched = 1; + if (!flags) { + printf(" CENTER"); } + else { + if (flags & EWL_FLAG_ALIGN_LEFT) + printf(" LEFT"); - if (flags & EWL_FLAG_ALIGN_TOP) { - printf("\t\tTOP\n"); - matched = 1; - } + if (flags & EWL_FLAG_ALIGN_RIGHT) + printf(" RIGHT"); - if (flags & EWL_FLAG_ALIGN_BOTTOM) { - printf("\t\tTOP\n"); - matched = 1; - } + if (flags & EWL_FLAG_ALIGN_TOP) + printf(" TOP"); - if (!matched) { - printf("\t\tCENTER\n"); + if (flags & EWL_FLAG_ALIGN_BOTTOM) + printf(" BOTTOM"); } + printf("\n"); DLEAVE_FUNCTION(DLEVEL_STABLE); @@ -1896,9 +1897,9 @@ emb = ewl_embed_widget_find(w); smart_parent = emb->smart; } - + evas_object_smart_member_add(w->smart_object, smart_parent); - + if (w->theme_object) evas_object_smart_member_add(w->theme_object, w->smart_object); @@ -1907,7 +1908,7 @@ if (w->theme_object && w->fx_clip_box) evas_object_stack_below(w->theme_object, w->fx_clip_box); - + DLEAVE_FUNCTION(DLEVEL_STABLE); } |
From: Enlightenment C. <no...@cv...> - 2006-07-07 16:06:33
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_software_x11 Modified Files: ewl_engine_evas_software_x11.c Log Message: Second phase of splitting out the backends into engines. This generalizes the lookup of theme hooks to cut down duplicate loops. Outlines future engine hooks. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_software_x11/ewl_engine_evas_software_x11.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ewl_engine_evas_software_x11.c 10 Jun 2006 00:35:06 -0000 1.2 +++ ewl_engine_evas_software_x11.c 7 Jul 2006 21:06:26 -0000 1.3 @@ -8,6 +8,7 @@ static int ee_init(Ewl_Engine *engine); static Ewl_Engine_Info engine_funcs = { + { ee_init, NULL, NULL, NULL, NULL, NULL, NULL, @@ -17,7 +18,8 @@ NULL, NULL, NULL, NULL, NULL, NULL, ee_canvas_setup - }; + } +}; Ecore_List * ewl_engine_dependancies(void) |
From: Enlightenment C. <no...@cv...> - 2006-07-07 16:06:33
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_embed.c ewl_embed.h ewl_engines.c ewl_engines.h ewl_window.c ewl_window.h Log Message: Second phase of splitting out the backends into engines. This generalizes the lookup of theme hooks to cut down duplicate loops. Outlines future engine hooks. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.71 retrieving revision 1.72 diff -u -3 -r1.71 -r1.72 --- ewl_embed.c 21 Jun 2006 04:49:22 -0000 1.71 +++ ewl_embed.c 7 Jul 2006 21:06:26 -0000 1.72 @@ -80,6 +80,13 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("w", w, FALSE); + w->engine = ewl_engine_new(ewl_config.engine_name); + if (!w->engine) + { + DERROR("Error creating engine ...\n"); + exit(-1); + } + /* * Initialize the fields of the inherited container class */ =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.h,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- ewl_embed.h 21 Jun 2006 04:49:22 -0000 1.20 +++ ewl_embed.h 7 Jul 2006 21:06:26 -0000 1.21 @@ -51,6 +51,8 @@ { Ewl_Overlay overlay; /**< Inherits from the Ewl_Overlay class */ + void *engine; /**< The display engine */ + Evas *evas; /**< Evas where drawing takes place. */ void *evas_window; /**< The window holding the evas. */ =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_engines.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ewl_engines.c 22 Jun 2006 19:21:15 -0000 1.4 +++ ewl_engines.c 7 Jul 2006 21:06:26 -0000 1.5 @@ -52,7 +52,7 @@ { char dir[PATH_MAX], *file; Ecore_List *files, *names; - + DENTER_FUNCTION(DLEVEL_STABLE); snprintf(dir, sizeof(dir), "%s/%s", PACKAGE_LIB_DIR, EWL_ENGINE_DIR); @@ -85,6 +85,91 @@ } /** + * @param embed: The embed to lookup the engine chain for hook matching + * @param type: The Ewl_Engine_Hook type to find the best matching function + * @return Returns a pointer to the appropriate engine callback on success. + * @brief Retrieves the correct engine callback for the specified type. + */ +void * +ewl_engine_hook_get(Ewl_Embed *embed, Ewl_Engine_Hook type) +{ + Ewl_Engine *caller; + void *match = NULL; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("embed", embed, NULL); + DCHECK_PARAM_PTR_RET("valid type", (type >= 0 && type < EWL_ENGINE_MAX), NULL); + DCHECK_TYPE_RET("embed", embed, EWL_EMBED_TYPE, NULL); + + caller = EWL_ENGINE(embed->engine); + if (!caller->functions->engine_hooks[type] && caller->dependancies) + { + Ecore_List *deps; + + deps = caller->dependancies; + ecore_list_goto_last(deps); + while ((caller = ecore_dlist_previous(deps))) + { + if (caller->functions->engine_hooks[type]) + break; + } + } + + if (caller && caller->functions->engine_hooks[type]) + match = caller->functions->engine_hooks[type]; + + DRETURN_PTR(match, DLEVEL_STABLE); +} + +/** + * @param embed: The embeddow to lookup the engine chain for hook matching + * @param type: The Ewl_Engine_Hook type to find the best matching function + * @return Returns a list of engine hooks matching on success. + * @brief Retrieves a list of dependent engine callbacks for the specified type. + */ +Ecore_List * +ewl_engine_hook_chain_get(Ewl_Embed *embed, Ewl_Engine_Hook type) +{ + Ewl_Engine *caller; + Ecore_List *matches = NULL; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("embed", embed, NULL); + DCHECK_PARAM_PTR_RET("valid type", (type >= 0 && type < EWL_ENGINE_MAX), NULL); + DCHECK_TYPE_RET("embed", embed, EWL_EMBED_TYPE, NULL); + + matches = ecore_list_new(); + + caller = EWL_ENGINE(embed->engine); + if (caller->functions->engine_hooks[type]) + ecore_list_prepend(matches, + caller->functions->engine_hooks[type]); + if (caller->dependancies) + { + Ecore_List *deps; + + deps = caller->dependancies; + ecore_list_goto_last(deps); + while ((caller = ecore_dlist_previous(deps))) + { + if (caller->functions->engine_hooks[type]) + ecore_list_append(matches, + caller->functions->engine_hooks[type]); + } + } + + /* + * Free and return NULL if no matching hooks are found + */ + if (ecore_list_nodes(matches) <= 0) { + ecore_list_destroy(matches); + matches = NULL; + } + + DRETURN_PTR(matches, DLEVEL_STABLE); +} + +/** * @param name: The name of the engine to create * @return Returns the Ewl_Engine or NULL on failure * @brief Retrieves, or creates the given Ewl_Engine, or NULL on failure @@ -93,6 +178,7 @@ ewl_engine_new(const char *name) { Ewl_Engine *engine = NULL; + Ewl_Engine_Cb_Init engine_init; Ewl_Engine *(*create_engine)(void); Ecore_List *(*dependancies)(void); Ecore_DList *deps = NULL; @@ -166,7 +252,9 @@ engine->handle = handle; engine->dependancies = deps; - engine->functions->init(engine); + engine_init = engine->functions->engine_hooks[EWL_ENGINE_INIT]; + if (engine_init) + engine_init(engine); ecore_hash_set(ewl_engines, strdup(name), engine); DRETURN_PTR(engine, DLEVEL_STABLE); @@ -180,30 +268,15 @@ void ewl_engine_window_new(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_New window_new; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_new && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_new) - break; - } - } - - if (!caller || !caller->functions->window_new) - DRETURN(DLEVEL_STABLE); - - caller->functions->window_new(win); + window_new = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_NEW); + if (window_new) + window_new(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -216,7 +289,7 @@ void ewl_engine_window_destroy(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Destroy window_destroy; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); @@ -225,24 +298,9 @@ if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_destroy && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_destroy) - break; - } - } - - if (!caller || !caller->functions->window_destroy) - DRETURN(DLEVEL_STABLE); - - caller->functions->window_destroy(win); + window_destroy = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_DESTROY); + if (window_destroy) + window_destroy(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -255,33 +313,18 @@ void ewl_engine_window_move(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Move window_move; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_move && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_move) - break; - } - } - if (!caller || !caller->functions->window_move) + if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->window_move(win); + window_move = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_MOVE); + if (window_move) + window_move(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -294,33 +337,18 @@ void ewl_engine_window_resize(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Resize window_resize; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_resize && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_resize) - break; - } - } - if (!caller || !caller->functions->window_resize) + if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->window_resize(win); + window_resize = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_RESIZE); + if (window_resize) + window_resize(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -333,34 +361,16 @@ void ewl_engine_window_min_max_size_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Min_Max_Size_Set window_min_max_size_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_min_max_size_set - && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_min_max_size_set) - break; - } - } - - if (!caller || !caller->functions->window_min_max_size_set) - DRETURN(DLEVEL_STABLE); - - caller->functions->window_min_max_size_set(win); + window_min_max_size_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_MIN_MAX_SIZE_SET); + if (window_min_max_size_set) + window_min_max_size_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -373,30 +383,15 @@ void ewl_engine_window_show(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Show window_show; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_show && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_show) - break; - } - } - - if (!caller || !caller->functions->window_show) - DRETURN(DLEVEL_STABLE); - caller->functions->window_show(win); + window_show = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_SHOW); + if (window_show) + window_show(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -409,30 +404,15 @@ void ewl_engine_window_hide(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Hide window_hide; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_hide && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_hide) - break; - } - } - - if (!caller || !caller->functions->window_hide) - DRETURN(DLEVEL_STABLE); - caller->functions->window_hide(win); + window_hide = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_HIDE); + if (window_hide) + window_hide(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -445,33 +425,19 @@ void ewl_engine_window_title_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Title_Set window_title_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_title_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_title_set) - break; - } - } - if (!caller || !caller->functions->window_title_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_title_set(win); + window_title_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_TITLE_SET); + if (window_title_set) + window_title_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -484,33 +450,19 @@ void ewl_engine_window_name_class_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Name_Class_Set window_name_class_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_name_class_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_name_class_set) - break; - } - } - if (!caller || !caller->functions->window_name_class_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_name_class_set(win); + window_name_class_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_NAME_CLASS_SET); + if (window_name_class_set) + window_name_class_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -523,33 +475,19 @@ void ewl_engine_window_borderless_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Borderless_Set window_borderless_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_borderless_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_borderless_set) - break; - } - } - if (!caller || !caller->functions->window_borderless_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_borderless_set(win); + window_borderless_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_NAME_CLASS_SET); + if (window_borderless_set) + window_borderless_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -562,33 +500,19 @@ void ewl_engine_window_dialog_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Dialog_Set window_dialog_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_dialog_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_dialog_set) - break; - } - } - if (!caller || !caller->functions->window_dialog_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_dialog_set(win); + window_dialog_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_DIALOG_SET); + if (window_dialog_set) + window_dialog_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -601,7 +525,7 @@ void ewl_engine_window_fullscreen_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Fullscreen_Set window_fullscreen_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); @@ -610,24 +534,10 @@ if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_fullscreen_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_fullscreen_set) - break; - } - } - - if (!caller || !caller->functions->window_fullscreen_set) - DRETURN(DLEVEL_STABLE); - - caller->functions->window_fullscreen_set(win); + window_fullscreen_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_FULLSCREEN_SET); + if (window_fullscreen_set) + window_fullscreen_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -640,33 +550,19 @@ void ewl_engine_window_transient_for(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Transient_For window_transient_for; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_transient_for && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_transient_for) - break; - } - } - if (!caller || !caller->functions->window_transient_for) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_transient_for(win); + window_transient_for = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_TRANSIENT_FOR); + if (window_transient_for) + window_transient_for(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -679,33 +575,19 @@ void ewl_engine_window_modal_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Modal_Set window_modal_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_modal_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_modal_set) - break; - } - } - - if (!caller || !caller->functions->window_modal_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_modal_set(win); + window_modal_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_MODAL_SET); + if (window_modal_set) + window_modal_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -718,33 +600,18 @@ void ewl_engine_window_raise(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Raise window_raise; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_raise && caller->dependancies) - { - Ecore_List *deps; - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_raise) - break; - } - } - - if (!caller || !caller->functions->window_raise) + if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->window_raise(win); + window_raise = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_RAISE); + if (window_raise) + window_raise(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -757,33 +624,18 @@ void ewl_engine_window_lower(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Lower window_lower; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_lower && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_lower) - break; - } - } - if (!caller || !caller->functions->window_lower) + if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->window_lower(win); + window_lower = ewl_engine_hook_get(EWL_EMBED(win), EWL_ENGINE_WINDOW_LOWER); + if (window_lower) + window_lower(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -796,7 +648,7 @@ int ewl_engine_keyboard_grab(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Keyboard_Grab keyboard_grab; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("win", win, 0); @@ -805,24 +657,12 @@ if (!VISIBLE(win) || !REALIZED(win)) DRETURN_INT(FALSE, DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->keyboard_grab && caller->dependancies) - { - Ecore_List *deps; + keyboard_grab = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_KEYBOARD_GRAB); + if (keyboard_grab) + DRETURN_INT(keyboard_grab(win), DLEVEL_STABLE); - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->keyboard_grab) - break; - } - } - - if (!caller || !caller->functions->keyboard_grab) - DRETURN_INT(0, DLEVEL_STABLE); - - DRETURN_INT(caller->functions->keyboard_grab(win), DLEVEL_STABLE); + DRETURN_INT(FALSE, DLEVEL_STABLE); } /** @@ -833,33 +673,19 @@ void ewl_engine_keyboard_ungrab(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Keyboard_Ungrab keyboard_ungrab; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!VISIBLE(win) || !REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->keyboard_ungrab && caller->dependancies) - { - Ecore_List *deps; - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->keyboard_ungrab) - break; - } - } - - if (!caller || !caller->functions->keyboard_ungrab) + if (!VISIBLE(win) || !REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->keyboard_ungrab(win); + keyboard_ungrab = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_KEYBOARD_UNGRAB); + if (keyboard_ungrab) + keyboard_ungrab(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -872,33 +698,21 @@ int ewl_engine_pointer_grab(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Pointer_Grab pointer_grab; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("win", win, 0); DCHECK_TYPE_RET("win", win, EWL_WINDOW_TYPE, 0); - + if (!VISIBLE(win) || !REALIZED(win)) DRETURN_INT(FALSE, DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->pointer_grab && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->pointer_grab) - break; - } - } + pointer_grab = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_POINTER_GRAB); + if (pointer_grab) + DRETURN_INT(pointer_grab(win), DLEVEL_STABLE); - if (!caller || !caller->functions->pointer_grab) - DRETURN_INT(0, DLEVEL_STABLE); - - DRETURN_INT(caller->functions->pointer_grab(win), DLEVEL_STABLE); + DRETURN_INT(FALSE, DLEVEL_STABLE); } /** @@ -909,33 +723,19 @@ void ewl_engine_pointer_ungrab(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Pointer_Ungrab pointer_ungrab; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!VISIBLE(win) || !REALIZED(win)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->pointer_ungrab && caller->dependancies) - { - Ecore_List *deps; - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->pointer_ungrab) - break; - } - } - - if (!caller || !caller->functions->pointer_ungrab) + if (!VISIBLE(win) || !REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->pointer_ungrab(win); + pointer_ungrab = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_POINTER_UNGRAB); + if (pointer_ungrab) + pointer_ungrab(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -948,35 +748,20 @@ void ewl_engine_window_selection_text_set(Ewl_Window *win, const char *txt) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Selection_Text_Set window_selection_text_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_PARAM_PTR("txt", txt); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!REALIZED(win)) - DRETURN(DLEVEL_STABLE); - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_selection_text_set - && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_selection_text_set) - break; - } - } - - if (!caller || !caller->functions->window_selection_text_set) + if (!REALIZED(win)) DRETURN(DLEVEL_STABLE); - caller->functions->window_selection_text_set(win, txt); + window_selection_text_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_SELECTION_TEXT_SET); + if (window_selection_text_set) + window_selection_text_set(win, txt); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -993,33 +778,20 @@ void ewl_engine_window_geometry_get(Ewl_Window *win, int root, int *width, int *height) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Geometry_Get window_geometry_get; DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("win", win); + DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); /* make sure these get set to _something_ */ if (width) *width = 0; if (height) *height = 0; - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_geometry_get && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_geometry_get) - break; - } - } - - if (!caller || !caller->functions->window_geometry_get) - DRETURN(DLEVEL_STABLE); - - caller->functions->window_geometry_get( - (root ? NULL : win), width, height); + window_geometry_get = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_GEOMETRY_GET); + if (window_geometry_get) + window_geometry_get((root ? NULL : win), width, height); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1032,33 +804,19 @@ void ewl_engine_window_dnd_aware_set(Ewl_Window *win) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Window_Dnd_Aware_Set window_dnd_aware_set; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - if (!(win->window)) - DRETURN(DLEVEL_STABLE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->window_dnd_aware_set && caller->dependancies) - { - Ecore_List *deps; - - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->window_dnd_aware_set) - break; - } - } - if (!caller || !caller->functions->window_dnd_aware_set) + if (!(win->window)) DRETURN(DLEVEL_STABLE); - caller->functions->window_dnd_aware_set(win); + window_dnd_aware_set = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_WINDOW_DND_AWARE_SET); + if (window_dnd_aware_set) + window_dnd_aware_set(win); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1071,39 +829,134 @@ void ewl_engine_canvas_setup(Ewl_Window *win, int debug) { - Ewl_Engine *caller; + Ewl_Engine_Cb_Canvas_Setup canvas_setup; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("win", win); DCHECK_TYPE("win", win, EWL_WINDOW_TYPE); - - caller = EWL_ENGINE(win->engine); - if (!caller->functions->canvas_setup && caller->dependancies) - { - Ecore_List *deps; - deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) - { - if (caller->functions->canvas_setup) - break; - } - } + canvas_setup = ewl_engine_hook_get(EWL_EMBED(win), + EWL_ENGINE_CANVAS_SETUP); + if (canvas_setup) + canvas_setup(win, debug); - if (!caller || !caller->functions->canvas_setup) - DRETURN(DLEVEL_STABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param win: the window to work with + * @return Returns no value + * @brief Freezes the canvas + */ +void +ewl_engine_canvas_freeze(Ewl_Embed *embed) +{ + Ewl_Engine_Cb_Canvas_Freeze canvas_freeze; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("embed", embed); + DCHECK_TYPE("embed", embed, EWL_EMBED_TYPE); + + canvas_freeze = ewl_engine_hook_get(embed, EWL_ENGINE_CANVAS_FREEZE); + if (canvas_freeze) + canvas_freeze(embed); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param win: the window to work with + * @return Returns no value + * @brief Thaws the canvas + */ +void +ewl_engine_canvas_thaw(Ewl_Embed *embed) +{ + Ewl_Engine_Cb_Canvas_Thaw canvas_thaw; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("embed", embed); + DCHECK_TYPE("embed", embed, EWL_EMBED_TYPE); + + canvas_thaw = ewl_engine_hook_get(embed, EWL_ENGINE_CANVAS_THAW); + if (canvas_thaw) + canvas_thaw(embed); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param embed: Embed used to lookup the current theme engine. + * @return Returns no value + * @brief Freeze the theme system + */ +void +ewl_engine_theme_freeze(Ewl_Embed *embed) +{ + Ewl_Engine_Cb_Theme_Freeze theme_freeze; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("embed", embed); + DCHECK_TYPE("embed", embed, EWL_EMBED_TYPE); + + theme_freeze = ewl_engine_hook_get(embed, EWL_ENGINE_THEME_FREEZE); + if (theme_freeze) + theme_freeze(); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @param embed: Embed used to lookup the current theme engine. + * @return Returns no value + * @brief Thaw the theme system + */ +void +ewl_engine_theme_thaw(Ewl_Embed *embed) +{ + Ewl_Engine_Cb_Theme_Thaw theme_thaw; - caller->functions->canvas_setup(win, debug); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("embed", embed); + DCHECK_TYPE("embed", embed, EWL_EMBED_TYPE); + + theme_thaw = ewl_engine_hook_get(embed, EWL_ENGINE_THEME_THAW); + if (theme_thaw) + theme_thaw(); DLEAVE_FUNCTION(DLEVEL_STABLE); } +/** + * @return Returns a new object group on success, NULL on failure + * @brief Create a grouping for theme objects. + */ +void * +ewl_engine_theme_widget_group(Ewl_Widget *w) +{ + Ewl_Engine_Cb_Theme_Widget_Group theme_widget_group; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("w", w, NULL); + DCHECK_TYPE_RET("w", w, EWL_WIDGET_TYPE, NULL); + + theme_widget_group = ewl_engine_hook_get(EWL_EMBED(w), + EWL_ENGINE_THEME_WIDGET_GROUP); + if (theme_widget_group) + DRETURN_PTR(theme_widget_group(w), DLEVEL_STABLE); + + DRETURN_PTR(NULL, DLEVEL_STABLE); +} + static void ewl_engine_free(Ewl_Engine *engine) { - if (engine->functions->shutdown) - engine->functions->shutdown(engine); + if (engine->functions->engine_hooks[EWL_ENGINE_SHUTDOWN]) { + Ewl_Engine_Cb_Shutdown engine_shutdown; + engine_shutdown = engine->functions->engine_hooks[EWL_ENGINE_SHUTDOWN]; + if (engine_shutdown) + engine_shutdown(engine); + } /* parents will be shutdown when their freed by the cleanup code */ if (engine->dependancies) @@ -1129,5 +982,3 @@ DLEAVE_FUNCTION(DLEVEL_STABLE); } - - =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_engines.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_engines.h 10 Jun 2006 00:35:06 -0000 1.3 +++ ewl_engines.h 7 Jul 2006 21:06:26 -0000 1.4 @@ -3,61 +3,93 @@ #include <Ewl.h> -#define EWL_ENGINE(engine) ((Ewl_Engine *)engine) -typedef struct Ewl_Engine Ewl_Engine; - -typedef struct Ewl_Engine_Info Ewl_Engine_Info; -struct Ewl_Engine_Info +enum Ewl_Engine_Hook { - int (*init)(Ewl_Engine *engine); /**< Initialize the engine */ - void (*shutdown)(Ewl_Engine *engine); /**< Shutdown the engine */ + EWL_ENGINE_INIT, /**< Initialize the engine */ + EWL_ENGINE_SHUTDOWN, /**< Shutdown the engine */ - void (*window_new)(Ewl_Window *win); /**< Create the window */ - void (*window_destroy)(Ewl_Window *win);/**< Destroy the window */ + EWL_ENGINE_WINDOW_NEW, /**< Create the window */ + EWL_ENGINE_WINDOW_DESTROY,/**< Destroy the window */ - void (*window_move)(Ewl_Window *win); /**< Move the window to + EWL_ENGINE_WINDOW_MOVE, /**< Move the window to the given location */ - void (*window_resize)(Ewl_Window *win); /**< Resize the window */ - void (*window_min_max_size_set)(Ewl_Window *win); /**< Set the min - and max sizes */ - void (*window_show)(Ewl_Window *win); /**< Show the window */ - void (*window_hide)(Ewl_Window *win); /**< Hide the window */ + EWL_ENGINE_WINDOW_RESIZE, /**< Resize the window */ + EWL_ENGINE_WINDOW_MIN_MAX_SIZE_SET, /**< Set the min and max sizes */ + EWL_ENGINE_WINDOW_SHOW, /**< Show the window */ + EWL_ENGINE_WINDOW_HIDE, /**< Hide the window */ - void (*window_title_set)(Ewl_Window *win); /**< Set the window title */ - void (*window_name_class_set)(Ewl_Window *win); /**< Set the window - name/class */ + EWL_ENGINE_WINDOW_TITLE_SET, /**< Set the window title */ + EWL_ENGINE_WINDOW_NAME_CLASS_SET, /**< Set the window name/class */ - void (*window_borderless_set)(Ewl_Window *win); /**< Set the borderless + EWL_ENGINE_WINDOW_BORDERLESS_SET, /**< Set the borderless state of the window */ - void (*window_dialog_set)(Ewl_Window *win); /**< Set the dialog + EWL_ENGINE_WINDOW_DIALOG_SET, /**< Set the dialog setting of the window */ - void (*window_fullscreen_set)(Ewl_Window *win); /**< Set the fullscreen + EWL_ENGINE_WINDOW_FULLSCREEN_SET, /**< Set the fullscreen setting of the window */ - void (*window_transient_for)(Ewl_Window *win); /**< Set the window - transient */ - void (*window_modal_set)(Ewl_Window *win); /**< Set the window modal */ - - void (*window_raise)(Ewl_Window *win); /**< Raise the window */ - void (*window_lower)(Ewl_Window *win); /**< Lower the window */ + EWL_ENGINE_WINDOW_TRANSIENT_FOR, /**< Set the window transient */ + EWL_ENGINE_WINDOW_MODAL_SET, /**< Set the window modal */ - int (*keyboard_grab)(Ewl_Window *win); /**< Set the keyboard grab */ - void (*keyboard_ungrab)(Ewl_Window *win); /**< Set the keyboard - ungrab */ - int (*pointer_grab)(Ewl_Window *win); /**< Set the pointer grab */ - void (*pointer_ungrab)(Ewl_Window *win); /**< Set the pointer - ungrab */ + EWL_ENGINE_WINDOW_RAISE, /**< Raise the window */ + EWL_ENGINE_WINDOW_LOWER, /**< Lower the window */ - void (*window_selection_text_set)(Ewl_Window *win, - const char *txt); /**< Set the - selection text */ - void (*window_geometry_get)(Ewl_Window *win, - int *width, int *height); /**< Get the window - geometry */ - void (*window_dnd_aware_set)(Ewl_Window *win); /**< Set the window + EWL_ENGINE_WINDOW_KEYBOARD_GRAB, /**< Set the keyboard grab */ + EWL_ENGINE_WINDOW_KEYBOARD_UNGRAB, /**< Set the keyboard ungrab */ + EWL_ENGINE_WINDOW_POINTER_GRAB, /**< Set the pointer grab */ + EWL_ENGINE_WINDOW_POINTER_UNGRAB, /**< Set the pointer ungrab */ + + EWL_ENGINE_WINDOW_SELECTION_TEXT_SET, /**< Set the selection text */ + EWL_ENGINE_WINDOW_GEOMETRY_GET, /**< Get the window geometry */ + EWL_ENGINE_WINDOW_DND_AWARE_SET, /**< Set the window dnd aware */ + EWL_ENGINE_CANVAS_SETUP, /**< Setup the render canvas */ - void (*canvas_setup)(Ewl_Window *win, int debug); /**< Setup the - render canvas */ + EWL_ENGINE_CANVAS_FREEZE, + EWL_ENGINE_CANVAS_THAW, + + EWL_ENGINE_THEME_FREEZE, + EWL_ENGINE_THEME_THAW, + + EWL_ENGINE_THEME_DATA_GET, + + EWL_ENGINE_THEME_WIDGET_GROUP, + + EWL_ENGINE_THEME_OBJECT_ADD, + EWL_ENGINE_THEME_OBJECT_DEL, + EWL_ENGINE_THEME_OBJECT_MOVE, + EWL_ENGINE_THEME_OBJECT_RESIZE, + EWL_ENGINE_THEME_OBJECT_SHOW, + EWL_ENGINE_THEME_OBJECT_HIDE, + EWL_ENGINE_THEME_OBJECT_CLIP_SET, + EWL_ENGINE_THEME_OBJECT_CLIP_UNSET, + EWL_ENGINE_THEME_OBJECT_FILE_SET, + EWL_ENGINE_THEME_OBJECT_LOAD_ERROR, + EWL_ENGINE_THEME_OBJECT_MIN_SIZE_GET, + EWL_ENGINE_THEME_OBJECT_MAX_SIZE_GET, + EWL_ENGINE_THEME_OBJECT_SIGNAL_SEND, + EWL_ENGINE_THEME_OBJECT_PART_TEXT_SET, + EWL_ENGINE_THEME_OBJECT_COLOR_CLASS_SET, + + + EWL_ENGINE_THEME_CLIP_ADD, + EWL_ENGINE_THEME_CLIP_DEL, + EWL_ENGINE_THEME_CLIP_CLIPEES_GET, + EWL_ENGINE_THEME_CLIP_COLOR_SET, + + EWL_ENGINE_THEME_WIDGET_STACK_ADD, + EWL_ENGINE_THEME_WIDGET_LAYER_UPDATE, + EWL_ENGINE_MAX, +}; + +typedef enum Ewl_Engine_Hook Ewl_Engine_Hook; + +#define EWL_ENGINE(engine) ((Ewl_Engine *)engine) +typedef struct Ewl_Engine Ewl_Engine; + +typedef struct Ewl_Engine_Info Ewl_Engine_Info; +struct Ewl_Engine_Info +{ + void *engine_hooks[EWL_ENGINE_MAX]; }; struct Ewl_Engine @@ -82,6 +114,9 @@ void ewl_engine_engine_shutdown(Ewl_Window *win); +void *ewl_engine_hook_get(Ewl_Embed *embed, Ewl_Engine_Hook type); +Ecore_List *ewl_engine_hook_chain_get(Ewl_Embed *embed, Ewl_Engine_Hook type); + void ewl_engine_window_new(Ewl_Window *win); void ewl_engine_window_destroy(Ewl_Window *win); @@ -115,6 +150,80 @@ void ewl_engine_window_dnd_aware_set(Ewl_Window *win); void ewl_engine_canvas_setup(Ewl_Window *win, int debug); + +/** + * Internal engine hook typedefs, you only need these if you're writing an + * engine. + */ + +typedef int (*Ewl_Engine_Cb_Init)(Ewl_Engine *engine); /**< Initialize the engine */ +typedef void (*Ewl_Engine_Cb_Shutdown)(Ewl_Engine *engine); /**< Shutdown the engine */ +typedef void (*Ewl_Engine_Cb_Window_New)(Ewl_Window *win); /**< Create the window */ +typedef void (*Ewl_Engine_Cb_Window_Destroy)(Ewl_Window *win);/**< Destroy the window */ +typedef void (*Ewl_Engine_Cb_Window_Move)(Ewl_Window *win); /**< Move the window to + the given location */ +typedef void (*Ewl_Engine_Cb_Window_Resize)(Ewl_Window *win); /**< Resize the window */ +typedef void (*Ewl_Engine_Cb_Window_Min_Max_Size_Set)(Ewl_Window *win); /**< Set the min + and max sizes */ +typedef void (*Ewl_Engine_Cb_Window_Show)(Ewl_Window *win); /**< Show the window */ +typedef void (*Ewl_Engine_Cb_Window_Hide)(Ewl_Window *win); /**< Hide the window */ +typedef void (*Ewl_Engine_Cb_Window_Title_Set)(Ewl_Window *win); /**< Set the window title */ +typedef void (*Ewl_Engine_Cb_Window_Name_Class_Set)(Ewl_Window *win); /**< Set the window + name/class */ +typedef void (*Ewl_Engine_Cb_Window_Borderless_Set)(Ewl_Window *win); /**< Set the borderless + state of the window */ +typedef void (*Ewl_Engine_Cb_Window_Dialog_Set)(Ewl_Window *win); /**< Set the dialog + setting of the window */ +typedef void (*Ewl_Engine_Cb_Window_Fullscreen_Set)(Ewl_Window *win); /**< Set the fullscreen + setting of the window */ +typedef void (*Ewl_Engine_Cb_Window_Transient_For)(Ewl_Window *win); /**< Set the window + transient */ +typedef void (*Ewl_Engine_Cb_Window_Modal_Set)(Ewl_Window *win); /**< Set the window modal */ +typedef void (*Ewl_Engine_Cb_Window_Raise)(Ewl_Window *win); /**< Raise the window */ +typedef void (*Ewl_Engine_Cb_Window_Lower)(Ewl_Window *win); /**< Lower the window */ +typedef int (*Ewl_Engine_Cb_Keyboard_Grab)(Ewl_Window *win); /**< Set the keyboard grab */ +typedef void (*Ewl_Engine_Cb_Keyboard_Ungrab)(Ewl_Window *win); /**< Set the keyboard + ungrab */ +typedef int (*Ewl_Engine_Cb_Pointer_Grab)(Ewl_Window *win); /**< Set the pointer grab */ +typedef void (*Ewl_Engine_Cb_Pointer_Ungrab)(Ewl_Window *win); /**< Set the pointer + ungrab */ +typedef void (*Ewl_Engine_Cb_Window_Selection_Text_Set)(Ewl_Window *win, + const char *txt); /**< Set the + selection text */ +typedef void (*Ewl_Engine_Cb_Window_Geometry_Get)(Ewl_Window *win, + int *width, int *height); /**< Get the window + geometry */ +typedef void (*Ewl_Engine_Cb_Window_Dnd_Aware_Set)(Ewl_Window *win); /**< Set the window + dnd aware */ +typedef void (*Ewl_Engine_Cb_Canvas_Setup)(Ewl_Window *win, int debug); /**< Setup the + render canvas */ +typedef void (*Ewl_Engine_Cb_Canvas_Freeze)(Ewl_Embed *embed); +typedef void (*Ewl_Engine_Cb_Canvas_Thaw)(Ewl_Embed *embed); +typedef void (*Ewl_Engine_Cb_Theme_Freeze)(); +typedef void (*Ewl_Engine_Cb_Theme_Thaw)(); +typedef char *(*Ewl_Engine_Cb_Theme_Data_Get)(char *path, char *key); +typedef void *(*Ewl_Engine_Cb_Theme_Widget_Group)(Ewl_Widget *w); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Add)(Ewl_Embed *embed); +typedef void (*Ewl_Engine_Cb_Theme_Object_Del)(void *obj); +typedef void (*Ewl_Engine_Cb_Theme_Object_Move)(void *obj, int x, int y); +typedef void (*Ewl_Engine_Cb_Theme_Object_Resize)(void *obj, int w, int h); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Show)(void *obj, void *clip); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Hide)(void *obj, void *clip); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Clip_Set)(void *obj, void *clip); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Clip_Unset)(void *obj); +typedef void (*Ewl_Engine_Cb_Theme_Object_Stack_Add)(Ewl_Widget *w); +typedef void (*Ewl_Engine_Cb_Theme_Object_Layer_Update)(Ewl_Widget *w); +typedef void (*Ewl_Engine_Cb_Theme_Object_File_Set)(void *obj, char *path, char *group); +typedef void *(*Ewl_Engine_Cb_Theme_Object_Load_Error)(void *obj); +typedef void (*Ewl_Engine_Cb_Theme_Object_Min_Size_Get)(void *obj, int *w, int *h); +typedef void (*Ewl_Engine_Cb_Theme_Object_Max_Size_Get)(void *obj, int *w, int *h); +typedef void (*Ewl_Engine_Cb_Theme_Object_Signal_Send)(void *obj, char *state, char *source); +typedef void (*Ewl_Engine_Cb_Theme_Object_Part_Text_Set)(void *obj, char *part, char *text); +typedef void (*Ewl_Engine_Cb_Theme_Object_Color_Class_Set)(char *name, int r, int g, int b, int r2, int g2, int b2, int r3, int g3, int b3); +typedef void *(*Ewl_Engine_Cb_Theme_Clip_Add)(Ewl_Embed *embed); +typedef void (*Ewl_Engine_Cb_Theme_Clip_Del)(void *clip); +typedef void *(*Ewl_Engine_Cb_Theme_Clip_Clipees_Get)(void *clip); +typedef void (*Ewl_Engine_Cb_Theme_Clip_Color_Set)(void *clip, int r, int g, int b, int a); #endif =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_window.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -3 -r1.57 -r1.58 --- ewl_window.c 30 Jun 2006 00:54:39 -0000 1.57 +++ ewl_window.c 7 Jul 2006 21:06:26 -0000 1.58 @@ -655,12 +655,6 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); window = EWL_WINDOW(w); - window->engine = ewl_engine_new(ewl_config.engine_name); - if (!window->engine) - { - DERROR("Error creating engine ...\n"); - exit(-1); - } ewl_engine_window_new(window); ewl_engine_window_name_class_set(window); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_window.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- ewl_window.h 10 Jun 2006 00:35:06 -0000 1.19 +++ ewl_window.h 7 Jul 2006 21:06:26 -0000 1.20 @@ -49,8 +49,6 @@ Ewl_Window_Flags flags; /**< Flags indicating window properties */ - void *engine; /**< The display engine */ - Ewl_Dnd_Types dnd_types; /**< The dnd type */ Ewl_Widget *dnd_last_position; /**< The last dnd position */ }; |
From: Enlightenment C. <no...@cv...> - 2006-07-07 16:06:59
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_gl_x11 Modified Files: ewl_engine_evas_gl_x11.c Log Message: Second phase of splitting out the backends into engines. This generalizes the lookup of theme hooks to cut down duplicate loops. Outlines future engine hooks. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_gl_x11/ewl_engine_evas_gl_x11.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ewl_engine_evas_gl_x11.c 10 Jun 2006 00:35:06 -0000 1.2 +++ ewl_engine_evas_gl_x11.c 7 Jul 2006 21:06:26 -0000 1.3 @@ -8,6 +8,7 @@ static void ee_canvas_setup(Ewl_Window *win, int debug); static Ewl_Engine_Info engine_funcs = { + { ee_init, NULL, NULL, NULL, NULL, NULL, NULL, @@ -17,7 +18,8 @@ NULL, NULL, NULL, NULL, NULL, NULL, ee_canvas_setup - }; + } +}; Ecore_List * ewl_engine_dependancies(void) |
From: Enlightenment C. <no...@cv...> - 2006-07-07 16:06:59
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/x11 Modified Files: ewl_engine_x11.c Log Message: Second phase of splitting out the backends into engines. This generalizes the lookup of theme hooks to cut down duplicate loops. Outlines future engine hooks. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/x11/ewl_engine_x11.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ewl_engine_x11.c 10 Jun 2006 00:35:06 -0000 1.2 +++ ewl_engine_x11.c 7 Jul 2006 21:06:26 -0000 1.3 @@ -75,6 +75,7 @@ static void ee_dnd_aware_set(Ewl_Window *win); static Ewl_Engine_Info engine_funcs = { + { ee_init, ee_shutdown, ee_window_new, @@ -101,7 +102,8 @@ ee_window_geometry_set, ee_dnd_aware_set, NULL - }; + } +}; Ecore_List * ewl_engine_dependancies(void) |
From: Enlightenment C. <no...@cv...> - 2006-07-07 16:06:59
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_fb Modified Files: ewl_engine_evas_fb.c Log Message: Second phase of splitting out the backends into engines. This generalizes the lookup of theme hooks to cut down duplicate loops. Outlines future engine hooks. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_fb/ewl_engine_evas_fb.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_engine_evas_fb.c 22 Jun 2006 08:38:12 -0000 1.3 +++ ewl_engine_evas_fb.c 7 Jul 2006 21:06:26 -0000 1.4 @@ -30,6 +30,7 @@ static void ee_shutdown(Ewl_Engine *engine); static Ewl_Engine_Info engine_funcs = { + { ee_init, ee_shutdown, NULL, NULL, NULL, NULL, @@ -39,7 +40,8 @@ NULL, NULL, NULL, NULL, NULL, NULL, NULL, ee_canvas_setup - }; + } +}; Ecore_List * ewl_engine_dependancies(void) |
From: Enlightenment C. <no...@cv...> - 2006-07-07 20:26:48
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_text.c Log Message: Change allocation policy to use 4k chunks consistently. Use a simpler scheme for inserting text. Set the allocation size to zero after freeing the text. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_text.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -3 -r1.108 -r1.109 --- ewl_text.c 30 Jun 2006 00:46:41 -0000 1.108 +++ ewl_text.c 8 Jul 2006 01:26:45 -0000 1.109 @@ -468,6 +468,12 @@ if (text) len = strlen(text); + /* Limit the index to be within safe boundaries */ + if (idx > t->length + 1) + idx = t->length + 1; + if (idx < 0) + idx = 0; + /* setup the cursor position to begin with. If this is the same * position as before nothing will change (we'll keep our current * pointer */ @@ -477,37 +483,28 @@ { ewl_text_clear(t); } - else if (!t->text) - { - t->text = strdup(text); - t->length = len; - t->total_size = t->length + 1; - - ewl_text_cursor_position_set(t, 0); - ewl_text_tree_insert(t, t->cursor_position, t->length); - ewl_text_cursor_position_set(t, t->length); - } else { - if ((t->length + len + 1) >= t->total_size) + int newlen; + + newlen = t->length + len; + if ((newlen + 1) >= t->total_size) { int extend; - extend = len; - if (extend < EWL_TEXT_EXTEND_VAL) - extend = EWL_TEXT_EXTEND_VAL; + /* + * Determine the size in blocks of EWL_TEXT_EXTEND_VAL + */ + extend = ((newlen + 1) / EWL_TEXT_EXTEND_VAL); + extend = (extend + 1) * EWL_TEXT_EXTEND_VAL; - t->text = realloc(t->text, (t->length + extend + 1) * sizeof(char)); - t->total_size += extend + 1; + t->text = realloc(t->text, extend * sizeof(char)); + t->total_size = extend; } - if (idx == t->length) - strncat(t->text, text, len); - else - { + if (idx < t->length) memmove(t->text + idx + len, t->text + idx, t->length - idx); - memcpy(t->text + idx, text, len); - } + memcpy(t->text + idx, text, len); t->length += len; t->text[t->length] = '\0'; @@ -559,6 +556,7 @@ else { IF_FREE(t->text); + t->total_size = 0; ewl_text_triggers_remove(t); } |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:06:41
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/lib Modified Files: ewl_embed.c ewl_engines.c ewl_engines.h Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -3 -r1.72 -r1.73 --- ewl_embed.c 7 Jul 2006 21:06:26 -0000 1.72 +++ ewl_embed.c 11 Jul 2006 01:06:39 -0000 1.73 @@ -1515,8 +1515,7 @@ DCHECK_PARAM_PTR("e", e); DCHECK_TYPE("e", e, EWL_EMBED_TYPE); - if (REALIZED(e) && e->evas && evas_event_freeze_get(e->evas) < 1) - evas_event_freeze(e->evas); + ewl_engine_canvas_freeze(e); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1533,8 +1532,7 @@ DCHECK_PARAM_PTR("e", e); DCHECK_TYPE("e", e, EWL_EMBED_TYPE); - if (REALIZED(e) && e->evas && evas_event_freeze_get(e->evas) > 0) - evas_event_thaw(e->evas); + ewl_engine_canvas_thaw(e); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -1559,7 +1557,7 @@ emb = EWL_EMBED(w); - evas_event_freeze(emb->evas); + ewl_embed_freeze(emb); if (!emb->ev_clip) { /* =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_engines.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ewl_engines.c 10 Jul 2006 02:57:08 -0000 1.6 +++ ewl_engines.c 11 Jul 2006 01:06:39 -0000 1.7 @@ -108,9 +108,10 @@ Ecore_List *deps; deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) + ecore_list_goto_first(deps); + while ((caller = ecore_dlist_next(deps))) { + printf("Checking engine %s\n", caller->name); if (caller->functions->engine_hooks[type]) break; } @@ -151,8 +152,8 @@ Ecore_List *deps; deps = caller->dependancies; - ecore_list_goto_last(deps); - while ((caller = ecore_dlist_previous(deps))) + ecore_list_goto_first(deps); + while ((caller = ecore_dlist_next(deps))) { if (caller->functions->engine_hooks[type]) ecore_list_append(matches, =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_engines.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ewl_engines.h 10 Jul 2006 03:07:07 -0000 1.6 +++ ewl_engines.h 11 Jul 2006 01:06:39 -0000 1.7 @@ -149,6 +149,8 @@ void ewl_engine_window_dnd_aware_set(Ewl_Window *win); void ewl_engine_canvas_setup(Ewl_Window *win, int debug); +void ewl_engine_canvas_freeze(Ewl_Embed *embed); +void ewl_engine_canvas_thaw(Ewl_Embed *embed); /** * Internal engine hook typedefs, you only need these if you're writing an |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:06:48
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/x11 Modified Files: ewl_engine_x11.c Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/x11/ewl_engine_x11.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_engine_x11.c 7 Jul 2006 21:06:26 -0000 1.3 +++ ewl_engine_x11.c 11 Jul 2006 01:06:39 -0000 1.4 @@ -105,7 +105,7 @@ } }; -Ecore_List * +Ecore_DList * ewl_engine_dependancies(void) { DENTER_FUNCTION(DLEVEL_STABLE); |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:07:10
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines Modified Files: Makefile.am Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Makefile.am 22 Jun 2006 01:12:27 -0000 1.2 +++ Makefile.am 11 Jul 2006 01:06:39 -0000 1.3 @@ -1,3 +1,3 @@ MAINTAINERCLEANFILES = Makefile Makefile.in -SUBDIRS = x11 evas_software_x11 evas_gl_x11 evas_fb +SUBDIRS = x11 evas evas_software_x11 evas_gl_x11 evas_fb |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:07:10
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_fb Modified Files: ewl_engine_evas_fb.c Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_fb/ewl_engine_evas_fb.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ewl_engine_evas_fb.c 7 Jul 2006 21:51:04 -0000 1.5 +++ ewl_engine_evas_fb.c 11 Jul 2006 01:06:39 -0000 1.6 @@ -43,12 +43,17 @@ } }; -Ecore_List * +Ecore_DList * ewl_engine_dependancies(void) { + Ecore_DList *d; + DENTER_FUNCTION(DLEVEL_STABLE); - DRETURN_PTR(NULL, DLEVEL_STABLE); + d = ecore_dlist_new(); + ecore_dlist_append(d, strdup("evas")); + + DRETURN_PTR(d, DLEVEL_STABLE); } Ewl_Engine * |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:07:10
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_software_x11 Modified Files: ewl_engine_evas_software_x11.c Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_software_x11/ewl_engine_evas_software_x11.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_engine_evas_software_x11.c 7 Jul 2006 21:06:26 -0000 1.3 +++ ewl_engine_evas_software_x11.c 11 Jul 2006 01:06:39 -0000 1.4 @@ -21,15 +21,16 @@ } }; -Ecore_List * +Ecore_DList * ewl_engine_dependancies(void) { - Ecore_List *d; + Ecore_DList *d; DENTER_FUNCTION(DLEVEL_STABLE); - d = ecore_list_new(); - ecore_list_append(d, strdup("x11")); + d = ecore_dlist_new(); + ecore_dlist_append(d, strdup("x11")); + ecore_dlist_append(d, strdup("evas")); DRETURN_PTR(d, DLEVEL_STABLE); } |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:07:10
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas_gl_x11 Modified Files: ewl_engine_evas_gl_x11.c Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/engines/evas_gl_x11/ewl_engine_evas_gl_x11.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewl_engine_evas_gl_x11.c 7 Jul 2006 21:06:26 -0000 1.3 +++ ewl_engine_evas_gl_x11.c 11 Jul 2006 01:06:39 -0000 1.4 @@ -21,15 +21,16 @@ } }; -Ecore_List * +Ecore_DList * ewl_engine_dependancies(void) { - Ecore_List *d; + Ecore_DList *d; DENTER_FUNCTION(DLEVEL_STABLE); - d = ecore_list_new(); - ecore_list_append(d, strdup("x11")); + d = ecore_dlist_new(); + ecore_dlist_append(d, strdup("x11")); + ecore_dlist_append(d, strdup("evas")); DRETURN_PTR(d, DLEVEL_STABLE); } |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:07:11
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl Modified Files: configure.in Log Message: Generic evas engine. Fix engine multiple layer fallbacks. Freeze and thaw the canvas through the engine hooks as a test case. =================================================================== RCS file: /cvs/e/e17/libs/ewl/configure.in,v retrieving revision 1.73 retrieving revision 1.74 diff -u -3 -r1.73 -r1.74 --- configure.in 22 Jun 2006 01:12:27 -0000 1.73 +++ configure.in 11 Jul 2006 01:06:38 -0000 1.74 @@ -233,6 +233,7 @@ src/lib/Makefile src/engines/Makefile src/engines/x11/Makefile +src/engines/evas/Makefile src/engines/evas_software_x11/Makefile src/engines/evas_gl_x11/Makefile src/engines/evas_fb/Makefile |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:10:03
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas Log Message: Directory /cvs/e/e17/libs/ewl/src/engines/evas added to the repository |
From: Enlightenment C. <no...@cv...> - 2006-07-10 20:10:52
|
Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ewl Dir : e17/libs/ewl/src/engines/evas Added Files: .cvsignore Ewl_Engine_Evas.h Makefile.am ewl_engine_evas.c Log Message: Add the generic evas backend. |