Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_toplevel_widget.c etk_viewport.c etk_viewport.h 
        etk_widget.c etk_widget.h etk_window.c 


Log Message:
* Fix some potential bugs and make etk_widget_realize/unrealize 
functions private because calling them manually can be dangerous


===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_toplevel_widget.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- etk_toplevel_widget.c       11 Feb 2006 00:28:35 -0000      1.10
+++ etk_toplevel_widget.c       12 Feb 2006 20:08:20 -0000      1.11
@@ -12,6 +12,7 @@
 
 enum _Etk_Toplevel_Widget_Property_Id
 {
+   ETK_TOPLEVEL_WIDGET_EVAS_PROPERTY,
    ETK_TOPLEVEL_WIDGET_FOCUSED_WIDGET_PROPERTY
 };
 
@@ -41,6 +42,7 @@
    {
       toplevel_widget_type = etk_type_new("Etk_Toplevel_Widget", ETK_BIN_TYPE, 
sizeof(Etk_Toplevel_Widget), ETK_CONSTRUCTOR(_etk_toplevel_widget_constructor), 
ETK_DESTRUCTOR(_etk_toplevel_widget_destructor));
       
+      etk_type_property_add(toplevel_widget_type, "evas", 
ETK_TOPLEVEL_WIDGET_EVAS_PROPERTY, ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE, 
etk_property_value_pointer(NULL));
       etk_type_property_add(toplevel_widget_type, "focused_widget", 
ETK_TOPLEVEL_WIDGET_FOCUSED_WIDGET_PROPERTY, ETK_PROPERTY_POINTER, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_pointer(NULL));
    
       toplevel_widget_type->property_set = _etk_toplevel_widget_property_set;
@@ -279,8 +281,11 @@
 
    switch (property_id)
    {
+      case ETK_TOPLEVEL_WIDGET_EVAS_PROPERTY:
+         etk_property_value_pointer_set(value, toplevel_widget->evas);
+         break;
       case ETK_TOPLEVEL_WIDGET_FOCUSED_WIDGET_PROPERTY:
-         etk_property_value_pointer_set(value, 
ETK_OBJECT(toplevel_widget->focused_widget));
+         etk_property_value_pointer_set(value, 
toplevel_widget->focused_widget);
          break;
       default:
          break;
@@ -297,19 +302,12 @@
 static void _etk_toplevel_widget_realize_cb(Etk_Object *object, void *data)
 {
    Etk_Toplevel_Widget *toplevel_widget;
-   Etk_Widget *widget;
 
    if (!(toplevel_widget = ETK_TOPLEVEL_WIDGET(object)))
       return;
 
-   widget = ETK_WIDGET(toplevel_widget);
-   if (toplevel_widget->focused_widget)
-   {
-      if (toplevel_widget->focused_widget->event_object)
-         evas_object_focus_set(toplevel_widget->focused_widget->event_object, 
1);
-   }
-   else if (widget->event_object)
-      evas_object_focus_set(widget->event_object, 1);
+   if (!toplevel_widget->focused_widget && 
ETK_WIDGET(toplevel_widget)->event_object)
+      evas_object_focus_set(ETK_WIDGET(toplevel_widget)->event_object, 1);
 }
 
 /**************************
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_viewport.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_viewport.c      22 Dec 2005 10:56:50 -0000      1.4
+++ etk_viewport.c      12 Feb 2006 20:08:20 -0000      1.5
@@ -32,9 +32,7 @@
    static Etk_Type *viewport_type = NULL;
 
    if (!viewport_type)
-   {
       viewport_type = etk_type_new("Etk_Viewport", ETK_BIN_TYPE, 
sizeof(Etk_Viewport), ETK_CONSTRUCTOR(_etk_viewport_constructor), NULL);
-   }
 
    return viewport_type;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_viewport.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_viewport.h      31 Oct 2005 21:36:40 -0000      1.1
+++ etk_viewport.h      12 Feb 2006 20:08:20 -0000      1.2
@@ -19,8 +19,8 @@
 
 /**
  * @struct Etk_Viewport
- * @brief A viewport is a bin container which has the ability to scroll. Thus, 
all the widgets that @
- * has no scrolling method have to be placed in a viewport, in order to be 
scrollable in an Etk_Scrolled_Window
+ * @brief A viewport is a bin container which has the ability to scroll. Thus, 
all the widgets that @n
+ * have no scrolling ability have to be placed in a viewport, in order to be 
scrollable in an Etk_Scrolled_View
  */
 struct _Etk_Viewport
 {
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- etk_widget.c        12 Feb 2006 13:13:45 -0000      1.29
+++ etk_widget.c        12 Feb 2006 20:08:20 -0000      1.30
@@ -107,6 +107,10 @@
 static void _etk_widget_key_down_cb(void *data, Evas *evas, Evas_Object 
*object, void *event_info);
 static void _etk_widget_signal_key_down_cb(Etk_Object *object, 
Etk_Event_Key_Up_Down *event, void *data);
 static void _etk_widget_key_up_cb(void *data, Evas *evas, Evas_Object *object, 
void *event_info);
+static void _etk_widget_toplevel_evas_changed_cb(Etk_Object *object, const 
char *property_name, void *data);
+
+static void _etk_widget_realize(Etk_Widget *widget);
+static void _etk_widget_unrealize(Etk_Widget *widget);
 
 static void _etk_widget_toplevel_parent_set(Etk_Widget *widget, 
Etk_Toplevel_Widget *toplevel_parent);
 static void _etk_widget_realize_all(Etk_Widget *widget);
@@ -174,13 +178,13 @@
       _etk_widget_signals[ETK_WIDGET_LEAVE_SIGNAL] =         
etk_signal_new("leave",         widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
leave),   etk_marshaller_VOID__VOID,    NULL, NULL);
       _etk_widget_signals[ETK_WIDGET_FOCUS_SIGNAL] =         
etk_signal_new("focus",         widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
focus),   etk_marshaller_VOID__VOID,    NULL, NULL);
       _etk_widget_signals[ETK_WIDGET_UNFOCUS_SIGNAL] =       
etk_signal_new("unfocus",       widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
unfocus), etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_SCROLL_SIZE_CHANGED_SIGNAL] = 
etk_signal_new("scroll_size_changed", widget_type, -1, 
etk_marshaller_VOID__VOID, NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_DROP_SIGNAL] =     
etk_signal_new("drag_drop",      widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_drop),   etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_MOTION_SIGNAL] =   
etk_signal_new("drag_motion",    widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_motion), etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_LEAVE_SIGNAL] =    
etk_signal_new("drag_leave",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_leave),  etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_SELECTION_RECEIVED_SIGNAL] = 
etk_signal_new("selection_received",  widget_type, -1,                          
               etk_marshaller_VOID__POINTER, NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_CLIPBOARD_RECEIVED_SIGNAL] = 
