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;
|
Elm_Code_Widget *widget;
|
||||||
|
|
||||||
code = elm_code_create();
|
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,
|
eo_do(widget,
|
||||||
elm_code_widget_code_set(code),
|
|
||||||
elm_code_widget_font_size_set(12),
|
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_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));
|
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;
|
Elm_Code_Widget *widget;
|
||||||
|
|
||||||
code = elm_code_create();
|
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,
|
eo_do(widget,
|
||||||
elm_code_widget_code_set(code),
|
|
||||||
elm_code_widget_font_size_set(14),
|
elm_code_widget_font_size_set(14),
|
||||||
elm_code_widget_editable_set(EINA_TRUE),
|
elm_code_widget_editable_set(EINA_TRUE),
|
||||||
elm_code_widget_line_numbers_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
|
// left side of diff
|
||||||
wcode1 = elm_code_create();
|
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,
|
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));
|
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);
|
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
|
// right side of diff
|
||||||
wcode2 = elm_code_create();
|
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,
|
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));
|
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);
|
evas_object_size_hint_weight_set(widget_right, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
|
|
@ -27,9 +27,15 @@ Eina_Unicode status_icons[] = {
|
||||||
0
|
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
|
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());
|
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;
|
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
|
EOLIAN static void
|
||||||
_elm_code_widget_class_constructor(Eo_Class *klass EINA_UNUSED)
|
_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
|
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;
|
pd->code = code;
|
||||||
|
|
||||||
code->widgets = eina_list_append(code->widgets, obj);
|
code->widgets = eina_list_append(code->widgets, obj);
|
||||||
|
|
|
@ -5,7 +5,9 @@ class Elm_Code_Widget (Elm_Layout, Elm_Interface_Atspi_Text)
|
||||||
code {
|
code {
|
||||||
set {
|
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 */
|
@ingroup Data */
|
||||||
}
|
}
|
||||||
|
@ -109,6 +111,7 @@ class Elm_Code_Widget (Elm_Layout, Elm_Interface_Atspi_Text)
|
||||||
implements {
|
implements {
|
||||||
class.constructor;
|
class.constructor;
|
||||||
Eo.Base.constructor;
|
Eo.Base.constructor;
|
||||||
|
Eo.Base.finalize;
|
||||||
Evas.Object_Smart.add;
|
Evas.Object_Smart.add;
|
||||||
Elm_Widget.focus_next_manager_is;
|
Elm_Widget.focus_next_manager_is;
|
||||||
Elm_Widget.focus_direction_manager_is;
|
Elm_Widget.focus_direction_manager_is;
|
||||||
|
|
|
@ -41,8 +41,42 @@ START_TEST (elm_code_widget_token_render_simple_test)
|
||||||
}
|
}
|
||||||
END_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)
|
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_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();
|
code = elm_code_create();
|
||||||
_edi_console_code = code;
|
_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,
|
eo_do(widget,
|
||||||
elm_code_widget_code_set(code),
|
|
||||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||||
elm_code_widget_gravity_set(0.0, 1.0),
|
elm_code_widget_gravity_set(0.0, 1.0),
|
||||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_consolepanel_line_cb, NULL),
|
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();
|
code = elm_code_create();
|
||||||
_edi_test_code = code;
|
_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,
|
eo_do(widget,
|
||||||
elm_code_widget_code_set(code),
|
|
||||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||||
elm_code_widget_gravity_set(0.0, 1.0),
|
elm_code_widget_gravity_set(0.0, 1.0),
|
||||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_testpanel_line_cb, NULL),
|
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;
|
Elm_Code *code;
|
||||||
|
|
||||||
code = elm_code_create();
|
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,
|
eo_do(widget,
|
||||||
elm_code_widget_code_set(code),
|
|
||||||
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
elm_code_widget_font_size_set(_edi_cfg->font.size),
|
||||||
elm_code_widget_gravity_set(0.0, 1.0),
|
elm_code_widget_gravity_set(0.0, 1.0),
|
||||||
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_logpanel_line_cb, NULL));
|
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_logpanel_line_cb, NULL));
|
||||||
|
|
Loading…
Reference in New Issue