diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 0a62bfdec7..17f86aec5e 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -666,7 +666,8 @@ EXCLUDE_PATTERNS = *_private* \
*/efl_*.eo.c \
*/efl_*.eo.h \
*/efl_*.eot.h \
- */Efl_*
+ */Efl_* \
+ */Eo.h
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
diff --git a/doc/eo_tutorial.dox b/doc/eo_tutorial.dox
index d8e7d7fb8d..baeb10d857 100644
--- a/doc/eo_tutorial.dox
+++ b/doc/eo_tutorial.dox
@@ -120,11 +120,11 @@
*
* @section create_class_h_side How to create a class - H side?
* - If the object is new, establish the public APIs
- * - #define \$(CLASS_NAME) \$(class_name)_class_get(): will be used to access data/inherit from this class...
+ * - \#define \$(CLASS_NAME) \$(class_name)_class_get(): will be used to access data/inherit from this class...
* - const Eo_Class *\$(class_name)_class_get(void) EINA_CONST: declaration of the function that will create the class (not the instance), i.e virtual table...
* - extern EAPI Eo_Op \$(CLASS_NAME)_BASE_ID: class id that will be essentially used to identify functions set of this class
* - enum of the function ids of the class in the form \$(CLASS_NAME)_SUB_ID: used to identify the function inside the class; function id is unique per class but (class id, function id) is unique per system..
- * - #define \$(CLASS_NAME)_ID(sub_id) (\$(CLASS_NAME)_BASE_ID + sub_id): formula to calculate the system function id
+ * - \#define \$(CLASS_NAME)_ID(sub_id) (\$(CLASS_NAME)_BASE_ID + sub_id): formula to calculate the system function id
* - define of each function consists of:
* - the name of the function that will be used in eo_do
* - parameters without types
diff --git a/meson.build b/meson.build
index 29123222a3..6ad0419631 100644
--- a/meson.build
+++ b/meson.build
@@ -331,7 +331,7 @@ subprojects = [
['ethumb' ,[] , true, true, true, false, false, false, ['eina', 'efl', 'eo'], []],
['ethumb_client' ,[] , false, true, true, false, false, true, ['eina', 'efl', 'eo', 'ethumb'], []],
['elementary' ,[] , true, true, true, true, true, true, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio'], ['atspi']],
-['efl_wl' ,['wl'] , false, true, true, false, false, false, ['evas', 'ecore'], []],
+['efl_canvas_wl' ,['wl'] , false, true, true, false, false, false, ['eina', 'efl', 'eo', 'evas', 'ecore'], []],
['elua' ,['elua'] , false, true, true, false, true, false, ['eina', 'luajit'], []],
['ecore_wayland' ,['wl-deprecated'] , false, true, false, false, false, false, ['eina'], []],
['ecore_drm' ,['drm-deprecated'] , false, true, false, false, false, false, ['eina'], []],
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 431dea7bdb..913a749d54 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -4562,7 +4562,7 @@ st_collections_group_name(void)
This property can be inherited.
Defaults: 0
- @warning Your edc file should always wrap this keyword with #ifdef HAVE_SKIP_NAMESPACE_VALIDATION
+ @warning Your edc file should always wrap this keyword with \#ifdef HAVE_SKIP_NAMESPACE_VALIDATION
@since 1.21
@endproperty
*/
diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index b3549f2ea6..7c9c67ea25 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -744,7 +744,8 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef)
if (et->id >= (int) pc->parts_count)
{
- ERR("Target id '%d' greater than possible index '%d'.", et->id, (int) pc->parts_count - 1);
+ ERR("In group '%s' program '%s', target id '%d' greater than possible index '%d'.",
+ pc->part ? pc->part : "", ep->name ? ep->name : "", et->id, (int) pc->parts_count - 1);
exit(-1);
}
diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c
index ad1a2c95ac..e6db4f5840 100644
--- a/src/bin/edje/edje_cc_parse.c
+++ b/src/bin/edje/edje_cc_parse.c
@@ -30,6 +30,7 @@
#define EDJE_1_21_SUPPORTED " -DEFL_VERSION_1_21=1 "
#define EDJE_1_22_SUPPORTED " -DEFL_VERSION_1_22=1 "
#define EDJE_1_23_SUPPORTED " -DEFL_VERSION_1_23=1 "
+#define EDJE_1_24_SUPPORTED " -DEFL_VERSION_1_24=1 "
#define EDJE_CC_EFL_VERSION_SUPPORTED \
EDJE_1_18_SUPPORTED \
@@ -37,7 +38,8 @@
EDJE_1_20_SUPPORTED \
EDJE_1_21_SUPPORTED \
EDJE_1_22_SUPPORTED \
- EDJE_1_23_SUPPORTED
+ EDJE_1_23_SUPPORTED \
+ EDJE_1_24_SUPPORTED
static void new_object(void);
static void new_statement(void);
diff --git a/src/bin/efl_wl/efl_wl_test.c b/src/bin/efl_canvas_wl/efl_canvas_wl_test.c
similarity index 79%
rename from src/bin/efl_wl/efl_wl_test.c
rename to src/bin/efl_canvas_wl/efl_canvas_wl_test.c
index bf5b2ad4d1..4bb7e616af 100644
--- a/src/bin/efl_wl/efl_wl_test.c
+++ b/src/bin/efl_canvas_wl/efl_canvas_wl_test.c
@@ -1,18 +1,17 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "Efl_Wl.h"
+#include "Efl_Canvas_Wl.h"
#include "Elementary.h"
static Evas_Object *win;
static Eina_Strbuf *buf;
-static Ecore_Exe *exe;
+static Eo *exe;
-static Eina_Bool
-del_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Exe_Event_Del *ev)
+static void
+del_handler(void *d EINA_UNUSED, const Efl_Event *ev)
{
- if (ev->exe == exe) ecore_main_loop_quit();
- return ECORE_CALLBACK_RENEW;
+ if (ev->object == exe) ecore_main_loop_quit();
}
static void
@@ -24,8 +23,8 @@ focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev
static Eina_Bool
dostuff(void *data)
{
- exe = efl_wl_run(data, eina_strbuf_string_get(buf));
- ecore_event_handler_add(ECORE_EXE_EVENT_DEL, (Ecore_Event_Handler_Cb)del_handler, NULL);
+ exe = efl_canvas_wl_run(data, eina_strbuf_string_get(buf));
+ efl_event_callback_add(exe, EFL_TASK_EVENT_EXIT, del_handler, NULL);
evas_object_focus_set(data, 1);
return EINA_FALSE;
}
@@ -63,9 +62,9 @@ main(int argc, char *argv[])
elm_win_autodel_set(win, 1);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
- o = efl_wl_add(evas_object_evas_get(win));
- efl_wl_aspect_set(o, 1);
- efl_wl_minmax_set(o, 1);
+ o = efl_add(EFL_CANVAS_WL_CLASS, win);
+ efl_canvas_wl_aspect_set(o, 1);
+ efl_canvas_wl_minmax_set(o, 1);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_event_callback_add(o, EVAS_CALLBACK_CHANGED_SIZE_HINTS, hints_changed, win);
diff --git a/src/bin/efl_wl/efl_wl_test_stack.c b/src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
similarity index 92%
rename from src/bin/efl_wl/efl_wl_test_stack.c
rename to src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
index 51cd598984..49849e07e8 100644
--- a/src/bin/efl_wl/efl_wl_test_stack.c
+++ b/src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
@@ -1,7 +1,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "Efl_Wl.h"
+#include "Efl_Canvas_Wl.h"
#include "Elementary.h"
static Evas_Object *win;
@@ -18,7 +18,7 @@ static unsigned int n;
static Eina_Bool
dostuff(void *data)
{
- efl_wl_run(data, cmds[n++]);
+ efl_canvas_wl_run(data, cmds[n++]);
evas_object_focus_set(data, 1);
return n != num_cmds;
}
@@ -26,13 +26,13 @@ dostuff(void *data)
static void
prev_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- efl_wl_prev(data);
+ efl_canvas_wl_surface_prev(data);
}
static void
next_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- efl_wl_next(data);
+ efl_canvas_wl_surface_next(data);
}
int
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
evas_object_show(next);
elm_table_pack(o, next, 1, 0, 1, 1);
- comp = efl_wl_add(evas_object_evas_get(win));
+ comp = efl_add(EFL_CANVAS_WL_CLASS, win);
evas_object_size_hint_min_set(comp, 640, 480);
elm_table_pack(o, comp, 0, 1, 2, 1);
evas_object_size_hint_align_set(comp, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/src/bin/efl_canvas_wl/meson.build b/src/bin/efl_canvas_wl/meson.build
new file mode 100644
index 0000000000..278a2c58db
--- /dev/null
+++ b/src/bin/efl_canvas_wl/meson.build
@@ -0,0 +1,13 @@
+executable('efl_canvas_wl_test',
+ 'efl_canvas_wl_test.c',
+ include_directories : config_dir,
+ dependencies: [efl_canvas_wl, efl_canvas_wl_deps, efl_canvas_wl_pub_deps, elementary],
+ install: true,
+)
+
+executable('efl_canvas_wl_test_stack',
+ 'efl_canvas_wl_test_stack.c',
+ include_directories : config_dir,
+ dependencies: [efl_canvas_wl, efl_canvas_wl_deps, efl_canvas_wl_pub_deps, elementary],
+ install: true,
+)
diff --git a/src/bin/efl_wl/meson.build b/src/bin/efl_wl/meson.build
deleted file mode 100644
index c95cd0e767..0000000000
--- a/src/bin/efl_wl/meson.build
+++ /dev/null
@@ -1,13 +0,0 @@
-executable('efl_wl_test',
- 'efl_wl_test.c',
- include_directories : config_dir,
- dependencies: [efl_wl, elementary],
- install: true,
-)
-
-executable('efl_wl_test_stack',
- 'efl_wl_test_stack.c',
- include_directories : config_dir,
- dependencies: [efl_wl, elementary],
- install: true,
-)
diff --git a/src/bin/exactness/common.c b/src/bin/exactness/common.c
new file mode 100644
index 0000000000..17983cdbc6
--- /dev/null
+++ b/src/bin/exactness/common.c
@@ -0,0 +1,14 @@
+#include "common.h"
+
+static int _verbose = 0;
+
+void
+ex_printf(int verbose, const char *fmt, ...)
+{
+ va_list ap;
+ if (!_verbose || verbose > _verbose) return;
+
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+}
diff --git a/src/bin/exactness/common.h b/src/bin/exactness/common.h
new file mode 100644
index 0000000000..2581c63392
--- /dev/null
+++ b/src/bin/exactness/common.h
@@ -0,0 +1,100 @@
+#ifdef HAVE_CONFIG_H
+# include
+#endif
+
+#include
+#include
+#include
+
+typedef struct
+{
+ Eina_Debug_Session *session;
+ int srcid;
+ void *buffer;
+ unsigned int size;
+} _Main_Loop_Info;
+
+#define WRAPPER_TO_XFER_MAIN_LOOP(foo) \
+static void \
+_intern_main_loop ## foo(void *data) \
+{ \
+ _Main_Loop_Info *info = data; \
+ _main_loop ## foo(info->session, info->srcid, info->buffer, info->size); \
+ free(info->buffer); \
+ free(info); \
+} \
+static Eina_Bool \
+foo(Eina_Debug_Session *session, int srcid, void *buffer, int size) \
+{ \
+ _Main_Loop_Info *info = calloc(1, sizeof(*info)); \
+ info->session = session; \
+ info->srcid = srcid; \
+ info->size = size; \
+ if (info->size) \
+ { \
+ info->buffer = malloc(info->size); \
+ memcpy(info->buffer, buffer, info->size); \
+ } \
+ ecore_main_loop_thread_safe_call_async(_intern_main_loop ## foo, info); \
+ return EINA_TRUE; \
+}
+
+#ifndef WORDS_BIGENDIAN
+#define SWAP_64(x) x
+#define SWAP_32(x) x
+#define SWAP_16(x) x
+#define SWAP_DBL(x) x
+#else
+#define SWAP_64(x) eina_swap64(x)
+#define SWAP_32(x) eina_swap32(x)
+#define SWAP_16(x) eina_swap16(x)
+#define SWAP_DBL(x) SWAP_64(x)
+#endif
+
+#define EXTRACT_INT(_buf) \
+({ \
+ int __i; \
+ memcpy(&__i, _buf, sizeof(int)); \
+ _buf += sizeof(int); \
+ SWAP_32(__i); \
+})
+
+#define EXTRACT_DOUBLE(_buf) \
+({ \
+ double __d; \
+ memcpy(&__d, _buf, sizeof(double)); \
+ _buf += sizeof(double); \
+ SWAP_DBL(__d); \
+})
+
+#define EXTRACT_STRING(_buf) \
+({ \
+ char *__s = _buf ? strdup(_buf) : NULL; \
+ int __len = (__s ? strlen(__s) : 0) + 1; \
+ _buf += __len; \
+ __s; \
+})
+
+#define STORE_INT(_buf, __i) \
+({ \
+ int __si = SWAP_32(__i); \
+ memcpy(_buf, &__si, sizeof(int)); \
+ _buf += sizeof(int); \
+})
+
+#define STORE_DOUBLE(_buf, __d) \
+{ \
+ double __d2 = SWAP_DBL(__d); \
+ memcpy(_buf, &__d2, sizeof(double)); \
+ _buf += sizeof(double); \
+}
+
+#define STORE_STRING(_buf, __s) \
+{ \
+ int __len = (__s ? strlen(__s) : 0) + 1; \
+ if (__s) memcpy(_buf, __s, __len); \
+ else *_buf = '\0'; \
+ _buf += __len; \
+}
+
+void ex_printf(int verbose, const char *fmt, ...);
diff --git a/src/bin/exactness/exactness.c b/src/bin/exactness/exactness.c
index 9214236045..c594b28a60 100644
--- a/src/bin/exactness/exactness.c
+++ b/src/bin/exactness/exactness.c
@@ -8,6 +8,7 @@
#include
#include "exactness_private.h"
+#include "common.h"
#ifdef _WIN32
# include /* mkdir */
@@ -18,8 +19,6 @@
#define ORIG_SUBDIR "orig"
#define CURRENT_SUBDIR "current"
-#define EXACTNESS_PATH_MAX 1024
-
#define BUF_SIZE 1024
typedef struct
@@ -52,17 +51,6 @@ static Eina_List *_compare_errors;
static Eina_Bool _job_consume();
-static void
-_printf(int verbose, const char *fmt, ...)
-{
- va_list ap;
- if (!_verbose || verbose > _verbose) return;
-
- va_start(ap, fmt);
- vprintf(fmt, ap);
- va_end(ap);
-}
-
static Exactness_Image *
_image_load(const char *filename)
{
@@ -154,7 +142,7 @@ _exu_imgs_unpack(const char *exu_path, const char *dir, const char *ent_name)
{
Eo *o = evas_object_image_add(e);
char *filename = alloca(strlen(dir) + strlen(ent_name) + 20);
- snprintf(filename, EXACTNESS_PATH_MAX, "%s/%s%c%.3d.png",
+ snprintf(filename, PATH_MAX, "%s/%s%c%.3d.png",
dir, ent_name, SHOT_DELIMITER, n++);
evas_object_image_size_set(o, img->w, img->h);
evas_object_image_data_set(o, img->pixels);
@@ -171,7 +159,7 @@ _exu_imgs_unpack(const char *exu_path, const char *dir, const char *ent_name)
static void
_run_test_compare(const List_Entry *ent)
{
- char *path = alloca(EXACTNESS_PATH_MAX);
+ char *path = alloca(PATH_MAX);
char *origdir = alloca(strlen(_dest_dir) + 20);
const char *base_dir;
Eina_List *itr;
@@ -228,7 +216,7 @@ found:
static Eina_Bool
_run_command_prepare(const List_Entry *ent, char *buf)
{
- char scn_path[EXACTNESS_PATH_MAX];
+ char scn_path[PATH_MAX];
Eina_Strbuf *sbuf;
const char *base_dir;
Eina_List *itr;
@@ -283,7 +271,7 @@ ok:
}
strncpy(buf, eina_strbuf_string_get(sbuf), SCHEDULER_CMD_SIZE-1);
eina_strbuf_free(sbuf);
- _printf(1, "Command: %s\n", buf);
+ ex_printf(1, "Command: %s\n", buf);
return EINA_TRUE;
}
@@ -474,7 +462,7 @@ main(int argc, char *argv[])
const char *list_file;
Eina_List *itr;
const char *base_dir;
- char tmp[EXACTNESS_PATH_MAX];
+ char tmp[PATH_MAX];
Eina_Bool mode_play = EINA_FALSE, mode_init = EINA_FALSE, mode_simulation = EINA_FALSE;
Eina_Bool want_quit = EINA_FALSE, scan_objs = EINA_FALSE;
Ecore_Getopt_Value values[] = {
@@ -558,8 +546,8 @@ main(int argc, char *argv[])
if (mode_play)
{
_mode = RUN_PLAY;
- if (snprintf(tmp, EXACTNESS_PATH_MAX, "%s/%s", _dest_dir, CURRENT_SUBDIR)
- >= EXACTNESS_PATH_MAX)
+ if (snprintf(tmp, PATH_MAX, "%s/%s", _dest_dir, CURRENT_SUBDIR)
+ >= PATH_MAX)
{
fprintf(stderr, "Path too long: %s", tmp);
ret = 1;
@@ -575,8 +563,8 @@ main(int argc, char *argv[])
else if (mode_init)
{
_mode = RUN_INIT;
- if (snprintf(tmp, EXACTNESS_PATH_MAX, "%s/%s", _dest_dir, ORIG_SUBDIR)
- >= EXACTNESS_PATH_MAX)
+ if (snprintf(tmp, PATH_MAX, "%s/%s", _dest_dir, ORIG_SUBDIR)
+ >= PATH_MAX)
{
fprintf(stderr, "Path too long: %s", tmp);
ret = 1;
@@ -624,9 +612,9 @@ main(int argc, char *argv[])
if (_errors || _compare_errors)
{
FILE *report_file;
- char report_filename[EXACTNESS_PATH_MAX] = "";
+ char report_filename[PATH_MAX] = "";
/* Generate the filename. */
- snprintf(report_filename, EXACTNESS_PATH_MAX,
+ snprintf(report_filename, PATH_MAX,
"%s/%s/errors.html",
_dest_dir, mode_init ? ORIG_SUBDIR : CURRENT_SUBDIR);
report_file = fopen(report_filename, "w+");
@@ -660,8 +648,8 @@ main(int argc, char *argv[])
EINA_LIST_FREE(_compare_errors, test_name)
{
Eina_Bool is_from_exu;
- char origpath[EXACTNESS_PATH_MAX];
- snprintf(origpath, EXACTNESS_PATH_MAX, "%s/%s/orig/%s",
+ char origpath[PATH_MAX];
+ snprintf(origpath, PATH_MAX, "%s/%s/orig/%s",
_dest_dir, CURRENT_SUBDIR, test_name);
is_from_exu = ecore_file_exists(origpath);
printf("\t* %s\n", test_name);
diff --git a/src/bin/exactness/injector.c b/src/bin/exactness/injector.c
index d2b29d014b..928de47a62 100644
--- a/src/bin/exactness/injector.c
+++ b/src/bin/exactness/injector.c
@@ -14,81 +14,7 @@
#include
#include
-
-typedef struct
-{
- Eina_Debug_Session *session;
- int srcid;
- void *buffer;
- unsigned int size;
-} _Main_Loop_Info;
-
-#define WRAPPER_TO_XFER_MAIN_LOOP(foo) \
-static void \
-_intern_main_loop ## foo(void *data) \
-{ \
- _Main_Loop_Info *info = data; \
- _main_loop ## foo(info->session, info->srcid, info->buffer, info->size); \
- free(info->buffer); \
- free(info); \
-} \
-static Eina_Bool \
-foo(Eina_Debug_Session *session, int srcid, void *buffer, int size) \
-{ \
- _Main_Loop_Info *info = calloc(1, sizeof(*info)); \
- info->session = session; \
- info->srcid = srcid; \
- info->size = size; \
- if (info->size) \
- { \
- info->buffer = malloc(info->size); \
- memcpy(info->buffer, buffer, info->size); \
- } \
- ecore_main_loop_thread_safe_call_async(_intern_main_loop ## foo, info); \
- return EINA_TRUE; \
-}
-
-#ifndef WORDS_BIGENDIAN
-#define SWAP_64(x) x
-#define SWAP_32(x) x
-#define SWAP_16(x) x
-#define SWAP_DBL(x) x
-#else
-#define SWAP_64(x) eina_swap64(x)
-#define SWAP_32(x) eina_swap32(x)
-#define SWAP_16(x) eina_swap16(x)
-#define SWAP_DBL(x) SWAP_64(x)
-#endif
-
-#define EXTRACT_INT(_buf) \
-({ \
- int __i; \
- memcpy(&__i, _buf, sizeof(int)); \
- _buf += sizeof(int); \
- SWAP_32(__i); \
-})
-
-#define STORE_INT(_buf, __i) \
-{ \
- int __i2 = SWAP_32(__i); \
- memcpy(_buf, &__i2, sizeof(int)); \
- _buf += sizeof(int); \
-}
-
-#define STORE_DOUBLE(_buf, __d) \
-{ \
- double __d2 = SWAP_DBL(__d); \
- memcpy(_buf, &__d2, sizeof(double)); \
- _buf += sizeof(double); \
-}
-
-#define STORE_STRING(_buf, __s) \
-{ \
- int __len = (__s ? strlen(__s) : 0) + 1; \
- if (__s) memcpy(_buf, __s, __len); \
- else *_buf = '\0'; \
- _buf += __len; \
-}
+#include "common.h"
static Eina_Stringshare *_src_filename = NULL;
static Exactness_Unit *_src_unit = NULL;
@@ -134,17 +60,6 @@ EINA_DEBUG_OPCODES_ARRAY_DEFINE(_debug_ops,
{NULL, NULL, NULL}
);
-static void
-_printf(int verbose, const char *fmt, ...)
-{
- va_list ap;
- if (!_verbose || verbose > _verbose) return;
-
- va_start(ap, fmt);
- vprintf(fmt, ap);
- va_end(ap);
-}
-
static void
_feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
{
@@ -152,15 +67,15 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
{
case EXACTNESS_ACTION_MOUSE_IN:
{
- _printf(1, "Mouse in\n");
- _printf(2, "%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse in\n");
+ ex_printf(2, "%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
eina_debug_session_send(_session, _cid, _mouse_in_op, &n_evas, sizeof(int));
break;
}
case EXACTNESS_ACTION_MOUSE_OUT:
{
- _printf(1, "Mouse out\n");
- _printf(2, "%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse out\n");
+ ex_printf(2, "%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
eina_debug_session_send(_session, _cid, _mouse_out_op, &n_evas, sizeof(int));
break;
}
@@ -169,8 +84,8 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
Exactness_Action_Mouse_Wheel *t = data;
int len = 3*sizeof(int);
char *buf = malloc(len), *tmp = buf;
- _printf(1, "Mouse wheel\n");
- _printf(2, "%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse wheel\n");
+ ex_printf(2, "%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
STORE_INT(tmp, n_evas);
STORE_INT(tmp, t->direction);
STORE_INT(tmp, t->z);
@@ -184,7 +99,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
Exactness_Action_Multi_Event *t = data;
int len = 5*sizeof(int)+7*sizeof(double)+sizeof(int);
char *buf = malloc(len), *tmp = buf;
- _printf(2, "%s %s n_evas=<%d>\n", __func__,
+ ex_printf(2, "%s %s n_evas=<%d>\n", __func__,
type == EXACTNESS_ACTION_MULTI_DOWN ? "evas_event_feed_multi_down" :
"evas_event_feed_multi_up", n_evas);
STORE_INT(tmp, n_evas);
@@ -211,7 +126,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
Exactness_Action_Multi_Move *t = data;
int len = 4*sizeof(int)+7*sizeof(double);
char *buf = malloc(len), *tmp = buf;
- _printf(2, "%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
STORE_INT(tmp, n_evas);
STORE_INT(tmp, t->d);
STORE_INT(tmp, t->x);
@@ -237,7 +152,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
len += t->string ? strlen(t->string) : 0;
len += t->compose ? strlen(t->compose) : 0;
char *buf = malloc(len), *tmp = buf;
- _printf(2, "%s %s n_evas=<%d>\n", __func__,
+ ex_printf(2, "%s %s n_evas=<%d>\n", __func__,
type == EXACTNESS_ACTION_KEY_DOWN ? "evas_event_feed_key_down " :
"evas_event_feed_key_up", n_evas);
STORE_INT(tmp, n_evas);
@@ -254,7 +169,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
}
case EXACTNESS_ACTION_TAKE_SHOT:
{
- _printf(2, "%s take shot n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s take shot n_evas=<%d>\n", __func__, n_evas);
eina_debug_session_send(_session, _cid, _take_shot_op, &n_evas, sizeof(int));
break;
}
@@ -265,7 +180,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
len += t->wdg_name ? strlen(t->wdg_name) : 0;
len += t->event_name ? strlen(t->event_name) : 0;
char *buf = malloc(len), *tmp = buf;
- _printf(2, "%s %s\n", __func__, "EFL event");
+ ex_printf(2, "%s %s\n", __func__, "EFL event");
STORE_STRING(tmp, t->wdg_name);
STORE_STRING(tmp, t->event_name);
eina_debug_session_send(_session, _cid, _efl_event_op, buf, len);
@@ -278,7 +193,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
int len = 0;
len += t->wdg_name ? strlen(t->wdg_name) : 0;
char *buf = malloc(len), *tmp = buf;
- _printf(2, "%s %s\n", __func__, "Click On");
+ ex_printf(2, "%s %s\n", __func__, "Click On");
STORE_STRING(tmp, t->wdg_name);
eina_debug_session_send(_session, _cid, _click_on_op, buf, len);
free(buf);
@@ -286,7 +201,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
}
case EXACTNESS_ACTION_STABILIZE:
{
- _printf(2, "%s stabilize\n", __func__);
+ ex_printf(2, "%s stabilize\n", __func__);
eina_debug_session_send(_session, _cid, _stabilize_op, NULL, 0);
break;
}
@@ -321,7 +236,7 @@ _src_open()
{
double diff_time = 0; /* Time to wait before feeding the first event */
- _printf(2, "<%s> Source file is <%s>\n", __func__, _src_filename);
+ ex_printf(2, "<%s> Source file is <%s>\n", __func__, _src_filename);
if (!strcmp(_src_filename + strlen(_src_filename) - 4,".exu"))
{
_src_unit = exactness_unit_file_read(_src_filename);
@@ -336,7 +251,7 @@ _src_open()
if (act->delay_ms)
{
- _printf(2, " Waiting <%f>\n", diff_time);
+ ex_printf(2, " Waiting <%f>\n", diff_time);
ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
}
else
diff --git a/src/bin/exactness/inspect.c b/src/bin/exactness/inspect.c
index a04a5217df..384cda81b6 100644
--- a/src/bin/exactness/inspect.c
+++ b/src/bin/exactness/inspect.c
@@ -9,6 +9,8 @@
#include
#include
+#include "common.h"
+
#define LDIFF(x) ""#x""
#define RDIFF(x) ""#x""
diff --git a/src/bin/exactness/meson.build b/src/bin/exactness/meson.build
index b01c77de1e..f835cd40ea 100644
--- a/src/bin/exactness/meson.build
+++ b/src/bin/exactness/meson.build
@@ -1,18 +1,21 @@
exactness_bin = executable('exactness',
- [ 'exactness.c' ],
- dependencies: [ ecore, ecore_evas, ecore_file, exactness ],
+ [ 'exactness.c', 'common.c', 'common.h' ],
+ dependencies: [ ecore, ecore_evas, ecore_file, elementary, exactness ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
install: true,
)
exactness_inject_bin = executable('exactness_inject',
- [ 'injector.c' ],
+ [ 'injector.c', 'common.c', 'common.h' ],
dependencies: [ elementary, exactness ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
install: true,
)
exactness_inspect_bin = executable('exactness_inspect',
- [ 'inspect.c' ],
+ [ 'inspect.c', 'common.c', 'common.h' ],
dependencies: [ elementary, exactness ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
install: true,
)
@@ -28,15 +31,16 @@ edjs = custom_target('player_entry',
depends : edje_depends)
exactness_play_bin = executable('exactness_play',
- [ 'player.c', edjs ],
+ [ 'player.c', 'common.c', 'common.h', edjs ],
dependencies: [ elementary, exactness ],
c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
install: true,
)
exactness_record_bin = executable('exactness_record',
- [ 'recorder.c' ],
+ [ 'recorder.c', 'common.c', 'common.h' ],
dependencies: [ elementary, exactness ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
install: true,
)
diff --git a/src/bin/exactness/player.c b/src/bin/exactness/player.c
index 260d433b46..fa9f0c63d3 100644
--- a/src/bin/exactness/player.c
+++ b/src/bin/exactness/player.c
@@ -30,88 +30,12 @@
#include
#include "exactness_private.h"
+#include "common.h"
-#define PATH_ 1024
#define CMD_LINE_MAX 256
#define IMAGE_FILENAME_EXT ".png"
#define PAUSE_KEY_STR "F2"
-typedef struct
-{
- Eina_Debug_Session *session;
- int srcid;
- void *buffer;
- unsigned int size;
-} _Main_Loop_Info;
-
-#define WRAPPER_TO_XFER_MAIN_LOOP(foo) \
-static void \
-_intern_main_loop ## foo(void *data) \
-{ \
- _Main_Loop_Info *info = data; \
- _main_loop ## foo(info->session, info->srcid, info->buffer, info->size); \
- free(info->buffer); \
- free(info); \
-} \
-static Eina_Bool \
-foo(Eina_Debug_Session *session, int srcid, void *buffer, int size) \
-{ \
- _Main_Loop_Info *info = calloc(1, sizeof(*info)); \
- info->session = session; \
- info->srcid = srcid; \
- info->size = size; \
- if (info->size) \
- { \
- info->buffer = malloc(info->size); \
- memcpy(info->buffer, buffer, info->size); \
- } \
- ecore_main_loop_thread_safe_call_async(_intern_main_loop ## foo, info); \
- return EINA_TRUE; \
-}
-
-#ifndef WORDS_BIGENDIAN
-#define SWAP_64(x) x
-#define SWAP_32(x) x
-#define SWAP_16(x) x
-#define SWAP_DBL(x) x
-#else
-#define SWAP_64(x) eina_swap64(x)
-#define SWAP_32(x) eina_swap32(x)
-#define SWAP_16(x) eina_swap16(x)
-#define SWAP_DBL(x) SWAP_64(x)
-#endif
-
-#define EXTRACT_INT(_buf) \
-({ \
- int __i; \
- memcpy(&__i, _buf, sizeof(int)); \
- _buf += sizeof(int); \
- SWAP_32(__i); \
-})
-
-#define EXTRACT_DOUBLE(_buf) \
-({ \
- double __d; \
- memcpy(&__d, _buf, sizeof(double)); \
- _buf += sizeof(double); \
- SWAP_DBL(__d); \
-})
-
-#define EXTRACT_STRING(_buf) \
-({ \
- char *__s = _buf ? strdup(_buf) : NULL; \
- int __len = (__s ? strlen(__s) : 0) + 1; \
- _buf += __len; \
- __s; \
-})
-
-#define STORE_INT(_buf, __i) \
-({ \
- int __si = SWAP_32(__i); \
- memcpy(_buf, &__si, sizeof(int)); \
- _buf += sizeof(int); \
-})
-
typedef enum
{
FTYPE_UNKNOWN,
@@ -152,17 +76,6 @@ static Eina_Bool _exit_required = EINA_FALSE;
static Eina_Bool _pause_request = EINA_FALSE;
static Eina_Bool _playing_status = EINA_FALSE;
-static void
-_printf(int verbose, const char *fmt, ...)
-{
- va_list ap;
- if (!_verbose || verbose > _verbose) return;
-
- va_start(ap, fmt);
- vprintf(fmt, ap);
- va_end(ap);
-}
-
static Exactness_Image *
_snapshot_shot_get(Evas *e)
{
@@ -226,7 +139,7 @@ _evas_render_post_cb(void *data EINA_UNUSED, const Efl_Event *event)
Eo *o = evas_object_image_add(event->object);
evas_object_image_size_set(o, ex_shot->w, ex_shot->h);
evas_object_image_data_set(o, ex_shot->pixels);
- _printf(1, "Shot taken (%s).\n", filename);
+ ex_printf(1, "Shot taken (%s).\n", filename);
if (!evas_object_image_save(o, filename, NULL, NULL))
{
printf("Cannot save widget to <%s>\n", filename);
@@ -238,7 +151,7 @@ _evas_render_post_cb(void *data EINA_UNUSED, const Efl_Event *event)
Exactness_Image *ex_img = e_data;
memcpy(ex_img, ex_shot, sizeof(Exactness_Image));
ex_shot->pixels = NULL;
- _printf(1, "Shot taken (in %s).\n", _dest);
+ ex_printf(1, "Shot taken (in %s).\n", _dest);
}
else if (_dest_type == FTYPE_REMOTE)
{
@@ -369,23 +282,23 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
{
case EXACTNESS_ACTION_MOUSE_IN:
{
- _printf(1, "Mouse in\n");
- _printf(2, "%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse in\n");
+ ex_printf(2, "%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
if (e) evas_event_feed_mouse_in(e, time(NULL), NULL);
break;
}
case EXACTNESS_ACTION_MOUSE_OUT:
{
- _printf(1, "Mouse out\n");
- _printf(2, "%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse out\n");
+ ex_printf(2, "%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
if (e) evas_event_feed_mouse_out(e, time(NULL), NULL);
break;
}
case EXACTNESS_ACTION_MOUSE_WHEEL:
{
Exactness_Action_Mouse_Wheel *t = data;
- _printf(1, "Mouse wheel\n");
- _printf(2, "%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(1, "Mouse wheel\n");
+ ex_printf(2, "%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
if (e) evas_event_feed_mouse_wheel(e, t->direction, t->z, time(NULL), NULL);
break;
@@ -393,7 +306,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
case EXACTNESS_ACTION_MULTI_DOWN:
{
Exactness_Action_Multi_Event *t = data;
- _printf(2, "%s evas_event_feed_multi_down n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_multi_down n_evas=<%d>\n", __func__, n_evas);
if (!t->d)
{
if (e) evas_event_feed_mouse_down(e, t->b, t->flags, time(NULL), NULL);
@@ -412,7 +325,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
case EXACTNESS_ACTION_MULTI_UP:
{
Exactness_Action_Multi_Event *t = data;
- _printf(2, "%s evas_event_feed_multi_up n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_multi_up n_evas=<%d>\n", __func__, n_evas);
if (!t->d)
{
if (e) evas_event_feed_mouse_up(e, t->b, t->flags, time(NULL), NULL);
@@ -431,7 +344,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
case EXACTNESS_ACTION_MULTI_MOVE:
{
Exactness_Action_Multi_Move *t = data;
- _printf(2, "%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
if (!t->d)
{
if (e) evas_event_feed_mouse_move(e, t->x, t->y, time(NULL), NULL);
@@ -454,7 +367,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
case EXACTNESS_ACTION_KEY_DOWN:
{
Exactness_Action_Key_Down_Up *t = data;
- _printf(2, "%s evas_event_feed_key_down n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_key_down n_evas=<%d>\n", __func__, n_evas);
if (e)
evas_event_feed_key_down_with_keycode(e,
t->keyname, t->key, t->string,
@@ -464,7 +377,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
case EXACTNESS_ACTION_KEY_UP:
{
Exactness_Action_Key_Down_Up *t = data;
- _printf(2, "%s evas_event_feed_key_up n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s evas_event_feed_key_up n_evas=<%d>\n", __func__, n_evas);
if (e) evas_event_feed_key_up_with_keycode(e,
t->keyname, t->key, t->string,
t->compose, time(NULL), NULL, t->keycode);
@@ -473,7 +386,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
}
case EXACTNESS_ACTION_TAKE_SHOT:
{
- _printf(2, "%s take shot n_evas=<%d>\n", __func__, n_evas);
+ ex_printf(2, "%s take shot n_evas=<%d>\n", __func__, n_evas);
if (rect) evas_object_color_set(rect, 0, 0, 255, 255);
_cur_shot_id++;
if (_dest_type != FTYPE_UNKNOWN && e) _shot_do(e);
@@ -489,7 +402,7 @@ _feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
Eo *o = efl_name_find(e, t->wdg_name);
if (o)
{
- _printf(2, "%s EFL event invoke %s on %s\n",
+ ex_printf(2, "%s EFL event invoke %s on %s\n",
__func__, t->event_name, t->wdg_name);
Efl_Event_Description d;
found = EINA_TRUE;
@@ -526,7 +439,7 @@ wdg_found:
Exactness_Action_Multi_Event *d_event = calloc(1, sizeof(*d_event));
Exactness_Action *act, *prev_act = eina_list_data_get(_cur_event_list);
- _printf(2, "%s click on %s\n", __func__, t->wdg_name);
+ ex_printf(2, "%s click on %s\n", __func__, t->wdg_name);
act = calloc(1, sizeof(*act));
act->type = EXACTNESS_ACTION_MULTI_MOVE;
act->delay_ms = 100;
@@ -563,7 +476,7 @@ wdg_found:
}
case EXACTNESS_ACTION_STABILIZE:
{
- _printf(2, "%s stabilize\n", __func__);
+ ex_printf(2, "%s stabilize\n", __func__);
if (rect) evas_object_color_set(rect, 255, 165, 0, 255);
ecore_timer_add(0.1, _stabilization_timer_cb, NULL);
break;
@@ -591,7 +504,7 @@ _feed_event_timer_cb(void *data EINA_UNUSED)
if (act->type != EXACTNESS_ACTION_STABILIZE)
{
act = eina_list_data_get(_cur_event_list);
- _printf(2, " %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
+ ex_printf(2, " %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
}
}
@@ -605,7 +518,7 @@ _stabilization_timer_cb(void *data EINA_UNUSED)
Evas *e;
#define STAB_MAX 5
static int need_more = STAB_MAX;
- _printf(2, "Not stable yet!\n");
+ ex_printf(2, "Not stable yet!\n");
EINA_LIST_FOREACH(_evas_list, itr, e)
{
if (!e) continue;
@@ -629,7 +542,7 @@ _stabilization_timer_cb(void *data EINA_UNUSED)
if (_src_type != FTYPE_REMOTE && !_pause_request)
{
Exactness_Action *act = eina_list_data_get(_cur_event_list);
- _printf(2, " %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
+ ex_printf(2, " %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
}
need_more = STAB_MAX;
@@ -836,7 +749,7 @@ _src_feed(void *data EINA_UNUSED)
if (act && act->delay_ms)
{
- _printf(2, " Waiting <%f>\n", act->delay_ms / 1000.0);
+ ex_printf(2, " Waiting <%f>\n", act->delay_ms / 1000.0);
ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
}
else
@@ -853,7 +766,7 @@ _src_open()
{
Eina_List *itr, *itr2;
Exactness_Action *act;
- _printf(2, "<%s> Source file is <%s>\n", __func__, _src_filename);
+ ex_printf(2, "<%s> Source file is <%s>\n", __func__, _src_filename);
if (_src_type == FTYPE_EXU)
{
_src_unit = exactness_unit_file_read(_src_filename);
@@ -951,7 +864,7 @@ _prg_invoke(const char *full_path, int argc, char **argv)
static Eina_Stringshare *
_prg_full_path_guess(const char *prg)
{
- char full_path[PATH_];
+ char full_path[PATH_MAX];
if (strchr(prg, '/')) return eina_stringshare_add(prg);
char *env_path = eina_strdup(getenv("PATH"));
Eina_Stringshare *ret = NULL;
@@ -1035,10 +948,10 @@ _event_key_cb(void *data EINA_UNUSED, const Efl_Event *event)
if (!strcmp(key, PAUSE_KEY_STR) && efl_input_key_pressed_get(evk))
{
_pause_request = !_pause_request;
- if (_pause_request) _printf(1, "Pausing scenario\n");
+ if (_pause_request) ex_printf(1, "Pausing scenario\n");
else
{
- _printf(1, "Playing scenario\n");
+ ex_printf(1, "Playing scenario\n");
if (!_playing_status)
_feed_event_timer_cb(NULL);
}
@@ -1060,7 +973,7 @@ _my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
e = _evas_new();
if (e)
{
- _printf(1, "New Evas\n");
+ ex_printf(1, "New Evas\n");
_evas_list = eina_list_append(_evas_list, e);
efl_event_callback_array_add(e, _evas_callbacks(), NULL);
}
@@ -1242,7 +1155,7 @@ int main(int argc, char **argv)
if (!show_on_screen) setenv("ELM_ENGINE", "buffer", 1);
if (_src_unit && _src_unit->fonts_path)
{
- char buf[PATH_];
+ char buf[PATH_MAX];
if (!fonts_dir) fonts_dir = "./fonts";
sprintf(buf, "%s/%s", fonts_dir, _src_unit->fonts_path);
if (!ecore_file_exists(buf))
@@ -1297,9 +1210,9 @@ int main(int argc, char **argv)
{
argv[i - opt_args] = argv[0] + (argv[i] - argv[opt_args]);
}
- _printf(1, "%s ", argv[i - opt_args]);
+ ex_printf(1, "%s ", argv[i - opt_args]);
}
- _printf(1, "\n");
+ ex_printf(1, "\n");
}
else
{
diff --git a/src/bin/exactness/recorder.c b/src/bin/exactness/recorder.c
index 59a4d3106e..f8eefe591e 100644
--- a/src/bin/exactness/recorder.c
+++ b/src/bin/exactness/recorder.c
@@ -23,8 +23,8 @@
#include
#include
+#include "common.h"
-#define MAX_PATH 1024
#define STABILIZE_KEY_STR "F1"
#define SHOT_KEY_STR "F2"
#define SAVE_KEY_STR "F3"
@@ -42,17 +42,6 @@ static Exactness_Unit *_unit = NULL;
static char *_shot_key = NULL;
static unsigned int _last_timestamp = 0.0;
-static void
-_printf(int verbose, const char *fmt, ...)
-{
- va_list ap;
- if (!_verbose || verbose > _verbose) return;
-
- va_start(ap, fmt);
- vprintf(fmt, ap);
- va_end(ap);
-}
-
static Exactness_Action_Type
_event_pointer_type_get(Efl_Pointer_Action t)
{
@@ -87,7 +76,7 @@ _add_to_list(Exactness_Action_Type type, unsigned int n_evas, unsigned int times
prev_v->n_evas == n_evas &&
(!len || !memcmp(prev_v->data, data, len))) return;
}
- _printf(1, "Recording %s\n", _exactness_action_type_to_string_get(type));
+ ex_printf(1, "Recording %s\n", _exactness_action_type_to_string_get(type));
Exactness_Action *act = malloc(sizeof(*act));
act->type = type;
act->n_evas = n_evas;
@@ -122,7 +111,7 @@ _event_pointer_cb(void *data, const Efl_Event *event)
if (!timestamp) return;
- _printf(2, "Calling \"%s\" timestamp=<%u>\n", _exactness_action_type_to_string_get(evt), timestamp);
+ ex_printf(2, "Calling \"%s\" timestamp=<%u>\n", _exactness_action_type_to_string_get(evt), timestamp);
switch (action)
{
@@ -182,20 +171,20 @@ _event_key_cb(void *data, const Efl_Event *event)
{
if (!strcmp(key, _shot_key))
{
- _printf(2, "Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp);
+ ex_printf(2, "Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp);
_add_to_list(EXACTNESS_ACTION_TAKE_SHOT, n_evas, timestamp, NULL, 0);
return;
}
if (!strcmp(key, STABILIZE_KEY_STR))
{
- _printf(2, "Stabilize: %s timestamp=<%u>\n", __func__, timestamp);
+ ex_printf(2, "Stabilize: %s timestamp=<%u>\n", __func__, timestamp);
_add_to_list(EXACTNESS_ACTION_STABILIZE, n_evas, timestamp, NULL, 0);
return;
}
if (!strcmp(key, SAVE_KEY_STR))
{
_output_write();
- _printf(2, "Save events: %s timestamp=<%u>\n", __func__, timestamp);
+ ex_printf(2, "Save events: %s timestamp=<%u>\n", __func__, timestamp);
return;
}
evt = EXACTNESS_ACTION_KEY_DOWN;
@@ -239,7 +228,7 @@ _my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
e = _evas_new();
if (e)
{
- _printf(1, "New Evas\n");
+ ex_printf(1, "New Evas\n");
_evas_list = eina_list_append(_evas_list, e);
efl_key_data_set(e, "__evas_id", (void *)(intptr_t)_last_evas_id++);
efl_event_callback_array_add(e, _event_pointer_callbacks(), e);
@@ -303,7 +292,7 @@ _prg_invoke(const char *full_path, int argc, char **argv)
static Eina_Stringshare *
_prg_full_path_guess(const char *prg)
{
- char full_path[MAX_PATH];
+ char full_path[PATH_MAX];
if (strchr(prg, '/')) return eina_stringshare_add(prg);
char *env_path = eina_strdup(getenv("PATH"));
Eina_Stringshare *ret = NULL;
@@ -493,7 +482,7 @@ int main(int argc, char **argv)
/* Replace the current command line to hide the Exactness part */
int len = argv[argc - 1] + strlen(argv[argc - 1]) - argv[opt_args];
memcpy(argv[0], argv[opt_args], len);
- memset(argv[0] + len, 0, MAX_PATH - len);
+ memset(argv[0] + len, 0, PATH_MAX - len);
int i;
for (i = opt_args; i < argc; i++)
@@ -502,9 +491,9 @@ int main(int argc, char **argv)
{
argv[i - opt_args] = argv[0] + (argv[i] - argv[opt_args]);
}
- _printf(1, "%s ", argv[i - opt_args]);
+ ex_printf(1, "%s ", argv[i - opt_args]);
}
- _printf(1, "\n");
+ ex_printf(1, "\n");
if (!_shot_key) _shot_key = getenv("SHOT_KEY");
if (!_shot_key) _shot_key = SHOT_KEY_STR;
diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c
index b2c6341523..c5a2f57343 100644
--- a/src/lib/ecore/efl_exe.c
+++ b/src/lib/ecore/efl_exe.c
@@ -69,6 +69,7 @@ struct _Efl_Exe_Data
} fd;
#endif
Eina_Bool exit_called : 1;
+ Eina_Bool exit_signalled : 1;
Eina_Bool run : 1;
};
@@ -269,10 +270,10 @@ _efl_exe_signal(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd, Efl_Exe_Signal sig)
switch (sig)
{
- case EFL_EXE_SIGNAL_INT: s = SIGINT; break;
- case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; break;
- case EFL_EXE_SIGNAL_TERM: s = SIGTERM; break;
- case EFL_EXE_SIGNAL_KILL: s = SIGKILL; break;
+ case EFL_EXE_SIGNAL_INT: s = SIGINT; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_TERM: s = SIGTERM; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_KILL: s = SIGKILL; pd->exit_signalled = EINA_TRUE; break;
case EFL_EXE_SIGNAL_CONT: s = SIGCONT; break;
case EFL_EXE_SIGNAL_STOP: s = SIGSTOP; break;
case EFL_EXE_SIGNAL_HUP: s = SIGHUP; break;
@@ -552,7 +553,18 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
int except[2] = { 0, -1 };
except[0] = pd->fd.exited_write;
eina_file_close_from(3, except);
-
+#ifdef HAVE_PRCTL
+ if ((pd->flags & EFL_EXE_FLAGS_TERM_WITH_PARENT))
+ {
+ prctl(PR_SET_PDEATHSIG, SIGTERM);
+ }
+#elif defined(HAVE_PROCCTL)
+ if ((pd->flags & EFL_EXE_FLAGS_TERM_WITH_PARENT))
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
+#endif
// actually execute!
_exec(cmd, pd->flags, td->flags);
// we couldn't exec... uh oh. HAAAAAAAALP!
@@ -570,6 +582,7 @@ _efl_exe_efl_task_end(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
#ifdef _WIN32
#else
if (pd->pid == -1) return;
+ pd->exit_signalled = EINA_TRUE;
kill(pd->pid, SIGINT);
#endif
}
@@ -580,6 +593,16 @@ _efl_exe_exit_signal_get(const Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
return pd->exit_signal;
}
+EOLIAN static int
+_efl_exe_pid_get(const Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
+{
+#ifndef _WIN32
+ if (pd->pid != -1)
+ return pd->pid;
+#endif
+ return 0;
+}
+
EOLIAN static Efl_Object *
_efl_exe_efl_object_constructor(Eo *obj, Efl_Exe_Data *pd)
{
@@ -602,7 +625,7 @@ _efl_exe_efl_object_destructor(Eo *obj, Efl_Exe_Data *pd)
{
#ifdef _WIN32
#else
- if (!pd->exit_called)
+ if ((!pd->exit_called) && (!pd->exit_signalled))
ERR("Exe being destroyed while child has not exited yet.");
if (pd->fd.exited_read >= 0)
{
diff --git a/src/lib/ecore/efl_exe.eo b/src/lib/ecore/efl_exe.eo
index 23b68935e4..c4cc2d7ebf 100644
--- a/src/lib/ecore/efl_exe.eo
+++ b/src/lib/ecore/efl_exe.eo
@@ -18,7 +18,8 @@ enum @beta Efl.Exe_Flags {
[[Flags to customize process behavior.]]
none = 0, [[No special flags.]]
group_leader = 1, [[Process will be executed in its own session.]]
- hide_io = 4 [[All console IO will be hidden.]]
+ hide_io = 4, [[All console IO will be hidden.]]
+ term_with_parent = 8, [[Makes child receive SIGTERM when parent dies.]]
}
class @beta Efl.Exe extends Efl.Task implements Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
@@ -51,6 +52,15 @@ class @beta Efl.Exe extends Efl.Task implements Efl.Io.Reader, Efl.Io.Writer, Ef
sig: int; [[The exit signal, or -1 if no exit signal happened.]]
}
}
+ @property pid {
+ [[The pid of the process, which is only accessible after the object has been finalized.
+ @since 1.24
+ ]]
+ get { }
+ values {
+ pid: int; [[The pid, or 0 on failure.]]
+ }
+ }
@property env {
[[If $env is $NULL then the process created by this object is
going to inherit the environment of this process.
diff --git a/src/lib/edje/edje_textblock.c b/src/lib/edje/edje_textblock.c
index d0c5c6d30d..fe3ec439fb 100644
--- a/src/lib/edje/edje_textblock.c
+++ b/src/lib/edje/edje_textblock.c
@@ -493,6 +493,20 @@ _edje_part_textblock_style_text_set(Edje *ed,
return EINA_FALSE;
}
+static char*
+strrstr(const char* haystack, const char* violate)
+{
+ char *s_ret = NULL;
+ char *tmp = NULL;
+ const char *_haystack = haystack;
+ size_t len = strlen(violate);
+ while((tmp = strstr(_haystack, violate))){
+ s_ret = tmp;
+ _haystack = tmp + len;
+ }
+ return s_ret;
+}
+
void
_edje_part_recalc_single_textblock(FLOAT_T sc,
Edje *ed,
@@ -522,11 +536,21 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
size_t size_array_len = 0;
Eina_List *l;
unsigned int *value;
+ Evas_Textblock_Style *st = _edje_textblock_style_get(ed, chosen_desc->text.style.str);
+ const char *text_style = evas_textblock_style_get(st);
+ char *s_font_size = (text_style) ? strrstr(text_style,"font_size=") : NULL;
+ if (s_font_size)
+ {
+ int font_size = strtol(&s_font_size[10], NULL, 10);
+ chosen_desc->text.size_range_max = font_size;
+ if (chosen_desc->text.size_range_min > chosen_desc->text.size_range_max)
+ chosen_desc->text.size_range_min = chosen_desc->text.size_range_max;
+ }
EINA_LIST_FOREACH(chosen_desc->text.fit_size_array, l, value)
{
size_array[size_array_len++] = *value;
}
- unsigned int mode = TEXTBLOCK_FIT_MODE_NONE;
+ unsigned int mode = TEXTBLOCK_FIT_MODE_NONE;
if (chosen_desc->text.fit_x)
mode |= TEXTBLOCK_FIT_MODE_WIDTH;
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 67b458495d..a8071531e1 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -326,6 +326,7 @@ edje_language_set(const char *locale)
char *loc;
int length;
+ if (!locale) return;
lookup = strstr(locale, ".");
length = lookup ? lookup - locale : (int)strlen(locale);
loc = alloca(length + 1);
diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h
index ea891223e9..ec6f168a8b 100644
--- a/src/lib/efl/Efl.h
+++ b/src/lib/efl/Efl.h
@@ -52,6 +52,7 @@ extern "C" {
#define EFL_VERSION_1_21 1
#define EFL_VERSION_1_22 1
#define EFL_VERSION_1_23 1
+#define EFL_VERSION_1_24 1
/* Add here all the required ifdef for any @protected method */
#ifdef EFL_BUILD
@@ -252,7 +253,7 @@ efl_config_bool_get(const Efl_Config *obj, const char * name)
{
Eina_Value *v = efl_config_get(obj, name);
Eina_Bool b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_UCHAR)
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_UCHAR)
eina_value_get(v, &b);
eina_value_free(v);
return b;
@@ -274,7 +275,7 @@ efl_config_int_get(const Efl_Config *obj, const char * name)
{
Eina_Value *v = efl_config_get(obj, name);
int b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_INT)
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_INT)
eina_value_get(v, &b);
eina_value_free(v);
return b;
@@ -296,7 +297,7 @@ efl_config_double_get(const Efl_Config *obj, const char * name)
{
Eina_Value *v = efl_config_get(obj, name);
double b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_DOUBLE)
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_DOUBLE)
eina_value_get(v, &b);
eina_value_free(v);
return b;
@@ -318,7 +319,7 @@ efl_config_string_get(const Efl_Config *obj, const char *name)
{
Eina_Value *v = efl_config_get(obj, name);
Eina_Stringshare *s = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_STRING)
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_STRING)
{
const char *b = 0;
eina_value_get(v, &b);
diff --git a/src/lib/efl_wl/Efl_Wl.h b/src/lib/efl_canvas_wl/Efl_Canvas_Wl.h
similarity index 65%
rename from src/lib/efl_wl/Efl_Wl.h
rename to src/lib/efl_canvas_wl/Efl_Canvas_Wl.h
index a866a4ee13..0fae48a3a9 100644
--- a/src/lib/efl_wl/Efl_Wl.h
+++ b/src/lib/efl_canvas_wl/Efl_Canvas_Wl.h
@@ -1,24 +1,49 @@
-#ifdef EFL_BETA_API_SUPPORT
-
-#ifndef EFL_WL_H
-# define EFL_WL_H
+#ifndef EFL_CANVAS_WL_H
+# define EFL_CANVAS_WL_H
#include
-#include
+#include
#ifdef EAPI
# undef EAPI
#endif
-
-#ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-#else
-# define EAPI
+#ifdef EAPI_WEAK
+# undef EAPI_WEAK
#endif
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EAPI __attribute__ ((visibility("default")))
+# define EAPI_WEAK
+# else
+# define EAPI
+# define EAPI_WEAK
+# endif
+# endif
+
+#define EWAPI EAPI EAPI_WEAK
+
+#ifdef WAYLAND_UTIL_H
+typedef struct wl_surface Efl_Canvas_Wl_Wl_Surface;
+typedef struct wl_global Efl_Canvas_Wl_Wl_Global;
+typedef struct wl_interface Efl_Canvas_Wl_Wl_Interface;
+typedef struct wl_array Efl_Canvas_Wl_Wl_Array;
+typedef void Efl_Canvas_Wl_Wl_Interface_Data;
+typedef void Efl_Canvas_Wl_Wl_Interface_Bind_Cb;
+#else
+typedef struct Efl_Canvas_Wl_Wl_Surface Efl_Canvas_Wl_Wl_Surface;
+typedef struct Efl_Canvas_Wl_Wl_Global Efl_Canvas_Wl_Wl_Global;
+typedef struct Efl_Canvas_Wl_Wl_Interface Efl_Canvas_Wl_Wl_Interface;
+typedef struct Efl_Canvas_Wl_Wl_Array Efl_Canvas_Wl_Wl_Array;
+typedef void * Efl_Canvas_Wl_Wl_Interface_Data;
+typedef void * Efl_Canvas_Wl_Wl_Interface_Bind_Cb;
+#endif
+#ifdef _XKBCOMMON_H_
+typedef struct xkb_state Efl_Canvas_Wl_Xkb_State;
+#else
+typedef struct Efl_Canvas_Wl_Xkb_State Efl_Canvas_Wl_Xkb_State;
+#endif
+#include
+#include
/**
* @defgroup Efl_Wl_Group EFL Wayland
*
@@ -27,19 +52,7 @@
* @since 1.20
* @{
*/
-
-/**
- * @typedef Efl_Wl_Rotation
- * The rotation to apply to the compositor's internal wl_output
- */
-typedef enum
-{
- EFL_WL_ROTATION_0,
- EFL_WL_ROTATION_90,
- EFL_WL_ROTATION_180,
- EFL_WL_ROTATION_270
-} Efl_Wl_Rotation;
-
+#if 0
/**
* Add a compositor widget to the given canvas.
*
@@ -52,7 +65,7 @@ typedef enum
* @param e The canvas
* @return The compositor object, @c NULL on failure
*/
-EAPI Evas_Object *efl_wl_add(Evas *e);
+EAPI Evas_Object *efl_canvas_wl_add(Evas *e);
/**
* Run a command in the compositor widget.
@@ -64,7 +77,7 @@ EAPI Evas_Object *efl_wl_add(Evas *e);
* @param cmd The command to run
* @return The Ecore_Exe from the executed process, @c NULL on failure
*/
-EAPI Ecore_Exe *efl_wl_run(Evas_Object *obj, const char *cmd);
+EAPI Ecore_Exe *efl_canvas_wl_run(Evas_Object *obj, const char *cmd);
/**
* Run a command in the compositor widget with specified flags.
@@ -77,7 +90,7 @@ EAPI Ecore_Exe *efl_wl_run(Evas_Object *obj, const char *cmd);
* @param flags The flags to use
* @return The Ecore_Exe from the executed process, @c NULL on failure
*/
-Ecore_Exe *efl_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags);
+Ecore_Exe *efl_canvas_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags);
/**
* Add a process to the list of allowed clients for the compositor widget
@@ -86,7 +99,7 @@ Ecore_Exe *efl_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags f
* @param pid The process to allow
* @since 1.21
*/
-EAPI void efl_wl_pid_add(Evas_Object *obj, int32_t pid);
+EAPI void efl_canvas_wl_pid_add(Evas_Object *obj, int32_t pid);
/**
* Remove a process from the list of allowed clients for the compositor widget
@@ -95,7 +108,7 @@ EAPI void efl_wl_pid_add(Evas_Object *obj, int32_t pid);
* @param pid The process to deny
* @since 1.21
*/
-EAPI void efl_wl_pid_del(Evas_Object *obj, int32_t pid);
+EAPI void efl_canvas_wl_pid_del(Evas_Object *obj, int32_t pid);
/**
* Put the bottom-most toplevel window on top and apply focus to it
@@ -103,7 +116,7 @@ EAPI void efl_wl_pid_del(Evas_Object *obj, int32_t pid);
* @param obj The compositor widget
* @return EINA_TRUE if the window stacking was changed
*/
-EAPI Eina_Bool efl_wl_next(Evas_Object *obj);
+EAPI Eina_Bool efl_canvas_wl_surface_next(Evas_Object *obj);
/**
* Put the second top-most toplevel window on top and apply focus to it
@@ -111,7 +124,7 @@ EAPI Eina_Bool efl_wl_next(Evas_Object *obj);
* @param obj The compositor widget
* @return EINA_TRUE if the window stacking was changed
*/
-EAPI Eina_Bool efl_wl_prev(Evas_Object *obj);
+EAPI Eina_Bool efl_canvas_wl_surface_prev(Evas_Object *obj);
/**
* Set rotation and flip for the compositor's output
@@ -122,7 +135,7 @@ EAPI Eina_Bool efl_wl_prev(Evas_Object *obj);
* @note rtl is equivalent to WL_OUTPUT_TRANSFORM_FLIPPED and rotations are applied
* on top
*/
-EAPI void efl_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl);
+EAPI void efl_canvas_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl);
/**
* Set the scale factor for the compositor's output
@@ -130,25 +143,25 @@ EAPI void efl_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl);
* @param obj The compositor widget
* @param scale The scale factor to set
*/
-EAPI void efl_wl_scale_set(Evas_Object *obj, double scale);
+EAPI void efl_canvas_wl_scale_set(Evas_Object *obj, double scale);
/**
- * Transfer aspect hints from top-most surface onto the efl_wl object
+ * Transfer aspect hints from top-most surface onto the efl_canvas_wl object
*
* @param obj The compositor widget
* @param set Whether to enable aspect setting
* @since 1.21
*/
-EAPI void efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set);
+EAPI void efl_canvas_wl_aspect_set(Evas_Object *obj, Eina_Bool set);
/**
- * Transfer min/max hints from top-most surface onto the efl_wl object
+ * Transfer min/max hints from top-most surface onto the efl_canvas_wl object
*
* @param obj The compositor widget
* @param set Whether to enable min/max setting
* @since 1.21
*/
-EAPI void efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set);
+EAPI void efl_canvas_wl_minmax_set(Evas_Object *obj, Eina_Bool set);
/**
* Add an externally-managed global to the compositor
@@ -164,7 +177,7 @@ EAPI void efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set);
* @return The created global (struct wl_global), or NULL on failure
* @since 1.21
*/
-EAPI void *efl_wl_global_add(Evas_Object *obj, const void *interface, uint32_t version, void *data, void *bind_cb);
+EAPI void *efl_canvas_wl_global_add(Evas_Object *obj, const void *interface, uint32_t version, void *data, void *bind_cb);
/**
* Extract a child surface from the compositor
@@ -176,7 +189,7 @@ EAPI void *efl_wl_global_add(Evas_Object *obj, const void *interface, uint32_t v
* @return True if the surface was successfully extracted
* @since 1.21
*/
-EAPI Eina_Bool efl_wl_surface_extract(Evas_Object *surface);
+EAPI Eina_Bool efl_canvas_wl_surface_extract(Evas_Object *surface);
/**
* Return the pid for the surface's client
@@ -187,19 +200,19 @@ EAPI Eina_Bool efl_wl_surface_extract(Evas_Object *surface);
* @return The pid of the surface, or -1 on failure
* @since 1.24
*/
-EAPI int32_t efl_wl_surface_pid_get(Evas_Object *surface);
-
+EAPI int32_t efl_canvas_wl_surface_pid_get(Evas_Object *surface);
+#endif
/**
- * Get the Evas_Object for an extracted wl_surface resource created by an efl_wl object
+ * Get the Evas_Object for an extracted wl_surface resource created by an efl_canvas_wl object
*
- * @note Passing anything other than a valid wl_surface resource from an efl_wl object will guarantee a crash.
+ * @note Passing anything other than a valid wl_surface resource from an efl_canvas_wl object will guarantee a crash.
*
* @param surface_resource The wl_resource for a wl_surface
* @return The Evas_Object of the surface, NULL on failure
* @since 1.21
*/
-EAPI Evas_Object *efl_wl_extracted_surface_object_find(void *surface_resource);
-
+EAPI Evas_Object *efl_canvas_wl_extracted_surface_object_find(void *surface_resource);
+#if 0
/**
* Get the Evas_Object for an extracted surface's parent, or NULL if the parent is not extracted
*
@@ -209,7 +222,7 @@ EAPI Evas_Object *efl_wl_extracted_surface_object_find(void *surface_resource);
* @return The Evas_Object of the parent surface, NULL on failure or if there is no parent
* @since 1.21
*/
-EAPI Evas_Object *efl_wl_extracted_surface_extracted_parent_get(Evas_Object *surface);
+EAPI Evas_Object *efl_canvas_wl_extracted_surface_extracted_parent_get(Evas_Object *surface);
/**
* Set external xkbcommon resources to be used read-only by the compositor object
@@ -227,7 +240,7 @@ EAPI Evas_Object *efl_wl_extracted_surface_extracted_parent_get(Evas_Object *sur
* @param wl_key_array A pointer to the wl_array in which keys are stored
* @since 1.21
*/
-EAPI void efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void *wl_key_array);
+EAPI void efl_canvas_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void *wl_key_array);
/**
* Set the key repeat rate for a seat in the compositor
@@ -235,7 +248,10 @@ EAPI void efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *
* @param obj The compositor widget
* @since 1.21
*/
-EAPI void efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repeat_delay);
+EAPI void efl_canvas_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repeat_delay);
#endif
-
+#undef EAPI
+#define EAPI
+#undef EAPI_WEAK
+#define EAPI_WEAK
#endif
diff --git a/src/lib/efl_wl/copiedfromweston.x b/src/lib/efl_canvas_wl/copiedfromweston.x
similarity index 100%
rename from src/lib/efl_wl/copiedfromweston.x
rename to src/lib/efl_canvas_wl/copiedfromweston.x
diff --git a/src/lib/efl_wl/dmabuf.c b/src/lib/efl_canvas_wl/dmabuf.c
similarity index 100%
rename from src/lib/efl_wl/dmabuf.c
rename to src/lib/efl_canvas_wl/dmabuf.c
diff --git a/src/lib/efl_wl/dmabuf.h b/src/lib/efl_canvas_wl/dmabuf.h
similarity index 100%
rename from src/lib/efl_wl/dmabuf.h
rename to src/lib/efl_canvas_wl/dmabuf.h
diff --git a/src/lib/efl_wl/efl_wl.c b/src/lib/efl_canvas_wl/efl_canvas_wl.c
similarity index 92%
rename from src/lib/efl_wl/efl_wl.c
rename to src/lib/efl_canvas_wl/efl_canvas_wl.c
index 2aef1368ce..997703299f 100644
--- a/src/lib/efl_wl/efl_wl.c
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl.c
@@ -1,3 +1,6 @@
+#define EFL_INTERNAL_UNSTABLE
+#define EFL_CANVAS_GROUP_PROTECTED
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -34,8 +37,9 @@
# ifdef HAVE_ECORE_X
#include "Ecore_X.h"
#endif
-
-#include "Efl_Wl.h"
+#include "Evas_Internal.h"
+#include "canvas/evas_canvas_eo.h"
+#include "Efl_Canvas_Wl.h"
#undef COORDS_INSIDE
#define COORDS_INSIDE(x, y, xx, yy, ww, hh) \
@@ -84,6 +88,7 @@
WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE | \
WL_DATA_DEVICE_MANAGER_DND_ACTION_ASK)
+#define MY_CLASS EFL_CANVAS_WL_CLASS
typedef struct Input_Sequence
{
@@ -115,21 +120,21 @@ typedef struct Comp_Buffer
typedef struct Comp
{
- Efl_Wl_Rotation rotation;
+ Efl_Canvas_Wl_Rotation rotation;
double scale;
char *env;
+ Efl_Exe_Flags flags;
Ecore_Wl2_Display *disp;
Ecore_Wl2_Display *parent_disp;
Ecore_Wl2_Display *client_disp;
struct wl_display *display;
double wayland_time_base;
- Evas_Object *obj;
- Evas_Object *clip;
- Evas_Object *events;
+ Eo *obj;
+ Eo *clip;
+ Eo *events;
Eina_Hash *exes;
- Ecore_Event_Handler *exe_handler;
Eina_Inlist *surfaces;
unsigned int surfaces_count;
@@ -206,7 +211,7 @@ typedef struct Comp_Seat
struct xkb_context *context;
struct xkb_keymap *keymap;
struct xkb_state *state;
- char *keymap_str;
+ const char *keymap_str;
int keymap_str_size;
int repeat_rate;
int repeat_delay;
@@ -229,7 +234,7 @@ typedef struct Comp_Seat
} cursor;
struct
{
- Evas_Object *obj;
+ Eo *obj;
int layer;
int x, y;
} efl;
@@ -294,9 +299,9 @@ struct Comp_Surface
{
EINA_INLIST;
Comp *c;
- Evas_Object *obj;
- Evas_Object *clip;
- Evas_Object *img;
+ Eo *obj;
+ Eo *clip;
+ Eo *img;
Eina_Array *input_rects;
Eina_Array *opaque_rects;
Eina_List *proxies;
@@ -571,12 +576,12 @@ seat_tch_resources_get(Comp_Seat *s, struct wl_client *client)
return s->tch.resources ? eina_hash_find(s->tch.resources, &client) : NULL;
}
-static void comp_render_pre_proxied(Evas_Object *o, Evas *e, void *event_info);
+static void comp_render_pre_proxied(Eo *o, Evas *e, void *event_info);
static void comp_render_post_proxied(Comp_Surface *cs, Evas *e, void *event_info);
-static void comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Evas_Object *o);
+static void comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Eo *o);
static void
-comp_surface_proxy_del(void *data, Evas *e, Evas_Object *obj, void *event_info EINA_UNUSED)
+comp_surface_proxy_del(void *data, Evas *e, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
int i;
@@ -598,7 +603,7 @@ comp_surface_proxy_del(void *data, Evas *e, Evas_Object *obj, void *event_info E
}
static void
-comp_surface_proxy_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+comp_surface_proxy_resize(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
int w, h;
@@ -643,7 +648,7 @@ comp_surface_proxy_win_del(Ecore_Evas *ee)
static void
seat_drag_proxy_win_add(Comp_Seat *s)
{
- Evas_Object *o;
+ Eo *o;
if (s->drag.proxy_win) abort();
evas_object_hide(s->drag.surface->obj);
@@ -1344,7 +1349,7 @@ comp_surface_buffer_post_render(Comp_Surface *cs)
}
static void
-comp_surface_pixels_get(void *data, Evas_Object *obj)
+comp_surface_pixels_get(void *data, Eo *obj)
{
Comp_Surface *cs = data;
Comp_Buffer *buffer;
@@ -1358,7 +1363,7 @@ comp_surface_pixels_get(void *data, Evas_Object *obj)
}
static void
-comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Evas_Object *o)
+comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Eo *o)
{
if ((!buffer->renders) || (!eina_list_data_find(buffer->renders, evas_object_evas_get(o))))
buffer->renders = eina_list_append(buffer->renders, evas_object_evas_get(o));
@@ -1410,7 +1415,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
int x, y;
Eina_List *l;
- Evas_Object *o;
+ Eo *o;
Comp_Buffer *buffer = NULL;
Eina_Bool newly_new = EINA_FALSE;
@@ -1513,7 +1518,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
Eina_Iterator *it;
Eina_Rectangle *rect;
- Evas_Object *r;
+ Eo *r;
it = eina_tiler_iterator_new(state->opaque);
cs->opaque_rects = eina_array_new(1);
@@ -1550,7 +1555,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
Eina_Iterator *it;
Eina_Rectangle *rect;
- Evas_Object *r;
+ Eo *r;
array_clear(&cs->input_rects);
it = eina_tiler_iterator_new(state->input);
@@ -1906,7 +1911,7 @@ comp_surface_impl_destroy(struct wl_resource *resource)
if (cs->post_render_queue && (!cs->dead))
{
Eina_List *l;
- Evas_Object *o;
+ Eo *o;
cs->dead = 1;
evas_object_hide(cs->obj);
@@ -1921,8 +1926,6 @@ comp_surface_impl_destroy(struct wl_resource *resource)
}
-static Evas_Smart *comp_surface_smart = NULL;
-
static inline Eina_Bool
comp_surface_check_grab(Comp_Surface *cs, Comp_Seat *s)
{
@@ -2017,7 +2020,7 @@ comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy)
}
static void
-comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_In *ev = event_info;
Comp_Seat *s;
@@ -2071,7 +2074,7 @@ comp_surface_send_pointer_leave(Comp_Surface *cs, Comp_Seat *s)
}
static void
-comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Out *ev = event_info;
Comp_Seat *s;
@@ -2154,7 +2157,7 @@ comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, ui
}
static void
-comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Down *ev = event_info;
Comp_Seat *s;
@@ -2169,7 +2172,7 @@ comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Down *ev = event_info;
Comp_Seat *s;
@@ -2184,7 +2187,7 @@ comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
}
static void
-comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Move *ev = event_info;
Comp_Surface *cs = data;
@@ -2229,7 +2232,7 @@ comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
+comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Eo *obj EINA_UNUSED, void *event)
{
Evas_Event_Mouse_Wheel *ev = event;
Comp_Surface *cs = data;
@@ -2262,7 +2265,7 @@ comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EI
}
static void
-comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Down *ev = event_info;
Comp_Surface *cs = data;
@@ -2296,7 +2299,7 @@ comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Up *ev = event_info;
Comp_Surface *cs = data;
@@ -2335,7 +2338,7 @@ comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
}
static void
-comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Move *ev = event_info;
Comp_Surface *cs = data;
@@ -2375,14 +2378,19 @@ comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
}
-static void
-comp_surface_smart_add(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_surface_efl_object_constructor(Eo *obj, Comp_Surface *cs EINA_UNUSED)
+{
+ efl_canvas_group_clipped_set(obj, EINA_TRUE);
+ return efl_constructor(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
+}
+
+static void
+_efl_canvas_wl_surface_efl_canvas_group_group_add(Eo *obj, Comp_Surface *cs)
{
- Comp_Surface *cs;
Evas *e;
- cs = calloc(1, sizeof(Comp_Surface));
- evas_object_smart_data_set(obj, cs);
+ efl_canvas_group_add(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
cs->obj = obj;
evas_object_event_callback_add(cs->obj, EVAS_CALLBACK_MOUSE_DOWN, comp_surface_mouse_down, cs);
evas_object_event_callback_add(cs->obj, EVAS_CALLBACK_MOUSE_UP, comp_surface_mouse_up, cs);
@@ -2396,19 +2404,17 @@ comp_surface_smart_add(Evas_Object *obj)
e = evas_object_evas_get(obj);
cs->img = evas_object_image_filled_add(e);
evas_object_show(cs->img);
- cs->clip = evas_object_rectangle_add(e);
+ cs->clip = (Eo*)efl_canvas_group_clipper_get(obj);
+ efl_gfx_entity_geometry_set(cs->clip, efl_gfx_entity_geometry_get(obj));
evas_object_smart_member_add(cs->img, cs->obj);
- evas_object_smart_member_add(cs->clip, cs->obj);
evas_object_image_border_center_fill_set(cs->img, EVAS_BORDER_FILL_SOLID);
evas_object_image_colorspace_set(cs->img, EVAS_COLORSPACE_ARGB8888);
}
static void
-comp_surface_smart_del(Evas_Object *obj)
+_efl_canvas_wl_surface_efl_canvas_group_group_del(Eo *obj, Comp_Surface *cs)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
-
array_clear(&cs->input_rects);
array_clear(&cs->opaque_rects);
eina_tiler_free(cs->opaque);
@@ -2422,7 +2428,6 @@ comp_surface_smart_del(Evas_Object *obj)
wl_resource_destroy(cs->res);
}
evas_object_del(cs->img);
- evas_object_del(cs->clip);
if (cs->shell.surface)
{
if (cs->role)
@@ -2431,54 +2436,42 @@ comp_surface_smart_del(Evas_Object *obj)
}
cs->c->surfaces = eina_inlist_remove(cs->c->surfaces, EINA_INLIST_GET(cs));
cs->c->surfaces_count--;
- free(cs);
+ efl_canvas_group_del(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
}
static void
-comp_surface_smart_move(Evas_Object *obj, int x, int y)
+_efl_canvas_wl_surface_efl_gfx_entity_position_set(Eo *obj, Comp_Surface *cs, Eina_Position2D pos)
{
- Eina_List *l;
- Evas_Object *o;
- int px, py, cx, cy;
+ efl_gfx_entity_position_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), pos);
+ efl_gfx_entity_position_set(cs->clip, pos);
- evas_object_geometry_get(obj, &px, &py, NULL, NULL);
//{
- //Comp_Surface *cs = evas_object_smart_data_get(obj);
//if (cs->cursor)
//fprintf(stderr, "COMP %sSURFACE(%p) %d,%d\n", cs->subsurface ? "SUB" : "", cs, x, y);
//}
- l = evas_object_smart_members_get(obj);
- EINA_LIST_FREE(l, o)
- {
- evas_object_geometry_get(o, &cx, &cy, NULL, NULL);
- evas_object_move(o, x + (cx - px), y + (cy - py));
- //fprintf(stderr, "SUBOBJ %d,%d\n", x + (cx - px), y + (cy - py));
- }
}
static void
-comp_surface_smart_resize(Evas_Object *obj, int w, int h)
+_efl_canvas_wl_surface_efl_gfx_entity_size_set(Eo *obj, Comp_Surface *cs, Eina_Size2D sz)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_resize(cs->clip, w, h);
+ efl_gfx_entity_size_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), sz);
+ evas_object_resize(cs->clip, sz.w, sz.h);
//if (cs->cursor) fprintf(stderr, "COMP %sSURFACE(%p) %dx%d\n", cs->subsurface ? "SUB" : "", cs, w, h);
if (cs->drag)
evas_object_move(cs->obj, cs->drag->ptr.pos.x, cs->drag->ptr.pos.y);
}
static void
-comp_surface_smart_show(Evas_Object *obj)
+_efl_canvas_wl_surface_efl_gfx_entity_visible_set(Eo *obj, Comp_Surface *cs, Eina_Bool vis)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_show(cs->clip);
- cs->mapped = 1;
-}
-
-static void
-comp_surface_smart_hide(Evas_Object *obj)
-{
- Comp_Surface *pcs = NULL, *lcs, *cs = evas_object_smart_data_get(obj);
-
+ Comp_Surface *pcs = NULL, *lcs;
+ efl_gfx_entity_visible_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), vis);
+ if (vis)
+ {
+ evas_object_show(cs->clip);
+ cs->mapped = 1;
+ return;
+ }
evas_object_hide(cs->clip);
cs->mapped = 0;
@@ -2515,78 +2508,19 @@ comp_surface_smart_hide(Evas_Object *obj)
comp_seats_redo_enter(cs->c, pcs);
}
-static void
-comp_surface_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_clip_set(cs->clip, clip);
-}
-
-static void
-comp_surface_smart_clip_unset(Evas_Object *obj)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_clip_unset(cs->clip);
-}
-
-static void
-comp_surface_smart_member_add(Evas_Object *obj, Evas_Object *child)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- if (child != cs->clip) evas_object_clip_set(child, cs->clip);
-}
-
-static void
-comp_surface_smart_member_del(Evas_Object *obj, Evas_Object *child)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- if (child != cs->clip) evas_object_clip_unset(child);
-}
-
-static void
-comp_surface_smart_init(void)
-{
- if (comp_surface_smart) return;
- {
- static const Evas_Smart_Class sc =
- {
- "comp_surface",
- EVAS_SMART_CLASS_VERSION,
- comp_surface_smart_add,
- comp_surface_smart_del,
- comp_surface_smart_move,
- comp_surface_smart_resize,
- comp_surface_smart_show,
- comp_surface_smart_hide,
- NULL, //color_set
- comp_surface_smart_clip_set,
- comp_surface_smart_clip_unset,
- NULL,
- comp_surface_smart_member_add,
- comp_surface_smart_member_del,
-
- NULL,
- NULL,
- NULL,
- NULL
- };
- comp_surface_smart = evas_smart_class_new(&sc);
- }
-}
-
static void
comp_surface_create(struct wl_client *client, struct wl_resource *resource, uint32_t id)
{
struct wl_resource *res;
Comp_Surface *cs;
Comp *c = wl_resource_get_user_data(resource);
- Evas_Object *obj;
+ Eo *obj;
int x, y;
res = wl_resource_create(client, &wl_surface_interface, wl_resource_get_version(resource), id);
- comp_surface_smart_init();
- obj = evas_object_smart_add(c->evas, comp_surface_smart);
- cs = evas_object_smart_data_get(obj);
+ obj = efl_add(EFL_CANVAS_WL_SURFACE_CLASS, c->obj);
+ efl_gfx_entity_visible_set(obj, EINA_FALSE);
+ cs = efl_data_scope_get(obj, EFL_CANVAS_WL_SURFACE_CLASS);
cs->res = res;
evas_object_smart_member_add(cs->obj, c->obj);
cs->c = c;
@@ -3164,16 +3098,16 @@ output_resize(Comp *c, struct wl_resource *res)
int rot[][4] =
{
{
- [EFL_WL_ROTATION_0] = WL_OUTPUT_TRANSFORM_NORMAL,
- [EFL_WL_ROTATION_90] = WL_OUTPUT_TRANSFORM_90,
- [EFL_WL_ROTATION_180] = WL_OUTPUT_TRANSFORM_180,
- [EFL_WL_ROTATION_270] = WL_OUTPUT_TRANSFORM_270,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_0] = WL_OUTPUT_TRANSFORM_NORMAL,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_90] = WL_OUTPUT_TRANSFORM_90,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_180] = WL_OUTPUT_TRANSFORM_180,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_270] = WL_OUTPUT_TRANSFORM_270,
},
{
- [EFL_WL_ROTATION_0] = WL_OUTPUT_TRANSFORM_FLIPPED,
- [EFL_WL_ROTATION_90] = WL_OUTPUT_TRANSFORM_FLIPPED_90,
- [EFL_WL_ROTATION_180] = WL_OUTPUT_TRANSFORM_FLIPPED_180,
- [EFL_WL_ROTATION_270] = WL_OUTPUT_TRANSFORM_FLIPPED_270,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_0] = WL_OUTPUT_TRANSFORM_FLIPPED,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_90] = WL_OUTPUT_TRANSFORM_FLIPPED_90,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_180] = WL_OUTPUT_TRANSFORM_FLIPPED_180,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_270] = WL_OUTPUT_TRANSFORM_FLIPPED_270,
},
};
@@ -3240,7 +3174,7 @@ shell_surface_toplevel_set_parent(struct wl_client *client EINA_UNUSED, struct w
comp_surface_reparent(cs, pcs);
if (parent_resource)
- evas_object_smart_callback_call(cs->c->obj, "child_added", cs->obj);
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_CHILD_ADDED, cs->obj);
}
static void
@@ -3334,7 +3268,7 @@ shell_surface_toplevel_create(struct wl_client *client EINA_UNUSED, struct wl_re
cs->role = wl_resource_create(client, &xdg_toplevel_interface, 1, id);
wl_resource_set_implementation(cs->role, &shell_surface_toplevel_interface, cs, shell_surface_toplevel_impl_destroy);
cs->shell.new = 1;
- evas_object_smart_callback_call(cs->c->obj, "toplevel_added", cs->obj);
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_TOPLEVEL_ADDED, cs->obj);
}
static void
@@ -3423,7 +3357,7 @@ shell_surface_popup_create(struct wl_client *client, struct wl_resource *resourc
comp_surface_reparent(cs, wl_resource_get_user_data(parent_resource));
cs->shell.positioner = wl_resource_get_user_data(positioner_resource);
_apply_positioner(cs, cs->shell.positioner);
- evas_object_smart_callback_call(cs->c->obj, "popup_added", cs->obj);
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_POPUP_ADDED, cs->obj);
}
static void
@@ -3894,7 +3828,7 @@ seat_kbd_create(struct wl_client *client, struct wl_resource *resource, uint32_t
}
static void
-seat_ptr_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+seat_ptr_del(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp_Seat *s = data;
@@ -4206,7 +4140,7 @@ comp_render_pre(Comp *c, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
if (cs->opaque_rects && (eina_array_count(cs->opaque_rects) == 1))
{
- Evas_Object *r = eina_array_data_get(cs->opaque_rects, 0);
+ Eo *r = eina_array_data_get(cs->opaque_rects, 0);
int x, y, w, h, ox, oy, ow, oh;
evas_object_geometry_get(cs->img, &x, &y, &w, &h);
@@ -4228,7 +4162,7 @@ comp_render_pre(Comp *c, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
}
static void
-comp_render_pre_proxied(Evas_Object *o, Evas *e, void *event_info)
+comp_render_pre_proxied(Eo *o, Evas *e, void *event_info)
{
Comp_Surface *cs = evas_object_data_get(o, "comp_surface");
Comp_Buffer *buffer = cs->buffer[!cs->render_queue];
@@ -4302,8 +4236,6 @@ comp_render_post(Comp *c, Evas *e, void *event_info EINA_UNUSED)
}
}
-static Evas_Smart *comp_smart = NULL;
-
static void
comp_seat_selection_update(Comp_Seat *s)
{
@@ -4541,7 +4473,7 @@ comp_seats_proxy(Comp *c)
else if (!c->parent_disp)
comp_device_caps_update(s);
s->global = wl_global_create(c->display, &wl_seat_interface, 4, s, seat_bind);
- evas_object_smart_callback_call(s->c->obj, "seat_added", dev);
+ efl_event_callback_call(s->c->obj, EFL_CANVAS_WL_EVENT_SEAT_ADDED, dev);
if (ecore_wl2_display_sync_is_done(c->client_disp))
seat_proxy_update(s);
}
@@ -5081,7 +5013,7 @@ comp_handlers_init(void)
}
static void
-comp_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+comp_focus_in(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp *c = data;
//Efl_Input_Focus_Data *ev = event_info;
@@ -5128,7 +5060,7 @@ comp_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
}
static void
-comp_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+comp_focus_out(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp *c = data;
//Efl_Input_Focus_Data *ev = event_info;
@@ -5143,7 +5075,7 @@ comp_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
}
static void
-comp_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
+comp_mouse_in(void *data, Evas *e, Eo *obj, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_In *ev = event_info;
@@ -5181,7 +5113,7 @@ comp_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
}
static void
-comp_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_multi_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Comp *c = data;
Evas_Event_Multi_Move *ev = event_info;
@@ -5202,7 +5134,7 @@ comp_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-comp_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_Move *ev = event_info;
@@ -5223,7 +5155,7 @@ comp_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-comp_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info)
+comp_mouse_out(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_Out *ev = event_info;
@@ -5337,28 +5269,33 @@ efl_hints_bind(struct wl_client *client, void *data, uint32_t version, uint32_t
wl_resource_set_implementation(res, &hints_interface, data, NULL);
}
-
-
-static void
-comp_smart_add(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_efl_object_constructor(Eo *obj, Comp *c)
+{
+ efl_canvas_group_clipped_set(obj, EINA_TRUE);
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(!ecore_wl2_init(), NULL);
+ return efl_constructor(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_canvas_wl_efl_canvas_group_group_add(Eo *obj, Comp *c)
{
- Comp *c;
char *env, *dbg = NULL;
- c = calloc(1, sizeof(Comp));
+ efl_canvas_group_add(efl_super(obj, MY_CLASS));
c->wayland_time_base = ecore_loop_time_get();
c->obj = obj;
- evas_object_smart_data_set(obj, c);
+ c->flags = EFL_EXE_FLAGS_TERM_WITH_PARENT;
env = getenv("WAYLAND_DISPLAY");
if (env) env = strdup(env);
- if (getenv("EFL_WL_DEBUG"))
+ if (getenv("EFL_CANVAS_WL_DEBUG"))
{
dbg = eina_strdup(getenv("WAYLAND_DEBUG"));
setenv("WAYLAND_DEBUG", "1", 1);
}
c->disp = ecore_wl2_display_create(NULL);
- if (getenv("EFL_WL_DEBUG"))
+ if (getenv("EFL_CANVAS_WL_DEBUG"))
{
if (dbg) setenv("WAYLAND_DEBUG", dbg, 1);
else unsetenv("WAYLAND_DEBUG");
@@ -5369,9 +5306,9 @@ comp_smart_add(Evas_Object *obj)
else unsetenv("WAYLAND_DISPLAY");
c->display = ecore_wl2_display_get(c->disp);
c->client_surfaces = eina_hash_pointer_new(NULL);
- c->evas = evas_object_evas_get(obj);
- c->clip = evas_object_rectangle_add(c->evas);
- evas_object_smart_member_add(c->clip, obj);
+ c->evas = efl_provider_find(obj, EVAS_CANVAS_CLASS);
+ c->clip = (Eo*)efl_canvas_group_clipper_get(obj);
+ efl_gfx_entity_geometry_set(c->clip, efl_gfx_entity_geometry_get(obj));
c->events = evas_object_rectangle_add(c->evas);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_IN, comp_mouse_in, c);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE, comp_mouse_move, c);
@@ -5429,11 +5366,9 @@ comp_smart_add(Evas_Object *obj)
free(env);
}
-static void
-comp_smart_del(Evas_Object *obj)
+EOLIAN static void
+_efl_canvas_wl_efl_canvas_group_group_del(Eo *obj, Comp *c)
{
- Comp *c = evas_object_smart_data_get(obj);
-
evas_object_del(c->clip);
evas_object_del(c->events);
free(c->env);
@@ -5461,10 +5396,8 @@ comp_smart_del(Evas_Object *obj)
evas_event_callback_del_full(c->evas, EVAS_CALLBACK_RENDER_PRE, (Evas_Event_Cb)comp_render_pre, c);
evas_event_callback_del_full(c->evas, EVAS_CALLBACK_RENDER_POST, (Evas_Event_Cb)comp_render_post, c);
efl_event_callback_array_del(c->evas, comp_device_cbs(), c);
- ecore_event_handler_del(c->exe_handler);
eina_hash_free(c->exes);
comps = eina_list_remove(comps, c);
- free(c);
if (!comps)
{
void *h;
@@ -5475,35 +5408,25 @@ comp_smart_del(Evas_Object *obj)
#endif
}
ecore_wl2_shutdown();
+ efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
static void
-comp_smart_move(Evas_Object *obj, int x, int y)
+_efl_canvas_wl_efl_gfx_entity_position_set(Eo *obj, Comp *c, Eina_Position2D pos)
{
- Comp_Surface *cs;
- Comp *c = evas_object_smart_data_get(obj);
- int dx, dy;
- evas_object_geometry_get(obj, &dx, &dy, NULL, NULL);
- dx = x - dx;
- dy = y - dy;
- evas_object_move(c->clip, x, y);
- evas_object_move(c->events, x, y);
- EINA_INLIST_FOREACH(c->surfaces, cs)
- {
- int cx, cy;
- evas_object_geometry_get(cs->obj, &cx, &cy, NULL, NULL);
- evas_object_move(cs->obj, cx + dx, cy + dy);
- }
+ efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
+ efl_gfx_entity_position_set(c->clip, pos);
}
static void
-comp_smart_resize(Evas_Object *obj, int w, int h)
+_efl_canvas_wl_efl_gfx_entity_size_set(Eo *obj, Comp *c, Eina_Size2D sz)
{
- Comp *c = evas_object_smart_data_get(obj);
Eina_List *l;
Comp_Surface *cs;
struct wl_resource *res;
+ int w = sz.w, h = sz.h;
+ efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz);
evas_object_resize(c->clip, w, h);
evas_object_resize(c->events, w, h);
EINA_LIST_FOREACH(c->output_resources, l, res)
@@ -5515,101 +5438,25 @@ comp_smart_resize(Evas_Object *obj, int w, int h)
}
static void
-comp_smart_show(Evas_Object *obj)
+_efl_canvas_wl_efl_gfx_entity_visible_set(Eo *obj, Comp *c, Eina_Bool vis)
{
- Comp *c = evas_object_smart_data_get(obj);
Comp_Surface *cs;
- evas_object_show(c->clip);
+ efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), vis);
EINA_INLIST_FOREACH(c->surfaces, cs)
- comp_surface_output_enter(cs);
+ if (vis)
+ comp_surface_output_enter(cs);
+ else
+ comp_surface_output_leave(cs);
}
static void
-comp_smart_hide(Evas_Object *obj)
-{
- Comp *c = evas_object_smart_data_get(obj);
- Comp_Surface *cs;
-
- evas_object_hide(c->clip);
- EINA_INLIST_FOREACH(c->surfaces, cs)
- comp_surface_output_leave(cs);
-}
-
-static void
-comp_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_color_set(c->clip, r, g, b, a);
-}
-
-static void
-comp_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_clip_set(c->clip, clip);
-}
-
-static void
-comp_smart_clip_unset(Evas_Object *obj)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_clip_unset(c->clip);
-}
-
-static void
-comp_smart_member_add(Evas_Object *obj, Evas_Object *child)
-{
- Comp *c = evas_object_smart_data_get(obj);
- if (child != c->clip) evas_object_clip_set(child, c->clip);
-}
-
-static void
-comp_smart_member_del(Evas_Object *obj, Evas_Object *child)
-{
- Comp *c = evas_object_smart_data_get(obj);
- if (child != c->clip) evas_object_clip_unset(child);
-}
-
-static void
-comp_smart_init(void)
-{
- if (comp_smart) return;
- {
- static const Evas_Smart_Class sc =
- {
- "comp",
- EVAS_SMART_CLASS_VERSION,
- comp_smart_add,
- comp_smart_del,
- comp_smart_move,
- comp_smart_resize,
- comp_smart_show,
- comp_smart_hide,
- comp_smart_color_set,
- comp_smart_clip_set,
- comp_smart_clip_unset,
- NULL,
- comp_smart_member_add,
- comp_smart_member_del,
-
- NULL,
- NULL,
- NULL,
- NULL
- };
- comp_smart = evas_smart_class_new(&sc);
- }
-}
-
-static Eina_Bool
-exe_event_del(void *data, int t EINA_UNUSED, Ecore_Exe_Event_Del *ev)
+exe_event_del(void *data, const Efl_Event *ev)
{
Comp *c = data;
- int32_t pid = ev->pid;
+ int32_t pid = efl_exe_pid_get(ev->object);
eina_hash_del_by_key(c->exes, &pid);
- return ECORE_CALLBACK_RENEW;
}
# ifdef __GNUC__
@@ -5621,7 +5468,7 @@ Eina_Bool
comp_dmabuf_test(struct linux_dmabuf_buffer *dmabuf)
{
Evas_Native_Surface ns;
- Evas_Object *test;
+ Eo *test;
int size;
void *data;
Comp *c = dmabuf->compositor;
@@ -5669,28 +5516,14 @@ comp_dmabuf_modifiers_query(void *compositor EINA_UNUSED, int format EINA_UNUSED
*num_modifiers = 0;
}
-Evas_Object *
-efl_wl_add(Evas *e)
-{
- comp_smart_init();
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!ecore_wl2_init(), NULL);
- return evas_object_smart_add(e, comp_smart);
-}
-
-Ecore_Exe *
-comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
+Eo *
+comp_run(Eo *obj, Comp *c, const char *cmd, Efl_Exe_Flags flags)
{
char *env, *disp, *gl = NULL;
- Comp *c;
- Ecore_Exe *exe;
+ Efl_Exe *exe;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
if (!c->exes)
c->exes = eina_hash_int32_new(NULL);
- if (!c->exe_handler)
- c->exe_handler =
- ecore_event_handler_add(ECORE_EXE_EVENT_DEL, (Ecore_Event_Handler_Cb)exe_event_del, c);
disp = getenv("DISPLAY");
if (disp) disp = strdup(disp);
unsetenv("DISPLAY");
@@ -5703,7 +5536,10 @@ comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
if (gl) gl = strdup(gl);
setenv("ELM_ACCEL", "gl", 1);
}
- exe = ecore_exe_pipe_run(cmd, flags, c);
+ exe = efl_add(EFL_EXE_CLASS, obj,
+ efl_core_command_line_command_string_set(efl_added, cmd),
+ efl_exe_flags_set(efl_added, flags),
+ efl_task_run(efl_added));
if (disp) setenv("DISPLAY", disp, 1);
if (env) setenv("WAYLAND_DISPLAY", env, 1);
else unsetenv("WAYLAND_DISPLAY");
@@ -5717,113 +5553,135 @@ comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
free(disp);
if (exe)
{
- int32_t pid = ecore_exe_pid_get(exe);
+ int32_t pid = efl_exe_pid_get(exe);
eina_hash_add(c->exes, &pid, (void*)1);
+ efl_event_callback_add(exe, EFL_TASK_EVENT_EXIT, exe_event_del, c);
}
return exe;
}
-Ecore_Exe *
-efl_wl_run(Evas_Object *obj, const char *cmd)
+EOLIAN static Efl_Exe *
+_efl_canvas_wl_run(Eo *obj, Comp *c, const char *cmd)
{
- return comp_run(obj, cmd, ECORE_EXE_TERM_WITH_PARENT);
+ return comp_run(obj, c, cmd, EFL_EXE_FLAGS_TERM_WITH_PARENT);
}
-Ecore_Exe *
-efl_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
+EOLIAN static Efl_Exe_Flags
+_efl_canvas_wl_exec_flags_get(const Eo *obj, Comp *c)
{
- return comp_run(obj, cmd, flags);
+ return c->flags;
}
-void
-efl_wl_pid_add(Evas_Object *obj, int32_t pid)
+EOLIAN static void
+_efl_canvas_wl_exec_flags_set(Eo *obj, Comp *c, Efl_Exe_Flags flags)
{
- Comp *c;
+ c->flags = flags;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_allowed_pid_add(Eo *obj, Comp *c, int32_t pid)
+{
if (!c->exes)
c->exes = eina_hash_int32_new(NULL);
eina_hash_add(c->exes, &pid, (void*)1);
}
-void
-efl_wl_pid_del(Evas_Object *obj, int32_t pid)
+EOLIAN static void
+_efl_canvas_wl_allowed_pid_del(Eo *obj, Comp *c, int32_t pid)
{
- Comp *c;
-
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
if (!c->exes) return;
eina_hash_del_by_key(c->exes, &pid);
}
-Eina_Bool
-efl_wl_next(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_surface_next(Eo *obj, Comp *c)
{
- Comp *c;
Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
- if (c->surfaces_count < 2) return EINA_FALSE;
+ if (c->surfaces_count < 2) return NULL;
EINA_INLIST_REVERSE_FOREACH(c->surfaces, cs)
{
if (cs->shell.activated) continue;
if ((!cs->role) || (!cs->shell.surface) || cs->dead) continue;
cs->shell.activated = 1;
shell_surface_send_configure(cs);
- return EINA_TRUE;
+ return cs->obj;
}
- return EINA_FALSE;
+ return NULL;
}
-Eina_Bool
-efl_wl_prev(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_surface_prev(Eo *obj, Comp *c)
{
- Comp *c;
Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
- if (c->surfaces_count < 2) return EINA_FALSE;
+ if (c->surfaces_count < 2) return NULL;
EINA_INLIST_FOREACH(c->surfaces, cs)
{
if (cs->shell.activated) continue;
if ((!cs->role) || (!cs->shell.surface) || cs->dead) continue;
cs->shell.activated = 1;
shell_surface_send_configure(cs);
- return EINA_TRUE;
+ return cs->obj;
}
- return EINA_FALSE;
+ return NULL;
}
-void
-efl_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl)
+EOLIAN static Eo *
+_efl_canvas_wl_active_surface_get(const Eo *obj, Comp *c)
+{
+ if (c->active_surface && (!c->active_surface->dead))
+ return c->active_surface->obj;
+ return NULL;
+}
+
+EOLIAN static Eina_Bool
+_efl_canvas_wl_active_surface_set(Eo *obj, Comp *c, Eo *surface)
+{
+ Comp_Surface *cs = efl_data_scope_get(surface, EFL_CANVAS_WL_SURFACE_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(cs, EINA_FALSE);
+ if (cs->dead) return EINA_FALSE;
+ if (c->active_surface == cs) return EINA_TRUE;
+ /* can't activate a popup */
+ if (cs->shell.popup) return EINA_FALSE;
+ cs->shell.activated = 1;
+ shell_surface_send_configure(cs);
+ return EINA_TRUE;
+}
+
+EOLIAN static void
+_efl_canvas_wl_rotation_get(const Eo *obj EINA_UNUSED, Comp *c, Efl_Canvas_Wl_Rotation *rotation, Eina_Bool *rtl)
+{
+ if (rotation) *rotation = c->rotation;
+ if (rtl) *rtl = c->rtl;
+}
+
+EOLIAN static void
+_efl_canvas_wl_rotation_set(Eo *obj EINA_UNUSED, Comp *c, Efl_Canvas_Wl_Rotation rot, Eina_Bool rtl)
{
- Comp *c;
Eina_List *l;
struct wl_resource *res;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
c->rtl = !!rtl;
c->rotation = rot;
EINA_LIST_FOREACH(c->output_resources, l, res)
output_resize(c, res);
}
-void
-efl_wl_scale_set(Evas_Object *obj, double scale)
+EOLIAN static double
+_efl_canvas_wl_efl_gfx_entity_scale_get(const Eo *obj EINA_UNUSED, Comp *c)
+{
+ return c->scale;
+}
+
+EOLIAN static void
+_efl_canvas_wl_efl_gfx_entity_scale_set(Eo *obj EINA_UNUSED, Comp *c, double scale)
{
- Comp *c;
Eina_List *l;
struct wl_resource *res;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
c->scale = scale;
EINA_LIST_FOREACH(c->output_resources, l, res)
@@ -5831,13 +5689,15 @@ efl_wl_scale_set(Evas_Object *obj, double scale)
wl_output_send_scale(res, lround(c->scale));
}
-void
-efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set)
+EOLIAN static Eina_Bool
+_efl_canvas_wl_aspect_get(const Eo *obj EINA_UNUSED, Comp *c)
{
- Comp *c;
+ return c->aspect;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_aspect_set(Eo *obj, Comp *c, Eina_Bool set)
+{
if (c->aspect == (!!set)) return;
c->aspect = !!set;
if (c->aspect)
@@ -5846,13 +5706,15 @@ efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set)
evas_object_size_hint_aspect_set(obj, EVAS_ASPECT_CONTROL_NONE, 0, 0);
}
-void
-efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set)
+EOLIAN static Eina_Bool
+_efl_canvas_wl_minmax_get(const Eo *obj EINA_UNUSED, Comp *c)
{
- Comp *c;
+ return c->minmax;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_minmax_set(Eo *obj, Comp *c, Eina_Bool set)
+{
if (c->minmax == (!!set)) return;
c->minmax = !!set;
if (c->minmax)
@@ -5864,19 +5726,15 @@ efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set)
}
}
-void *
-efl_wl_global_add(Evas_Object *obj, const void *interface, uint32_t version, void *data, void *bind_cb)
+EOLIAN static Efl_Canvas_Wl_Wl_Global *
+_efl_canvas_wl_global_add(Eo *obj, Comp *c, const Efl_Canvas_Wl_Wl_Interface *interface, uint32_t version, Efl_Canvas_Wl_Wl_Interface_Data *data, Efl_Canvas_Wl_Wl_Interface_Bind_Cb *bind_cb)
{
- Comp *c;
-
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
- c = evas_object_smart_data_get(obj);
- return wl_global_create(c->display, interface, version, data, bind_cb);
+ return (void*)wl_global_create(c->display, (void*)interface, version, (void*)data, (void*)bind_cb);
}
static void
-extracted_focus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+extracted_focus(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
@@ -5890,10 +5748,10 @@ extracted_focus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-extracted_unfocus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+extracted_unfocus(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
- Evas_Object *focus;
+ Eo *focus;
if (cs->dead) return;
focus = evas_focus_get(cs->c->evas);
@@ -5903,7 +5761,7 @@ extracted_unfocus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event
}
static void
-extracted_changed(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+extracted_changed(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
@@ -5911,24 +5769,18 @@ extracted_changed(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event
shell_surface_send_configure(data);
}
-int32_t
-efl_wl_surface_pid_get(Evas_Object *surface)
+static EOLIAN int32_t
+_efl_canvas_wl_surface_pid_get(const Eo *surface, Comp_Surface *cs)
{
- Comp_Surface *cs;
int32_t pid;
- if (!eina_streq(evas_object_type_get(surface), "comp_surface")) abort();
- cs = evas_object_smart_data_get(surface);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, -1);
wl_client_get_credentials(wl_resource_get_client(cs->res), &pid, NULL, NULL);
return pid;
}
-Eina_Bool
-efl_wl_surface_extract(Evas_Object *surface)
+static EOLIAN Eina_Bool
+_efl_canvas_wl_surface_extract(Eo *surface, Comp_Surface *cs)
{
- Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(surface), "comp_surface")) abort();
- cs = evas_object_smart_data_get(surface);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->extracted, EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, EINA_FALSE);
cs->extracted = 1;
@@ -5940,8 +5792,8 @@ efl_wl_surface_extract(Evas_Object *surface)
return EINA_TRUE;
}
-Evas_Object *
-efl_wl_extracted_surface_object_find(void *surface_resource)
+Eo *
+efl_canvas_wl_extracted_surface_object_find(void *surface_resource)
{
Comp_Surface *cs = wl_resource_get_user_data(surface_resource);
@@ -5952,45 +5804,39 @@ efl_wl_extracted_surface_object_find(void *surface_resource)
return cs->obj;
}
-Evas_Object *
-efl_wl_extracted_surface_extracted_parent_get(Evas_Object *surface)
+static EOLIAN Eo *
+_efl_canvas_wl_surface_parent_surface_get(const Eo *surface, Comp_Surface *cs)
{
- Comp_Surface *cs;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(surface, NULL);
- if (!eina_streq(evas_object_type_get(surface), "comp_surface")) abort();
-
- cs = evas_object_smart_data_get(surface);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!cs->extracted, NULL);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, NULL);
- if (cs->parent)
- {
- if (!cs->parent->extracted) return NULL;
- return cs->parent->obj;
- }
+ if (cs->parent && cs->role) return cs->parent->obj;
return NULL;
}
-void
-efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void *key_array)
+static EOLIAN Eina_Bool
+_efl_canvas_wl_surface_extracted_get(const Eo *surface EINA_UNUSED, Comp_Surface *cs)
+{
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, EINA_FALSE);
+
+ return cs->extracted;
+}
+
+static EOLIAN void
+_efl_canvas_wl_seat_keymap_set(Eo *obj, Comp *c, Eo *seat, Efl_Canvas_Wl_Xkb_State *state, const char *str, Efl_Canvas_Wl_Wl_Array *key_array)
{
- Comp *c;
Comp_Seat *s;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
EINA_INLIST_FOREACH(c->seats, s)
{
- if (!seat) efl_wl_seat_keymap_set(obj, s->dev, state, str, key_array);
+ if (!seat) efl_canvas_wl_seat_keymap_set(obj, s->dev, state, str, key_array);
else if (s->dev == seat) break;
}
if (!seat) return;
EINA_SAFETY_ON_NULL_RETURN(s);
seat_kbd_destroy(s);
s->kbd.external = 1;
- s->kbd.keys_external = key_array;
- s->kbd.state = state;
+ s->kbd.keys_external = (void*)key_array;
+ s->kbd.state = (void*)state;
s->kbd.keymap_str = str;
if (str)
s->kbd.keymap_str_size = strlen(str) + 1;
@@ -6002,17 +5848,14 @@ efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void
seat_kbd_external_init(s);
}
-void
-efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repeat_delay)
+static EOLIAN void
+_efl_canvas_wl_seat_key_repeat_set(Eo *obj, Comp *c, Eo *seat, int repeat_rate, int repeat_delay)
{
- Comp *c;
Comp_Seat *s;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
EINA_INLIST_FOREACH(c->seats, s)
{
- if (!seat) efl_wl_seat_key_repeat_set(obj, s->dev, repeat_rate, repeat_delay);
+ if (!seat) efl_canvas_wl_seat_key_repeat_set(obj, s->dev, repeat_rate, repeat_delay);
else if (s->dev == seat) break;
}
if (!seat) return;
@@ -6021,3 +5864,12 @@ efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repe
s->kbd.repeat_delay = repeat_delay;
seat_kbd_repeat_rate_send(s);
}
+
+#define EFL_CANVAS_WL_EXTRA_OPS \
+ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_canvas_wl), \
+
+#define EFL_CANVAS_WL_SURFACE_EXTRA_OPS \
+ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_canvas_wl_surface), \
+
+#include "efl_canvas_wl.eo.c"
+#include "efl_canvas_wl_surface.eo.c"
diff --git a/src/lib/efl_canvas_wl/efl_canvas_wl.eo b/src/lib/efl_canvas_wl/efl_canvas_wl.eo
new file mode 100644
index 0000000000..9924ce9a1f
--- /dev/null
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl.eo
@@ -0,0 +1,123 @@
+import efl_exe;
+import efl_input_device;
+import efl_canvas_wl_surface;
+
+struct @beta @extern Efl.Canvas.Wl_Wl_Surface; [[ struct wl_surface. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Global; [[ struct wl_global. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface; [[ A libwayland callback interface struct. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface_Data; [[ A data pointer to send with the bind callback. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface_Bind_Cb; [[ A callback with the type (*void)(struct wl_client *client, void *data, uint32_t version, uint32_t id). @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Xkb_State; [[ struct xkb_state. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Array; [[ struct wl_array. @since 1.24 ]]
+
+
+enum @beta Efl.Canvas.Wl.Rotation
+{
+ [[Orientation of the internal compositor object in degrees. These values are COUNTER-CLOCKWISE.
+ ]]
+ rotate_0 = 0,
+ rotate_90 = 1,
+ rotate_180 = 2,
+ rotate_270 = 3
+}
+
+class @beta Efl.Canvas.Wl extends Efl.Canvas.Group
+{
+ [[
+ @since 1.24
+ ]]
+ data: Comp;
+ methods {
+ run {
+ [[This runs a command in the compositor using the @Efl.Exe_Flags.term_with_parent flag.
+ ]]
+ params {
+ cmd: string;
+ }
+ return: Efl.Exe;
+ }
+ @property exec_flags {
+ values {
+ flags: Efl.Exe_Flags;
+ }
+ }
+ allowed_pid_add {
+ params {
+ pid: int;
+ }
+ }
+ allowed_pid_del {
+ params {
+ pid: int;
+ }
+ }
+ surface_next {
+ return: Efl.Canvas.Wl.Surface;
+ }
+ surface_prev {
+ return: Efl.Canvas.Wl.Surface;
+ }
+ @property active_surface {
+ get {}
+ set {
+ return: bool;
+ }
+ values {
+ surface: Efl.Canvas.Wl.Surface;
+ }
+ }
+ @property aspect {
+ values {
+ set: bool;
+ }
+ }
+ @property minmax {
+ values {
+ set: bool;
+ }
+ }
+ @property rotation {
+ values {
+ rotation: Efl.Canvas.Wl.Rotation;
+ rtl: bool;
+ }
+ }
+ global_add {
+ params {
+ interface: const(Efl.Canvas.Wl_Wl_Interface) @by_ref;
+ version: uint;
+ data: Efl.Canvas.Wl_Wl_Interface_Data @by_ref;
+ bind_cb: Efl.Canvas.Wl_Wl_Interface_Bind_Cb @by_ref;
+ }
+ return: Efl.Canvas.Wl_Wl_Global @by_ref;
+ }
+ seat_keymap_set {
+ params {
+ seat: Efl.Input.Device;
+ state: Efl.Canvas.Wl_Xkb_State @by_ref;
+ keymap_str: string;
+ key_array: Efl.Canvas.Wl_Wl_Array @by_ref;
+ }
+ }
+ seat_key_repeat_set {
+ params {
+ seat: Efl.Input.Device;
+ repeat_rate: int;
+ repeat_delay: int;
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Gfx.Entity.visible { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.Entity.position { set; }
+ Efl.Gfx.Entity.scale { get; set; }
+ }
+ events {
+ toplevel,added: Efl.Canvas.Wl.Surface; [[]]
+ child,added: Efl.Canvas.Wl.Surface; [[]]
+ popup,added: Efl.Canvas.Wl.Surface; [[]]
+ seat,added: Efl.Input.Device; [[The seat object added.]]
+ }
+}
diff --git a/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo b/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo
new file mode 100644
index 0000000000..f2a351becc
--- /dev/null
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo
@@ -0,0 +1,34 @@
+class @beta Efl.Canvas.Wl.Surface extends Efl.Canvas.Group
+{
+ [[@since 1.24]]
+ data: Comp_Surface;
+ methods {
+ extract {
+ return: bool;
+ }
+ @property pid {
+ get {}
+ values {
+ pid: int;
+ }
+ }
+ @property parent_surface {
+ get {}
+ values {
+ parent: Efl.Canvas.Wl.Surface;
+ }
+ }
+ @property extracted {
+ get {}
+ values {
+ extracted: bool;
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Gfx.Entity.visible { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.Entity.position { set; }
+ }
+}
diff --git a/src/lib/efl_canvas_wl/meson.build b/src/lib/efl_canvas_wl/meson.build
new file mode 100644
index 0000000000..d021975844
--- /dev/null
+++ b/src/lib/efl_canvas_wl/meson.build
@@ -0,0 +1,60 @@
+efl_canvas_wl_deps = [ecore_wl2, ecore_input, ecore, ecore_evas, evas, emile, eina]
+efl_canvas_wl_pub_deps = [eo, efl, evas, dependency('wayland-server', version : '>= 1.11.0'), dependency('xkbcommon', version : '>= 0.6.0')]
+
+if (get_option('x11'))
+ efl_canvas_wl_deps += [ecore_x]
+ efl_canvas_wl_pub_deps += [dependency('xkbcommon-x11')]
+endif
+
+pub_eo_files = [
+ 'efl_canvas_wl.eo',
+ 'efl_canvas_wl_surface.eo',
+]
+
+foreach eo_file : pub_eo_files
+ pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
+ input : eo_file,
+ output : [eo_file + '.h'],
+ depfile : eo_file + '.d',
+ install : true,
+ install_dir : dir_package_include,
+ command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
+ '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
+ '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
+ '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-gchd', '@INPUT@'])
+endforeach
+
+efl_canvas_wl_src = [
+ 'dmabuf.c',
+ 'efl_canvas_wl.c',
+]
+efl_canvas_wl_header_src = ['Efl_Canvas_Wl.h']
+eolian_include_directories += ['-I', meson.current_source_dir()]
+
+efl_canvas_wl_lib = library('efl_canvas_wl',
+ efl_canvas_wl_src, pub_eo_file_target,
+ dependencies: [m, dl] + efl_canvas_wl_deps + efl_canvas_wl_pub_deps,
+ include_directories : config_dir + [include_directories(join_paths('..','..'))],
+ install: true,
+ c_args : package_c_args,
+ version : meson.project_version()
+)
+
+efl_canvas_wl = declare_dependency(
+ include_directories: [include_directories('.')],
+ link_with: efl_canvas_wl_lib,
+ sources: pub_eo_file_target,
+ dependencies: efl_canvas_wl_pub_deps,
+)
+
+install_headers(efl_canvas_wl_header_src,
+ install_dir : dir_package_include,
+)
+
+eolian_efl_canvas_wl_dir = join_paths(eolian_include_dir, package_version_name)
+if get_option('install-eo-files')
+ install_data(pub_eo_files,
+ install_dir: eolian_efl_canvas_wl_dir
+ )
+endif
diff --git a/src/lib/efl_wl/x11.x b/src/lib/efl_canvas_wl/x11.x
similarity index 100%
rename from src/lib/efl_wl/x11.x
rename to src/lib/efl_canvas_wl/x11.x
diff --git a/src/lib/efl_wl/meson.build b/src/lib/efl_wl/meson.build
deleted file mode 100644
index 35f20ec404..0000000000
--- a/src/lib/efl_wl/meson.build
+++ /dev/null
@@ -1,32 +0,0 @@
-efl_wl_deps = [ecore_wl2, ecore_input, ecore, ecore_evas, evas, emile, eo, efl, eina]
-efl_wl_pub_deps = [evas, dependency('wayland-server', version : '>= 1.11.0'), dependency('xkbcommon', version : '>= 0.6.0')]
-
-if (get_option('x11'))
- efl_wl_deps += [ecore_x]
- efl_wl_pub_deps += [dependency('xkbcommon-x11')]
-endif
-
-efl_wl_src = [
- 'dmabuf.c',
- 'efl_wl.c'
-]
-efl_wl_header_src = ['Efl_Wl.h']
-
-
-efl_wl_lib = library('efl_wl',
- efl_wl_src,
- dependencies: [m, dl] + efl_wl_deps + efl_wl_pub_deps,
- include_directories : config_dir + [include_directories(join_paths('..','..'))],
- install: true,
- version : meson.project_version()
-)
-
-efl_wl = declare_dependency(
- include_directories: [include_directories('.')],
- link_with: efl_wl_lib,
- dependencies: efl_wl_pub_deps,
-)
-
-install_headers(efl_wl_header_src,
- install_dir : dir_package_include,
-)
diff --git a/src/lib/eina/eina_abstract_content.c b/src/lib/eina/eina_abstract_content.c
index 65ea170ad4..a9899cecfe 100644
--- a/src/lib/eina/eina_abstract_content.c
+++ b/src/lib/eina/eina_abstract_content.c
@@ -140,8 +140,11 @@ eina_content_new(Eina_Slice data, const char *type)
return content;
err:
- free(content->data.mem);
- content->data.mem = NULL;
+ if (content->data.mem)
+ {
+ free(content->data.mem);
+ content->data.mem = NULL;
+ }
free(content);
return NULL;
}
diff --git a/src/lib/eina/eina_log.c b/src/lib/eina/eina_log.c
index 81be34a1b2..7c66ee0b53 100644
--- a/src/lib/eina/eina_log.c
+++ b/src/lib/eina/eina_log.c
@@ -127,7 +127,7 @@ static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL;
# ifndef EINA_LOG_BACKTRACE_ENABLE
static int _backtrace_level = -1;
# else
-static int _backtrace_level = 1;
+static int _backtrace_level = EINA_LOG_LEVEL_ERR;
# endif
#endif
diff --git a/src/lib/eina/eina_value.h b/src/lib/eina/eina_value.h
index faca4bfde1..89793992e7 100644
--- a/src/lib/eina/eina_value.h
+++ b/src/lib/eina/eina_value.h
@@ -3256,7 +3256,7 @@ static inline Eina_Bool eina_value_struct_setup(Eina_Value *value,
*
* @param[in] value Value object
* @return structure description, with all members and size.
- * on failure, #NULL is returned.
+ * on failure, @c NULL is returned.
*
* @since 1.21
*/
@@ -3706,7 +3706,7 @@ EAPI const char *eina_value_type_name_get(const Eina_Value_Type *type) EINA_PURE
* @param[in] type Type reference.
* @return #EINA_TRUE if valid, #EINA_FALSE otherwise.
*
- * A type is invalid if it's NULL or if version field is not the same
+ * A type is invalid if it's @c NULL or if version field is not the same
* as runtime #EINA_VALUE_TYPE_VERSION.
*
* @since 1.2
diff --git a/src/lib/eina/meson.build b/src/lib/eina/meson.build
index d3d30fcf43..003dc6b3b4 100644
--- a/src/lib/eina/meson.build
+++ b/src/lib/eina/meson.build
@@ -357,6 +357,7 @@ unwind = dependency('libunwind-generic', required: false)
if unwind.found()
config_h.set('HAVE_UNWIND', 1)
eina_deps += unwind
+ config_h.set('EINA_LOG_BACKTRACE_ENABLE', 1)
endif
#for the case that the iconv library is not part of libc but rather libiconv or smth. like that
diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c
index 8569735005..cc1f8e93a0 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -576,6 +576,7 @@ _efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
Eina_Error theme_apply_ret, theme_apply_internal_ret;
Elm_Widget_Smart_Data *wd = NULL;
char buf[64];
+ Eina_Bool legacy;
static unsigned int version = 0;
sd->needs_theme_apply = EINA_FALSE;
@@ -591,9 +592,10 @@ _efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
(theme_apply_internal_ret == EFL_UI_THEME_APPLY_ERROR_DEFAULT))
return EFL_UI_THEME_APPLY_ERROR_DEFAULT;
+ legacy = elm_widget_is_legacy(obj);
/* unset existing size hints to force accurate recalc */
efl_gfx_hint_size_restricted_min_set(obj, EINA_SIZE2D(0, 0));
- if (elm_widget_is_legacy(obj))
+ if (legacy)
efl_gfx_hint_size_min_set(obj, EINA_SIZE2D(0, 0));
else
{
@@ -623,6 +625,7 @@ _efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
}
if (sd->deferred_signals)
_deferred_signals_emit(sd);
+ if (legacy) return EFL_UI_THEME_APPLY_ERROR_NONE;
if (!version)
{
diff --git a/src/lib/elementary/efl_ui_textbox.c b/src/lib/elementary/efl_ui_textbox.c
index 11f79b23fd..17cd36fd4a 100644
--- a/src/lib/elementary/efl_ui_textbox.c
+++ b/src/lib/elementary/efl_ui_textbox.c
@@ -3233,6 +3233,148 @@ _efl_ui_textbox_item_factory_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data
return pd->item_factory;
}
+/*Efl.Ui.Scrollable*/
+EOLIAN static Eina_Size2D
+_efl_ui_textbox_efl_ui_scrollable_content_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_SIZE2D(0, 0));
+ return efl_ui_scrollable_content_size_get(sd->scroller);
+}
+
+EOLIAN static Eina_Rect
+_efl_ui_textbox_efl_ui_scrollable_viewport_geometry_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_RECT_EMPTY());
+ return efl_ui_scrollable_viewport_geometry_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_match_content_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool w, Eina_Bool h)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ return efl_ui_scrollable_match_content_set(sd->scroller, !!w, !!h);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_step_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Position2D step)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_step_size_set(sd->scroller, step);
+}
+
+EOLIAN static Eina_Position2D
+_efl_ui_textbox_efl_ui_scrollable_step_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_POSITION2D(0, 0));
+ return efl_ui_scrollable_step_size_get(sd->scroller);
+}
+
+EOLIAN static Eina_Position2D
+_efl_ui_textbox_efl_ui_scrollable_content_pos_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_POSITION2D(0, 0));
+ return efl_ui_scrollable_content_pos_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_content_pos_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Position2D pos)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_content_pos_set(sd->scroller, pos);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_textbox_efl_ui_scrollable_scroll_hold_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_FALSE);
+ return efl_ui_scrollable_scroll_hold_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll_hold_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool hold)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll_hold_set(sd->scroller, !!hold);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_textbox_efl_ui_scrollable_scroll_freeze_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_FALSE);
+ return efl_ui_scrollable_scroll_freeze_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll_freeze_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool freeze)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll_freeze_set(sd->scroller, !!freeze);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_bounce_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool horiz, Eina_Bool vert)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_bounce_enabled_set(sd->scroller, !!horiz, !!vert);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_bounce_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool *horiz, Eina_Bool *vert)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_bounce_enabled_get(sd->scroller, horiz, vert);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Rect rect, Eina_Bool animation)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll(sd->scroller, rect, animation);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_gravity_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, double *x, double *y)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_gravity_get(sd->scroller, x, y);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_gravity_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, double x, double y)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_gravity_set(sd->scroller, x, y);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_movement_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Efl_Ui_Layout_Orientation block)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_movement_block_set(sd->scroller, block);
+}
+
+EOLIAN static Efl_Ui_Layout_Orientation
+_efl_ui_textbox_efl_ui_scrollable_movement_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
+ return efl_ui_scrollable_movement_block_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_looping_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool loop_h, Eina_Bool loop_v)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_looping_set(sd->scroller, !!loop_h, !!loop_v);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_looping_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool *loop_h, Eina_Bool *loop_v)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_looping_get(sd->scroller, loop_h, loop_v);
+}
+
/* Efl.Part begin */
static Eina_Bool
diff --git a/src/lib/elementary/efl_ui_textbox.eo b/src/lib/elementary/efl_ui_textbox.eo
index 2605c477a3..f82908a0dc 100644
--- a/src/lib/elementary/efl_ui_textbox.eo
+++ b/src/lib/elementary/efl_ui_textbox.eo
@@ -11,7 +11,7 @@ enum @beta Efl.Ui.Textbox_Cnp_Content {
}
class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Clickable,
- Efl.Access.Text, Efl.Access.Editable.Text
+ Efl.Access.Text, Efl.Access.Editable.Text, Efl.Ui.Scrollable
composites
Efl.Text_Interactive, Efl.Text_Markup, Efl.Input_Text
{
@@ -24,7 +24,11 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
[[Enable or disable scrolling in the widget.
When scrolling is enabled scrollbars will appear if the text does
- not fit the widget size.]]
+ not fit the widget size.
+
+ Direct control of the scroll through the @Efl.Ui.Scrollable interface
+ is only possible when this property is enabled.
+ ]]
set {}
get {}
values {
@@ -133,6 +137,18 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
Efl.Access.Editable.Text.paste;
Efl.Text_Interactive.editable { set; }
Efl.Part.part_get;
+ Efl.Ui.Scrollable.content_pos { set; get; }
+ Efl.Ui.Scrollable.content_size{ get; }
+ Efl.Ui.Scrollable.viewport_geometry{ get; }
+ Efl.Ui.Scrollable.bounce_enabled { set; get; }
+ Efl.Ui.Scrollable.scroll_freeze { get; set; }
+ Efl.Ui.Scrollable.scroll_hold { get; set; }
+ Efl.Ui.Scrollable.looping { get; set; }
+ Efl.Ui.Scrollable.movement_block { get; set; }
+ Efl.Ui.Scrollable.gravity { get; set; }
+ Efl.Ui.Scrollable.match_content { set; }
+ Efl.Ui.Scrollable.step_size { set; get; }
+ Efl.Ui.Scrollable.scroll;
}
events {
selection,paste: void; [[Called when selection is pasted.]]
diff --git a/src/lib/elementary/elm_diskselector.h b/src/lib/elementary/elm_diskselector.h
index a6b40fb984..c8418263e2 100644
--- a/src/lib/elementary/elm_diskselector.h
+++ b/src/lib/elementary/elm_diskselector.h
@@ -15,7 +15,7 @@
* It can act like a circular list with round mode and labels can be
* reduced for a defined length for side items.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for diskselectors.
*
diff --git a/src/lib/elementary/elm_entry.h b/src/lib/elementary/elm_entry.h
index ba41964082..3e187b93cd 100644
--- a/src/lib/elementary/elm_entry.h
+++ b/src/lib/elementary/elm_entry.h
@@ -30,7 +30,7 @@
* This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for entry objects (since 1.8).
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base
* @ref Elm_Scroller widget also work for entries (since 1.8).
*
diff --git a/src/lib/elementary/elm_gengrid.h b/src/lib/elementary/elm_gengrid.h
index 9485b7781e..0e781fa584 100644
--- a/src/lib/elementary/elm_gengrid.h
+++ b/src/lib/elementary/elm_gengrid.h
@@ -19,7 +19,7 @@
* This widget inherits from the @ref Layout one, so that all the
* functions acting on it also work for gengrid objects.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for gengrids.
*
diff --git a/src/lib/elementary/elm_genlist.h b/src/lib/elementary/elm_genlist.h
index e060a685e7..8a1691c0d9 100644
--- a/src/lib/elementary/elm_genlist.h
+++ b/src/lib/elementary/elm_genlist.h
@@ -22,7 +22,7 @@
* This widget inherits from the @ref Layout one, so that all the
* functions acting on it also work for genlist objects.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for genlists.
*
diff --git a/src/lib/elementary/elm_list.h b/src/lib/elementary/elm_list.h
index 72f5a1084f..07147b4cf7 100644
--- a/src/lib/elementary/elm_list.h
+++ b/src/lib/elementary/elm_list.h
@@ -75,7 +75,7 @@
* @li @ref elm_object_item_del
* @li @ref elm_object_item_signal_emit
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for lists.
*
diff --git a/src/lib/elementary/elm_map.h b/src/lib/elementary/elm_map.h
index bf257309ef..011e84182f 100644
--- a/src/lib/elementary/elm_map.h
+++ b/src/lib/elementary/elm_map.h
@@ -18,7 +18,7 @@
* @li group of markers and
* @li routes.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for map objects.
*
diff --git a/src/lib/elementary/elm_photocam.h b/src/lib/elementary/elm_photocam.h
index 7286366711..a1ad4fd2d0 100644
--- a/src/lib/elementary/elm_photocam.h
+++ b/src/lib/elementary/elm_photocam.h
@@ -42,7 +42,7 @@
* @li @c "focused" - When the photocam has received focus. (since 1.8)
* @li @c "unfocused" - When the photocam has lost focus. (since 1.8)
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for photocam objects.
*
diff --git a/src/lib/elementary/elm_toolbar.h b/src/lib/elementary/elm_toolbar.h
index 5dcfaa838f..fc88da16ad 100644
--- a/src/lib/elementary/elm_toolbar.h
+++ b/src/lib/elementary/elm_toolbar.h
@@ -19,7 +19,7 @@
*
* Items can have multiple states, or show menus when selected by the user.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base
* @ref Scroller widget also work for toolbars (since 1.8)
*
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape.c b/src/lib/evas/canvas/efl_canvas_vg_shape.c
index 5ddff89350..cf220821d6 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape.c
@@ -402,7 +402,7 @@ evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y)
EAPI void
evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1)
{
- efl_gfx_path_append_cubic_to(obj, x, y, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1);
+ efl_gfx_path_append_cubic_to(obj, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1, x, y);
efl_canvas_vg_node_change(obj);
}
diff --git a/src/lib/evas/canvas/evas_canvas_eo.h b/src/lib/evas/canvas/evas_canvas_eo.h
index 938d59fcee..74cd5ef05c 100644
--- a/src/lib/evas/canvas/evas_canvas_eo.h
+++ b/src/lib/evas/canvas/evas_canvas_eo.h
@@ -808,7 +808,7 @@ EOAPI int evas_canvas_coord_world_x_to_screen(const Eo *obj, int x) EINA_WARN_UN
* @param[in] obj The object.
*
* @return A newly allocated list of updated rectangles of the canvas
- * (@Eina.Rect structs). Free this list with @ref evas_render_updates_free.
+ * (@ref Eina_Rect structs). Free this list with @ref evas_render_updates_free.
*
* @ingroup Evas_Canvas
*/
diff --git a/src/lib/evas/canvas/evas_object_box.c b/src/lib/evas/canvas/evas_object_box.c
index 7853ee3e10..e591bae0e5 100644
--- a/src/lib/evas/canvas/evas_object_box.c
+++ b/src/lib/evas/canvas/evas_object_box.c
@@ -445,7 +445,9 @@ _evas_box_efl_gfx_entity_position_set(Eo *o, Evas_Object_Box_Data *_pd EINA_UNUS
if (_evas_object_intercept_call(o, EVAS_OBJECT_INTERCEPT_CB_MOVE , 0, pos.x, pos.y))
return;
- efl_gfx_entity_position_set(cso->clipper, pos);
+ if (!evas_object_static_clip_get(cso->clipper))
+ efl_gfx_entity_position_set(cso->clipper, pos);
+
/* this skips the call to _evas_object_smart_clipped_smart_move_internal
* since box internals will automatically recalc all the child positions
* at a later point
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index c8c7e12f92..b52f97cf01 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -557,24 +557,24 @@ static void evas_object_textblock_render(Evas_Object *eo_obj,
int x, int y, Eina_Bool do_async);
static void evas_object_textblock_free(Evas_Object *eo_obj);
static void evas_object_textblock_render_pre(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void evas_object_textblock_render_post(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static Evas_Object_Textblock_Node_Text *_evas_textblock_node_text_new(void);
static void *evas_object_textblock_engine_data_get(Evas_Object *eo_obj);
static int evas_object_textblock_is_opaque(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static int evas_object_textblock_was_opaque(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void evas_object_textblock_coords_recalc(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void _canvas_text_format_changed(Eo *eo_obj, Efl_Canvas_Textblock_Data *o);
static const Evas_Object_Func object_func =
@@ -6350,7 +6350,7 @@ _layout_handle_ellipsis(Ctxt *c, Evas_Object_Textblock_Item *it, Eina_List *i)
/* Don't do much for the meanwhile. */
static inline void
_layout_paragraph_render(Efl_Canvas_Textblock_Data *o,
- Evas_Object_Textblock_Paragraph *par)
+ Evas_Object_Textblock_Paragraph *par)
{
if (par->rendered)
return;
@@ -14504,7 +14504,7 @@ evas_object_textblock_init(Evas_Object *eo_obj)
linebreak_init = EINA_TRUE;
init_linebreak();
init_wordbreak();
- init_graphemebreak();
+ init_graphemebreak();
}
o = obj->private_data;
@@ -15762,8 +15762,8 @@ evas_object_textblock_coords_recalc(Evas_Object *eo_obj,
static void
evas_object_textblock_render_pre(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data)
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data)
{
Efl_Canvas_Textblock_Data *o = type_private_data;
ASYNC_BLOCK;
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c
index 3d478a429b..53179ec5bc 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -379,6 +379,9 @@ _evas_proxy_redraw_set(Evas_Public_Data *e, Evas_Object_Protected_Data *obj,
if (render)
{
+ /* Not good... but make it sure if the proxies have missed at update
+ if its sources are remained changed as pending objects in the prev frame. */
+ evas_object_change(eo_proxy, proxy);
proxy->func->render_pre(eo_proxy, proxy, proxy->private_data);
_evas_render_prev_cur_clip_cache_add(e, proxy);
}
diff --git a/src/lib/evas/filters/evas_filter_parser.c b/src/lib/evas/filters/evas_filter_parser.c
index 38d68224d9..eaf39119a8 100644
--- a/src/lib/evas/filters/evas_filter_parser.c
+++ b/src/lib/evas/filters/evas_filter_parser.c
@@ -60,7 +60,7 @@
as possible.
Note: Lua has been used since 1.10. The previous filters syntax is not
- garanteed to be compatible with 1.10 and newer versions.
+ guaranteed to be compatible with 1.10 and newer versions.
Here are the available commands:
@@ -136,28 +136,28 @@
will be opaque (alpha = @c 0xFF), unless R=G=B=0 (invisible).
These colors are not premultiplied.
- - Hexademical values: @c '#RRGGBB', @c '#RRGGBBAA', @c '#RGB', @c '#RGBA'
+ - Hexadecimal values: @c '\#RRGGBB', @c '\#RRGGBBAA', @c '\#RGB', @c '\#RGBA'
- The following string values are also accepted:
- - 'white' == '#FFFFFF'
- - 'black' == '#000000'
- - 'red' == '#FF0000'
- - 'green' == '#008000'
- - 'blue' == '#0000FF'
- - 'darkblue' == '#0000A0'
- - 'yellow' == '#FFFF00'
- - 'magenta' == '#FF00FF'
- - 'cyan' == '#00FFFF'
- - 'orange' == '#FFA500'
- - 'purple' == '#800080'
- - 'brown' == '#A52A2A'
- - 'maroon' == '#800000'
- - 'lime' == '#00FF00'
- - 'gray' == '#808080'
- - 'grey' == '#808080'
- - 'silver' == '#C0C0C0'
- - 'olive' == '#808000'
- - 'invisible', 'transparent' == '#0000' -- (alpha is zero)
+ - 'white' == '\#FFFFFF'
+ - 'black' == '\#000000'
+ - 'red' == '\#FF0000'
+ - 'green' == '\#008000'
+ - 'blue' == '\#0000FF'
+ - 'darkblue' == '\#0000A0'
+ - 'yellow' == '\#FFFF00'
+ - 'magenta' == '\#FF00FF'
+ - 'cyan' == '\#00FFFF'
+ - 'orange' == '\#FFA500'
+ - 'purple' == '\#800080'
+ - 'brown' == '\#A52A2A'
+ - 'maroon' == '\#800000'
+ - 'lime' == '\#00FF00'
+ - 'gray' == '\#808080'
+ - 'grey' == '\#808080'
+ - 'silver' == '\#C0C0C0'
+ - 'olive' == '\#808000'
+ - 'invisible', 'transparent' == '\#0000' -- (alpha is zero)
@c fillmode
@@ -1173,7 +1173,7 @@ _blur_instruction_prepare(Evas_Filter_Program *pgm, Evas_Filter_Instruction *ins
@param src Source buffer. This should be an alpha buffer.
@param dst Destination buffer. This should be an RGBA buffer (although alpha is supported). Must be of the same size as @a src.
@param black The shadows' color. Usually this will be black (@c #000).
- @param white The specular light's color. Usually this will be white (@c #FFF).
+ @param white The specular light's color. Usually this will be white (@c \#FFF).
@param fillmode This specifies how to handle @a map when its dimensions don't match those of @a src and @a dst. Default is to @c repeat. See @ref evasfilter_fillmode "fillmodes".
@note As of 2014/02/11, the ALPHA to RGBA support is of much better quality than ALPHA only, but @b very slow. RGBA sources are not supported yet.
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
index a05794fd91..29745843bb 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
@@ -3,7 +3,6 @@
#include "efl_canvas_gesture_private.h"
#define MY_CLASS EFL_CANVAS_GESTURE_MANAGER_CLASS
-#define EFL_GESTURE_RECOGNIZER_TYPE_TAP_FINGER_SIZE 10
typedef struct _Object_Gesture
{
@@ -140,6 +139,7 @@ EOLIAN static Efl_Object *
_efl_canvas_gesture_manager_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd)
{
Eo *config;
+ int finger_size = 0;
obj = efl_constructor(efl_super(obj, MY_CLASS));
pd->m_recognizers = eina_hash_pointer_new(EINA_FREE_CB(_hash_unref_cb));
@@ -150,7 +150,6 @@ _efl_canvas_gesture_manager_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_M
/* this needs to always be present */
config = efl_provider_find(efl_main_loop_get(), EFL_CONFIG_INTERFACE);
- efl_config_int_set(config, "glayer_tap_finger_size", EFL_GESTURE_RECOGNIZER_TYPE_TAP_FINGER_SIZE);
efl_event_callback_add(config, EFL_CONFIG_EVENT_CONFIG_CHANGED, _gesture_manager_config_changed, pd);
//Register all types of recognizers at very first time.
@@ -162,7 +161,12 @@ _efl_canvas_gesture_manager_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_M
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_FLICK_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_ROTATE_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_ZOOM_CLASS, obj));
- _update_finger_sizes(pd, EFL_GESTURE_RECOGNIZER_TYPE_TAP_FINGER_SIZE);
+ /* realistically this will never fail, but the whole gesture layer breaks if this is 0 */
+ finger_size = efl_config_int_get(config, "glayer_tap_finger_size");
+ if (!getenv("EFL_RUN_IN_TREE"))
+ finger_size = efl_config_int_get(config, "glayer_tap_finger_size");
+ if (finger_size < 1) finger_size = 10;
+ _update_finger_sizes(pd, finger_size);
return obj;
}