etk_signal_new("clipboard_received",  widget_type, -1,                          
               etk_marshaller_VOID__POINTER, NULL, NULL);
-
+      _etk_widget_signals[ETK_WIDGET_DRAG_DROP_SIGNAL] =     
etk_signal_new("drag_drop",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_drop),   etk_marshaller_VOID__VOID, NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_DRAG_MOTION_SIGNAL] =   
etk_signal_new("drag_motion",   widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_motion), etk_marshaller_VOID__VOID, NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_DRAG_LEAVE_SIGNAL] =    
etk_signal_new("drag_leave",    widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_leave),  etk_marshaller_VOID__VOID, NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_SELECTION_RECEIVED_SIGNAL] = 
etk_signal_new("selection_received", widget_type, -1,                           
etk_marshaller_VOID__POINTER, NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_CLIPBOARD_RECEIVED_SIGNAL] = 
etk_signal_new("clipboard_received", widget_type, -1,                           
etk_marshaller_VOID__POINTER, NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_SCROLL_SIZE_CHANGED_SIGNAL] = 
etk_signal_new("scroll_size_changed", widget_type, -1,                         
etk_marshaller_VOID__VOID,    NULL, NULL);
+      
       etk_type_property_add(widget_type, "name",              
ETK_WIDGET_NAME_PROPERTY,              ETK_PROPERTY_STRING,  
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL));
       etk_type_property_add(widget_type, "parent",            
ETK_WIDGET_PARENT_PROPERTY,            ETK_PROPERTY_POINTER, 
ETK_PROPERTY_READABLE,          etk_property_value_pointer(NULL));
       etk_type_property_add(widget_type, "theme_file",        
ETK_WIDGET_THEME_FILE_PROPERTY,        ETK_PROPERTY_STRING,  
ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_string(etk_theme_widget_theme_get()));
@@ -355,137 +359,8 @@
       etk_object_notify(ETK_OBJECT(widget), "theme_group");
    }
    
