Commit Graph

9226 Commits

Author SHA1 Message Date
Gustavo Sverzut Barbieri 0c24c76c5a Fix idle_exiters when using recursive main loops.
If an idle_exiter created a recursive main loop (just called
ecore_main_loop_begin()), then this recursive main loop should
continue to process idle_exiters from there and on, thus
idle_exiter_current was added. When going back from recursion, the
current iterator should be updated properly.

This patch also fixes the deletion of idle_exiters from recursive
main loops by reference counting them. This way, the node will not be
free()d inside inner loop cleanups and then crash when going back to
outer loop.

The following test case used to crash but not anymore:

#include <Ecore.h>
#include <Eina.h>

static int _log_dom;
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)

static Ecore_Idle_Exiter *handle;

static int idler(void *data)
{
    INF("idler");
    return 1;
}

static int timer(void *data)
{
    INF("timer (exited idle!)");
    return 0;
}

static int exit_idle(void *data)
{
    INF("add request (timer) to exit idle");
    ecore_timer_add(0.0, timer, NULL);
    return 0;
}

static int cb2(void *data)
{
    INF("cb2 - delete cb1 handle");
    ecore_idle_exiter_del(handle);
    ecore_main_loop_quit(); /* quits inner main loop */
    return 0;
}

static int cb1(void *data)
{
    INF("cb1: begin");
    INF("    add cb2");
    ecore_idle_exiter_add(cb2, NULL);
    INF("    add exit idler");
    ecore_idler_add(exit_idle, NULL);
    INF("    inner main loop begin (recurse)");
    ecore_main_loop_begin(); /* will it crash due ecore_idle_exiter_del(handle)
                              * inside cb2()? It used to!
                              */
    INF("cb1: end");

    ecore_main_loop_quit(); /* quits outer main loop */

    return 0;
}

int main(void)
{
    ecore_init();

    _log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);

    /*
     * Creating a new main loop from inside an idle_exiter callback,
     * and inside this new (inner) main loop deleting the caller
     * callback used to crash since the handle would be effectively
     * free()d, but when the recursion is over the pointer would be
     * used.
     */

    INF("main: begin");
    handle = ecore_idle_exiter_add(cb1, NULL);
    ecore_idler_add(idler, NULL);
    ecore_idler_add(exit_idle, NULL);
    ecore_main_loop_begin();
    INF("main: end");
    return 0;
}



SVN revision: 46410
2010-02-23 22:25:35 +00:00
Gustavo Sverzut Barbieri 1c3348513a Fix idle_enterers when using recursive main loops.
If an idle_enterer created a recursive main loop (just called
ecore_main_loop_begin()), then this recursive main loop should
continue to process idle_enterers from there and on, thus
idle_enterer_current was added. When going back from recursion, the
current iterator should be updated properly.

This patch also fixes the deletion of idle_enterers from recursive
main loops by reference counting them. This way, the node will not be
free()d inside inner loop cleanups and then crash when going back to
outer loop.

The following test case used to crash but not anymore:

#include <Ecore.h>
#include <Eina.h>

static int _log_dom;
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)

static Ecore_Idle_Enterer *handle;

static int idler(void *data)
{
    INF("idler");
    return 1;
}

static int cb2(void *data)
{
    INF("cb2 - delete cb1 handle");
    ecore_idle_enterer_del(handle);
    ecore_main_loop_quit(); /* quits inner main loop */
    return 0;
}

static int cb1(void *data)
{
    INF("cb1: begin");
    INF("    add cb2");
    ecore_idle_enterer_add(cb2, NULL);
    INF("    inner main loop begin (recurse)");
    ecore_main_loop_begin(); /* will it crash due ecore_idle_enterer_del(handle)
                              * inside cb2()? It used to!
                              */
    INF("cb1: end");

    ecore_main_loop_quit(); /* quits outer main loop */

    return 0;
}

int main(void)
{
    ecore_init();

    _log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);

    /*
     * Creating a new main loop from inside an idle_enterer callback,
     * and inside this new (inner) main loop deleting the caller
     * callback used to crash since the handle would be effectively
     * free()d, but when the recursion is over the pointer would be
     * used.
     */

    INF("main: begin");
    handle = ecore_idle_enterer_add(cb1, NULL);
    ecore_idler_add(idler, NULL);
    ecore_main_loop_begin();
    INF("main: end");
    return 0;
}




