Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_button.c etk_combobox.c etk_toggle_button.c etk_widget.c 
        etk_widget.h 


Log Message:
* Make sure that the combobox's labels receive the same theme-signals as 
the combobox button


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_button.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- etk_button.c        2 Apr 2007 09:48:29 -0000       1.41
+++ etk_button.c        2 Apr 2007 20:13:50 -0000       1.42
@@ -37,6 +37,7 @@
 static void _etk_button_constructor(Etk_Button *button);
 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_theme_signal_emit(Etk_Widget *widget, const char 
*signal, Etk_Bool size_recalc);
 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);
@@ -45,12 +46,6 @@
 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);
@@ -445,12 +440,7 @@
    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;
+   ETK_WIDGET(button)->theme_signal_emit = _etk_button_theme_signal_emit;
    button->pressed_handler = _etk_button_pressed_handler;
    button->released_handler = _etk_button_released_handler;
    button->clicked_handler = _etk_button_clicked_handler;
@@ -530,6 +520,17 @@
    }
 }
 
+/* Called when a theme-signal is emitted by the widget: we use this to make 
the button's label receive
+ * the same theme-signals as the button */
+static void _etk_button_theme_signal_emit(Etk_Widget *widget, const char 
*signal, Etk_Bool size_recalc)
+{
+   Etk_Button *button;
+   
+   if (!(button = ETK_BUTTON(widget)))
+      return;
+   etk_widget_theme_signal_emit(button->label, signal, size_recalc);
+}
+
 /**************************
  *
  * Callbacks and handlers
@@ -545,10 +546,7 @@
       return;
    
    if (button->is_pressed)
-   {
       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 */
@@ -654,78 +652,6 @@
 
    if (event->button == 1)
       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 */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_combobox.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- etk_combobox.c      2 Apr 2007 09:48:29 -0000       1.46
+++ etk_combobox.c      2 Apr 2007 20:13:50 -0000       1.47
@@ -46,7 +46,11 @@
 static void _etk_combobox_item_size_allocate(Etk_Widget *widget, Etk_Geometry 
geometry);
 static void _etk_combobox_active_item_size_request(Etk_Widget *widget, 
Etk_Size *size);
 static void _etk_combobox_active_item_size_allocate(Etk_Widget *widget, 
Etk_Geometry geometry);
+static void _etk_combobox_button_theme_signal_emit(Etk_Widget *widget, const 
char *name, Etk_Bool size_recalc);
+static void _etk_combobox_item_theme_signal_emit(Etk_Widget *widget, const 
char *name, Etk_Bool size_recalc);
+
 static void _etk_combobox_realized_cb(Etk_Object *object, void *data);
+static void _etk_combobox_label_realized_cb(Etk_Object *object, void *data);
 static void _etk_combobox_focused_cb(Etk_Widget *widget, void *data);
 static void _etk_combobox_unfocused_cb(Etk_Widget *widget, void *data);
 static void _etk_combobox_enabled_cb(Etk_Widget *widget, void *data);
@@ -58,8 +62,10 @@
 static void _etk_combobox_item_entered_cb(Etk_Object *object, void *data);
 static void _etk_combobox_item_left_cb(Etk_Object *object, void *data);
 static void _etk_combobox_item_mouse_up_cb(Etk_Object *object, 
Etk_Event_Mouse_Up *event, void *data);
+
 static void _etk_combobox_selected_item_set(Etk_Combobox *combobox, 
Etk_Combobox_Item *item);
 static void _etk_combobox_item_cells_render(Etk_Combobox *combobox, Etk_Widget 
**cells, Etk_Geometry geometry, Etk_Bool ignore_other);
+static void _etk_combobox_widgets_emit_theme_signal(Etk_Combobox *combobox, 
Etk_Widget **widgets, const char *name, Etk_Bool size_recalc);
 
 static Etk_Signal *_etk_combobox_signals[ETK_COMBOBOX_NUM_SIGNALS];
 
@@ -233,6 +239,8 @@
          {
             case ETK_COMBOBOX_LABEL:
                combobox->active_item_children[i] = etk_label_new(NULL);
+               etk_signal_connect("realized", 
ETK_OBJECT(combobox->active_item_children[i]),
+                     ETK_CALLBACK(_etk_combobox_label_realized_cb), combobox);
                etk_widget_theme_parent_set(combobox->active_item_children[i], 
combobox->button);
                break;
             case ETK_COMBOBOX_IMAGE:
@@ -773,39 +781,37 @@
    
    combobox->button = etk_widget_new(ETK_TOGGLE_BUTTON_TYPE, "theme-group", 
"button", "theme-parent", combobox,
          "visible", ETK_TRUE, "repeat-mouse-events", ETK_TRUE, "focusable", 
ETK_FALSE, "internal", ETK_TRUE, NULL);
+   etk_object_data_set(ETK_OBJECT(combobox->button), 
"_Etk_Combobox_Button::Combobox", combobox);
    etk_widget_parent_set(combobox->button, ETK_WIDGET(combobox));
-   etk_signal_connect("toggled", ETK_OBJECT(combobox->button), 
ETK_CALLBACK(_etk_combobox_button_toggled_cb), combobox);
+   ETK_WIDGET(combobox->button)->theme_signal_emit = 
_etk_combobox_button_theme_signal_emit;
    
    combobox->window = ETK_POPUP_WINDOW(etk_widget_new(ETK_POPUP_WINDOW_TYPE,
          "theme-group", "window", "theme-parent", combobox, NULL));
    etk_object_data_set(ETK_OBJECT(combobox->window), 
"_Etk_Combobox_Window::Combobox", combobox);
-   etk_signal_connect("popped-down", ETK_OBJECT(combobox->window),
-         ETK_CALLBACK(_etk_combobox_window_popped_down_cb), combobox);
-   etk_signal_connect("key-down", ETK_OBJECT(combobox->window),
-         ETK_CALLBACK(_etk_combobox_window_key_down_cb), combobox);
    ETK_WIDGET(combobox->window)->size_request = 
_etk_combobox_window_size_request;
    ETK_WIDGET(combobox->window)->size_allocate = 
_etk_combobox_window_size_allocate;
    
    combobox->popup_offset_x = 0;
    combobox->popup_offset_y = 0;
    combobox->popup_extra_w = 0;
-   
    combobox->num_cols = 0;
    combobox->cols = NULL;
-   
    combobox->first_item = NULL;
    combobox->last_item = NULL;
    combobox->selected_item = NULL;
    combobox->active_item = NULL;
    combobox->active_item_widget = NULL;
    combobox->active_item_children = NULL;
-   
    combobox->items_height = DEFAULT_ITEM_HEIGHT;
    combobox->built = ETK_FALSE;
    
    ETK_WIDGET(combobox)->size_request = _etk_combobox_size_request;
    ETK_WIDGET(combobox)->size_allocate = _etk_combobox_size_allocate;
    
+   etk_signal_connect("toggled", ETK_OBJECT(combobox->button), 
ETK_CALLBACK(_etk_combobox_button_toggled_cb), combobox);
+   etk_signal_connect("popped-down", ETK_OBJECT(combobox->window), 
ETK_CALLBACK(_etk_combobox_window_popped_down_cb), combobox);
+   etk_signal_connect("key-down", ETK_OBJECT(combobox->window), 
ETK_CALLBACK(_etk_combobox_window_key_down_cb), combobox);
+   
    etk_signal_connect("realized", ETK_OBJECT(combobox), 
ETK_CALLBACK(_etk_combobox_realized_cb), NULL);
    etk_signal_connect("focused", ETK_OBJECT(combobox), 
ETK_CALLBACK(_etk_combobox_focused_cb), NULL);
    etk_signal_connect("unfocused", ETK_OBJECT(combobox), 
ETK_CALLBACK(_etk_combobox_unfocused_cb), NULL);
@@ -889,6 +895,7 @@
    item->data = NULL;
    item->data_free_cb = NULL;
    
+   ETK_WIDGET(item)->theme_signal_emit = _etk_combobox_item_theme_signal_emit;
    etk_signal_connect("destroyed", ETK_OBJECT(item), 
ETK_CALLBACK(_etk_combobox_item_destroyed_cb), NULL);
 }
 
@@ -1040,6 +1047,28 @@
    _etk_combobox_item_cells_render(combobox, combobox->active_item_children, 
geometry, ETK_TRUE);
 }
 
+/* Called when a theme-signal is emitted on the combobox's button. We use this 
to make sure the labels of the
+ * combobox's button receive the same theme-signal as the combobox-s button */
+static void _etk_combobox_button_theme_signal_emit(Etk_Widget *widget, const 
char *name, Etk_Bool size_recalc)
+{
+   Etk_Combobox *combobox;
+   
+   if (!(combobox = ETK_COMBOBOX(etk_object_data_get(ETK_OBJECT(widget), 
"_Etk_Combobox_Button::Combobox"))))
+      return;
+   _etk_combobox_widgets_emit_theme_signal(combobox, 
combobox->active_item_children, name, size_recalc);
+}
+
+/* Called when a theme-signal is emitted on an item of the combobox. We use 
this to make sure the labels of the
+ * item receive the same theme-signal as the item itself */
+static void _etk_combobox_item_theme_signal_emit(Etk_Widget *widget, const 
char *name, Etk_Bool size_recalc)
+{
+   Etk_Combobox_Item *item;
+   
+   if (!(item = ETK_COMBOBOX_ITEM(widget)))
+      return;
+   _etk_combobox_widgets_emit_theme_signal(item->combobox, item->widgets, 
name, size_recalc);
+}
+
 /**************************
  *
  * Callbacks and handlers
@@ -1063,6 +1092,23 @@
       combobox->popup_extra_w = 0;
 }
 
+/* Called when a child-label of the combobox's button is realized */
+static void _etk_combobox_label_realized_cb(Etk_Object *object, void *data)
+{
+   Etk_Widget *label;
+   Etk_Combobox *combobox;
+   
+   if (!(label = ETK_WIDGET(data)) || !(combobox = ETK_COMBOBOX(data)))
+      return;
+   
+   if (etk_widget_disabled_get(ETK_WIDGET(combobox)))
+      etk_widget_theme_signal_emit(label, "etk,state,disabled", ETK_FALSE);
+   if (etk_widget_is_focused(ETK_WIDGET(combobox)))
+      etk_widget_theme_signal_emit(label, "etk,state,focused", ETK_FALSE);
+   if (etk_toggle_button_active_get(ETK_TOGGLE_BUTTON(combobox->button)))
+      etk_widget_theme_signal_emit(label, "etk,state,on", ETK_FALSE);
+}
+
 /* Called when the combobox is focused */
 static void _etk_combobox_focused_cb(Etk_Widget *widget, void *data)
 {
@@ -1313,6 +1359,21 @@
          etk_widget_size_allocate(cells[i], child_geometry);
       }
       col_geometry.x += col_geometry.w;
+   }
+}
+
+/* Emits the given theme-signal to the labels among "widgets" */
+static void _etk_combobox_widgets_emit_theme_signal(Etk_Combobox *combobox, 
Etk_Widget **widgets, const char *name, Etk_Bool size_recalc)
+{
+   int i;
+   
+   if (!combobox || !widgets)
+      return;
+   
+   for (i = 0; i < combobox->num_cols; i++)
+   {
+      if (combobox->cols[i]->type == ETK_COMBOBOX_LABEL)
+         etk_widget_theme_signal_emit(widgets[i], name, size_recalc);
    }
 }
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_toggle_button.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- etk_toggle_button.c 1 Apr 2007 19:09:31 -0000       1.18
+++ etk_toggle_button.c 2 Apr 2007 20:13:50 -0000       1.19
@@ -191,10 +191,8 @@
    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);
-   etk_widget_theme_signal_emit(ETK_BUTTON(toggle_button)->label,
-         toggle_button->active ? "etk,state,on" : "etk,state,off", ETK_FALSE);
+   if (toggle_button->active)
+      etk_widget_theme_signal_emit(ETK_WIDGET(toggle_button), "etk,state,on", 
ETK_FALSE);
 }
 
 /* Called when the toggle-button's label is realized */
@@ -205,8 +203,8 @@
    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);
+   if (toggle_button->active)
+      etk_widget_theme_signal_emit(ETK_WIDGET(toggle_button), "etk,state,on", 
ETK_FALSE);
 }
 
 /* Default handler for the "toggled" signal */
@@ -216,8 +214,6 @@
       return;
    
    etk_widget_theme_signal_emit(ETK_WIDGET(toggle_button),
-         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);
 }
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.c,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -3 -r1.112 -r1.113
--- etk_widget.c        1 Apr 2007 19:09:31 -0000       1.112
+++ etk_widget.c        2 Apr 2007 20:13:50 -0000       1.113
@@ -1340,6 +1340,8 @@
    
    if (widget->theme_object)
       edje_object_signal_emit(widget->theme_object, signal_name, "etk");
+   if (widget->theme_signal_emit)
+      widget->theme_signal_emit(widget, signal_name, size_recalc);
    
    if (size_recalc)
    {
@@ -1940,8 +1942,6 @@
    widget->requested_size.h = -1;
    widget->last_calced_size.w = 0;
    widget->last_calced_size.h = 0;
-   widget->size_request = NULL;
-   widget->size_allocate = NULL;
    
    widget->color.r = 255;
    widget->color.g = 255;
@@ -1949,6 +1949,9 @@
    widget->color.a = 255;
    widget->propagate_color = ETK_TRUE;
 
+   widget->size_request = NULL;
+   widget->size_allocate = NULL;
+   widget->theme_signal_emit = NULL;
    widget->scroll_size_get = NULL;
    widget->scroll_margins_get = NULL;
    widget->scroll = NULL;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- etk_widget.h        2 Apr 2007 09:48:29 -0000       1.53
+++ etk_widget.h        2 Apr 2007 20:13:50 -0000       1.54
@@ -80,6 +80,7 @@
    
    void (*size_request)(Etk_Widget *widget, Etk_Size *size_requisition);
    void (*size_allocate)(Etk_Widget *widget, Etk_Geometry geometry);
+   void (*theme_signal_emit)(Etk_Widget *widget, const char *signal, Etk_Bool 
size_recalc);
 
    void (*scroll_size_get)(Etk_Widget *widget, Etk_Size scrollview_size, 
Etk_Size scrollbar_size, Etk_Size *scroll_size);
    void (*scroll_margins_get)(Etk_Widget *widget, Etk_Size *margin_size);



-------------------------------------------------------------------------
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