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

-- 


Reply via email to