SVN revision: 46408
2010-02-23 22:13:42 +00:00
Gustavo Sverzut Barbieri 2bf063a77b Fix idlers when using recursive main loops.
If an idler created a recursive main loop (just called
ecore_main_loop_begin()), then this recursive main loop should
continue to process idlers from there and on, thus idler_current was
added. When going back from recursion, the current iterator should be
updated properly.

This patch also fixes the deletion of idlers from recursive main loops
by reference counting them. This way, the node will not be free()d
inside inner loop cleanups and then crash when going back to outer
loop.

The following test case used to crash but not anymore:


#include <Ecore.h>
#include <Eina.h>

static int _log_dom;
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)

static Ecore_Idler *handle;

static int idler(void *data)
{
    INF("idler");
    return 1;
}

static int cb2(void *data)
{
    INF("cb2 - delete cb1 handle");
    ecore_idler_del(handle);
    ecore_main_loop_quit(); /* quits inner main loop */
    return 0;
}

static int cb1(void *data)
{
    INF("cb1: begin");
    INF("    add cb2");
    ecore_idler_add(cb2, NULL);
    INF("    inner main loop begin (recurse)");
    ecore_main_loop_begin(); /* will it crash due ecore_idler_del(handle)
                              * inside cb2()? It used to!
                              */
    INF("cb1: end");

    ecore_main_loop_quit(); /* quits outer main loop */

    return 0;
}

int main(void)
{
    ecore_init();

    _log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);

    /*
     * Creating a new main loop from inside an idler callback, and inside
     * this new (inner) main loop deleting the caller callback used to
     * crash since the handle would be effectively free()d, but when the
     * recursion is over the pointer would be used.
     */

    INF("main: begin");
    handle = ecore_idler_add(cb1, NULL);
    ecore_idler_add(idler, NULL);
    ecore_main_loop_begin();
    INF("main: end");
    return 0;
}



SVN revision: 46406
2010-02-23 21:27:04 +00:00
Gustavo Sverzut Barbieri dbc4a40265 Fix the bug of the first timer being added from idler.
We should start doing unit-test for ecore, accumulating these
problems. Follows the test case:

#include <Ecore.h>
#include <Eina.h>

static int _log_dom;
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)

static int quiter(void *data)
{
    INF("quit!");
    ecore_main_loop_quit();
    return 1;
}

static int idler(void *data)
{
    INF("idler");
    return 1;
}

static int cb1(void *data)
{
    INF("cb1");
    ecore_timer_add(0.0, quiter, NULL);

    return 0;
}

int main(void)
{
    ecore_init();

    _log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);

    /*
     * Create a main loop with just idlers, there is a special case
     * for just idlers without timers in ecore.
     *
     * From idler, add a timer that quits the application. It should
     * always quit.
     *
     * If it does not quit, then there is a bug of new timers not
     * being immediately detected and system never exits idle.
     */

    INF("main: begin");
    ecore_idler_add(cb1, NULL);
    ecore_idler_add(idler, NULL);
    ecore_main_loop_begin();
    INF("main: end");
    return 0;
}




SVN revision: 46405
2010-02-23 21:04:38 +00:00
Christopher Michael fd7ed8786c Add atoms/functions for keyboard geometry. This will be used w/ conformant
apps to notify them of keyboard changes so they can move widgets around,
etc, etc.



SVN revision: 46402
2010-02-23 20:53:34 +00:00
Cedric BAIL 3eaea2b9fa * edje: Fix naming for amalgamation and make static functions
that should.


SVN revision: 46394
2010-02-23 15:55:04 +00:00
Cedric BAIL 51de26862a * edje: Add more focus event in edje. A start for a focus layout work.
SVN revision: 46389
2010-02-23 13:39:19 +00:00
Cedric BAIL 7fcbff0e0e * evas: Bring back Font Kerning cache as it does improve performance
by a good margin on my 4 targets (SGX-530, Tango2, NVidia G73).



