This was causing some callback be removed instead a deleted callback.
Also was leaking stringshare and decreasing matches_count.
SPANK SPANK SPANK cedric
NOTE: In C, you can only mark an area const if it is not changed at
runtime, this include also the job of the linker at runtime. So this
array can't be const because they use pointer from Evas that will be
resolved during link at runtime, instead of link at compile time.
This pass on Linux, but fail on other architecture and is actually
not correct. So let's not use const here.
+ Main cursor should be moved to selection start or selection end
cursor's position when selection handlers are pressed.
+ Fix my mistake in signal emit for end handler mouse down event.
Conflicts:
ChangeLog
NEWS
or tripple clicked.
selection should be allowed when select_allow is true whatever
select_mode is.
Reproduce step is below.
1. ELM_THEME=default-desktop ELM_PROFILE=standard elementary_test
--test-win-only "Entry Scrolled
2. double click on password entry.
When a signal change a state of a edje box to a state that was already active
and we add/del a item of edje box a crash happen.
Example:
test.edc:
collections {
group {
name: "box_text";
parts {
part {
name: "elm.box.buttons";
type: BOX;
description {
state: "default" 0.0;
min: 0 100;
max: 9999 100;
align: 0 0;
box {
layout: "horizontal";
min: 1 1;
}
visible: 0;
}
description {
state: "show" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
}
programs {
program {
signal: "show,buttons";
source: "gui";
action: STATE_SET "show" 0.0;
transition: ACCELERATE 1;
target: "elm.box.buttons";
}
program {
signal: "hide,buttons";
source: "gui";
action: STATE_SET "default" 0.0;
transition: ACCELERATE 1;
target: "elm.box.buttons";
}
}
}
}
test.c:
//Compile with:
//gcc -g test.c -o test `pkg-config --cflags --libs elementary edje ecore`
static int count = 0;
static Eina_Bool _fill(void *data)
{
int i;
Evas_Object *layout = data;
Evas_Object *edje = elm_layout_edje_get(layout);
edje_object_part_box_remove_all(edje, "elm.box.buttons", EINA_TRUE);
elm_layout_signal_emit(layout, "show,buttons", "gui");
printf("_fill()\n");
for (i = 0; i < 5; i++, count++)
{
Evas_Object *btn;
char buf[50];
btn = elm_button_add(layout);
snprintf(buf, sizeof(buf), "button %d", count);
elm_object_text_set(btn, buf);
edje_object_part_box_append(edje, "elm.box.buttons", btn);
evas_object_show(btn);
}
return EINA_TRUE;
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *bg, *layout;
win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
elm_win_title_set(win, "Test");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
bg = elm_bg_add(win);
elm_bg_color_set(bg, 255, 255, 255);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bg);
evas_object_show(bg);
layout = elm_layout_add(win);
elm_layout_file_set(layout, "test.edj", "box_text");
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(layout);
_fill(layout);
ecore_timer_add(5, _fill, layout);
evas_object_resize(win, 800, 320);
evas_object_show(win);
elm_run();
elm_shutdown();
return 0;
}
ELM_MAIN()
(gdb) bt
0x00000000 in ?? ()
0xb7add287 in _edje_box_layout_calculate_coords ()
from /usr/lib/libedje.so.1
0xb7add5cd in _edje_box_layout () from /usr/lib/libedje.so.1
0xb7c98ff7 in _evas_object_box_smart_calculate ()
from /usr/lib/libevas.so.1
0xb7c97a36 in evas_object_smart_calculate () from /usr/lib/libevas.so.1
0xb7ae1b12 in _edje_part_recalc_single () from /usr/lib/libedje.so.1
0xb7ae3380 in _edje_part_recalc () from /usr/lib/libedje.so.1
0xb7ae59ff in _edje_recalc_do () from /usr/lib/libedje.so.1
0xb7b3603a in _edje_smart_calculate () from /usr/lib/libedje.so.1
0xb7c97be2 in evas_call_smarts_calculate () from /usr/lib/libevas.so.1
0xb7cc7d88 in evas_render_updates_internal () from /usr/lib/libevas.so.1
0xb7ba7c97 in _ecore_evas_x_render () from /usr/lib/libecore_evas.so.1
0xb7ba27c6 in _ecore_evas_idle_enter () from /usr/lib/libecore_evas.so.1
0xb7c27212 in _ecore_idle_enterer_call () from /usr/lib/libecore.so.1
0xb7c28d3d in _ecore_main_loop_iterate_internal ()
from /usr/lib/libecore.so.1
0xb7c2941f in ecore_main_loop_begin () from /usr/lib/libecore.so.1
0xb7e8def8 in elm_run () from /usr/lib/libelementary.so.1
0xb7f6f8ee in appcore_efl_main () from /usr/lib/libappcore-efl.so.1
0xb7644bb5 in app_efl_main () from /usr/lib/libcapi-appfw-application.so.0
0x08074c5a in main (argc=1, argv=0xbffffb64) at src/main_tizen.c:155
==2036== Jump to the invalid address stated on the next line
==2036== at 0x0: ???
==2036== by 0x44C35CC: _edje_box_layout (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x42E8FF6: _evas_object_box_smart_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x42E7A35: evas_object_smart_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x44C7B11: _edje_part_recalc_single (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x44C937F: _edje_part_recalc (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x44CB9FE: _edje_recalc_do (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x451C039: _edje_smart_calculate (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x42E7BE1: evas_call_smarts_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x4317D87: evas_render_updates_internal (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x4465C96: _ecore_evas_x_render (in /usr/lib/libecore_evas.so.1.7.99)
==2036== by 0x44607C5: _ecore_evas_idle_enter (in /usr/lib/libecore_evas.so.1.7.99)
==2036== Address 0x0 is not stack'd, malloc'd or (recently) free'd
We called anim->start aftwards just to be sure to stick to something if
all fail.
edje proxy parts seem to break (crash) when animating a state change from custom->default on an animator. adding a null check here avoids that and seems to work fine, but I am not an edje_calc expert
"edje: open Eina_File ourself instead of delegating it to edje."
"edje: don't never corrupt an opened edje object."
This reverts commits 8727e43c1f and 8f12f21cf0, which caused nonstop crashes.
Now, Edje.h includes three new files:
- Edje_Eo.h: Eo API functions (functions defines, enums, base id).
- Edje_Legacy.h: contains the API functions related to objects
- Edje_Common.h: common data (structs, enums...) + functions not related to
objects.
This phase is needed for the EFL 1.8 release to disable Eo APIs if we
consider it is not enough mature to be used by applications.
input_attach, input_detach, format_set, and source_set now return an
Eina_Bool
Tests, examples and edje_multisense adapted
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
If logical cursor is between LTR/RTL text two cursors will be shown.
Upper cursor is shown for the text of the same direction as
paragraph, lower cursor - for opposite.
NOT DONE YET
Signed-off-by: Tom 'TAsn' Hacohen <tom@stosb.com>
When user pressed home and ctrl+home, caret is normaly moved to first letter.
But, it is not common behavior for alt+home.
For example, gedit does not have any behavior and urlbar of firefox open
home page when alt+home is pressed.
This memset is not necessary as pack_it_copy can only be accessed when
the part type is a BOX or a TABLE and thus pack_it will be defined. Sadly
GCC 4.7 is more stupid than GCC 4.6 and think that it is an unitialized data
resulting in a massive number of useless warning that could hide real warning.
This is particularly useful when using table and replicating the
same group all over the place. At least for many games I have in mind
this will save a lot of lines !
This patch try to share signal callbacks and automate accross all Edje
object. It does use an Eina_Hash on the callback description (signal,
source, func). There is no need to check it against Edje file or group
only the callbacks matter.
This version remove all use of size_t as it should never be above 32bits.
We have a hard limit on the number of callback to 2^32 now. I am considering
it would be sane to make it a short.
Program received signal SIGSEGV, Segmentation fault.
_edje_emit_cb (ed=ed@entry=0x8ebd68, sig=sig@entry=0x8fba4c
"focus,part,in", src=src@entry=0x8222fc "elm.text",
data=data@entry=0x0, prop=prop@entry=0 '\000') at
lib/edje/edje_program.c:1442
warning: Source file is more recent than executable.
1442 eina_list_free(data.matches);
(gdb) bt
"focus,part,in", src=src@entry=0x8222fc "elm.text",
data=data@entry=0x0, prop=prop@entry=0 '\000') at
lib/edje/edje_program.c:1442
"focus,part,in", src=0x8222fc "elm.text", sdata=0x0, prop=0 '\000') at
lib/edje/edje_program.c:1366
_pd=0x8222f0, list=0x7fff00000001) at lib/edje/edje_message_queue.c:124
op_type=EO_OP_TYPE_REGULAR, op=564, p_list=0x7fffffffcf28) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ebae0) at lib/eo/eo.c:404
op_type=op_type@entry=EO_OP_TYPE_REGULAR) at lib/eo/eo.c:435
(obj=<optimized out>) at lib/edje/edje_message_queue.c:71
(sid=sid@entry=0x8eae88) at elm_interface_scrollable.c:788
(sid=0x8eae88) at elm_interface_scrollable.c:805
_pd=0x8eae88, list=<optimized out>) at elm_interface_scrollable.c:3370
op_type=EO_OP_TYPE_REGULAR, op=840, p_list=0x7fffffffd158) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
op_type=op_type@entry=EO_OP_TYPE_REGULAR) at lib/eo/eo.c:435
_pd=0x8ead70, list=<optimized out>) at elm_entry.c:2804
op_type=EO_OP_TYPE_REGULAR, op=129, p_list=0x7fffffffd328) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
lib/eo/eo.c:435
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd4a8) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
class_data=<optimized out>, list=<optimized out>) at elm_widget.c:5526
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd628) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
out>, list=<optimized out>) at elm_layout.c:2157
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd7b8) at
lib/eo/eo.c:364
op_type=<optimized out>, op=1) at lib/eo/eo.c:463
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd928) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
out>, list=<optimized out>) at elm_entry.c:3076
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffdad8) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
lib/eo/eo.c:1162
elm_entry.c:3068
autorun=0x0) at test.c:441
Revert "edje: reduce memory usage of Edje signal callbacks and automates."
This reverts commit 15aae2c0a4.
This patch try to share signal callbacks and automate accross all Edje
object. It does use an Eina_Hash on the callback description (signal,
source, func). There is no need to check it against Edje file or group
only the callbacks matter.
This reduce our waste of memory by 300K in most elementary application. There is
another 400K to win by merging edje signal callback automat.
SVN revision: 83879