Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_button.c etk_button.h etk_container.c etk_entry.c 
        etk_label.c etk_menu.c etk_radio_button.c etk_radio_button.h 
        etk_toggle_button.c etk_toggle_button.h etk_widget.c 
        etk_widget.h 


Log Message:
* [Radio button] Etk_Radio_Button now inherits from Etk_Toggle_Button 
       and no longer from Etk_Check_Button
* [Button] Make sure the button's label receive the same theme-signals 
       as the button
* Formatting


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_button.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- etk_button.c        25 Mar 2007 18:22:00 -0000      1.39
+++ etk_button.c        1 Apr 2007 19:09:31 -0000       1.40
@@ -38,12 +38,19 @@
 static void _etk_button_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_button_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_button_realized_cb(Etk_Object *object, void *data);
+static void _etk_button_label_realized_cb(Etk_Object *object, void *data);
 static void _etk_button_image_removed_cb(Etk_Object *object, Etk_Widget 
*child, void *data);
 static void _etk_button_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data);
 static void _etk_button_key_up_cb(Etk_Object *object, Etk_Event_Key_Up *event, 
void *data);
 static void _etk_button_mouse_down_cb(Etk_Object *object, Etk_Event_Mouse_Down 
*event, void *data);
 static void _etk_button_mouse_up_cb(Etk_Object *object, Etk_Event_Mouse_Up 
*event, void *data);
 static void _etk_button_mouse_click_cb(Etk_Object *object, Etk_Event_Mouse_Up 
*event, void *data);
+static void _etk_button_entered_handler(Etk_Widget *widget);
+static void _etk_button_left_handler(Etk_Widget *widget);
+static void _etk_button_focused_handler(Etk_Widget *widget);
+static void _etk_button_unfocused_handler(Etk_Widget *widget);
+static void _etk_button_enabled_handler(Etk_Widget *widget);
+static void _etk_button_disabled_handler(Etk_Widget *widget);
 static void _etk_button_pressed_handler(Etk_Button *button);
 static void _etk_button_released_handler(Etk_Button *button);
 static void _etk_button_clicked_handler(Etk_Button *button);
@@ -227,8 +234,7 @@
  * @brief Sets the image of the button
  * @param button a button
  * @param image the image to set
- * @note The current image will be destroyed only if it has been set with 
etk_button_new_from_stock()
- * or with etk_button_set_from_stock(). Otherwise, it will just be unpacked 
and you'll still be able to use it
+ * @note If the button already has an image, the current image will just be 
unpacked, it will not be destroyed
  * @note The image will be automatically shown, but you can still manually 
hide it with calling etk_widget_hide()
  * after having called etk_button_image_set()
  */
@@ -240,15 +246,11 @@
    if (button->image)
    {
       button->ignore_image_remove = ETK_TRUE;
-      if (button->image_from_stock)
-         etk_object_destroy(ETK_OBJECT(button->image));
-      else
-         etk_container_remove(ETK_WIDGET(button->image));
+      etk_object_destroy(ETK_OBJECT(button->image));
       button->ignore_image_remove = ETK_FALSE;
    }
 
    button->image = image;
-   button->image_from_stock = ETK_FALSE;
    _etk_button_rebuild(button);
    etk_object_notify(ETK_OBJECT(button), "image");
 }
@@ -285,61 +287,6 @@
    image = etk_image_new_from_stock(stock_id, button->stock_size);
    etk_widget_internal_set(image, ETK_TRUE);
    etk_button_image_set(ETK_BUTTON(button), ETK_IMAGE(image));
-   button->image_from_stock = ETK_TRUE;
-}
-
-/**
- * @brief Sets the alignment of the child of the button
- * @param button a button
- * @param xalign the horizontal alignment (0.0 = left, 0.5 = center, 1.0 = 
right, ...)
- * @param yalign the vertical alignment (0.0 = top, 0.5 = center, 1.0 = 
bottom, ...)
- * @note It only has effect if the child is a label or an alignment
- */
-void etk_button_alignment_set(Etk_Button *button, float xalign, float yalign)
-{
-   Etk_Widget *child;
-
-   if (!button)
-      return;
-
-   if ((child = etk_bin_child_get(ETK_BIN(button))))
-   {
-      if (ETK_IS_LABEL(child))
-         etk_label_alignment_set(ETK_LABEL(child), xalign, yalign);
-      else if (ETK_IS_ALIGNMENT(child))
-      {
-         Etk_Alignment *child_alignment = ETK_ALIGNMENT(child);
-         float xscale, yscale;
-      
-         etk_alignment_get(child_alignment, NULL, NULL, &xscale, &yscale);
-         etk_alignment_set(child_alignment, xalign, yalign, xscale, yscale);
-      }
-   }
-
-   if (button->xalign != xalign)
-   {
-      button->xalign = xalign;
-      etk_object_notify(ETK_OBJECT(button), "xalign");
-   }
-   if (button->yalign != yalign)
-   {
-      button->yalign = yalign;
-      etk_object_notify(ETK_OBJECT(button), "yalign");
-   }
-}
-
-/**
- * @brief Gets the alignment of the button's child
- * @param button a button
- * @param xalign the location where to store the horizontal alignment
- * @param yalign the location where to store the vertical alignment
- */
-void etk_button_alignment_get(Etk_Button *button, float *xalign, float *yalign)
-{
-   if (xalign)
-      *xalign = button ? button->xalign : 0;
-   if (yalign)
-      *yalign = button ? button->yalign : 0;
 }
 
 /**
@@ -414,6 +361,60 @@
    return button->stock_size;
 }
 
+/**
+ * @brief Sets the alignment of the child of the button
+ * @param button a button
+ * @param xalign the horizontal alignment (0.0 = left, 0.5 = center, 1.0 = 
right, ...)
+ * @param yalign the vertical alignment (0.0 = top, 0.5 = center, 1.0 = 
bottom, ...)
+ * @note It only has effect if the child is a label or an alignment
+ */
+void etk_button_alignment_set(Etk_Button *button, float xalign, float yalign)
+{
+   Etk_Widget *child;
+
+   if (!button)
+      return;
+
+   if ((child = etk_bin_child_get(ETK_BIN(button))))
+   {
+      if (ETK_IS_LABEL(child))
+         etk_label_alignment_set(ETK_LABEL(child), xalign, yalign);
+      else if (ETK_IS_ALIGNMENT(child))
+      {
+         Etk_Alignment *child_alignment = ETK_ALIGNMENT(child);
+         float xscale, yscale;
+      
+         etk_alignment_get(child_alignment, NULL, NULL, &xscale, &yscale);
+         etk_alignment_set(child_alignment, xalign, yalign, xscale, yscale);
+      }
+   }
+
+   if (button->xalign != xalign)
+   {
+      button->xalign = xalign;
+      etk_object_notify(ETK_OBJECT(button), "xalign");
+   }
+   if (button->yalign != yalign)
+   {
+      button->yalign = yalign;
+      etk_object_notify(ETK_OBJECT(button), "yalign");
+   }
+}
+
+/**
+ * @brief Gets the alignment of the button's child
+ * @param button a button
+ * @param xalign the location where to store the horizontal alignment
+ * @param yalign the location where to store the vertical alignment
+ */
+void etk_button_alignment_get(Etk_Button *button, float *xalign, float *yalign)
+{
+   if (xalign)
+      *xalign = button ? button->xalign : 0;
+   if (yalign)
+      *yalign = button ? button->yalign : 0;
+}
+
 /**************************
  *
  * Etk specific functions
@@ -439,17 +440,23 @@
    etk_widget_pass_mouse_events_set(button->label, ETK_TRUE);
    etk_container_add(ETK_CONTAINER(button), button->label);
 
-   button->pressed_handler = _etk_button_pressed_handler;
-   button->released_handler = _etk_button_released_handler;
-   button->clicked_handler = _etk_button_clicked_handler;
-
    button->ignore_image_remove = ETK_FALSE;
    button->is_pressed = ETK_FALSE;
-   button->image_from_stock = ETK_FALSE;
    button->xalign = 0.5;
    button->yalign = 0.5;
 
+   ETK_WIDGET(button)->entered_handler = _etk_button_entered_handler;
+   ETK_WIDGET(button)->left_handler = _etk_button_left_handler;
+   ETK_WIDGET(button)->focused_handler = _etk_button_focused_handler;
+   ETK_WIDGET(button)->unfocused_handler = _etk_button_unfocused_handler;
+   ETK_WIDGET(button)->enabled_handler = _etk_button_enabled_handler;
+   ETK_WIDGET(button)->disabled_handler = _etk_button_disabled_handler;
+   button->pressed_handler = _etk_button_pressed_handler;
+   button->released_handler = _etk_button_released_handler;
+   button->clicked_handler = _etk_button_clicked_handler;
+
    etk_signal_connect("realized", ETK_OBJECT(button), 
ETK_CALLBACK(_etk_button_realized_cb), NULL);
+   etk_signal_connect("realized", ETK_OBJECT(button->label), 
ETK_CALLBACK(_etk_button_label_realized_cb), button);
    etk_signal_connect("key-down", ETK_OBJECT(button), 
ETK_CALLBACK(_etk_button_key_down_cb), NULL);
    etk_signal_connect("key-up", ETK_OBJECT(button), 
ETK_CALLBACK(_etk_button_key_up_cb), NULL);
    etk_signal_connect("mouse-down", ETK_OBJECT(button), 
ETK_CALLBACK(_etk_button_mouse_down_cb), NULL);
@@ -538,7 +545,26 @@
       return;
    
    if (button->is_pressed)
-      etk_widget_theme_signal_emit(ETK_WIDGET(button), "pressed", ETK_FALSE);
+   {
+      etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,pressed", 
ETK_FALSE);
+      etk_widget_theme_signal_emit(button->label, "etk,state,pressed", 
ETK_FALSE);
+   }
+}
+
+/* Called when the button's label is realized */
+static void _etk_button_label_realized_cb(Etk_Object *object, void *data)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(data)))
+      return;
+   
+   if (button->is_pressed)
+      etk_widget_theme_signal_emit(button->label, "etk,state,pressed", 
ETK_FALSE);
+   if (etk_widget_disabled_get(ETK_WIDGET(button)))
+      etk_widget_theme_signal_emit(button->label, "etk,state,disabled", 
ETK_FALSE);
+   if (etk_widget_is_focused(ETK_WIDGET(button)))
+      etk_widget_theme_signal_emit(button->label, "etk,state,focused", 
ETK_FALSE);
 }
 
 /* Called when the image is removed from the box */
@@ -630,12 +656,85 @@
       etk_button_click(button);
 }
 
+/* Default handler for the "entered" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_entered_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,enter", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,enter", ETK_FALSE);
+}
+
+/* Default handler for the "left" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_left_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,leave", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,leave", ETK_FALSE);
+}
+
+/* Default handler for the "focused" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_focused_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,focused", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,focused", ETK_FALSE);
+}
+
+/* Default handler for the "unfocused" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_unfocused_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,unfocused", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,unfocused", 
ETK_FALSE);
+}
+ 
+/* Default handler for the "enabled" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_enabled_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,enabled", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,enabled", ETK_FALSE);
+}
+
+/* Default handler for the "disabled" signal. We override this handler
+ * to make the button's label receives the same theme-signals as the button */
+static void _etk_button_disabled_handler(Etk_Widget *widget)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,disabled", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,disabled", 
ETK_FALSE);
+}
+
 /* Default handler for the "pressed" signal */
 static void _etk_button_pressed_handler(Etk_Button *button)
 {
    if (!button)
       return;
    etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,pressed", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,pressed", ETK_FALSE);
 }
 
 /* Default handler for the "released" signal */
@@ -644,6 +743,7 @@
    if (!button)
       return;
    etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,released", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,released", 
ETK_FALSE);
 }
 
 /* Default handler for the "clicked" signal */
@@ -652,7 +752,14 @@
    if (!button)
       return;
    etk_widget_theme_signal_emit(ETK_WIDGET(button), "etk,state,clicked", 
ETK_FALSE);
+   etk_widget_theme_signal_emit(button->label, "etk,state,clicked", ETK_FALSE);
 }
+
+/**************************
+ *
+ * Private functions
+ *
+ **************************/
 
 /* Rebuilds the default layout for the button */
 static void _etk_button_rebuild(Etk_Button *button)
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_button.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- etk_button.h        22 Mar 2007 19:36:51 -0000      1.16
+++ etk_button.h        1 Apr 2007 19:09:31 -0000       1.17
@@ -51,36 +51,35 @@
 
    Etk_Bool is_pressed;
    Etk_Bool ignore_image_remove;
-   Etk_Bool image_from_stock;
-   float xalign;
-   float yalign;
    Etk_Button_Style style;
    Etk_Stock_Size stock_size;
+   float xalign;
+   float yalign;
 };
 
 
-Etk_Type   *etk_button_type_get(void);
-Etk_Widget *etk_button_new(void);
-Etk_Widget *etk_button_new_with_label(const char *label);
-Etk_Widget *etk_button_new_from_stock(Etk_Stock_Id stock_id);
-
-void etk_button_press(Etk_Button *button);
-void etk_button_release(Etk_Button *button);
-void etk_button_click(Etk_Button *button);
-
-void        etk_button_label_set(Etk_Button *button, const char *label);
-const char *etk_button_label_get(Etk_Button *button);
-void        etk_button_image_set(Etk_Button *button, Etk_Image *image);
-Etk_Image  *etk_button_image_get(Etk_Button *button);
-void        etk_button_set_from_stock(Etk_Button *button, Etk_Stock_Id 
stock_id);
-
-void etk_button_alignment_set(Etk_Button *button, float xalign, float yalign);
-void etk_button_alignment_get(Etk_Button *button, float *xalign, float 
*yalign);
+Etk_Type        *etk_button_type_get(void);
+Etk_Widget      *etk_button_new(void);
+Etk_Widget      *etk_button_new_with_label(const char *label);
+Etk_Widget      *etk_button_new_from_stock(Etk_Stock_Id stock_id);
+
+void             etk_button_press(Etk_Button *button);
+void             etk_button_release(Etk_Button *button);
+void             etk_button_click(Etk_Button *button);
+
+void             etk_button_label_set(Etk_Button *button, const char *label);
+const char      *etk_button_label_get(Etk_Button *button);
+void             etk_button_image_set(Etk_Button *button, Etk_Image *image);
+Etk_Image       *etk_button_image_get(Etk_Button *button);
+void             etk_button_set_from_stock(Etk_Button *button, Etk_Stock_Id 
stock_id);
 
 void             etk_button_style_set(Etk_Button *button, Etk_Button_Style 
style);
 Etk_Button_Style etk_button_style_get(Etk_Button *button);
 void             etk_button_stock_size_set(Etk_Button *button, Etk_Stock_Size 
size);
 Etk_Stock_Size   etk_button_stock_size_get(Etk_Button *button);
+
+void             etk_button_alignment_set(Etk_Button *button, float xalign, 
float yalign);
+void             etk_button_alignment_get(Etk_Button *button, float *xalign, 
float *yalign);
 
 /** @} */
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_container.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- etk_container.c     30 Mar 2007 14:13:55 -0000      1.18
+++ etk_container.c     1 Apr 2007 19:09:31 -0000       1.19
@@ -23,7 +23,6 @@
 };
 
 static void _etk_container_constructor(Etk_Container *container);
-static void _etk_container_destructor(Etk_Container *container);
 static void _etk_container_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_container_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_container_child_added_cb(Etk_Object *object, Etk_Widget 
*child, void *data);
@@ -50,7 +49,7 @@
    if (!container_type)
    {
       container_type = etk_type_new("Etk_Container", ETK_WIDGET_TYPE, 
sizeof(Etk_Container),
-            ETK_CONSTRUCTOR(_etk_container_constructor), 
ETK_DESTRUCTOR(_etk_container_destructor));
+            ETK_CONSTRUCTOR(_etk_container_constructor), NULL);
    
       _etk_container_signals[ETK_CONTAINER_CHILD_ADDED_SIGNAL] = 
etk_signal_new("child-added",
             container_type, -1, etk_marshaller_VOID__POINTER, NULL, NULL);
@@ -259,19 +258,6 @@
    
    etk_signal_connect("child-added", ETK_OBJECT(container), 
ETK_CALLBACK(_etk_container_child_added_cb), NULL);
    etk_signal_connect("child-removed", ETK_OBJECT(container), 
ETK_CALLBACK(_etk_container_child_removed_cb), NULL);
-}
-
-/* Destroys the container */
-static void _etk_container_destructor(Etk_Container *container)
-{
-   if (!container)
-      return;
-   
-   /* We need to do that because Etk_Widget's destructor may
-    * still want to access those methods (TODO: no more need for this?) */
-   container->child_add = NULL;
-   container->child_remove = NULL;
-   container->children_get = NULL;
 }
 
 /* Sets the property whose id is "property_id" to the value "value" */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- etk_entry.c 22 Mar 2007 19:36:51 -0000      1.33
+++ etk_entry.c 1 Apr 2007 19:09:31 -0000       1.34
@@ -11,8 +11,7 @@
 #include "etk_signal_callback.h"
 #include "etk_utils.h"
 
-/* TODO: parent changed! */
-/* TODO: use etk_widget_color_set() instead of evas_object_color_set(...) when 
it'll be implemented... */
+/* TODO: what if the image is reparented?! */
 
 /**
  * @addtogroup Etk_Entry
@@ -297,7 +296,7 @@
       etk_signal_disconnect("mouse-up", ETK_OBJECT(image),
             ETK_CALLBACK(_etk_entry_image_mouse_up_cb));
 
-      evas_object_color_set(etk_image_evas_object_get(image), 255, 255, 255, 
255);
+      etk_widget_color_set(ETK_WIDGET(image), 255, 255, 255, 255);
    }
 }
 
@@ -857,7 +856,7 @@
    if (!(entry = ETK_ENTRY(data)) || !(image = ETK_IMAGE(widget)))
       return;
 
-   evas_object_color_set(etk_image_evas_object_get(image),
+   etk_widget_color_set(ETK_WIDGET(image),
          entry->highlight_color.r, entry->highlight_color.g,
          entry->highlight_color.b, entry->highlight_color.a);
 }
@@ -872,7 +871,7 @@
       return;
    if (!(image = ETK_IMAGE(widget)))
       return;
-   evas_object_color_set(etk_image_evas_object_get(image), 255, 255, 255, 255);
+   etk_widget_color_set(ETK_WIDGET(image), 255, 255, 255, 255);
 }
 
 /* Called when the mouse is pressed over the image */
@@ -883,8 +882,7 @@
 
    if (!(entry = ETK_ENTRY(data)) || !(image = ETK_IMAGE(widget)))
       return;
-   
-   evas_object_color_set(etk_image_evas_object_get(image), 255, 255, 255, 255);
+   etk_widget_color_set(ETK_WIDGET(image), 255, 255, 255, 255);
 }
 
 /* Called when the mouse released over the image */
@@ -896,7 +894,7 @@
    if (!(entry = ETK_ENTRY(data)) || !(image = ETK_IMAGE(widget)))
       return;
 
-   evas_object_color_set(etk_image_evas_object_get(image),
+   etk_widget_color_set(ETK_WIDGET(image),
          entry->highlight_color.r, entry->highlight_color.g,
          entry->highlight_color.b, entry->highlight_color.a);
 }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_label.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- etk_label.c 22 Mar 2007 19:36:51 -0000      1.29
+++ etk_label.c 1 Apr 2007 19:09:31 -0000       1.30
@@ -178,8 +178,6 @@
 
    widget->size_request = _etk_label_size_request;
    widget->size_allocate = _etk_label_size_allocate;
-   /* This allows the label to receive the same theme-signals as its 
theme-parent */
-   widget->emit_theme_parent_signals = ETK_TRUE;
 
    etk_signal_connect("realized", ETK_OBJECT(label), 
ETK_CALLBACK(_etk_label_realized_cb), NULL);
 }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_menu.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- etk_menu.c  25 Mar 2007 18:22:00 -0000      1.24
+++ etk_menu.c  1 Apr 2007 19:09:31 -0000       1.25
@@ -464,9 +464,15 @@
    if (item->submenu)
    {
       int mx, my, mw, item_y;
+      Etk_Menu_Item *first_item;
       
       item_y = ETK_WIDGET(item)->geometry.y;
       etk_window_geometry_get(ETK_WINDOW(menu->window), &mx, &my, &mw, NULL);
+      if (ETK_MENU_SHELL(item->submenu)->items)
+      {
+         first_item = 
ETK_MENU_ITEM(ETK_MENU_SHELL(item->submenu)->items->data);
+         my -= ETK_WIDGET(first_item)->geometry.y;
+      }
       etk_menu_popup_at_xy(item->submenu, mx + mw, my + item_y);
    }
 }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_radio_button.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_radio_button.c  22 Mar 2007 19:36:52 -0000      1.13
+++ etk_radio_button.c  1 Apr 2007 19:09:31 -0000       1.14
@@ -25,17 +25,17 @@
  * @brief Gets the type of an Etk_Radio_Button
  * @return Returns the type of an Etk_Radio_Button
  */
-Etk_Type *etk_radio_button_type_get()
+Etk_Type *etk_radio_button_type_get(void)
 {
    static Etk_Type *radio_button_type = NULL;
 
    if (!radio_button_type)
    {
-      radio_button_type = etk_type_new("Etk_Radio_Button", 
ETK_CHECK_BUTTON_TYPE, sizeof(Etk_Radio_Button),
-         ETK_CONSTRUCTOR(_etk_radio_button_constructor), 
ETK_DESTRUCTOR(_etk_radio_button_destructor));
+      radio_button_type = etk_type_new("Etk_Radio_Button", 
ETK_TOGGLE_BUTTON_TYPE, sizeof(Etk_Radio_Button),
+            ETK_CONSTRUCTOR(_etk_radio_button_constructor), 
ETK_DESTRUCTOR(_etk_radio_button_destructor));
 
       etk_type_property_add(radio_button_type, "group", 
ETK_RADIO_BUTTON_GROUP_PROPERTY,
-         ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE_WRITABLE,  
etk_property_value_pointer(NULL));
+            ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE_WRITABLE,  
etk_property_value_pointer(NULL));
    
       radio_button_type->property_set = _etk_radio_button_property_set;
       radio_button_type->property_get = _etk_radio_button_property_get;
@@ -45,9 +45,9 @@
 }
 
 /**
- * @brief Creates a new radio button
- * @param group the group to which the radio button will be added (NULL if the 
radio button should create its own group)
- * @return Returns the new radio button widget
+ * @brief Creates a new radio-button
+ * @param group the group to which the radio-button will be added (NULL if the 
radio-button should create its own group)
+ * @return Returns the new radio-button widget
  */
 Etk_Widget *etk_radio_button_new(Evas_List **group)
 {
@@ -56,9 +56,9 @@
 }
 
 /**
- * @brief Creates a new radio button. It will use the group of another radio 
button
- * @param radio_button the radio button whose group will be used by the new 
radio button
- * @return Returns the new radio button widget
+ * @brief Creates a new radio-button. It will use the group of another 
radio-button
+ * @param radio_button the radio-button whose group will be used by the new 
radio-button
+ * @return Returns the new radio-button widget
  */
 Etk_Widget *etk_radio_button_new_from_widget(Etk_Radio_Button *radio_button)
 {
@@ -67,10 +67,10 @@
 }
 
 /**
- * @brief Creates a new radio button with a label
+ * @brief Creates a new radio-button with a label
  * @param label the label
- * @param group the group to which the radio button will be added (NULL if the 
radio button should create its own group)
- * @return Returns the new radio button widget
+ * @param group the group to which the radio-button will be added (NULL if the 
radio-button should create its own group)
+ * @return Returns the new radio-button widget
  */
 Etk_Widget *etk_radio_button_new_with_label(const char *label, Evas_List 
**group)
 {
@@ -79,10 +79,10 @@
 }
 
 /**
- * @brief Creates a new radio button with a label. It will use the group of 
another radio button
+ * @brief Creates a new radio-button with a label. It will use the group of 
another radio-button
  * @param label the label
- * @param radio_button the radio button whose group will be used by the new 
radio button
- * @return Returns the new radio button widget
+ * @param radio_button the radio-button whose group will be used by the new 
radio-button
+ * @return Returns the new radio-button widget
  */
 Etk_Widget *etk_radio_button_new_with_label_from_widget(const char *label, 
Etk_Radio_Button *radio_button)
 {
@@ -91,8 +91,8 @@
 }
 
 /**
- * @brief Sets the group of the radio button
- * @param radio_button a radio button
+ * @brief Sets the group of the radio-button
+ * @param radio_button a radio-button
  * @param group the group to use
  */
 void etk_radio_button_group_set(Etk_Radio_Button *radio_button, Evas_List 
**group)
@@ -131,9 +131,9 @@
 }
 
 /**
- * @brief Gets the group of the radio button
- * @param radio_button a radio button
- * @return Returns the group used by the radio button
+ * @brief Gets the group of the radio-button
+ * @param radio_button a radio-button
+ * @return Returns the group used by the radio-button
  */
 Evas_List **etk_radio_button_group_get(Etk_Radio_Button *radio_button)
 {
@@ -148,7 +148,7 @@
  *
  **************************/
 
-/* Initializes the radio button */
+/* Initializes the radio-button */
 static void _etk_radio_button_constructor(Etk_Radio_Button *radio_button)
 {
    if (!radio_button)
@@ -159,7 +159,7 @@
    ETK_TOGGLE_BUTTON(radio_button)->active_set = _etk_radio_button_active_set;
 }
 
-/* Destroys the radio button */
+/* Destroys the radio-button */
 static void _etk_radio_button_destructor(Etk_Radio_Button *radio_button)
 {
    if (!radio_button || !radio_button->group)
@@ -215,7 +215,8 @@
  *
  **************************/
 
-/* Deactivates all the other radio buttons of the group when a radio button is 
activated */
+/* This function is called when the radio-button is turned on: it deactivates 
all
+ * the other radio-buttons of the group, and activate the given radio-button */
 static void _etk_radio_button_active_set(Etk_Toggle_Button *toggle_button, 
Etk_Bool active)
 {
    Etk_Radio_Button *radio_button;
@@ -233,7 +234,7 @@
    
       if (toggle_button->active)
       {
-         /* Uncheck the previously checked button of the group */
+         /* Deactivate the current active button of the group */
          for (l = *radio_button->group; l; l = l->next)
          {
             tb = ETK_TOGGLE_BUTTON(l->data);
@@ -260,17 +261,17 @@
  * @addtogroup Etk_Radio_Button
  *
  * @image html widgets/radio_button.png
- * When a radio button is activated, the other radio buttons of the same group 
are deactivated. This way, in a group,
- * only one radio button can be active. @n
- * Radio buttons are used when the user has to make a choice between several 
options. @n
+ * When a radio-button is activated, the other radio-buttons of the same group 
are deactivated. This way, in a group,
+ * only one radio-button can be active. @n
+ * Radio-buttons are used when the user has to make a choice between several 
options. @n
  *
- * To create several radio buttons belonging to the same group, you can first 
call etk_radio_button_new_with_label() to
- * create the first radio button, and then use 
etk_radio_button_new_with_label_from_widget() to create the other radio
+ * To create several radio-buttons belonging to the same group, you can first 
call etk_radio_button_new_with_label() to
+ * create the first radio-button, and then use 
etk_radio_button_new_with_label_from_widget() to create the other radio
  * buttons of the group. For example:
  * @code
  * Etk_Widget *radio_buttons[3];
  *
- * //Creates 3 radio buttons belonging to the same group
+ * //Creates 3 radio-buttons belonging to the same group
  * radio_buttons[0] = etk_radio_button_new_with_label("Option 1");
  * radio_buttons[1] = etk_radio_button_new_with_label_from_widget("Option 2", 
ETK_RADIO_BUTTON(radio_buttons[0]));
  * radio_buttons[2] = etk_radio_button_new_with_label_from_widget("Option 3", 
ETK_RADIO_BUTTON(radio_buttons[0]));
@@ -283,11 +284,10 @@
  *       - Etk_Bin
  *         - Etk_Button
  *           - Etk_Toggle_Button
- *             - Etk_Check_Button
- *               - Etk_Radio_Button
+ *             - Etk_Radio_Button
  *
  * \par Properties:
- * @prop_name "group": The group of the radio button
+ * @prop_name "group": The group of the radio-button
  * @prop_type Pointer (Evas_List **)
  * @prop_rw
  * @prop_val NULL
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_radio_button.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_radio_button.h  2 Jun 2006 18:46:34 -0000       1.4
+++ etk_radio_button.h  1 Apr 2007 19:09:31 -0000       1.5
@@ -3,12 +3,12 @@
 #define _ETK_RADIO_BUTTON_H_
 
 #include <Evas.h>
-#include "etk_check_button.h"
+#include "etk_toggle_button.h"
 #include "etk_types.h"
 
 /**
  * @defgroup Etk_Radio_Button Etk_Radio_Button
- * @brief The Etk_Radio_Button widget is a toggle button that belongs to a 
group in which only one button can be active
+ * @brief The Etk_Radio_Button widget is a toggle-button that belongs to a 
group in which only one button can be active
  * @{
  */
 
@@ -19,27 +19,29 @@
 /** Checks if the object is an Etk_Radio_Button */
 #define ETK_IS_RADIO_BUTTON(obj)    (ETK_OBJECT_RADIO_TYPE((obj), 
ETK_RADIO_BUTTON_TYPE))
 
+
 /**
- * @brief @widget The structure of a radio button
+ * @brief @widget A toggle-button that belongs to a group in which only one 
button can be active
  * @structinfo
  */
 struct Etk_Radio_Button
 {
    /* private: */
-   /* Inherit from Etk_Check_Button */
-   Etk_Check_Button check_button;
+   /* Inherit from Etk_Toggle_Button */
+   Etk_Toggle_Button toggle_button;
 
    Evas_List **group;
    Etk_Bool can_uncheck;
 };
 
-Etk_Type *etk_radio_button_type_get();
-Etk_Widget *etk_radio_button_new(Evas_List **group);
-Etk_Widget *etk_radio_button_new_from_widget(Etk_Radio_Button *radio_button);
-Etk_Widget *etk_radio_button_new_with_label(const char *label, Evas_List 
**group);
-Etk_Widget *etk_radio_button_new_with_label_from_widget(const char *label, 
Etk_Radio_Button *radio_button);
 
-void etk_radio_button_group_set(Etk_Radio_Button *radio_button, Evas_List 
**group);
+Etk_Type    *etk_radio_button_type_get(void);
+Etk_Widget  *etk_radio_button_new(Evas_List **group);
+Etk_Widget  *etk_radio_button_new_from_widget(Etk_Radio_Button *radio_button);
+Etk_Widget  *etk_radio_button_new_with_label(const char *label, Evas_List 
**group);
+Etk_Widget  *etk_radio_button_new_with_label_from_widget(const char *label, 
Etk_Radio_Button *radio_button);
+
+void        etk_radio_button_group_set(Etk_Radio_Button *radio_button, 
Evas_List **group);
 Evas_List **etk_radio_button_group_get(Etk_Radio_Button *radio_button);
 
 /** @} */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_toggle_button.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- etk_toggle_button.c 22 Mar 2007 19:36:52 -0000      1.17
+++ etk_toggle_button.c 1 Apr 2007 19:09:31 -0000       1.18
@@ -24,6 +24,7 @@
 static void _etk_toggle_button_property_set(Etk_Object *object, int 
property_id, Etk_Property_Value *value);
 static void _etk_toggle_button_property_get(Etk_Object *object, int 
property_id, Etk_Property_Value *value);
 static void _etk_toggle_button_realized_cb(Etk_Object *object, void *data);
+static void _etk_toggle_button_label_realized_cb(Etk_Object *object, void 
*data);
 static void _etk_toggle_button_toggled_handler(Etk_Toggle_Button 
*toggle_button);
 static void _etk_toggle_button_active_set_default(Etk_Toggle_Button 
*toggle_button, Etk_Bool active);
 
@@ -40,20 +41,20 @@
  * @brief Gets the type of an Etk_Toggle_Button
  * @return Returns the type of an Etk_Toggle_Button
  */
-Etk_Type *etk_toggle_button_type_get()
+Etk_Type *etk_toggle_button_type_get(void)
 {
    static Etk_Type *toggle_button_type = NULL;
 
    if (!toggle_button_type)
    {
       toggle_button_type = etk_type_new("Etk_Toggle_Button", ETK_BUTTON_TYPE, 
sizeof(Etk_Toggle_Button),
-         ETK_CONSTRUCTOR(_etk_toggle_button_constructor), NULL);
+            ETK_CONSTRUCTOR(_etk_toggle_button_constructor), NULL);
       
       _etk_toggle_button_signals[ETK_TOGGLE_BUTTON_TOGGLED_SIGNAL] = 
etk_signal_new("toggled",
-         toggle_button_type, ETK_MEMBER_OFFSET(Etk_Toggle_Button, 
toggled_handler), etk_marshaller_VOID__VOID, NULL, NULL);
+            toggle_button_type, ETK_MEMBER_OFFSET(Etk_Toggle_Button, 
toggled_handler), etk_marshaller_VOID__VOID, NULL, NULL);
    
       etk_type_property_add(toggle_button_type, "active", 
ETK_TOGGLE_BUTTON_ACTIVE_PROPERTY,
-         ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_bool(ETK_FALSE));
+            ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_bool(ETK_FALSE));
       
       toggle_button_type->property_set = _etk_toggle_button_property_set;
       toggle_button_type->property_get = _etk_toggle_button_property_get;
@@ -66,9 +67,9 @@
  * @brief Creates a new toggle button
  * @return Returns the new toggle-button widget
  */
-Etk_Widget *etk_toggle_button_new()
+Etk_Widget *etk_toggle_button_new(void)
 {
-   return etk_widget_new(ETK_TOGGLE_BUTTON_TYPE, "theme-group", 
"toggle_button", "focusable", ETK_TRUE, NULL);
+   return etk_widget_new(ETK_TOGGLE_BUTTON_TYPE, "theme-group", 
"toggle_button","focusable", ETK_TRUE, NULL);
 }
 
 /**
@@ -79,7 +80,7 @@
 Etk_Widget *etk_toggle_button_new_with_label(const char *label)
 {
    return etk_widget_new(ETK_TOGGLE_BUTTON_TYPE, "theme-group", 
"toggle_button",
-      "label", label, "focusable", ETK_TRUE, NULL);
+         "label", label, "focusable", ETK_TRUE, NULL);
 }
 
 /**
@@ -133,10 +134,11 @@
    toggle_button->active_set = _etk_toggle_button_active_set_default;
 
    etk_signal_connect("realized", ETK_OBJECT(toggle_button),
-      ETK_CALLBACK(_etk_toggle_button_realized_cb), NULL);
-   /* If the button is clicked, we toggle it */
+         ETK_CALLBACK(_etk_toggle_button_realized_cb), NULL);
+   etk_signal_connect("realized", ETK_OBJECT(ETK_BUTTON(toggle_button)->label),
+         ETK_CALLBACK(_etk_toggle_button_label_realized_cb), toggle_button);
    etk_signal_connect_swapped("clicked", ETK_OBJECT(toggle_button),
-      ETK_CALLBACK(etk_toggle_button_toggle), toggle_button);
+         ETK_CALLBACK(etk_toggle_button_toggle), toggle_button);
 }
 
 /* Sets the property whose id is "property_id" to the value "value" */