-   if (widget->realized && (!widget->theme_file || !widget->theme_group))
-      etk_widget_unrealize(widget);
-   else if (widget->theme_file && widget->theme_group)
-      etk_widget_realize(widget);
-}
-
-/**
- * @brief Realizes the widget: it will load the theme and allocate the 
graphical ressources
- * @param widget the widget to realize
- * @note It shouldn't be called manually, it's mainly called by widget 
implementations
- */
-void etk_widget_realize(Etk_Widget *widget)
-{
-   Evas *evas = NULL;
-   Evas_List *l;
-   Etk_Widget *child;
-
-   if (!widget || !(evas = etk_widget_toplevel_evas_get(widget)))
-      return;
-
-   if (widget->realized)
-      etk_widget_unrealize(widget);
-
-   widget->event_object = _etk_widget_event_object_add(evas, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_IN, _etk_widget_mouse_in_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_OUT, _etk_widget_mouse_out_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_MOVE, _etk_widget_mouse_move_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_DOWN, _etk_widget_mouse_down_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_UP, _etk_widget_mouse_up_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_WHEEL, _etk_widget_mouse_wheel_cb, widget);
-   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_KEY_DOWN, _etk_widget_key_down_cb, widget);
-   evas_object_event_callback_add(widget->event_object, EVAS_CALLBACK_KEY_UP, 
_etk_widget_key_up_cb, widget);
-   
-   if (widget->parent && widget->parent->event_object)
-      _etk_widget_object_add_to_smart(widget->parent, widget->event_object);
-   for (l = widget->children; l; l = l->next)
-   {
-      child = ETK_WIDGET(l->data);
-      if (child->event_object)
-         _etk_widget_object_add_to_smart(widget, child->event_object);
-   }
-   
-   if (ETK_IS_TOPLEVEL_WIDGET(widget) || (widget->parent && 
widget->parent->event_object &&
-         evas_object_visible_get(widget->parent->event_object) && 
widget->visible))
-      evas_object_show(widget->event_object);
-   else
-      evas_object_hide(widget->event_object);
-   
-   if (widget->clip)
-   {
-      evas_object_show(widget->clip);
-      evas_object_clip_set(widget->event_object, widget->clip);
-   }
-
-   evas_object_propagate_events_set(widget->event_object, 0);
-   evas_object_repeat_events_set(widget->event_object, widget->repeat_events);
-   evas_object_pass_events_set(widget->event_object, widget->pass_events);
-   
-   if (widget->theme_file && widget->theme_group)
-   {
-      /* TODO: use etk_theme */
-      widget->theme_object = edje_object_add(evas);
-      if (!edje_object_file_set(widget->theme_object, widget->theme_file, 
widget->theme_group))
-      {
-         ETK_WARNING("Can't load theme %s:%s", widget->theme_file, 
widget->theme_group);
-         evas_object_del(widget->theme_object);
-         widget->theme_object = NULL;
-      }
-      else
-      {
-         if (etk_widget_theme_object_data_get(widget, "inset", "%d %d %d %d", 
&widget->left_inset, &widget->right_inset, &widget->top_inset, 
&widget->bottom_inset) != 4)
-         {
-            widget->left_inset = 0;
-            widget->right_inset = 0;
-            widget->top_inset = 0;
-            widget->bottom_inset = 0;
-         }
-         etk_widget_member_object_add(widget, widget->theme_object);
-         evas_object_show(widget->theme_object);
-         etk_widget_member_object_lower(widget, widget->theme_object);
-      }
-   }
-
-   widget->need_theme_min_size_recalc = ETK_TRUE;
-   widget->realized = ETK_TRUE;
-
-   etk_signal_emit(_etk_widget_signals[ETK_WIDGET_REALIZE_SIGNAL], 
ETK_OBJECT(widget), NULL);
-   etk_widget_size_recalc_queue(widget);
-}
-
-/**
- * @brief Unrealizes the widget: it will unload the theme and free the 
graphical ressources
- * @param widget the widget to unrealize
- * @note It shouldn't be called manually, it's mainly called by widget 
implementations
- */
-void etk_widget_unrealize(Etk_Widget *widget)
-{
-   Etk_Widget_Member_Object *m;
-   Etk_Widget_Swallowed_Object *swallowed_object;
-
-   if (!widget || !widget->realized)
-      return;
-
-   while (widget->swallowed_objects)
-   {
-      swallowed_object = widget->swallowed_objects->data;
-      etk_widget_theme_object_unswallow(widget, swallowed_object->object);
-   }
-   
-   widget->theme_object = NULL;
-   while (widget->member_objects)
-   {
-      m = widget->member_objects->data;
-      evas_object_del(m->object);
-      free(m);
-      widget->member_objects = evas_list_remove_list(widget->member_objects, 
widget->member_objects);
-   }
-   
-   evas_object_del(widget->event_object);
-   widget->event_object = NULL;
-   
-   if (widget->clip)
-      evas_object_hide(widget->clip);
-   
-   widget->left_inset = 0;
-   widget->right_inset = 0;
-   widget->top_inset = 0;
-   widget->bottom_inset = 0;
-   
-   widget->realized = ETK_FALSE;
-   etk_signal_emit(_etk_widget_signals[ETK_WIDGET_UNREALIZE_SIGNAL], 
ETK_OBJECT(widget), NULL);
+   /* TODO */
+   _etk_widget_realize(widget);
 }
 
 /**
@@ -915,7 +790,6 @@
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_LEAVE_SIGNAL], 
ETK_OBJECT(widget), NULL);
 }
 
-/* TODO: etk_widget_focus: if the child is realized, focus it? */
 /**
  * @brief Focuses the widget
  * @param widget a widget
@@ -1495,7 +1369,7 @@
 void etk_widget_selection_received(Etk_Widget *widget, 
Etk_Event_Selection_Request *event)
 {
    if (!widget)
-     return;
+      return;
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_SELECTION_RECEIVED_SIGNAL], 
ETK_OBJECT(widget), NULL, event);
 }
 
@@ -1506,7 +1380,7 @@
 void etk_widget_clipboard_received(Etk_Widget *widget, 
Etk_Event_Selection_Request *event)
 {
    if (!widget)
-     return;
+      return;
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_CLIPBOARD_RECEIVED_SIGNAL], 
ETK_OBJECT(widget), NULL, event);
 }
 
@@ -1587,6 +1461,9 @@
    etk_signal_connect_full(_etk_widget_signals[ETK_WIDGET_MOUSE_OUT_SIGNAL], 
ETK_OBJECT(widget), ETK_CALLBACK(_etk_widget_signal_mouse_out_cb), NULL, 
ETK_FALSE, ETK_FALSE);
    etk_signal_connect_full(_etk_widget_signals[ETK_WIDGET_MOUSE_DOWN_SIGNAL], 
ETK_OBJECT(widget), ETK_CALLBACK(_etk_widget_signal_mouse_down_cb), NULL, 
ETK_FALSE, ETK_FALSE);
    etk_signal_connect_full(_etk_widget_signals[ETK_WIDGET_KEY_DOWN_SIGNAL], 
ETK_OBJECT(widget), ETK_CALLBACK(_etk_widget_signal_key_down_cb), NULL, 
ETK_FALSE, ETK_FALSE);
+   
+   if (ETK_IS_TOPLEVEL_WIDGET(widget))
+      etk_object_notification_callback_add(ETK_OBJECT(widget), "evas", 
_etk_widget_toplevel_evas_changed_cb, NULL);
 }
 
 /* Destroys the widget */
