summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2018-01-15 17:56:31 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2018-01-15 21:18:48 +0900
commit26738a3a25507d21c5b5709a868d674546eaeb2c (patch)
treef1d99188d6d79e0ee1a89566fc7276087d04f71f /src
parentb04aeb41e74a6979bfe66ef859e4d9144b3468b1 (diff)
eo: Warn on calls to NULL objectdevs/jpeg/no_null_calls
This makes eo print a WRN message in case a function is called on NULL. efl_del is an exception to this rule (implemented in a hackish way, I admit). A few (most likely not all) of said warnings have been resolved.
Diffstat (limited to 'src')
-rw-r--r--src/lib/ecore_input_evas/ecore_input_evas.c28
-rw-r--r--src/lib/edje/edje_smart.c16
-rw-r--r--src/lib/edje/edje_util.c6
-rw-r--r--src/lib/elementary/efl_ui_button.c1
-rw-r--r--src/lib/elementary/efl_ui_check.c1
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.c15
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_sub.c9
-rw-r--r--src/lib/elementary/efl_ui_focus_util.c2
-rw-r--r--src/lib/elementary/efl_ui_layout.c45
-rw-r--r--src/lib/elementary/efl_ui_progressbar.c1
-rw-r--r--src/lib/elementary/efl_ui_radio.c6
-rw-r--r--src/lib/elementary/efl_ui_widget.c12
-rw-r--r--src/lib/elementary/elm_interface_scrollable.c3
-rw-r--r--src/lib/elementary/elm_widget.h7
-rw-r--r--src/lib/elementary/els_cursor.c2
-rw-r--r--src/lib/eo/eo.c16
16 files changed, 120 insertions, 50 deletions
diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c
index 7866bd5..bd2f0d1 100644
--- a/src/lib/ecore_input_evas/ecore_input_evas.c
+++ b/src/lib/ecore_input_evas/ecore_input_evas.c
@@ -417,12 +417,12 @@ static Eina_Bool
417_ecore_event_evas_key(Ecore_Event_Key *e, Ecore_Event_Press press) 417_ecore_event_evas_key(Ecore_Event_Key *e, Ecore_Event_Press press)
418{ 418{
419 Ecore_Input_Window *lookup; 419 Ecore_Input_Window *lookup;
420 Eo *seat;
420 421
421 lookup = _ecore_event_window_match(e->event_window); 422 lookup = _ecore_event_window_match(e->event_window);
422 if (!lookup) return ECORE_CALLBACK_PASS_ON; 423 if (!lookup) return ECORE_CALLBACK_PASS_ON;
423 ecore_event_evas_seat_modifier_lock_update(lookup->evas, 424 seat = e->dev ? efl_input_device_seat_get(e->dev) : NULL;
424 e->modifiers, 425 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, seat);
425 efl_input_device_seat_get(e->dev));
426 if (press == ECORE_DOWN) 426 if (press == ECORE_DOWN)
427 { 427 {
428 if (!lookup->direct || 428 if (!lookup->direct ||
@@ -531,9 +531,8 @@ _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press pr
531 531
532 if (e->multi.device == 0) 532 if (e->multi.device == 0)
533 { 533 {
534 ecore_event_evas_seat_modifier_lock_update(lookup->evas, 534 Eo *seat = e->dev ? efl_input_device_seat_get(e->dev) : NULL;
535 e->modifiers, 535 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, seat);
536 efl_input_device_seat_get(e->dev));
537 if (press == ECORE_DOWN) 536 if (press == ECORE_DOWN)
538 { 537 {
539 if (!lookup->direct || 538 if (!lookup->direct ||
@@ -612,10 +611,9 @@ ecore_event_evas_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *
612 if (!lookup) return ECORE_CALLBACK_PASS_ON; 611 if (!lookup) return ECORE_CALLBACK_PASS_ON;
613 if (e->multi.device == 0) 612 if (e->multi.device == 0)
614 { 613 {
614 Eo *seat = e->dev ? efl_input_device_seat_get(e->dev) : NULL;
615 _ecore_event_evas_push_mouse_move(e); 615 _ecore_event_evas_push_mouse_move(e);
616 ecore_event_evas_seat_modifier_lock_update(lookup->evas, 616 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, seat);
617 e->modifiers,
618 efl_input_device_seat_get(e->dev));
619 if (!lookup->direct || 617 if (!lookup->direct ||
620 !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e)) 618 !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e))
621 { 619 {
@@ -671,12 +669,13 @@ static Eina_Bool
671_ecore_event_evas_mouse_io(Ecore_Event_Mouse_IO *e, Ecore_Event_IO io) 669_ecore_event_evas_mouse_io(Ecore_Event_Mouse_IO *e, Ecore_Event_IO io)
672{ 670{
673 Ecore_Input_Window *lookup; 671 Ecore_Input_Window *lookup;
672 Eo *seat;
674 673
675 lookup = _ecore_event_window_match(e->event_window); 674 lookup = _ecore_event_window_match(e->event_window);
676 if (!lookup) return ECORE_CALLBACK_PASS_ON; 675 if (!lookup) return ECORE_CALLBACK_PASS_ON;
677 ecore_event_evas_seat_modifier_lock_update(lookup->evas, 676 seat = e->dev ? efl_input_device_seat_get(e->dev) : NULL;
678 e->modifiers, 677 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, seat);
679 efl_input_device_seat_get(e->dev)); 678
680 switch (io) 679 switch (io)
681 { 680 {
682 case ECORE_IN: 681 case ECORE_IN:
@@ -718,12 +717,13 @@ ecore_event_evas_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void
718{ 717{
719 Ecore_Event_Mouse_Wheel *e; 718 Ecore_Event_Mouse_Wheel *e;
720 Ecore_Input_Window *lookup; 719 Ecore_Input_Window *lookup;
720 Eo *seat;
721 721
722 e = event; 722 e = event;
723 lookup = _ecore_event_window_match(e->event_window); 723 lookup = _ecore_event_window_match(e->event_window);
724 if (!lookup) return ECORE_CALLBACK_PASS_ON; 724 if (!lookup) return ECORE_CALLBACK_PASS_ON;
725 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, 725 seat = e->dev ? efl_input_device_seat_get(e->dev) : NULL;
726 efl_input_device_seat_get(e->dev)); 726 ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers, seat);
727 if (!lookup->direct || 727 if (!lookup->direct ||
728 !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_WHEEL, e)) 728 !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_WHEEL, e))
729 { 729 {
diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c
index ae038fb..6b4ed89 100644
--- a/src/lib/edje/edje_smart.c
+++ b/src/lib/edje/edje_smart.c
@@ -182,13 +182,21 @@ _efl_canvas_layout_efl_gfx_position_set(Eo *obj, Edje *ed, Eina_Position2D pos)
182 ep = ed->table_parts[i]; 182 ep = ed->table_parts[i];
183 if ((ep->type == EDJE_RP_TYPE_TEXT) && (ep->typedata.text)) 183 if ((ep->type == EDJE_RP_TYPE_TEXT) && (ep->typedata.text))
184 { 184 {
185 evas_object_move(ep->object, 185 if (ep->object)
186 ed->x + ep->x + ep->typedata.text->offset.x, 186 evas_object_move(ep->object,
187 ed->y + ep->y + ep->typedata.text->offset.y); 187 ed->x + ep->x + ep->typedata.text->offset.x,
188 ed->y + ep->y + ep->typedata.text->offset.y);
189 else if (ep->type != EFL_CANVAS_LAYOUT_PART_TYPE_NONE)
190 WRN("No object for part '%s' in group '%s'",
191 ep->part ? ep->part->name : "<invalid>", ed->group);
188 } 192 }
189 else 193 else
190 { 194 {
191 evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y); 195 if (ep->object)
196 evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y);
197 else if (ep->type != EFL_CANVAS_LAYOUT_PART_TYPE_NONE)
198 WRN("No object for part '%s' in group '%s'",
199 ep->part ? ep->part->name : "<invalid>", ed->group);
192 if ((ep->type == EDJE_RP_TYPE_SWALLOW) && 200 if ((ep->type == EDJE_RP_TYPE_SWALLOW) &&
193 (ep->typedata.swallow)) 201 (ep->typedata.swallow))
194 { 202 {
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index b5638ec..cfbccd6 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -3297,7 +3297,11 @@ _efl_canvas_layout_efl_part_part(Eo *obj, Edje *ed, const char *part)
3297 if ((!ed) || (!part)) return NULL; 3297 if ((!ed) || (!part)) return NULL;
3298 3298
3299 rp = _edje_real_part_recursive_get(&ed, part); 3299 rp = _edje_real_part_recursive_get(&ed, part);
3300 if (!rp) return NULL; 3300 if (EINA_UNLIKELY(!rp))
3301 {
3302 WRN("No such part '%s' in group '%s'.", part, ed->group);
3303 return NULL;
3304 }
3301 3305
3302 if (rp->part->type == EDJE_PART_TYPE_BOX) 3306 if (rp->part->type == EDJE_PART_TYPE_BOX)
3303 return _edje_box_internal_proxy_get(obj, ed, rp); 3307 return _edje_box_internal_proxy_get(obj, ed, rp);
diff --git a/src/lib/elementary/efl_ui_button.c b/src/lib/elementary/efl_ui_button.c
index 34dbd02..8cdfa7d 100644
--- a/src/lib/elementary/efl_ui_button.c
+++ b/src/lib/elementary/efl_ui_button.c
@@ -109,6 +109,7 @@ _icon_signal_emit(Evas_Object *obj)
109{ 109{
110 char buf[64]; 110 char buf[64];
111 111
112 if (!elm_widget_resize_object_get(obj)) return;
112 snprintf(buf, sizeof(buf), "elm,state,icon,%s", 113 snprintf(buf, sizeof(buf), "elm,state,icon,%s",
113 elm_layout_content_get(obj, "icon") ? "visible" : "hidden"); 114 elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
114 115
diff --git a/src/lib/elementary/efl_ui_check.c b/src/lib/elementary/efl_ui_check.c
index f4917b3..2bb3e07 100644
--- a/src/lib/elementary/efl_ui_check.c
+++ b/src/lib/elementary/efl_ui_check.c
@@ -93,6 +93,7 @@ _icon_signal_emit(Evas_Object *obj)
93 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); 93 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
94 char buf[64]; 94 char buf[64];
95 95
96 if (!elm_widget_resize_object_get(obj)) return;
96 snprintf(buf, sizeof(buf), "elm,state,icon,%s", 97 snprintf(buf, sizeof(buf), "elm,state,icon,%s",
97 elm_layout_content_get(obj, "icon") ? "visible" : "hidden"); 98 elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
98 99
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c
index c8641b5..2e1b10a 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.c
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.c
@@ -81,6 +81,8 @@ typedef struct {
81static void 81static void
82_manager_in_chain_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd) 82_manager_in_chain_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd)
83{ 83{
84 Eo *manager;
85
84 EINA_SAFETY_ON_NULL_RETURN(pd->root); 86 EINA_SAFETY_ON_NULL_RETURN(pd->root);
85 87
86 if (!efl_isa(pd->root->focusable, EFL_UI_WIN_CLASS)) 88 if (!efl_isa(pd->root->focusable, EFL_UI_WIN_CLASS))
@@ -89,7 +91,12 @@ _manager_in_chain_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd)
89 //so we dont run infinitly this does not fix it, but at least we only have a error 91 //so we dont run infinitly this does not fix it, but at least we only have a error
90 EINA_SAFETY_ON_TRUE_RETURN(efl_ui_focus_user_focus_manager_get(pd->root->focusable) == obj); 92 EINA_SAFETY_ON_TRUE_RETURN(efl_ui_focus_user_focus_manager_get(pd->root->focusable) == obj);
91 93
92 efl_ui_focus_manager_focus_set(efl_ui_focus_user_focus_manager_get(pd->root->focusable), pd->root->focusable); 94 manager = efl_ui_focus_user_focus_manager_get(pd->root->focusable);
95 if (manager)
96 efl_ui_focus_manager_focus_set(manager, pd->root->focusable);
97 else
98 DBG("No focus manager for focusable %s@%p",
99 efl_class_name_get(pd->root->focusable), pd->root->focusable);
93} 100}
94 101
95static Efl_Ui_Focus_Direction 102static Efl_Ui_Focus_Direction
@@ -1569,8 +1576,10 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_manager_focus_set(Eo *obj, Efl_U
1569 if (node_type == NODE_TYPE_NORMAL) 1576 if (node_type == NODE_TYPE_NORMAL)
1570 { 1577 {
1571 //populate the new change 1578 //populate the new change
1572 efl_ui_focus_object_focus_set(last_focusable, EINA_FALSE); 1579 if (last_focusable)
1573 efl_ui_focus_object_focus_set(new_focusable, EINA_TRUE); 1580 efl_ui_focus_object_focus_set(last_focusable, EINA_FALSE);
1581 if (new_focusable)
1582 efl_ui_focus_object_focus_set(new_focusable, EINA_TRUE);
1574 efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, last_focusable); 1583 efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, last_focusable);
1575 } 1584 }
1576 1585
diff --git a/src/lib/elementary/efl_ui_focus_manager_sub.c b/src/lib/elementary/efl_ui_focus_manager_sub.c
index 5404eb0..4e1ce22 100644
--- a/src/lib/elementary/efl_ui_focus_manager_sub.c
+++ b/src/lib/elementary/efl_ui_focus_manager_sub.c
@@ -137,10 +137,10 @@ _logical_manager_change(void *data EINA_UNUSED, const Efl_Event *ev)
137 Eina_List *n; 137 Eina_List *n;
138 Efl_Ui_Focus_User *b; 138 Efl_Ui_Focus_User *b;
139 Efl_Ui_Focus_Manager *manager; 139 Efl_Ui_Focus_Manager *manager;
140 manager = efl_ui_focus_user_focus_manager_get(ev->object);
141 140
142 if (!ev->info) return; 141 if (!ev->info) return;
143 142
143 manager = efl_ui_focus_user_focus_manager_get(ev->object);
144 EINA_LIST_FOREACH(pd->current_border, n, b) 144 EINA_LIST_FOREACH(pd->current_border, n, b)
145 { 145 {
146 if (b == ev->object) continue; 146 if (b == ev->object) continue;
@@ -156,13 +156,12 @@ _flush_manager(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd)
156 Efl_Ui_Focus_User *b; 156 Efl_Ui_Focus_User *b;
157 Eina_List *n; 157 Eina_List *n;
158 158
159
160 logical = efl_ui_focus_user_focus_parent_get(obj); 159 logical = efl_ui_focus_user_focus_parent_get(obj);
161 manager = efl_ui_focus_user_focus_manager_get(obj); 160 manager = efl_ui_focus_user_focus_manager_get(obj);
162 161
163 //unregister from the old 162 //unregister from the old
164 efl_event_callback_array_del(pd->manager, parent_manager(), obj); 163 if (pd->manager) efl_event_callback_array_del(pd->manager, parent_manager(), obj);
165 efl_event_callback_array_add(manager, parent_manager(), obj); 164 if (manager) efl_event_callback_array_add(manager, parent_manager(), obj);
166 165
167 EINA_LIST_FOREACH(pd->current_border , n, b) 166 EINA_LIST_FOREACH(pd->current_border , n, b)
168 { 167 {
@@ -203,7 +202,7 @@ _efl_ui_focus_manager_sub_efl_object_destructor(Eo *obj, Efl_Ui_Focus_Manager_Su
203{ 202{
204 _border_unregister(obj, pd); 203 _border_unregister(obj, pd);
205 204
206 efl_event_callback_array_del(pd->manager, parent_manager(), obj); 205 if (pd->manager) efl_event_callback_array_del(pd->manager, parent_manager(), obj);
207 206
208 efl_destructor(efl_super(obj, MY_CLASS)); 207 efl_destructor(efl_super(obj, MY_CLASS));
209} 208}
diff --git a/src/lib/elementary/efl_ui_focus_util.c b/src/lib/elementary/efl_ui_focus_util.c
index 76ec928..aa0fbbd 100644
--- a/src/lib/elementary/efl_ui_focus_util.c
+++ b/src/lib/elementary/efl_ui_focus_util.c
@@ -25,7 +25,7 @@ _efl_ui_focus_util_focus(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Ui_Focus
25 top = elm_widget_top_get(user); 25 top = elm_widget_top_get(user);
26 26
27 o = efl_key_data_get(top, "__delayed_focus_set"); 27 o = efl_key_data_get(top, "__delayed_focus_set");
28 efl_event_callback_del(o, EFL_UI_FOCUS_USER_EVENT_MANAGER_CHANGED, _manager_changed, o); 28 if (o) efl_event_callback_del(o, EFL_UI_FOCUS_USER_EVENT_MANAGER_CHANGED, _manager_changed, o);
29 efl_key_data_set(top, "__delayed_focus_set", NULL); 29 efl_key_data_set(top, "__delayed_focus_set", NULL);
30 30
31 if (!m) 31 if (!m)
diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c
index 60c6500..cc63671 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -165,8 +165,12 @@ _icon_signal_emit(Efl_Ui_Layout_Data *sd,
165{ 165{
166 char buf[1024]; 166 char buf[1024];
167 const char *type; 167 const char *type;
168 Eo *edje;
168 int i; 169 int i;
169 170
171 edje = elm_widget_resize_object_get(sd->obj);
172 if (!edje) return;
173
170 //FIXME: Don't limit to the icon and end here. 174 //FIXME: Don't limit to the icon and end here.
171 // send signals for all contents after elm 2.0 175 // send signals for all contents after elm 2.0
172 if (sub_d->type != SWALLOW) return; 176 if (sub_d->type != SWALLOW) return;
@@ -184,11 +188,10 @@ _icon_signal_emit(Efl_Ui_Layout_Data *sd,
184 snprintf(buf, sizeof(buf), "elm,state,%s,%s", type, 188 snprintf(buf, sizeof(buf), "elm,state,%s,%s", type,
185 visible ? "visible" : "hidden"); 189 visible ? "visible" : "hidden");
186 190
187 ELM_WIDGET_DATA_GET_OR_RETURN(sd->obj, wd); 191 edje_object_signal_emit(edje, buf, "elm");
188 edje_object_signal_emit(wd->resize_obj, buf, "elm");
189 192
190 /* themes might need immediate action here */ 193 /* themes might need immediate action here */
191 edje_object_message_signal_process(wd->resize_obj); 194 edje_object_message_signal_process(edje);
192} 195}
193 196
194static inline void 197static inline void
@@ -640,17 +643,14 @@ _efl_ui_layout_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Layout_Data *sd)
640 Efl_Ui_Layout_Sub_Connect *sc; 643 Efl_Ui_Layout_Sub_Connect *sc;
641 Edje_Signal_Data *esd; 644 Edje_Signal_Data *esd;
642 Evas_Object *child; 645 Evas_Object *child;
643 Eina_List *l; 646 Eina_List *l, *ll;
644 647
645 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); 648 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
646 649
647 elm_layout_freeze(obj); 650 elm_layout_freeze(obj);
648 651
649 EINA_LIST_FREE(sd->subs, sub_d) 652 EINA_LIST_FOREACH_SAFE(sd->subs, l, ll, sub_d)
650 { 653 efl_ui_widget_sub_object_del(obj, sub_d->obj);
651 eina_stringshare_del(sub_d->part);
652 free(sub_d);
653 }
654 654
655 EINA_LIST_FREE(sd->parts_cursors, pc) 655 EINA_LIST_FREE(sd->parts_cursors, pc)
656 _part_cursor_free(pc); 656 _part_cursor_free(pc);
@@ -943,6 +943,13 @@ elm_layout_content_get(const Evas_Object *obj, const char *swallow)
943 else if (!_elm_layout_part_aliasing_eval(obj, &swallow, EINA_FALSE)) 943 else if (!_elm_layout_part_aliasing_eval(obj, &swallow, EINA_FALSE))
944 return NULL; 944 return NULL;
945 945
946 if (!efl_layout_group_part_exist_get(obj, swallow))
947 {
948 DBG("No such part '%s' in group '%s'",
949 swallow, elm_widget_theme_element_get(obj));
950 return NULL;
951 }
952
946 return efl_content_get(efl_part(obj, swallow)); 953 return efl_content_get(efl_part(obj, swallow));
947} 954}
948 955
@@ -951,6 +958,7 @@ _efl_ui_layout_content_get(Eo *obj, Efl_Ui_Layout_Data *sd, const char *part)
951{ 958{
952 const Eina_List *l; 959 const Eina_List *l;
953 Efl_Ui_Layout_Sub_Object_Data *sub_d; 960 Efl_Ui_Layout_Sub_Object_Data *sub_d;
961 Eo *handle;
954 962
955 EINA_LIST_FOREACH(sd->subs, l, sub_d) 963 EINA_LIST_FOREACH(sd->subs, l, sub_d)
956 { 964 {
@@ -962,7 +970,8 @@ _efl_ui_layout_content_get(Eo *obj, Efl_Ui_Layout_Data *sd, const char *part)
962 } 970 }
963 971
964 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); 972 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
965 return efl_content_get(efl_part(wd->resize_obj, part)); 973 handle = efl_part(wd->resize_obj, part);
974 return handle ? efl_content_get(handle) : NULL;
966} 975}
967 976
968EAPI Evas_Object * 977EAPI Evas_Object *
@@ -2430,17 +2439,18 @@ elm_layout_theme_set(Evas_Object *obj, const char *klass, const char *group, con
2430EOLIAN static Eo * 2439EOLIAN static Eo *
2431_efl_ui_layout_efl_part_part(const Eo *obj, Efl_Ui_Layout_Data *sd EINA_UNUSED, const char *part) 2440_efl_ui_layout_efl_part_part(const Eo *obj, Efl_Ui_Layout_Data *sd EINA_UNUSED, const char *part)
2432{ 2441{
2433 Efl_Canvas_Layout_Part_Type type; 2442 Efl_Canvas_Layout_Part_Type type = EFL_CANVAS_LAYOUT_PART_TYPE_NONE;
2434 2443
2435 EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); 2444 EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
2436 ELM_WIDGET_DATA_GET_OR_RETURN((Eo *) obj, wd, NULL); 2445 ELM_WIDGET_DATA_GET_OR_RETURN((Eo *) obj, wd, NULL);
2437 2446
2438 // Check part type without using edje_object_part_object_get(), as this 2447 // Check part type without using edje_object_part_object_get(), as this
2439 // can cause recalc, which has side effects... and could be slow. 2448 // can cause recalc, which has side effects... and could be slow.
2440 type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));
2441 2449
2442 if (eina_streq(part, "background")) 2450 if (eina_streq(part, "background"))
2443 { 2451 {
2452 if (efl_layout_group_part_exist_get(wd->resize_obj, part))
2453 type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));
2444 if (type != EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW) 2454 if (type != EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW)
2445 { 2455 {
2446 if (type < EFL_CANVAS_LAYOUT_PART_TYPE_LAST && 2456 if (type < EFL_CANVAS_LAYOUT_PART_TYPE_LAST &&
@@ -2459,6 +2469,10 @@ _efl_ui_layout_efl_part_part(const Eo *obj, Efl_Ui_Layout_Data *sd EINA_UNUSED,
2459 else if (eina_streq(part, "shadow")) 2469 else if (eina_streq(part, "shadow"))
2460 return efl_part(efl_super(obj, MY_CLASS), part); 2470 return efl_part(efl_super(obj, MY_CLASS), part);
2461 2471
2472 if (!efl_layout_group_part_exist_get(wd->resize_obj, part))
2473 goto no_part;
2474
2475 type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));
2462 if (type >= EFL_CANVAS_LAYOUT_PART_TYPE_LAST) 2476 if (type >= EFL_CANVAS_LAYOUT_PART_TYPE_LAST)
2463 { 2477 {
2464 ERR("Invalid type found for part '%s' in group '%s'", part, elm_widget_theme_element_get(obj)); 2478 ERR("Invalid type found for part '%s' in group '%s'", part, elm_widget_theme_element_get(obj));
@@ -2476,11 +2490,14 @@ _efl_ui_layout_efl_part_part(const Eo *obj, Efl_Ui_Layout_Data *sd EINA_UNUSED,
2476 case EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW: 2490 case EFL_CANVAS_LAYOUT_PART_TYPE_SWALLOW:
2477 return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, part); 2491 return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, part);
2478 case EFL_CANVAS_LAYOUT_PART_TYPE_NONE: 2492 case EFL_CANVAS_LAYOUT_PART_TYPE_NONE:
2479 WRN("No such part '%s' in group '%s'", part, elm_widget_theme_element_get(obj)); 2493 goto no_part;
2480 return NULL;
2481 default: 2494 default:
2482 return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CLASS, obj, part); 2495 return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CLASS, obj, part);
2483 } 2496 }
2497
2498no_part:
2499 WRN("No such part '%s' in group '%s'", part, elm_widget_theme_element_get(obj));
2500 return NULL;
2484} 2501}
2485 2502
2486static const char * 2503static const char *
diff --git a/src/lib/elementary/efl_ui_progressbar.c b/src/lib/elementary/efl_ui_progressbar.c
index 6c41b66..4bd7e87 100644
--- a/src/lib/elementary/efl_ui_progressbar.c
+++ b/src/lib/elementary/efl_ui_progressbar.c
@@ -172,6 +172,7 @@ _icon_signal_emit(Evas_Object *obj)
172{ 172{
173 char buf[64]; 173 char buf[64];
174 174
175 if (!elm_widget_resize_object_get(obj)) return;
175 snprintf(buf, sizeof(buf), "elm,state,icon,%s", 176 snprintf(buf, sizeof(buf), "elm,state,icon,%s",
176 elm_layout_content_get(obj, "icon") ? "visible" : "hidden"); 177 elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
177 178
diff --git a/src/lib/elementary/efl_ui_radio.c b/src/lib/elementary/efl_ui_radio.c
index 51d406c..1486cf8 100644
--- a/src/lib/elementary/efl_ui_radio.c
+++ b/src/lib/elementary/efl_ui_radio.c
@@ -137,14 +137,16 @@ _key_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
137static void 137static void
138_icon_signal_emit(Evas_Object *obj) 138_icon_signal_emit(Evas_Object *obj)
139{ 139{
140 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
141 char buf[64]; 140 char buf[64];
141 Eo *edje;
142 142
143 edje = elm_widget_resize_object_get(obj);
144 if (!edje) return;
143 snprintf(buf, sizeof(buf), "elm,state,icon,%s", 145 snprintf(buf, sizeof(buf), "elm,state,icon,%s",
144 elm_layout_content_get(obj, "icon") ? "visible" : "hidden"); 146 elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
145 147
146 elm_layout_signal_emit(obj, buf, "elm"); 148 elm_layout_signal_emit(obj, buf, "elm");
147 edje_object_message_signal_process(wd->resize_obj); 149 edje_object_message_signal_process(edje);
148} 150}
149 151
150EOLIAN static Efl_Ui_Theme_Apply 152EOLIAN static Efl_Ui_Theme_Apply
diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c
index 4767f9a..7d9a181 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -311,7 +311,7 @@ _focus_manager_eval(Eo *obj, Elm_Widget_Smart_Data *pd)
311 { 311 {
312 new = parent; 312 new = parent;
313 } 313 }
314 else 314 else if (parent)
315 { 315 {
316 new = efl_ui_focus_user_focus_manager_get(parent); 316 new = efl_ui_focus_user_focus_manager_get(parent);
317 provider = parent; 317 provider = parent;
@@ -2439,10 +2439,14 @@ _efl_ui_widget_disabled_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool disabl
2439} 2439}
2440 2440
2441EOLIAN static Eina_Bool 2441EOLIAN static Eina_Bool
2442_efl_ui_widget_disabled_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) 2442_efl_ui_widget_disabled_get(Eo *obj, Elm_Widget_Smart_Data *sd)
2443{ 2443{
2444 Eo *parent;
2445
2444 if (sd->disabled) return EINA_TRUE; 2446 if (sd->disabled) return EINA_TRUE;
2445 return elm_widget_disabled_get(elm_widget_parent_get(obj)); 2447 if ((parent = elm_widget_parent_get(obj)) != NULL)
2448 return elm_widget_disabled_get(parent);
2449 return EINA_FALSE;
2446} 2450}
2447 2451
2448EOLIAN static void 2452EOLIAN static void
@@ -5480,7 +5484,7 @@ _efl_ui_widget_efl_object_provider_find(const Eo *obj, Elm_Widget_Smart_Data *pd
5480 if (pd->provider_lookup) return NULL; 5484 if (pd->provider_lookup) return NULL;
5481 pd->provider_lookup = EINA_TRUE; 5485 pd->provider_lookup = EINA_TRUE;
5482 5486
5483 lookup = efl_provider_find(pd->parent_obj, klass); 5487 if (pd->parent_obj) lookup = efl_provider_find(pd->parent_obj, klass);
5484 if (!lookup) lookup = efl_provider_find(efl_super(obj, MY_CLASS), klass); 5488 if (!lookup) lookup = efl_provider_find(efl_super(obj, MY_CLASS), klass);
5485 5489
5486 pd->provider_lookup = EINA_FALSE; 5490 pd->provider_lookup = EINA_FALSE;
diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c
index 1d65463..8bba0e1 100644
--- a/src/lib/elementary/elm_interface_scrollable.c
+++ b/src/lib/elementary/elm_interface_scrollable.c
@@ -82,7 +82,8 @@ _round(double value, int pos)
82static void 82static void
83_elm_pan_update(Elm_Pan_Smart_Data *psd) 83_elm_pan_update(Elm_Pan_Smart_Data *psd)
84{ 84{
85 evas_object_move(psd->content, psd->x - psd->px, psd->y - psd->py); 85 if (psd->content)
86 evas_object_move(psd->content, psd->x - psd->px, psd->y - psd->py);
86} 87}
87 88
88EOLIAN static void 89EOLIAN static void
diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h
index a25cf23..4bdff24 100644
--- a/src/lib/elementary/elm_widget.h
+++ b/src/lib/elementary/elm_widget.h
@@ -830,6 +830,13 @@ EAPI extern Eina_Bool _elm_legacy_add;
830#define elm_legacy_add(k, p, ...) ({ _elm_legacy_add = 1; \ 830#define elm_legacy_add(k, p, ...) ({ _elm_legacy_add = 1; \
831 efl_add(k, p, efl_canvas_object_legacy_ctor(efl_added), ##__VA_ARGS__); }) 831 efl_add(k, p, efl_canvas_object_legacy_ctor(efl_added), ##__VA_ARGS__); })
832 832
833static inline Eo *
834elm_widget_resize_object_get(const Eo *obj)
835{
836 Elm_Widget_Smart_Data *wd = efl_data_scope_safe_get(obj, EFL_UI_WIDGET_CLASS);
837 return wd ? wd->resize_obj : NULL;
838}
839
833static inline Eina_Bool 840static inline Eina_Bool
834elm_widget_is_legacy(const Eo *obj) 841elm_widget_is_legacy(const Eo *obj)
835{ 842{
diff --git a/src/lib/elementary/els_cursor.c b/src/lib/elementary/els_cursor.c
index 8d15df1..fbcde05 100644
--- a/src/lib/elementary/els_cursor.c
+++ b/src/lib/elementary/els_cursor.c
@@ -212,6 +212,8 @@ _elm_cursor_set_hot_spots(Elm_Cursor *cur)
212 Evas_Coord cx, cy, cw, ch, x, y, w, h; 212 Evas_Coord cx, cy, cw, ch, x, y, w, h;
213 int prev_hot_x, prev_hot_y; 213 int prev_hot_x, prev_hot_y;
214 214
215 if (!cur->visible) return;
216
215 prev_hot_x = cur->hot_x; 217 prev_hot_x = cur->hot_x;
216 prev_hot_y = cur->hot_y; 218 prev_hot_y = cur->hot_y;
217 219
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index 50df250..45e4cee 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -40,6 +40,8 @@ EAPI Eina_Lock _efl_class_creation_lock;
40EAPI unsigned int _efl_object_init_generation = 1; 40EAPI unsigned int _efl_object_init_generation = 1;
41int _eo_log_dom = -1; 41int _eo_log_dom = -1;
42Eina_Thread _efl_object_main_thread; 42Eina_Thread _efl_object_main_thread;
43static unsigned int efl_del_api_generation = 0;
44static Efl_Object_Op _efl_del_api_op_id = 0;
43 45
44typedef enum _Eo_Ref_Op { 46typedef enum _Eo_Ref_Op {
45 EO_REF_OP_NONE, 47 EO_REF_OP_NONE,
@@ -101,6 +103,8 @@ static inline void *_efl_data_xref_internal(const char *file, int line, _Eo_Obje
101static inline void _efl_data_xunref_internal(_Eo_Object *obj, void *data, const _Eo_Object *ref_obj); 103static inline void _efl_data_xunref_internal(_Eo_Object *obj, void *data, const _Eo_Object *ref_obj);
102static void _vtable_init(Eo_Vtable *vtable, size_t size); 104static void _vtable_init(Eo_Vtable *vtable, size_t size);
103 105
106static inline Efl_Object_Op _efl_object_api_op_id_get_internal(const void *api_func);
107
104/* Start of Dich */ 108/* Start of Dich */
105 109
106 110
@@ -450,7 +454,7 @@ _efl_object_call_resolve(Eo *eo_id, const char *func_name, Efl_Object_Op_Call_Da
450 Eina_Bool is_override = EINA_FALSE; 454 Eina_Bool is_override = EINA_FALSE;
451 Eina_Bool super = EINA_TRUE; 455 Eina_Bool super = EINA_TRUE;
452 456
453 if (EINA_UNLIKELY(!eo_id)) return EINA_FALSE; 457 if (EINA_UNLIKELY(!eo_id)) goto on_null;
454 458
455 call->eo_id = eo_id; 459 call->eo_id = eo_id;
456 460
@@ -668,6 +672,16 @@ obj_super:
668err_klass: 672err_klass:
669 _EO_POINTER_ERR(eo_id, "in %s:%d: func '%s': obj_id=%p is an invalid ref.", file, line, func_name, eo_id); 673 _EO_POINTER_ERR(eo_id, "in %s:%d: func '%s': obj_id=%p is an invalid ref.", file, line, func_name, eo_id);
670 return EINA_FALSE; 674 return EINA_FALSE;
675
676on_null:
677 if (EINA_UNLIKELY(efl_del_api_generation != _efl_object_init_generation))
678 {
679 _efl_del_api_op_id = _efl_object_api_op_id_get_internal(EFL_FUNC_COMMON_OP_FUNC(efl_del));
680 efl_del_api_generation = _efl_object_init_generation;
681 }
682 if (cache->op != _efl_del_api_op_id)
683 WRN("NULL passed to function %s().", func_name);
684 return EINA_FALSE;
671} 685}
672 686
673EAPI void 687EAPI void