SVN revision: 46388
2010-02-23 13:31:10 +00:00
Vincent Torri 366c893967 never use macro defined by configure in an exported header
SVN revision: 46387
2010-02-23 13:11:54 +00:00
Carsten Haitzler 79b6821f90 fix moving edje obj aroudn with maps in it.
SVN revision: 46385
2010-02-23 08:37:30 +00:00
Carsten Haitzler 1ddbe5c5b1 ahhh and if parts are images.. use the right uv coords.
SVN revision: 46384
2010-02-23 07:56:59 +00:00
Carsten Haitzler a952803f13 aaaah missing map smooth and alpha flags.
SVN revision: 46383
2010-02-23 05:45:24 +00:00
Gustavo Sverzut Barbieri 10b90e46c6 fix my coding style errors...
SVN revision: 46362
2010-02-22 20:09:44 +00:00
Gustavo Sverzut Barbieri 054da5beeb fix ecore-glib reentrance
if using ecore_main_loop_begin() multiple times (reentrant/recursive)
with glib doing threads, then it would deadlock since the same thread
would get the lock it already have.

multiple ecore_main_loop_begin() is required to implement WebKit's
alert/confirm/prompt dialogs since there is no async reply with
callbacks, rather one must return the value.

By: Lucas de Marchi



SVN revision: 46361
2010-02-22 20:09:03 +00:00
Christopher Michael 618fe20c58 Readd zone_list functions and atoms. (Needed for some elm apps like
elm_indicator & elm_softkey).



SVN revision: 46357
2010-02-22 17:12:24 +00:00
Marc Andre Tanner 5b4ed37b9c From: Marc Andre Tanner <mat@brain-dump.org>
Subject: [E-devel] [PATCH] evas: compile out unused dither tables

Don't include the rather large dither tables if small dithering code
is enabled during ./configure stage.



SVN revision: 46353
2010-02-22 08:12:49 +00:00
Carsten Haitzler 59da209fb5 even tho its going to be killed... fix it anyway.
SVN revision: 46352
2010-02-22 08:08:04 +00:00
Rui Seabra c8908d3ed4 Adjust for ver-pre-svn support
Add two missing files.


SVN revision: 46348
2010-02-21 18:40:56 +00:00
Carsten Haitzler 9dcca83a08 fix alpha set/unset on image obj in gl engine.
SVN revision: 46344
2010-02-21 15:49:44 +00:00
Carsten Haitzler 3243fb1170 add embryo to manipulate map stuff.
SVN revision: 46343
2010-02-21 10:55:45 +00:00
Carsten Haitzler ea37c003f3 docs++
SVN revision: 46342
2010-02-21 09:39:58 +00:00
Carsten Haitzler e89c590b0d add border_scale option for images - image border will scale based on edje
scale factors. this is independant of scale: per part.



SVN revision: 46341
2010-02-21 06:53:44 +00:00
Carsten Haitzler a4b6192e7f border_scale ... possible++
SVN revision: 46340
2010-02-21 06:21:15 +00:00
Vincent Torri 4d11d31e3d * instead of including headers wrt to the OS, include them if
they are available
 * compilation on Windows XP minimum only

SVN revision: 46338
2010-02-20 19:12:52 +00:00
Vincent Torri 3499767ddb First steps towards the Windows port of ecore_con.
ecore_con_dns will be hard to port (fork+exec).

SVN revision: 46337
2010-02-20 18:01:50 +00:00
Vincent Torri f9f9b48c64 On Windows, ecore_exe_auto_limits_set() does nothing
SVN revision: 46331
2010-02-20 09:35:48 +00:00
Vincent Torri 5254d1a02e Windows: Add priority support when a child process is created
and add documentation for that.

SVN revision: 46330
2010-02-20 09:20:04 +00:00
Carsten Haitzler 64a129f1fa stderr for that output! one day it will go - but for now, it stays.
SVN revision: 46329
2010-02-20 05:36:45 +00:00
Carsten Haitzler e1f2ad1f76 and merge some delcaration lines for compactness
SVN revision: 46328
2010-02-20 04:49:03 +00:00
Carsten Haitzler c26d5bc2bc simplify shaders to have fewer tmp vars. in case of dumb shader compilers.
SVN revision: 46327
2010-02-20 04:37:22 +00:00
Vincent Torri 7e08e3f23c improvements of the stderr and stdout redirections. There are
still lots of work to be done:

 * allow several redirections (only one for now...)
 * fix stdin redirection
 * fill empty functions

SVN revision: 46319
2010-02-19 19:23:47 +00:00
Cedric BAIL d590d0dbb0 * edje: Fix a warning.
Please review as I am not sure why this code was written as the beginning.


SVN revision: 46318
2010-02-19 18:43:08 +00:00
Cedric BAIL e4ee012951 * edje: Change filter_state to filter and give the possibility to
filter from another part than the event source.



SVN revision: 46316
2010-02-19 18:30:46 +00:00
Vincent Torri 298da926f1 check OpenGL version:
* OpenGL ES : 2.0
 * OpenGL desktop : >= 1.4

If OpenGL ES 3.* is out, this code must be fixed

If there are problems with the minimal version on desktop,
we will have to increase the minimal version.

Question: should we check GLSL version on desktop ?


SVN revision: 46309
2010-02-19 14:33:49 +00:00
Vincent Torri 2e004582d7 add mempool description in the doc
SVN revision: 46307
2010-02-19 13:42:34 +00:00
Carsten Haitzler e70759878c rfiddling wiht lop to try and get rid of pauses. i think i found it... plus a
bit of streamlining. need to test more widely now.



SVN revision: 46303
2010-02-19 08:00:44 +00:00
Carsten Haitzler e2bc27fb44 interp properly and make perspective api work.. untested yet...
SVN revision: 46302
2010-02-19 06:28:03 +00:00
Christopher Michael 04b865cdce Ecore_X changes for new illume2 code.
NB: This will break current PROTO/elm_* apps for illume2. They will be fixed
up shortly.



SVN revision: 46284
2010-02-19 02:27:18 +00:00
Iván Briano 0b816d85e6 Forgot to copy image id
SVN revision: 46273
2010-02-18 14:05:58 +00:00
Carsten Haitzler 1244978ecd disable error gets - minor impact to keep getting errors - but stil an impact
if we dont need to know what they are.



SVN revision: 46270
2010-02-18 08:54:24 +00:00
Carsten Haitzler 0fecb5ede7 and fix some over-zealous optimising.
SVN revision: 46269
2010-02-18 08:51:00 +00:00
Carsten Haitzler 136316d6ce more shaders... for more speeeeeeds!
SVN revision: 46268
2010-02-18 08:36:07 +00:00
Carsten Haitzler 25f169fc21 dont need these with shaders.
SVN revision: 46267
2010-02-18 07:21:17 +00:00
Carsten Haitzler c7695857f7 lots more shaders!
SVN revision: 46266
2010-02-18 07:10:28 +00:00
Gustavo Sverzut Barbieri 5777eee064 do not access NULL image data for native surfaces.
This fixes another segv that happens when using composite manager.


SVN revision: 46265
2010-02-18 02:51:27 +00:00
Gustavo Sverzut Barbieri 1ad4337878 proper shutdown of entries.
* must disconnect connected callbacks, particularly those to
   canvas. The object we previously connect will die anyway, but
   canvas continues alive, dispatching its
   EVAS_CALLBACK_CANVAS_FOCUS_IN and EVAS_CALLBACK_CANVAS_FOCUS_OUT,
   causing nasty segmentation faults!

 * must call _edje_clean_objects() *AFTER* the entry is shut
   down. Otherwise ed->evas will be NULL and
   evas_event_callback_del_full() will fail. I left extra checks on
   those, since this call will return the given data (in our case
   "ed") and NULL when callback connection was not found.

 * flag existence of entries and if they were already initalized and
   shutdown before, avoid redoing such work.

This fixes a stupid crash that bugged editje for a while now.



SVN revision: 46263
2010-02-17 23:43:31 +00:00
Vincent Torri a50bb3acf8 m4 quoting
SVN revision: 46258
2010-02-17 19:50:19 +00:00
Cedric BAIL ed5adb020f * evas: Sync DirectFB engine with last Evas engine API.
Note: More test are needed, but basically, you have map running with DirectFB. Enjoy !


SVN revision: 46249
2010-02-17 17:24:27 +00:00
Cedric BAIL 17653e550c * evas: Fix SDL map usage (raster edje map test is working :-) ).
SVN revision: 46247
2010-02-17 15:22:58 +00:00
Cedric BAIL 06f7da42f9 * edje: Fix fixed point use in map.
Note: ep->description_pos is a FLOAT_T.


SVN revision: 46245
2010-02-17 13:21:50 +00:00