Enlightenment CVS committal Author : moom Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_embed.c etk_embed.h etk_main.c etk_toplevel_widget.c etk_toplevel_widget.h etk_window.c Log Message: * [Fix]The windows of the menus and of the comboboxes were incorrecly placed. =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_embed.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etk_embed.c 24 Jun 2006 15:59:12 -0000 1.1 +++ etk_embed.c 25 Jun 2006 02:22:04 -0000 1.2 @@ -11,8 +11,10 @@ * @addtogroup Etk_Embed * @{ */ - + +static void _etk_embed_constructor(Etk_Embed *embed); static void _etk_embed_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h); +static void _etk_embed_object_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h); /************************** * @@ -30,7 +32,8 @@ if (!embed_type) { - embed_type = etk_type_new("Etk_Embed", ETK_TOPLEVEL_WIDGET_TYPE, sizeof(Etk_Embed), NULL, NULL); + embed_type = etk_type_new("Etk_Embed", ETK_TOPLEVEL_WIDGET_TYPE, sizeof(Etk_Embed), + ETK_CONSTRUCTOR(_etk_embed_constructor), NULL); } return embed_type; @@ -39,9 +42,13 @@ /** * @brief Creates a new embed widget * @param evas the evas where the embed object should belong + * @param window_position_get the function to call to know the top-left corner of the window containing the evas. @n + * It's used to place correctly the menu and the combobox windows. If the embed widget does not contains a menu bar or a + * combobox, you can set it to NULL. + * @param window_data the data to pass as the first param when @a window_position_get is called. It can be set to NULL. * @return Returns the new embed widget, or NULL on failure (if the evas is invalid) */ -Etk_Widget *etk_embed_new(Evas *evas) +Etk_Widget *etk_embed_new(Evas *evas, void (*window_position_get)(void *window_data, int *x, int *y), void *window_data) { Etk_Widget *embed; @@ -49,8 +56,11 @@ return NULL; embed = etk_widget_new(ETK_EMBED_TYPE, NULL); + ETK_EMBED(embed)->window_position_get; + ETK_EMBED(embed)->window_data = window_data; ETK_TOPLEVEL_WIDGET(embed)->evas = evas; ETK_TOPLEVEL_WIDGET(embed)->geometry_get = _etk_embed_geometry_get; + ETK_TOPLEVEL_WIDGET(embed)->geometry_get = _etk_embed_object_geometry_get; /* TODO: font path */ evas_font_path_append(evas, PACKAGE_DATA_DIR "/fonts/"); @@ -65,6 +75,8 @@ return NULL; } + etk_object_notify(ETK_OBJECT(embed), "evas"); + return embed; } @@ -83,12 +95,46 @@ /************************** * + * Etk specific functions + * + **************************/ + +/* Initializes the embed widget */ +static void _etk_embed_constructor(Etk_Embed *embed) +{ + if (!embed) + return; + + embed->window_position_get = NULL; + embed->window_data = NULL; +} + +/************************** + * * Callbacks and handlers * **************************/ -/* Gets the geometry of the embed widget */ +/* Gets the geometry of the embed toplevel widget */ static void _etk_embed_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h) +{ + Etk_Embed *embed; + int win_x, win_y; + + if (!(embed = ETK_EMBED(toplevel))) + return; + + etk_widget_geometry_get(ETK_WIDGET(toplevel), x, y, w, h); + if (embed->window_position_get) + { + embed->window_position_get(embed->window_data, &win_x, &win_y); + x += win_x; + y += win_y; + } +} + +/* Gets the geometry of the evas object of the embed toplevel widget */ +static void _etk_embed_object_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h) { etk_widget_geometry_get(ETK_WIDGET(toplevel), x, y, w, h); } =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_embed.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etk_embed.h 24 Jun 2006 15:59:12 -0000 1.1 +++ etk_embed.h 25 Jun 2006 02:22:04 -0000 1.2 @@ -27,10 +27,13 @@ /* private: */ /* Inherit from Etk_Toplevel_Widget */ Etk_Toplevel_Widget toplevel_widget; + + void (*window_position_get)(void *window_data, int *x, int *y); + void *window_data; }; Etk_Type *etk_embed_type_get(); -Etk_Widget *etk_embed_new(Evas *evas); +Etk_Widget *etk_embed_new(Evas *evas, void (*window_position_get)(void *window_data, int *x, int *y), void *window_data); Evas_Object *etk_embed_object_get(Etk_Embed *embed_widget); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- etk_main.c 24 Jun 2006 15:59:12 -0000 1.22 +++ etk_main.c 25 Jun 2006 02:22:04 -0000 1.23 @@ -226,6 +226,9 @@ Evas_List *l; Etk_Size unused_size; + if (!widget) + return; + etk_widget_size_request(widget, &unused_size); for (l = widget->children; l; l = l->next) _etk_main_size_request_recursive(ETK_WIDGET(l->data)); @@ -237,8 +240,14 @@ Evas_List *l; Etk_Geometry geometry; - if (is_top_level) - etk_toplevel_widget_geometry_get(ETK_TOPLEVEL_WIDGET(widget), &geometry.x, &geometry.y, &geometry.w, &geometry.h); + if (!widget) + return; + + if (is_top_level && ETK_TOPLEVEL_WIDGET(widget)->object_geometry_get) + { + ETK_TOPLEVEL_WIDGET(widget)->object_geometry_get(ETK_TOPLEVEL_WIDGET(widget), + &geometry.x, &geometry.y, &geometry.w, &geometry.h); + } else etk_widget_geometry_get(widget, &geometry.x, &geometry.y, &geometry.w, &geometry.h); etk_widget_size_allocate(widget, geometry); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_toplevel_widget.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- etk_toplevel_widget.c 13 May 2006 12:04:00 -0000 1.15 +++ etk_toplevel_widget.c 25 Jun 2006 02:22:04 -0000 1.16 @@ -235,6 +235,7 @@ toplevel_widget->pointer_stack = NULL; toplevel_widget->pointer_set = NULL; toplevel_widget->geometry_get = NULL; + toplevel_widget->object_geometry_get = NULL; ETK_WIDGET(toplevel_widget)->toplevel_parent = toplevel_widget; etk_signal_connect("realize", ETK_OBJECT(toplevel_widget), ETK_CALLBACK(_etk_toplevel_widget_realize_cb), NULL); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_toplevel_widget.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- etk_toplevel_widget.h 7 Apr 2006 15:36:11 -0000 1.7 +++ etk_toplevel_widget.h 25 Jun 2006 02:22:04 -0000 1.8 @@ -53,6 +53,7 @@ Evas *evas; void (*geometry_get)(Etk_Toplevel_Widget *toplevel_widget, int *x, int *y, int *w, int *h); + void (*object_geometry_get)(Etk_Toplevel_Widget *toplevel_widget, int *x, int *y, int *w, int *h); Etk_Widget *focused_widget; =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_window.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- etk_window.c 24 Jun 2006 15:59:12 -0000 1.21 +++ etk_window.c 25 Jun 2006 02:22:04 -0000 1.22 @@ -54,6 +54,7 @@ static void _etk_window_size_request_cb(Etk_Window *window, Etk_Size *requisition, void *data); static Etk_Bool _etk_window_delete_event_handler(Etk_Window *window); static void _etk_window_toplevel_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h); +static void _etk_window_toplevel_object_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h); static void _etk_window_pointer_set(Etk_Toplevel_Widget *toplevel_widget, Etk_Pointer_Type pointer_type); static Etk_Signal *_etk_window_signals[ETK_WINDOW_NUM_SIGNALS]; @@ -700,6 +701,7 @@ ETK_TOPLEVEL_WIDGET(window)->evas = ecore_evas_get(window->ecore_evas); ETK_TOPLEVEL_WIDGET(window)->pointer_set = _etk_window_pointer_set; ETK_TOPLEVEL_WIDGET(window)->geometry_get = _etk_window_toplevel_geometry_get; + ETK_TOPLEVEL_WIDGET(window)->object_geometry_get = _etk_window_toplevel_object_geometry_get; /* TODO: font path */ evas_font_path_append(ETK_TOPLEVEL_WIDGET(window)->evas, PACKAGE_DATA_DIR "/fonts/"); @@ -944,10 +946,17 @@ /* Gets the geometry of the window toplevel widget */ static void _etk_window_toplevel_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h) { - if (x) - *x = 0; - if (y) - *y = 0; + etk_window_geometry_get(ETK_WINDOW(toplevel), x, y, w, h); +} + +/* Gets the geometry of the evas object of the window toplevel widget */ +static void _etk_window_toplevel_object_geometry_get(Etk_Toplevel_Widget *toplevel, int *x, int *y, int *w, int *h) +{ + if (!toplevel) + return; + + if (x) *x = 0; + if (y) *y = 0; etk_window_geometry_get(ETK_WINDOW(toplevel), NULL, NULL, w, h); } Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs