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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs