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