efl_ui_widget: Improved safety of the efl_ui_widget_sub_object_del. 74/298674/1 accepted/tizen/unified/20230913.091622
authorMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Tue, 12 Sep 2023 08:45:03 +0000 (10:45 +0200)
committerMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Tue, 12 Sep 2023 08:46:39 +0000 (10:46 +0200)
Set focusable flag only for valid objects in tree.

Change-Id: I869d0e78212c2dcf295b0259e5de977ae8bf3113

src/lib/elementary/efl_ui_widget.c

index 95580c3..c9fd50a 100644 (file)
@@ -1828,22 +1828,26 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
                   Evas_Object *subobj;
 
                   ELM_WIDGET_DATA_GET(parent, sdp);
-
-                  sdp->child_can_focus = EINA_FALSE;
-                  for (unsigned int i = 0; i < eina_array_count(sdp->children); ++i)
+                  //TIZEN_ONLY(20230912): Improved safety of efl_ui_widget_sub_object_del
+                  if (sdp)
                     {
-                       subobj = eina_array_data_get(sdp->children, i);
-                       if ((subobj != sobj) && (_is_focusable(subobj)))
+                       sdp->child_can_focus = EINA_FALSE;
+                       for (unsigned int i = 0; i < eina_array_count(sdp->children); ++i)
                          {
-                            sdp->child_can_focus = EINA_TRUE;
-                            break;
+                            subobj = eina_array_data_get(sdp->children, i);
+                            if ((subobj != sobj) && (_is_focusable(subobj)))
+                              {
+                                 sdp->child_can_focus = EINA_TRUE;
+                                 break;
+                              }
                          }
-                    }
 
-                  /* break again, child_can_focus went back to
-                   * original value */
-                  if (sdp->child_can_focus) break;
-                  parent = sdp->parent_obj;
+                        /* break again, child_can_focus went back to
+                        * original value */
+                        if (sdp->child_can_focus) break;
+                        parent = sdp->parent_obj;
+                    }
+                  //
                }
           }
 //