@@ -1597,7 +1474,7 @@
    if (!widget)
       return;
 
-   etk_widget_unrealize(widget);
+   _etk_widget_unrealize(widget);
    while (widget->children)
       etk_object_destroy(ETK_OBJECT(widget->children->data));
    
@@ -2083,12 +1960,150 @@
       _etk_widget_key_up_cb(widget->parent, evas, NULL, event_info);
 }
 
+/* Called when the widget is a toplevel widget and when its evas is changed */
+static void _etk_widget_toplevel_evas_changed_cb(Etk_Object *object, const 
char *property_name, void *data)
+{
+   Etk_Widget *widget;
+   Evas *evas;
+   
+   if (!(widget = ETK_WIDGET(object)))
+      return;
+   
+   evas = etk_toplevel_widget_evas_get(ETK_TOPLEVEL_WIDGET(widget));
+   if (evas && (!widget->event_object || 
evas_object_evas_get(widget->event_object) != evas))
+      _etk_widget_realize_all(widget);
+   else if (!evas && widget->event_object)
+      _etk_widget_unrealize_all(widget);
+}
+
 /**************************
  *
  * Private functions
  *
  **************************/
 
+/* Realizes the widget: it will load the theme and allocate the graphical 
ressources */
+static void _etk_widget_realize(Etk_Widget *widget)
+{
+   Evas *evas = NULL;
+   Evas_List *l;
+   Etk_Widget *child;
+   
+   if (!widget || !(evas = etk_widget_toplevel_evas_get(widget)))
+      return;
+   
+   if (widget->realized)
+      _etk_widget_unrealize(widget);
+
+   widget->event_object = _etk_widget_event_object_add(evas, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_IN, _etk_widget_mouse_in_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_OUT, _etk_widget_mouse_out_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_MOVE, _etk_widget_mouse_move_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_DOWN, _etk_widget_mouse_down_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_UP, _etk_widget_mouse_up_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_MOUSE_WHEEL, _etk_widget_mouse_wheel_cb, widget);
+   evas_object_event_callback_add(widget->event_object, 
EVAS_CALLBACK_KEY_DOWN, _etk_widget_key_down_cb, widget);
+   evas_object_event_callback_add(widget->event_object, EVAS_CALLBACK_KEY_UP, 
_etk_widget_key_up_cb, widget);
+   
+   if (widget->parent && widget->parent->event_object)
+      _etk_widget_object_add_to_smart(widget->parent, widget->event_object);
+   for (l = widget->children; l; l = l->next)
+   {
+      child = ETK_WIDGET(l->data);
+      if (child->event_object)
+         _etk_widget_object_add_to_smart(widget, child->event_object);
+   }
+   
+   if (ETK_IS_TOPLEVEL_WIDGET(widget) || (widget->parent && 
widget->parent->event_object &&
+         evas_object_visible_get(widget->parent->event_object) && 
widget->visible))
+      evas_object_show(widget->event_object);
+   else
+      evas_object_hide(widget->event_object);
+   
+   if (widget->clip)
+   {
+      evas_object_show(widget->clip);
+      evas_object_clip_set(widget->event_object, widget->clip);
+   }
+
+   evas_object_propagate_events_set(widget->event_object, 0);
+   evas_object_repeat_events_set(widget->event_object, widget->repeat_events);
+   evas_object_pass_events_set(widget->event_object, widget->pass_events);
+   
+   if (widget->toplevel_parent && (widget == 
etk_toplevel_widget_focused_widget_get(widget->toplevel_parent)))
+      evas_object_focus_set(widget->event_object, 1);
+   
+   if (widget->theme_file && widget->theme_group)
+   {
+      /* TODO: use etk_theme */
+      widget->theme_object = edje_object_add(evas);
+      if (!edje_object_file_set(widget->theme_object, widget->theme_file, 
widget->theme_group))
+      {
+         ETK_WARNING("Can't load theme %s:%s", widget->theme_file, 
widget->theme_group);
+         evas_object_del(widget->theme_object);
+         widget->theme_object = NULL;
+      }
+      else
+      {
+         if (etk_widget_theme_object_data_get(widget, "inset", "%d %d %d %d", 
&widget->left_inset, &widget->right_inset, &widget->top_inset, 
&widget->bottom_inset) != 4)
+         {
+            widget->left_inset = 0;
+            widget->right_inset = 0;
+            widget->top_inset = 0;
+            widget->bottom_inset = 0;
+         }
+         etk_widget_member_object_add(widget, widget->theme_object);
+         evas_object_show(widget->theme_object);
+         etk_widget_member_object_lower(widget, widget->theme_object);
+      }
+   }
+
+   widget->need_theme_min_size_recalc = ETK_TRUE;
+   widget->realized = ETK_TRUE;
+
+   etk_signal_emit(_etk_widget_signals[ETK_WIDGET_REALIZE_SIGNAL], 
ETK_OBJECT(widget), NULL);
+   etk_widget_size_recalc_queue(widget);
+}
+
+/* Unrealizes the widget: it will unload the theme and free the graphical 
ressources */
+static void _etk_widget_unrealize(Etk_Widget *widget)
+{
+   Etk_Widget_Member_Object *m;
+   Etk_Widget_Swallowed_Object *swallowed_object;
+
+   if (!widget || !widget->realized)
+      return;
+
+   while (widget->swallowed_objects)
+   {
+      swallowed_object = widget->swallowed_objects->data;
+      etk_widget_theme_object_unswallow(widget, swallowed_object->object);
+   }
+   
+   widget->theme_object = NULL;
+   while (widget->member_objects)
+   {
+      m = widget->member_objects->data;
+      evas_object_del(m->object);
+      free(m);
+      widget->member_objects = evas_list_remove_list(widget->member_objects, 
widget->member_objects);
+   }
+   
+   evas_object_del(widget->event_object);
+   widget->event_object = NULL;
+   
+   if (widget->clip)
+      evas_object_hide(widget->clip);
+   
+   widget->left_inset = 0;
+   widget->right_inset = 0;
+   widget->top_inset = 0;
+   widget->bottom_inset = 0;
+   
+   widget->realized = ETK_FALSE;
+   etk_signal_emit(_etk_widget_signals[ETK_WIDGET_UNREALIZE_SIGNAL], 
ETK_OBJECT(widget), NULL);
+}
+
 /* Used by etk_widget_parent_set */
 static void _etk_widget_toplevel_parent_set(Etk_Widget *widget, 
Etk_Toplevel_Widget *toplevel_parent)
 {
@@ -2110,7 +2125,7 @@
    if (!widget)
       return;
 
-   etk_widget_realize(widget);
+   _etk_widget_realize(widget);
    for (l = widget->children; l; l = l->next)
       _etk_widget_realize_all(ETK_WIDGET(l->data));
 }
@@ -2123,7 +2138,7 @@
    if (!widget)
       return;
 
-   etk_widget_unrealize(widget);
+   _etk_widget_unrealize(widget);
    for (l = widget->children; l; l = l->next)
       _etk_widget_unrealize_all(ETK_WIDGET(l->data));
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- etk_widget.h        12 Feb 2006 13:13:45 -0000      1.18
+++ etk_widget.h        12 Feb 2006 20:08:20 -0000      1.19
@@ -206,9 +206,6 @@
 Etk_Toplevel_Widget *etk_widget_toplevel_parent_get(Etk_Widget *widget);
 Evas *etk_widget_toplevel_evas_get(Etk_Widget *widget);
 void etk_widget_theme_set(Etk_Widget *widget, const char *theme_file, const 
char *theme_group);
-void etk_widget_realize(Etk_Widget *widget);
-void etk_widget_unrealize(Etk_Widget *widget);
-
 void etk_widget_parent_set(Etk_Widget *widget, Etk_Widget *parent);
 
 void etk_widget_repeat_events_set(Etk_Widget *widget, Etk_Bool repeat_events);
@@ -276,7 +273,6 @@
 void etk_widget_drag_leave(Etk_Widget *widget);
 
 void etk_widget_selection_received(Etk_Widget *widget, 
Etk_Event_Selection_Request *event);
-
 void etk_widget_clipboard_received(Etk_Widget *widget, 
Etk_Event_Selection_Request *event);
 
 /** @} */
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_window.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- etk_window.c        11 Feb 2006 10:27:14 -0000      1.11
+++ etk_window.c        12 Feb 2006 20:08:20 -0000      1.12
@@ -510,8 +510,7 @@
    etk_signal_connect("size_request", ETK_OBJECT(window), 
ETK_CALLBACK(_etk_window_size_request_cb), NULL);
    etk_signal_connect_swapped("show", ETK_OBJECT(window), 
ETK_CALLBACK(ecore_evas_show), window->ecore_evas);
    etk_signal_connect_swapped("hide", ETK_OBJECT(window), 
ETK_CALLBACK(ecore_evas_hide), window->ecore_evas);
-   
-   etk_widget_realize(ETK_WIDGET(window));
+   etk_object_notify(ETK_OBJECT(window), "evas");
 }
 
 /* Destroys the window */




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to