elm_code: require an elm_code for each widget
In our finalizer we ensure that an elm_code is set. No longer allow code_set to be called after construction.
This commit is contained in:
parent
e8297bc390
commit
e0477ff3cb
|
@ -69,9 +69,9 @@ _elm_code_test_welcome_setup(Evas_Object *parent)
|
|||
Elm_Code_Widget *widget;
|
||||
|
||||
code = elm_code_create();
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(code));
|
||||
eo_do(widget,
|
||||
elm_code_widget_code_set(code),
|
||||
elm_code_widget_font_size_set(12),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_test_line_done_cb, NULL);
|
||||
eo_event_callback_add(ELM_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_clicked_cb, code));
|
||||
|
@ -95,9 +95,9 @@ _elm_code_test_editor_setup(Evas_Object *parent)
|
|||
Elm_Code_Widget *widget;
|
||||
|
||||
code = elm_code_create();
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(code));
|
||||
eo_do(widget,
|
||||
elm_code_widget_code_set(code),
|
||||
elm_code_widget_font_size_set(14),
|
||||
elm_code_widget_editable_set(EINA_TRUE),
|
||||
elm_code_widget_line_numbers_set(EINA_TRUE));
|
||||
|
|
|
@ -102,9 +102,9 @@ elm_code_diff_widget_add(Evas_Object *parent, Elm_Code *code)
|
|||
|
||||
// left side of diff
|
||||
wcode1 = elm_code_create();
|
||||
widget_left = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget_left = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(wcode1));
|
||||
eo_do(widget_left,
|
||||
elm_code_widget_code_set(wcode1),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_diff_widget_line_cb, NULL));
|
||||
|
||||
evas_object_size_hint_weight_set(widget_left, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
|
@ -115,9 +115,9 @@ elm_code_diff_widget_add(Evas_Object *parent, Elm_Code *code)
|
|||
|
||||
// right side of diff
|
||||
wcode2 = elm_code_create();
|
||||
widget_right = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget_right = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(wcode2));
|
||||
eo_do(widget_right,
|
||||
elm_code_widget_code_set(wcode2),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_diff_widget_line_cb, NULL));
|
||||
|
||||
evas_object_size_hint_weight_set(widget_right, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
|
|
|
@ -27,9 +27,15 @@ Eina_Unicode status_icons[] = {
|
|||
0
|
||||
};
|
||||
|
||||
#define EO_CONSTRUCTOR_CHECK_RETURN(obj) \
|
||||
if (eo_do(obj, eo_finalized_get())) \
|
||||
{ \
|
||||
ERR("This function is only allowed during construction."); \
|
||||
return; \
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_code_widget_eo_base_constructor(Eo *obj, Elm_Code_Widget_Data *pd EINA_UNUSED)
|
||||
_elm_code_widget_eo_base_constructor(Eo *obj, Elm_Code_Widget_Data *pd)
|
||||
{
|
||||
eo_do_super(obj, ELM_CODE_WIDGET_CLASS, eo_constructor());
|
||||
|
||||
|
@ -37,6 +43,18 @@ _elm_code_widget_eo_base_constructor(Eo *obj, Elm_Code_Widget_Data *pd EINA_UNUS
|
|||
pd->cursor_col = 1;
|
||||
}
|
||||
|
||||
EOLIAN static Eo *
|
||||
_elm_code_widget_eo_base_finalize(Eo *obj, Elm_Code_Widget_Data *pd)
|
||||
{
|
||||
eo_do_super(obj, ELM_CODE_WIDGET_CLASS, eo_finalize());
|
||||
|
||||
if (pd->code)
|
||||
return obj;
|
||||
|
||||
ERR("Elm_Code_Widget cannot finalize without calling elm_code_widget_code_set.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_code_widget_class_constructor(Eo_Class *klass EINA_UNUSED)
|
||||
{
|
||||
|
@ -582,8 +600,10 @@ _elm_code_widget_font_size_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
|
|||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_code_widget_code_set(Eo *obj, Elm_Code_Widget_Data *pd EINA_UNUSED, Elm_Code *code)
|
||||
_elm_code_widget_code_set(Eo *obj, Elm_Code_Widget_Data *pd, Elm_Code *code)
|
||||
{
|
||||
EO_CONSTRUCTOR_CHECK_RETURN(obj);
|
||||
|
||||
pd->code = code;
|
||||
|
||||
code->widgets = eina_list_append(code->widgets, obj);
|
||||
|
|
|
@ -5,7 +5,9 @@ class Elm_Code_Widget (Elm_Layout, Elm_Interface_Atspi_Text)
|
|||
code {
|
||||
set {
|
||||
/*@
|
||||
Set the underlying code object that this widget renders
|
||||
Set the underlying code object that this widget renders.
|
||||
This can only be set during construction, once the widget is created the
|
||||
backing code object cannot be changed.
|
||||
|
||||
@ingroup Data */
|
||||
}
|
||||
|
@ -109,6 +111,7 @@ class Elm_Code_Widget (Elm_Layout, Elm_Interface_Atspi_Text)
|
|||
implements {
|
||||
class.constructor;
|
||||
Eo.Base.constructor;
|
||||
Eo.Base.finalize;
|
||||
Evas.Object_Smart.add;
|
||||
Elm_Widget.focus_next_manager_is;
|
||||
Elm_Widget.focus_direction_manager_is;
|
||||
|
|
|
@ -41,8 +41,42 @@ START_TEST (elm_code_widget_token_render_simple_test)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST (elm_code_widget_construct)
|
||||
{
|
||||
Elm_Code *code;
|
||||
Elm_Code_Widget *widget, *win;
|
||||
|
||||
elm_init(1, NULL);
|
||||
code = elm_code_create();
|
||||
|
||||
win = elm_win_add(NULL, "entry", ELM_WIN_BASIC);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, win,
|
||||
elm_code_widget_code_set(code));
|
||||
|
||||
ck_assert(!!widget);
|
||||
elm_code_free(code);
|
||||
elm_shutdown();
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST (elm_code_widget_construct_nocode)
|
||||
{
|
||||
Elm_Code_Widget *widget, *win;
|
||||
|
||||
elm_init(1, NULL);
|
||||
|
||||
win = elm_win_add(NULL, "entry", ELM_WIN_BASIC);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, win);
|
||||
ck_assert(!widget);
|
||||
|
||||
elm_shutdown();
|
||||
}
|
||||
END_TEST
|
||||
|
||||
void elm_code_test_widget(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, elm_code_widget_token_render_simple_test);
|
||||
tcase_add_test(tc, elm_code_widget_construct);
|
||||
tcase_add_test(tc, elm_code_widget_construct_nocode);
|
||||
}
|
||||
|
||||
|
|
|
@ -316,9 +316,9 @@ void edi_consolepanel_add(Evas_Object *parent)
|
|||
code = elm_code_create();
|
||||
_edi_console_code = code;
|
||||
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(code));
|
||||
eo_do(widget,
|
||||
elm_code_widget_code_set(code),
|
||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||
elm_code_widget_gravity_set(0.0, 1.0),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_consolepanel_line_cb, NULL),
|
||||
|
@ -342,9 +342,9 @@ void edi_testpanel_add(Evas_Object *parent)
|
|||
code = elm_code_create();
|
||||
_edi_test_code = code;
|
||||
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(code));
|
||||
eo_do(widget,
|
||||
elm_code_widget_code_set(code),
|
||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||
elm_code_widget_gravity_set(0.0, 1.0),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_testpanel_line_cb, NULL),
|
||||
|
|
|
@ -52,9 +52,9 @@ void edi_logpanel_add(Evas_Object *parent)
|
|||
Elm_Code *code;
|
||||
|
||||
code = elm_code_create();
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent);
|
||||
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
|
||||
elm_code_widget_code_set(code));
|
||||
eo_do(widget,
|
||||
elm_code_widget_code_set(code),
|
||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||
elm_code_widget_gravity_set(0.0, 1.0),
|
||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_logpanel_line_cb, NULL));
|
||||
|
|
Loading…
Reference in New Issue