rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=0f23fb6a6bee883836610e7c1481c16be3827f80
commit 0f23fb6a6bee883836610e7c1481c16be3827f80 Author: Andrii Kroitor <an.kroi...@samsung.com> Date: Wed Dec 23 14:18:26 2015 +0200 workspace: fix part_state del logic --- src/bin/ui/group_navigator.c | 30 +++++++----------------------- src/bin/ui/group_navigator.h | 3 +++ src/bin/ui/tabs.c | 16 +++++++++++++++- src/bin/ui/workspace/workspace.c | 19 +++++++++++++++++++ src/bin/ui/workspace/workspace.h | 15 +++++++++++++++ 5 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/bin/ui/group_navigator.c b/src/bin/ui/group_navigator.c index f4208dd..118ade9 100644 --- a/src/bin/ui/group_navigator.c +++ b/src/bin/ui/group_navigator.c @@ -1037,45 +1037,31 @@ _state_del(Part_List *pl, history_change_add(pl->group->history, change); } -static void -_editor_state_deleted_cb(void *data, - Evas_Object *obj __UNUSED__, - void *event_info) +void +group_navigator_part_state_del(Evas_Object *obj, Part_ *part __UNUSED__, State *state) { - Part_List *pl = data; - const Editor_State *editor_state = event_info; + Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA); const Elm_Genlist_Item_Class* itc; - Part_ *part; - State *state = NULL; Elm_Object_Item *glit; Elm_Object_Item *default_glit; const Eina_List *subitems; const Eina_List *l; assert(pl != NULL); - assert(editor_state != NULL); + assert(state != NULL); - part = elm_object_item_data_get(pl->selected_part_item); - if (strcmp(editor_state->part_name, part->name)) - { - part = pm_resource_unsorted_get(part->group->parts, editor_state->part_name); - group_navigator_part_select(pl->layout, part); - } elm_genlist_item_expanded_set(pl->selected_part_item, true); subitems = elm_genlist_item_subitems_get(pl->selected_part_item); /* "default 0.0" is always first in states list */ default_glit = eina_list_data_get(subitems); + /* find state's genlist item */ EINA_LIST_FOREACH(subitems, l, glit) { - state = elm_object_item_data_get(glit); - if (!strcmp(state->name, editor_state->state_name)) + if (elm_object_item_data_get(glit) == state) break; - else - state = NULL; } - - assert(state != NULL); + assert(glit != NULL); /* resetting state */ itc = elm_genlist_item_item_class_get(glit); @@ -1084,7 +1070,6 @@ _editor_state_deleted_cb(void *data, elm_object_item_del(glit); elm_genlist_item_selected_set(default_glit, true); - gm_state_del(ap.project, state); } static void @@ -1537,7 +1522,6 @@ group_navigator_add(Group *group) TODO("Fix multi-tab logic"); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_RESTACKED, _editor_part_restacked_cb, pl); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_RESTACKED, _editor_part_item_restacked_cb, pl); - evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_DELETED, _editor_state_deleted_cb, pl); TODO("Add deletion callback and free resources"); return pl->layout; diff --git a/src/bin/ui/group_navigator.h b/src/bin/ui/group_navigator.h index f9d2124..dc15248 100644 --- a/src/bin/ui/group_navigator.h +++ b/src/bin/ui/group_navigator.h @@ -103,4 +103,7 @@ group_navigator_part_item_del(Evas_Object *obj, Part_ *part, Eina_Stringshare * void group_navigator_part_state_add(Evas_Object *obj, Part_ *part, State *state); + +void +group_navigator_part_state_del(Evas_Object *obj, Part_ *part __UNUSED__, State *state); #endif /* GROUP_NAVIGATOR_H */ diff --git a/src/bin/ui/tabs.c b/src/bin/ui/tabs.c index 9428f02..dc3b543 100644 --- a/src/bin/ui/tabs.c +++ b/src/bin/ui/tabs.c @@ -368,6 +368,20 @@ _editor_state_added_cb(void *data __UNUSED__, workspace_part_state_add(tabs.current_workspace, editor_state->part_name, editor_state->state_name); } +static void +_editor_state_deleted_cb(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + const Editor_State *editor_state = event_info; + + assert(editor_state != NULL); + assert(tabs.current_group != NULL); + assert(tabs.current_workspace != NULL); + + workspace_part_state_del(tabs.current_workspace, editor_state->part_name, editor_state->state_name); +} + Evas_Object * tabs_add(void) { @@ -464,7 +478,7 @@ tabs_add(void) //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_RESTACKED, _editor_part_restacked_cb, NULL); //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_RESTACKED, _editor_part_item_restacked_cb, NULL); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_ADDED, _editor_state_added_cb, NULL); - //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_DELETED, _editor_state_deleted_cb, NULL); + evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_DELETED, _editor_state_deleted_cb, NULL); return tabs.layout; } diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c index 900da08..fe66014 100644 --- a/src/bin/ui/workspace/workspace.c +++ b/src/bin/ui/workspace/workspace.c @@ -1957,3 +1957,22 @@ workspace_part_state_add(Evas_Object *obj, state = gm_state_add(ap.project, part, state_name); group_navigator_part_state_add(sd->group_navigator, part, state); } + +void +workspace_part_state_del(Evas_Object *obj, + Eina_Stringshare *part_name, + Eina_Stringshare *state_name) +{ + Part_ *part; + State *state; + WS_DATA_GET(obj, sd); + assert(part_name != NULL); + assert(state_name != NULL); + + part = pm_resource_unsorted_get(sd->group->parts, part_name); + state = pm_resource_get(part->states, state_name); + + group_navigator_part_select(sd->group_navigator, part); + group_navigator_part_state_del(sd->group_navigator, part, state); + gm_state_del(ap.project, state); +} diff --git a/src/bin/ui/workspace/workspace.h b/src/bin/ui/workspace/workspace.h index 8cf8233..c574e96 100644 --- a/src/bin/ui/workspace/workspace.h +++ b/src/bin/ui/workspace/workspace.h @@ -153,6 +153,21 @@ workspace_part_item_del(Evas_Object *obj, Eina_Stringshare *item_name); /** + * Add new part state to group_edit and group_navigator. + * Part should be already deleted from edit_object. + * + * @param obj The workspace object. + * @param part_name name of part + * @param state_name name of deleted part_state + * + * @ingroup Workspace + */ +void +workspace_part_state_del(Evas_Object *obj, + Eina_Stringshare *part_name, + Eina_Stringshare *state_name); + +/** * Del part from group_edit and group_navigator. * Part should be already deleted edit_object. * --