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

Reply via email to