forked from enlightenment/efl
Evas filters: Fix bad stringshare usage
Make sure the filter uses properly initialized state names and don't call stringshare_del on a static string.
This commit is contained in:
parent
24f19dc770
commit
b369989a79
|
@ -11,7 +11,7 @@
|
||||||
#define ENFN obj->layer->evas->engine.func
|
#define ENFN obj->layer->evas->engine.func
|
||||||
#define ENDT obj->layer->evas->engine.data.output
|
#define ENDT obj->layer->evas->engine.data.output
|
||||||
|
|
||||||
#define FCOW_BEGIN(_pd) eina_cow_write(evas_object_filter_cow, (const Eina_Cow_Data**)&(_pd->data))
|
#define FCOW_BEGIN(_pd) ({ Evas_Object_Filter_Data *_fcow = eina_cow_write(evas_object_filter_cow, (const Eina_Cow_Data**)&(_pd->data)); _state_check(_fcow); _fcow; })
|
||||||
#define FCOW_END(_fcow, _pd) eina_cow_done(evas_object_filter_cow, (const Eina_Cow_Data**)&(_pd->data), _fcow, EINA_TRUE)
|
#define FCOW_END(_fcow, _pd) eina_cow_done(evas_object_filter_cow, (const Eina_Cow_Data**)&(_pd->data), _fcow, EINA_TRUE)
|
||||||
|
|
||||||
typedef struct _Evas_Filter_Data Evas_Filter_Data;
|
typedef struct _Evas_Filter_Data Evas_Filter_Data;
|
||||||
|
@ -31,6 +31,15 @@ struct _Evas_Filter_Post_Render_Data
|
||||||
Eina_Bool success;
|
Eina_Bool success;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_state_check(Evas_Object_Filter_Data *fcow)
|
||||||
|
{
|
||||||
|
if (!fcow->state.cur.name)
|
||||||
|
fcow->state.cur.name = eina_stringshare_add("default");
|
||||||
|
if (!fcow->state.next.name)
|
||||||
|
fcow->state.next.name = eina_stringshare_add("default");
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_filter_end_sync(Evas_Filter_Context *ctx, Evas_Object_Protected_Data *obj,
|
_filter_end_sync(Evas_Filter_Context *ctx, Evas_Object_Protected_Data *obj,
|
||||||
Evas_Filter_Data *pd, Eina_Bool success)
|
Evas_Filter_Data *pd, Eina_Bool success)
|
||||||
|
|
|
@ -33,7 +33,7 @@ static const Evas_Object_Protected_State default_state = {
|
||||||
1.0, 0, EVAS_RENDER_BLEND, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE
|
1.0, 0, EVAS_RENDER_BLEND, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE
|
||||||
};
|
};
|
||||||
static const Evas_Object_Filter_Data default_filter = {
|
static const Evas_Object_Filter_Data default_filter = {
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, { { "default", 0.0 }, { "default", 0.0 }, 0.0 }, EINA_FALSE, EINA_FALSE, EINA_TRUE
|
NULL, NULL, NULL, NULL, NULL, NULL, { { NULL, 0.0 }, { NULL, 0.0 }, 0.0 }, EINA_FALSE, EINA_FALSE, EINA_TRUE
|
||||||
};
|
};
|
||||||
const void * const evas_object_filter_cow_default = &default_filter;
|
const void * const evas_object_filter_cow_default = &default_filter;
|
||||||
static const Evas_Object_Mask_Data default_mask = {
|
static const Evas_Object_Mask_Data default_mask = {
|
||||||
|
|
|
@ -1191,14 +1191,14 @@ struct _Evas_Object_Filter_Data
|
||||||
void *output;
|
void *output;
|
||||||
struct {
|
struct {
|
||||||
struct {
|
struct {
|
||||||
const char *name;
|
Eina_Stringshare *name;
|
||||||
double value;
|
double value;
|
||||||
} cur;
|
} cur;
|
||||||
struct {
|
struct {
|
||||||
const char *name;
|
Eina_Stringshare *name;
|
||||||
double value;
|
double value;
|
||||||
} next;
|
} next;
|
||||||
double pos;
|
double pos;
|
||||||
} state;
|
} state;
|
||||||
Eina_Bool changed : 1;
|
Eina_Bool changed : 1;
|
||||||
Eina_Bool invalid : 1; // Code parse failed
|
Eina_Bool invalid : 1; // Code parse failed
|
||||||
|
|
Loading…
Reference in New Issue