@@ -181,15 +183,30 @@
  *
  **************************/
 
-/* Called when the toggle button is realized */
+/* Called when the toggle-button is realized */
 static void _etk_toggle_button_realized_cb(Etk_Object *object, void *data)
 {
    Etk_Toggle_Button *toggle_button;
 
    if (!(toggle_button = ETK_TOGGLE_BUTTON(object)))
       return;
+   
    etk_widget_theme_signal_emit(ETK_WIDGET(toggle_button),
-      toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+   etk_widget_theme_signal_emit(ETK_BUTTON(toggle_button)->label,
+         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+}
+
+/* Called when the toggle-button's label is realized */
+static void _etk_toggle_button_label_realized_cb(Etk_Object *object, void 
*data)
+{
+   Etk_Toggle_Button *toggle_button;
+
+   if (!(toggle_button = ETK_TOGGLE_BUTTON(data)))
+      return;
+   
+   etk_widget_theme_signal_emit(ETK_BUTTON(toggle_button)->label,
+         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
 }
 
 /* Default handler for the "toggled" signal */
@@ -197,8 +214,11 @@
 {
    if (!toggle_button)
       return;
+   
    etk_widget_theme_signal_emit(ETK_WIDGET(toggle_button),
-      toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+   etk_widget_theme_signal_emit(ETK_BUTTON(toggle_button)->label,
+         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
 }
 
 /**************************
@@ -207,7 +227,7 @@
  *
  **************************/
 
-/* Default behavior for the "active_set" function */
+/* This function is called when the toggle-button is turned on: here it just 
activates it */
 static void _etk_toggle_button_active_set_default(Etk_Toggle_Button 
*toggle_button, Etk_Bool active)
 {
    if (!toggle_button || toggle_button->active == active)
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_toggle_button.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_toggle_button.h 22 Mar 2007 19:36:52 -0000      1.5
+++ etk_toggle_button.h 1 Apr 2007 19:09:31 -0000       1.6
@@ -19,6 +19,7 @@
 /** @brief Checks if the object is an Etk_Toggle_Button */
 #define ETK_IS_TOGGLE_BUTTON(obj)    (ETK_OBJECT_CHECK_TYPE((obj), 
ETK_TOGGLE_BUTTON_TYPE))
 
+
 /**
  * @brief @widget A button that can be activated/deactivated
  * @structinfo
@@ -34,13 +35,14 @@
    Etk_Bool active;
 };
 
-Etk_Type   *etk_toggle_button_type_get();
-Etk_Widget *etk_toggle_button_new();
+
+Etk_Type   *etk_toggle_button_type_get(void);
+Etk_Widget *etk_toggle_button_new(void);
 Etk_Widget *etk_toggle_button_new_with_label(const char *label);
 
-void     etk_toggle_button_toggle(Etk_Toggle_Button *toggle_button);
-void     etk_toggle_button_active_set(Etk_Toggle_Button *toggle_button, 
Etk_Bool active);
-Etk_Bool etk_toggle_button_active_get(Etk_Toggle_Button *toggle_button);
+void        etk_toggle_button_toggle(Etk_Toggle_Button *toggle_button);
+void        etk_toggle_button_active_set(Etk_Toggle_Button *toggle_button, 
Etk_Bool active);
+Etk_Bool    etk_toggle_button_active_get(Etk_Toggle_Button *toggle_button);
 
 /** @} */
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.c,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -3 -r1.111 -r1.112
--- etk_widget.c        25 Mar 2007 19:49:23 -0000      1.111
+++ etk_widget.c        1 Apr 2007 19:09:31 -0000       1.112
@@ -1335,22 +1335,12 @@
  */
 void etk_widget_theme_signal_emit(Etk_Widget *widget, const char *signal_name, 
Etk_Bool size_recalc)
 {
-   Etk_Widget *tc;
-   Evas_List *l;
-   
    if (!widget)
       return;
    
    if (widget->theme_object)
       edje_object_signal_emit(widget->theme_object, signal_name, "etk");
    
-   for (l = widget->theme_children; l; l = l->next)
-   {
-      tc = ETK_WIDGET(l->data);
-      if (tc->emit_theme_parent_signals)
-         etk_widget_theme_signal_emit(tc, signal_name, size_recalc);
-   }
-   
    if (size_recalc)
    {
       widget->need_theme_size_recalc = ETK_TRUE;
@@ -1977,7 +1967,6 @@
    widget->need_redraw = ETK_FALSE;
    widget->need_theme_size_recalc = ETK_FALSE;
    widget->swallowed = ETK_FALSE;
-   widget->emit_theme_parent_signals = ETK_FALSE;
    
    etk_signal_connect("destroyed", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_widget_destroyed_cb), NULL);
    etk_signal_connect_swapped("mouse-in", ETK_OBJECT(widget), 
etk_widget_enter, widget);
@@ -2467,9 +2456,10 @@
          widget->inset.bottom = 0;
       }
       
-      if (widget->disabled || (widget->emit_theme_parent_signals
-            && widget->theme_parent && widget->theme_parent->disabled))
+      if (widget->disabled)
          etk_widget_theme_signal_emit(widget, "etk,state,disabled", ETK_FALSE);
+      if (etk_widget_is_focused(widget))
+         etk_widget_theme_signal_emit(widget, "etk,state,focused", ETK_FALSE);
    }
    else
    {
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -3 -r1.51 -r1.52
--- etk_widget.h        25 Mar 2007 18:22:01 -0000      1.51
+++ etk_widget.h        1 Apr 2007 19:09:31 -0000       1.52
@@ -106,7 +106,6 @@
    unsigned int need_size_recalc : 1;
    unsigned int need_redraw : 1;
    unsigned int need_theme_size_recalc : 1;
-   unsigned int emit_theme_parent_signals : 1;
 };
 
 



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to