diff --git a/data/themes/default_button.edc b/data/themes/default_button.edc index 73bda1ef2..3ff2aef93 100644 --- a/data/themes/default_button.edc +++ b/data/themes/default_button.edc @@ -1,6 +1,7 @@ images { - image: "e17_button2.png" COMP; - image: "e17_button.png" COMP; + image: "e17_button_sm.png" COMP; + image: "e17_button_sm2.png" COMP; + image: "e17_button_sm_disabled.png" COMP; image: "e17_titlebar_glint1.png" COMP; image: "e17_titlebar_glint2.png" COMP; image: "e17_titlebar_glint3.png" COMP; @@ -18,7 +19,7 @@ group { state: "default" 0.0; min: 56 16; image { - normal: "e17_button.png"; + normal: "e17_button_sm.png"; border: 8 8 8 8; } } @@ -26,9 +27,37 @@ group { state: "clicked" 0.0; inherit: "default" 0.0; image { - normal: "e17_button2.png"; + normal: "e17_button_sm2.png"; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "button_image2"; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 0; + rel1 { + to: "button_image"; + } + rel2 { + to: "button_image"; + } + image { + normal: "e17_button_sm_disabled.png"; + } + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } } part { name: "icon_swallow"; @@ -95,6 +124,12 @@ group { align: 0.5 0.5; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + color3: 255 255 255 64; + } } part { name: "glint_clip"; @@ -372,5 +407,23 @@ group { transition: ACCELERATE 0.5; target: "focus"; } + program { + name: "disable"; + signal: "disabled"; + source: ""; + action: STATE_SET "disabled" 0.0; + target: "button_image"; + target: "button_image2"; + target: "label"; + } + program { + name: "enable"; + signal: "enabled"; + source: ""; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "button_image2"; + target: "label"; + } } } diff --git a/data/themes/default_check.edc b/data/themes/default_check.edc index b522f7550..ab825c035 100644 --- a/data/themes/default_check.edc +++ b/data/themes/default_check.edc @@ -1,4 +1,5 @@ images { + image: "e17_menu_check0.png" COMP; image: "e17_menu_check1.png" COMP; image: "e17_menu_check2.png" COMP; image: "focus.png" COMP; @@ -27,6 +28,13 @@ group { normal: "e17_menu_check1.png"; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_menu_check0.png"; + } + } } part { name: "item1"; @@ -81,6 +89,12 @@ group { align: 0.0 0.5; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + color3: 255 255 255 64; + } } part { name: "event"; @@ -89,6 +103,11 @@ group { state: "default" 0.0; color: 0 0 0 0; } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } } part { name: "focus"; @@ -164,5 +183,23 @@ group { transition: ACCELERATE 0.5; target: "focus"; } + program { + name: "disable"; + signal: "disabled"; + source: ""; + action: STATE_SET "disabled" 0.0; + target: "outline"; + target: "event"; + target: "label"; + } + program { + name: "enable"; + signal: "enabled"; + source: ""; + action: STATE_SET "default" 0.0; + target: "outline"; + target: "event"; + target: "label"; + } } } diff --git a/data/themes/default_configure.edc b/data/themes/default_configure.edc index 9a8c3e5f8..7989f9023 100644 --- a/data/themes/default_configure.edc +++ b/data/themes/default_configure.edc @@ -1,7 +1,5 @@ images { image: "e17_menu_bg_border.png" COMP; - image: "e17_button2.png" COMP; - image: "e17_button.png" COMP; image: "e17_dialog_watermark.png" COMP; image: "e17_ibar_bg_v.png" COMP; image: "e17_about_over_v.png" COMP; diff --git a/data/themes/default_error.edc b/data/themes/default_error.edc index 553cd2a57..1548f0064 100644 --- a/data/themes/default_error.edc +++ b/data/themes/default_error.edc @@ -1,7 +1,7 @@ images { image: "e17_logo.png" COMP; - image: "e17_button2.png" COMP; - image: "e17_button.png" COMP; + image: "e17_button_sm.png" COMP; + image: "e17_button_sm2.png" COMP; } styles @@ -171,7 +171,7 @@ group { offset: -1 -17; } image { - normal: "e17_button.png"; + normal: "e17_button_sm.png"; border: 8 8 8 8; } } @@ -188,7 +188,7 @@ group { offset: -1 -17; } image { - normal: "e17_button2.png"; + normal: "e17_button_sm2.png"; border: 8 8 8 8; } } diff --git a/data/themes/default_fileman.edc b/data/themes/default_fileman.edc index 1d8d40ca1..1f6d3ddd4 100644 --- a/data/themes/default_fileman.edc +++ b/data/themes/default_fileman.edc @@ -116,8 +116,6 @@ images image: "e17_button_detail_view.png" COMP; image: "e17_fileman_rubberband.png" COMP; image: "e17_menu_bg_border.png" COMP; - image: "e17_button2.png" COMP; - image: "e17_button.png" COMP; image: "e17_logo.png" COMP; } diff --git a/data/themes/default_radio.edc b/data/themes/default_radio.edc index fda7946eb..d69badd3e 100644 --- a/data/themes/default_radio.edc +++ b/data/themes/default_radio.edc @@ -1,4 +1,5 @@ images { + image: "e17_menu_radio0.png" COMP; image: "e17_menu_radio1.png" COMP; image: "e17_menu_radio2.png" COMP; image: "focus.png" COMP; @@ -27,6 +28,13 @@ group { normal: "e17_menu_radio1.png"; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_menu_check0.png"; + } + } } part { name: "item1"; @@ -81,6 +89,12 @@ group { align: 0.0 0.5; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + color3: 255 255 255 64; + } } part { name: "event"; @@ -89,6 +103,11 @@ group { state: "default" 0.0; color: 0 0 0 0; } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } } part { name: "focus"; @@ -157,5 +176,23 @@ group { transition: ACCELERATE 0.5; target: "focus"; } + program { + name: "disable"; + signal: "disabled"; + source: ""; + action: STATE_SET "disabled" 0.0; + target: "outline"; + target: "event"; + target: "label"; + } + program { + name: "enable"; + signal: "enabled"; + source: ""; + action: STATE_SET "default" 0.0; + target: "outline"; + target: "event"; + target: "label"; + } } } diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index fd0811e86..8c2ca4731 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -371,5 +371,9 @@ e17_button_detail_open.png \ e17_frame_label_over.png \ e17_frame_label_under.png \ e17_frame_outline.png \ -e17_icon_right_arrow.png - +e17_icon_right_arrow.png \ +e17_button_sm.png \ +e17_button_sm2.png \ +e17_button_sm_disabled.png \ +e17_menu_check0.png \ +e17_menu_radio0.png diff --git a/data/themes/images/e17_button_sm.png b/data/themes/images/e17_button_sm.png new file mode 100644 index 000000000..c369afeb8 Binary files /dev/null and b/data/themes/images/e17_button_sm.png differ diff --git a/data/themes/images/e17_button_sm2.png b/data/themes/images/e17_button_sm2.png new file mode 100644 index 000000000..b70a473a5 Binary files /dev/null and b/data/themes/images/e17_button_sm2.png differ diff --git a/data/themes/images/e17_button_sm_disabled.png b/data/themes/images/e17_button_sm_disabled.png new file mode 100644 index 000000000..6e8383af6 Binary files /dev/null and b/data/themes/images/e17_button_sm_disabled.png differ diff --git a/data/themes/images/e17_menu_check0.png b/data/themes/images/e17_menu_check0.png new file mode 100644 index 000000000..d60625d9e Binary files /dev/null and b/data/themes/images/e17_menu_check0.png differ diff --git a/data/themes/images/e17_menu_radio0.png b/data/themes/images/e17_menu_radio0.png new file mode 100644 index 000000000..935f7ce4e Binary files /dev/null and b/data/themes/images/e17_menu_radio0.png differ diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c index 2424699c7..ae9c6ed2c 100644 --- a/src/bin/e_config_dialog.c +++ b/src/bin/e_config_dialog.c @@ -11,6 +11,7 @@ static void _e_config_dialog_cb_ok(void *data, E_Dialog *dia); static void _e_config_dialog_cb_apply(void *data, E_Dialog *dia); static void _e_config_dialog_cb_advanced(void *data, void *data2); static void _e_config_dialog_cb_basic(void *data, void *data2); +static void _e_config_dialog_cb_changed(void *data, Evas_Object *obj); /* local subsystem globals */ @@ -106,11 +107,14 @@ _e_config_dialog_go(E_Config_Dialog *cfd, E_Config_Dialog_CFData_Type type) } e_widget_min_size_get(o, &mw, &mh); + e_widget_on_change_hook_set(o, _e_config_dialog_cb_changed, cfd); e_dialog_content_set(cfd->dia, o, mw, mh); e_dialog_button_add(cfd->dia, _("OK"), NULL, _e_config_dialog_cb_ok, cfd); e_dialog_button_add(cfd->dia, _("Apply"), NULL, _e_config_dialog_cb_apply, cfd); e_dialog_button_add(cfd->dia, _("Cancel"), NULL, NULL, NULL); + e_dialog_button_disable_num_set(cfd->dia, 0, 1); + e_dialog_button_disable_num_set(cfd->dia, 1, 1); e_win_centered_set(cfd->dia->win, 1); e_dialog_show(cfd->dia); cfd->view_type = type; @@ -157,6 +161,8 @@ _e_config_dialog_cb_apply(void *data, E_Dialog *dia) cfd->view.basic.apply_cfdata(cfd, cfd->cfdata); else cfd->view.advanced.apply_cfdata(cfd, cfd->cfdata); + e_dialog_button_disable_num_set(cfd->dia, 0, 1); + e_dialog_button_disable_num_set(cfd->dia, 1, 1); } static void @@ -176,3 +182,13 @@ _e_config_dialog_cb_basic(void *data, void *data2) cfd = data; _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC); } + +static void +_e_config_dialog_cb_changed(void *data, Evas_Object *obj) +{ + E_Config_Dialog *cfd; + + cfd = data; + e_dialog_button_disable_num_set(cfd->dia, 0, 0); + e_dialog_button_disable_num_set(cfd->dia, 1, 0); +} diff --git a/src/bin/e_dialog.c b/src/bin/e_dialog.c index d9aab2669..24c81389e 100644 --- a/src/bin/e_dialog.c +++ b/src/bin/e_dialog.c @@ -93,6 +93,16 @@ e_dialog_button_focus_num(E_Dialog *dia, int button) return 1; } +int +e_dialog_button_disable_num_set(E_Dialog *dia, int button, int disabled) +{ + Evas_Object *o; + + o = evas_list_nth(dia->buttons, button); + if (o) e_widget_disabled_set(o, disabled); + return 1; +} + void e_dialog_title_set(E_Dialog *dia, char *title) { diff --git a/src/bin/e_dialog.h b/src/bin/e_dialog.h index c3f47ea10..6f4a0fabf 100644 --- a/src/bin/e_dialog.h +++ b/src/bin/e_dialog.h @@ -27,14 +27,15 @@ struct _E_Dialog void *data; }; -EAPI E_Dialog *e_dialog_new (E_Container *con); -EAPI void e_dialog_button_add (E_Dialog *dia, char *label, char *icon, void (*func) (void *data, E_Dialog *dia), void *data); -EAPI int e_dialog_button_focus_num (E_Dialog *dia, int button); -EAPI void e_dialog_title_set (E_Dialog *dia, char *title); -EAPI void e_dialog_text_set (E_Dialog *dia, char *text); -EAPI void e_dialog_icon_set (E_Dialog *dia, char *icon, Evas_Coord size); -EAPI void e_dialog_content_set (E_Dialog *dia, Evas_Object *obj, Evas_Coord minw, Evas_Coord minh); -EAPI void e_dialog_show (E_Dialog *dia); +EAPI E_Dialog *e_dialog_new (E_Container *con); +EAPI void e_dialog_button_add (E_Dialog *dia, char *label, char *icon, void (*func) (void *data, E_Dialog *dia), void *data); +EAPI int e_dialog_button_focus_num (E_Dialog *dia, int button); +EAPI int e_dialog_button_disable_num_set (E_Dialog *dia, int button, int disabled); +EAPI void e_dialog_title_set (E_Dialog *dia, char *title); +EAPI void e_dialog_text_set (E_Dialog *dia, char *text); +EAPI void e_dialog_icon_set (E_Dialog *dia, char *icon, Evas_Coord size); +EAPI void e_dialog_content_set (E_Dialog *dia, Evas_Object *obj, Evas_Coord minw, Evas_Coord minh); +EAPI void e_dialog_show (E_Dialog *dia); #endif #endif diff --git a/src/bin/e_int_config_focus.c b/src/bin/e_int_config_focus.c index 3ce7e1d56..9c7acf802 100644 --- a/src/bin/e_int_config_focus.c +++ b/src/bin/e_int_config_focus.c @@ -45,6 +45,18 @@ e_int_config_focus(E_Container *con) } /**--CREATE--**/ +static void +_fill_data(CFData *cfdata) +{ + cfdata->focus_policy = e_config->focus_policy; + cfdata->focus_setting = e_config->focus_setting; + cfdata->pass_click_on = e_config->pass_click_on; + cfdata->always_click_to_raise = e_config->always_click_to_raise; + cfdata->always_click_to_focus = e_config->always_click_to_focus; + + cfdata->mode = cfdata->focus_policy; +} + static void * _create_data(E_Config_Dialog *cfd) { @@ -55,14 +67,7 @@ _create_data(E_Config_Dialog *cfd) CFData *cfdata; cfdata = E_NEW(CFData, 1); - cfdata->focus_policy = e_config->focus_policy; - cfdata->focus_setting = e_config->focus_setting; - cfdata->pass_click_on = e_config->pass_click_on; - cfdata->always_click_to_raise = e_config->always_click_to_raise; - cfdata->always_click_to_focus = e_config->always_click_to_focus; - - cfdata->mode = cfdata->focus_policy; - + _fill_data(cfdata); return cfdata; } @@ -131,6 +136,8 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) Evas_Object *o, *ob; E_Radio_Group *rg; + _fill_data(cfdata); + o = e_widget_list_add(evas, 0, 0); rg = e_widget_radio_group_new(&(cfdata->mode)); ob = e_widget_radio_add(evas, _("Click Window to Focus"), E_FOCUS_CLICK, rg); @@ -149,6 +156,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) Evas_Object *o, *ob, *of; E_Radio_Group *rg; + _fill_data(cfdata); + o = e_widget_list_add(evas, 0, 0); of = e_widget_framelist_add(evas, _("Focus"), 0); diff --git a/src/bin/e_widget.c b/src/bin/e_widget.c index caf3ef1aa..95631cded 100644 --- a/src/bin/e_widget.c +++ b/src/bin/e_widget.c @@ -202,9 +202,7 @@ int e_widget_focus_jump(Evas_Object *obj, int forward) { API_ENTRY return 0; - if ((!e_widget_can_focus_get(obj)) || - (e_widget_disabled_get(obj))) - return 0; + if (!e_widget_can_focus_get(obj)) return 0; /* if it has a focus func its an end-point widget like a button */ if (sd->focus_func) @@ -235,10 +233,10 @@ e_widget_focus_jump(Evas_Object *obj, int forward) { for (l = sd->subobjs; l; l = l->next) { - if ((e_widget_can_focus_get(l->data)) && - (!e_widget_disabled_get(l->data))) + if (e_widget_can_focus_get(l->data)) { - if (focus_next) + if ((focus_next) && + (!e_widget_disabled_get(l->data))) { /* the previous focused item was unfocused - so focus * the next one (that can be focused) */ @@ -262,10 +260,10 @@ e_widget_focus_jump(Evas_Object *obj, int forward) { for (l = evas_list_last(sd->subobjs); l; l = l->prev) { - if ((e_widget_can_focus_get(l->data)) && - (!e_widget_disabled_get(l->data))) + if (e_widget_can_focus_get(l->data)) { - if (focus_next) + if ((focus_next) && + (!e_widget_disabled_get(l->data))) { /* the previous focused item was unfocused - so focus * the next one (that can be focused) */ @@ -405,13 +403,31 @@ e_widget_change(Evas_Object *obj) { API_ENTRY return; if (sd->on_change_func) sd->on_change_func(sd->on_change_data, obj); + else e_widget_change(e_widget_parent_get(obj)); } void e_widget_disabled_set(Evas_Object *obj, int disabled) { API_ENTRY return; + if (((sd->disabled) && (disabled)) || + ((!sd->disabled) && (!disabled))) return; sd->disabled = disabled; + if (sd->focused) + { + Evas_Object *o, *parent; + + printf("disable focused %p!\n", obj); + parent = obj; + for (;;) + { + o = e_widget_parent_get(parent); + if (!o) break; + parent = o; + } + printf("jump %p\n", parent); + e_widget_focus_jump(parent, 1); + } if (sd->disable_func) sd->disable_func(obj); } diff --git a/src/bin/e_widget_button.c b/src/bin/e_widget_button.c index b8e68fa3b..b6d25d479 100644 --- a/src/bin/e_widget_button.c +++ b/src/bin/e_widget_button.c @@ -16,6 +16,7 @@ struct _E_Widget_Data static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_hook(Evas_Object *obj); static void _e_wid_activate_hook(Evas_Object *obj); +static void _e_wid_disable_hook(Evas_Object *obj); static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); /* local subsystem functions */ @@ -33,6 +34,7 @@ e_widget_button_add(Evas *evas, char *label, char *icon, void (*func) (void *dat e_widget_del_hook_set(obj, _e_wid_del_hook); e_widget_focus_hook_set(obj, _e_wid_focus_hook); e_widget_activate_hook_set(obj, _e_wid_activate_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); wd->func = func; wd->data = data; @@ -105,6 +107,18 @@ _e_wid_activate_hook(Evas_Object *obj) if (wd->func) wd->func(wd->data, wd->data2); } +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(wd->o_button, "disabled", ""); + else + edje_object_signal_emit(wd->o_button, "enabled", ""); +} + static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source) { diff --git a/src/bin/e_widget_check.c b/src/bin/e_widget_check.c index 5b2cecf40..9b1dd9d5e 100644 --- a/src/bin/e_widget_check.c +++ b/src/bin/e_widget_check.c @@ -14,6 +14,7 @@ static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_hook(Evas_Object *obj); static void _e_wid_do(Evas_Object *obj); static void _e_wid_activate_hook(Evas_Object *obj); +static void _e_wid_disable_hook(Evas_Object *obj); static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -32,6 +33,7 @@ e_widget_check_add(Evas *evas, char *label, int *val) e_widget_del_hook_set(obj, _e_wid_del_hook); e_widget_focus_hook_set(obj, _e_wid_focus_hook); e_widget_activate_hook_set(obj, _e_wid_activate_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); wd->valptr = val; e_widget_data_set(obj, wd); @@ -111,6 +113,18 @@ _e_wid_activate_hook(Evas_Object *obj) } } +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(wd->o_check, "disabled", ""); + else + edje_object_signal_emit(wd->o_check, "enabled", ""); +} + static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source) { diff --git a/src/bin/e_widget_radio.c b/src/bin/e_widget_radio.c index cecda969e..a17755685 100644 --- a/src/bin/e_widget_radio.c +++ b/src/bin/e_widget_radio.c @@ -21,6 +21,7 @@ static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_hook(Evas_Object *obj); static void _e_wid_do(Evas_Object *obj); static void _e_wid_activate_hook(Evas_Object *obj); +static void _e_wid_disable_hook(Evas_Object *obj); static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); /* local subsystem functions */ @@ -48,6 +49,7 @@ e_widget_radio_add(Evas *evas, char *label, int valnum, E_Radio_Group *group) e_widget_del_hook_set(obj, _e_wid_del_hook); e_widget_focus_hook_set(obj, _e_wid_focus_hook); e_widget_activate_hook_set(obj, _e_wid_activate_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); wd->group = group; wd->valnum = valnum; @@ -151,6 +153,18 @@ _e_wid_activate_hook(Evas_Object *obj) edje_object_signal_emit(wd->o_radio, "toggle_on", ""); } +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(wd->o_radio, "disabled", ""); + else + edje_object_signal_emit(wd->o_radio, "enabled", ""); +} + static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source) {