diff --git a/data/themes/default_slidesel.edc b/data/themes/default_slidesel.edc
index e80f1dbb5..3af1f3a6d 100644
--- a/data/themes/default_slidesel.edc
+++ b/data/themes/default_slidesel.edc
@@ -11,11 +11,11 @@ group {
description {
state: "default" 0.0;
rel1 {
- offset: 4 4;
+ to_y: "e.text.label";
+ relative: 0.0 1.0;
+ offset: 0 4;
}
rel2 {
- to_y: "e.text.label";
- relative: 1.0 0.0;
offset: -5 -5;
}
}
@@ -38,21 +38,21 @@ group {
description {
state: "default" 0.0;
rel1 {
- relative: 0.0 1.0;
- offset: 4 -5;
+ relative: 0.0 0.0;
+ offset: 4 4;
}
rel2 {
- relative: 1.0 1.0;
- offset: -5 -5;
+ relative: 1.0 0.0;
+ offset: -5 4;
}
- align: 0.0 1.0;
+ align: 0.0 0.0;
color: 255 255 255 255;
color3: 0 0 0 16;
text {
font: "Sans:style=Bold,Edje-Vera-Bold";
- size: 10;
+ size: 20;
min: 0 1;
- align: 0.0 1.0;
+ align: 0.0 0.0;
text_class: "slidesel_label";
}
}
@@ -114,6 +114,24 @@ group {
// action: STATE_SET "default" 0.0;
// target: "outline";
// target: "event";
+// target: "e.text.label";
+ }
+ program {
+ name: "hint_on";
+ signal: "e,state,slide,hint,on";
+ source: "e";
+// action: STATE_SET "disabled" 0.0;
+// target: "outline";
+// target: "event";
+// target: "e.text.label";
+ }
+ program {
+ name: "hint_off";
+ signal: "e,state,slide,hint,off";
+ source: "e";
+// action: STATE_SET "disabled" 0.0;
+// target: "outline";
+// target: "event";
// target: "e.text.label";
}
}
diff --git a/src/bin/e_canvas.c b/src/bin/e_canvas.c
index 41fea1a75..304617122 100644
--- a/src/bin/e_canvas.c
+++ b/src/bin/e_canvas.c
@@ -53,6 +53,12 @@ e_canvas_engine_decide(int engine)
/* if use default - use it */
if (engine == E_EVAS_ENGINE_DEFAULT)
engine = e_config->evas_engine_default;
+ /* if engine is software-16 - do we support it? */
+ if (engine == E_EVAS_ENGINE_SOFTWARE_X11_16)
+ {
+ if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_X11_16))
+ engine = E_EVAS_ENGINE_SOFTWARE_X11;
+ }
/* if engine is gl - do we support it? */
if (engine == E_EVAS_ENGINE_GL_X11)
{
@@ -60,6 +66,7 @@ e_canvas_engine_decide(int engine)
if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_GL_X11))
engine = E_EVAS_ENGINE_SOFTWARE_X11;
}
+ /* support xrender? */
if (engine == E_EVAS_ENGINE_XRENDER_X11)
{
/* if we dont - fall back to software x11 */
@@ -208,6 +215,19 @@ e_canvas_new(int engine_hint, Ecore_X_Window win, int x, int y, int w, int h,
else
goto try2;
}
+ else if (engine == E_EVAS_ENGINE_SOFTWARE_X11_16)
+ {
+ ee = ecore_evas_software_x11_16_new(NULL, win, x, y, w, h);
+ if (ee)
+ {
+ ecore_evas_override_set(ee, override);
+ if (direct_resize) ecore_evas_software_x11_16_direct_resize_set(ee, 1);
+ if (win_ret) *win_ret = ecore_evas_software_x11_16_window_get(ee);
+ if (subwin_ret) *subwin_ret = ecore_evas_software_x11_16_subwindow_get(ee);
+ }
+ else
+ goto try2;
+ }
else
{
try2:
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index bdb4d5532..93e125ded 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -1792,7 +1792,10 @@ e_config_engine_list(void)
#if 0
l = evas_list_append(l, strdup("GL"));
#endif
- l = evas_list_append(l, strdup("XRENDER"));
+ if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_XRENDER_X11))
+ l = evas_list_append(l, strdup("XRENDER"));
+ if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_X11_16))
+ l = evas_list_append(l, strdup("SOFTWARE_16"));
return l;
}
diff --git a/src/bin/e_config.h b/src/bin/e_config.h
index 17e302670..24af5a9d7 100644
--- a/src/bin/e_config.h
+++ b/src/bin/e_config.h
@@ -36,10 +36,11 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
#define E_CONFIG_FILE_GENERATION 0x0124
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
-#define E_EVAS_ENGINE_DEFAULT 0
-#define E_EVAS_ENGINE_SOFTWARE_X11 1
-#define E_EVAS_ENGINE_GL_X11 2
-#define E_EVAS_ENGINE_XRENDER_X11 3
+#define E_EVAS_ENGINE_DEFAULT 0
+#define E_EVAS_ENGINE_SOFTWARE_X11 1
+#define E_EVAS_ENGINE_GL_X11 2
+#define E_EVAS_ENGINE_XRENDER_X11 3
+#define E_EVAS_ENGINE_SOFTWARE_X11_16 4
typedef enum _E_Engine_Context
{
diff --git a/src/bin/e_exec.c b/src/bin/e_exec.c
index 6e044a364..d5fa400a4 100644
--- a/src/bin/e_exec.c
+++ b/src/bin/e_exec.c
@@ -13,7 +13,6 @@
*/
typedef struct _E_Exec_Launch E_Exec_Launch;
-typedef struct _E_Exec_Instance E_Exec_Instance;
typedef struct _E_Exec_Search E_Exec_Search;
struct _E_Exec_Launch
@@ -22,15 +21,6 @@ struct _E_Exec_Launch
const char *launch_method;
};
-struct _E_Exec_Instance
-{
- Efreet_Desktop *desktop;
- Ecore_Exe *exe;
- int startup_id;
- double launch_time;
- Ecore_Timer *expire_timer;
-};
-
struct _E_Exec_Search
{
Efreet_Desktop *desktop;
@@ -53,7 +43,7 @@ struct _E_Config_Dialog_Data
};
/* local subsystem functions */
-static void _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining);
+static E_Exec_Instance *_e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining);
static int _e_exec_cb_expire_timer(void *data);
static int _e_exec_cb_exit(void *data, int type, void *event);
@@ -104,15 +94,16 @@ e_exec_shutdown(void)
return 1;
}
-EAPI int
+EAPI E_Exec_Instance *
e_exec(E_Zone *zone, Efreet_Desktop *desktop, const char *exec,
Ecore_List *files, const char *launch_method)
{
E_Exec_Launch *launch;
+ E_Exec_Instance *inst = NULL;
- if ((!desktop) && (!exec)) return 0;
+ if ((!desktop) && (!exec)) return NULL;
launch = E_NEW(E_Exec_Launch, 1);
- if (!launch) return 0;
+ if (!launch) return NULL;
if (zone)
{
launch->zone = zone;
@@ -124,13 +115,13 @@ e_exec(E_Zone *zone, Efreet_Desktop *desktop, const char *exec,
if (desktop)
{
if (exec)
- _e_exec_cb_exec(launch, NULL, strdup(exec), 0);
+ inst = _e_exec_cb_exec(launch, NULL, strdup(exec), 0);
else
- efreet_desktop_command_get(desktop, files, _e_exec_cb_exec, launch);
+ inst = efreet_desktop_command_get(desktop, files, _e_exec_cb_exec, launch);
}
else
- _e_exec_cb_exec(launch, NULL, strdup(exec), 0);
- return 1;
+ inst = _e_exec_cb_exec(launch, NULL, strdup(exec), 0);
+ return inst;
}
EAPI Efreet_Desktop *
@@ -146,7 +137,7 @@ e_exec_startup_id_pid_find(int startup_id, pid_t pid)
}
/* local subsystem functions */
-static void
+static E_Exec_Instance *
_e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
{
E_Exec_Instance *inst = NULL;
@@ -159,7 +150,7 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
if (desktop)
{
inst = E_NEW(E_Exec_Instance, 1);
- if (!inst) return;
+ if (!inst) return NULL;
}
if (startup_id == 0)
@@ -229,7 +220,7 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
"
"
"%s
"),
exec);
- return;
+ return NULL;
}
/* reset env vars */
if (launch->launch_method) e_exehist_add(launch->launch_method, exec);
@@ -264,8 +255,12 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
}
e_exec_start_pending = evas_list_append(e_exec_start_pending, desktop);
}
- else if (exe)
- ecore_exe_free(exe);
+ else if (exe)
+ {
+ E_FREE(inst);
+ inst = NULL;
+ ecore_exe_free(exe);
+ }
if (!remaining)
{
@@ -273,6 +268,7 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
if (launch->zone) e_object_unref(E_OBJECT(launch->zone));
free(launch);
}
+ return inst;
}
static int
diff --git a/src/bin/e_exec.h b/src/bin/e_exec.h
index 054effa5f..38eec0d51 100644
--- a/src/bin/e_exec.h
+++ b/src/bin/e_exec.h
@@ -3,13 +3,24 @@
*/
#ifdef E_TYPEDEFS
+typedef struct _E_Exec_Instance E_Exec_Instance;
+
#else
#ifndef E_EXEC_H
#define E_EXEC_H
+struct _E_Exec_Instance
+{
+ Efreet_Desktop *desktop;
+ Ecore_Exe *exe;
+ int startup_id;
+ double launch_time;
+ Ecore_Timer *expire_timer;
+};
+
EAPI int e_exec_init(void);
EAPI int e_exec_shutdown(void);
-EAPI int e_exec(E_Zone *zone, Efreet_Desktop *desktop, const char *exec, Ecore_List *files, const char *launch_method);
+EAPI E_Exec_Instance *e_exec(E_Zone *zone, Efreet_Desktop *desktop, const char *exec, Ecore_List *files, const char *launch_method);
EAPI Efreet_Desktop *e_exec_startup_id_pid_find(int startup_id, pid_t pid);
diff --git a/src/bin/e_scrollframe.c b/src/bin/e_scrollframe.c
index 13b28c9da..de9f5653e 100644
--- a/src/bin/e_scrollframe.c
+++ b/src/bin/e_scrollframe.c
@@ -21,8 +21,6 @@ struct _E_Smart_Data
E_Scrollframe_Policy hbar_flags, vbar_flags;
struct {
- unsigned char now : 1;
- unsigned char dragged : 1;
Evas_Coord x, y;
Evas_Coord sx, sy;
Evas_Coord dx, dy;
@@ -32,6 +30,10 @@ struct _E_Smart_Data
} history[20];
double anim_start;
Ecore_Animator *momentum_animator;
+ unsigned char now : 1;
+ unsigned char dragged : 1;
+ unsigned char dir_x : 1;
+ unsigned char dir_y : 1;
} down;
struct {
@@ -52,6 +54,7 @@ struct _E_Smart_Data
unsigned char hbar_visible : 1;
unsigned char vbar_visible : 1;
unsigned char extern_pan : 1;
+ unsigned char one_dir_at_a_time : 1;
};
/* local subsystem functions */
@@ -329,6 +332,20 @@ e_scrollframe_edje_object_get(Evas_Object *obj)
return sd->edje_obj;
}
+EAPI void
+e_scrollframe_single_dir_set(Evas_Object *obj, Evas_Bool single_dir)
+{
+ API_ENTRY return;
+ sd->one_dir_at_a_time = single_dir;
+}
+
+EAPI Evas_Bool
+e_scrollframe_single_dir_get(Evas_Object *obj)
+{
+ API_ENTRY return 0;
+ return sd->one_dir_at_a_time;
+}
+
/* local subsystem functions */
static void
_e_smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source)
@@ -420,6 +437,8 @@ _e_smart_event_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf
{
sd->down.now = 1;
sd->down.dragged = 0;
+ sd->down.dir_x = 0;
+ sd->down.dir_y = 0;
sd->down.x = ev->canvas.x;
sd->down.y = ev->canvas.y;
e_scrollframe_child_pos_get(sd->smart_obj, &x, &y);
@@ -547,6 +566,26 @@ _e_smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf
x = ev->cur.canvas.x - sd->down.x;
y = ev->cur.canvas.y - sd->down.y;
+ if ((sd->one_dir_at_a_time) &&
+ (!sd->down.dir_x) && (!sd->down.dir_y))
+ {
+ if (x > y)
+ {
+ if (x > e_config->thumbscroll_threshhold)
+ {
+ sd->down.dir_x = 1;
+ sd->down.dir_y = 0;
+ }
+ }
+ else
+ {
+ if (y > e_config->thumbscroll_threshhold)
+ {
+ sd->down.dir_x = 0;
+ sd->down.dir_y = 1;
+ }
+ }
+ }
if ((sd->down.dragged) ||
(((x * x) + (y * y)) >
(e_config->thumbscroll_threshhold *
@@ -557,6 +596,11 @@ _e_smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf
}
x = sd->down.sx - (ev->cur.canvas.x - sd->down.x);
y = sd->down.sy - (ev->cur.canvas.y - sd->down.y);
+ if ((sd->down.dir_x) || (sd->down.dir_y))
+ {
+ if (sd->down.dir_x) y = sd->down.sy;
+ else x = sd->down.sx;
+ }
e_scrollframe_child_pos_set(sd->smart_obj, x, y);
}
}
diff --git a/src/bin/e_scrollframe.h b/src/bin/e_scrollframe.h
index 848937ee1..c0394c7be 100644
--- a/src/bin/e_scrollframe.h
+++ b/src/bin/e_scrollframe.h
@@ -30,6 +30,9 @@ EAPI void e_scrollframe_page_size_get (Evas_Object *obj, Evas_Coord *x
EAPI void e_scrollframe_policy_set (Evas_Object *obj, E_Scrollframe_Policy hbar, E_Scrollframe_Policy vbar);
EAPI void e_scrollframe_policy_get (Evas_Object *obj, E_Scrollframe_Policy *hbar, E_Scrollframe_Policy *vbar);
EAPI Evas_Object *e_scrollframe_edje_object_get (Evas_Object *obj);
+EAPI void e_scrollframe_single_dir_set (Evas_Object *obj, Evas_Bool single_dir);
+EAPI Evas_Bool e_scrollframe_single_dir_get (Evas_Object *obj);
+
#endif
#endif
diff --git a/src/bin/e_slidecore.c b/src/bin/e_slidecore.c
index 25b87e431..6de6bb55d 100644
--- a/src/bin/e_slidecore.c
+++ b/src/bin/e_slidecore.c
@@ -210,6 +210,7 @@ _e_smart_reconfigure(E_Smart_Data *sd)
evas_object_color_get(sd->smart_obj, &r, &g, &b, &a);
evas_object_move(sd->o1, sd->x - sd->dist + dp, sd->y);
+// printf("SZ: %ix%i\n", sd->w + sd->dist + sd->dist, sd->h);
evas_object_resize(sd->o1, sd->w + sd->dist + sd->dist, sd->h);
evas_object_color_set(sd->o1, r, g, b, a);
diff --git a/src/bin/e_slidesel.c b/src/bin/e_slidesel.c
index abcd6027f..841ae562d 100644
--- a/src/bin/e_slidesel.c
+++ b/src/bin/e_slidesel.c
@@ -20,7 +20,9 @@ struct _E_Smart_Data
Evas_List *items;
Evas_Coord down_x, down_y;
E_Smart_Item *cur;
+ double down_time;
unsigned char down : 1;
+ unsigned char down_cancel : 1;
};
struct _E_Smart_Item
@@ -123,9 +125,12 @@ _e_smart_event_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf
ev = event_info;
if (ev->button == 1)
{
+ sd->down_time = ecore_time_get();
sd->down = 1;
+ sd->down_cancel = 0;
sd->down_x = ev->canvas.x;
sd->down_y = ev->canvas.y;
+ edje_object_signal_emit(sd->edje_obj, "e,state,slide,hint,on", "e");
}
}
@@ -139,18 +144,22 @@ _e_smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
ev = event_info;
if (ev->button == 1)
{
- Evas_Coord d1, d2, d;
+ double t;
- d1 = ev->canvas.x - sd->down_x;
- d2 = ev->canvas.y - sd->down_y;
- d = (d1 * d1) + (d2 * d2);
- if (d < (16 * 16))
+ t = ecore_time_get();
+ if (!sd->down_cancel)
{
+ edje_object_signal_emit(sd->edje_obj, "e,state,slide,hint,off", "e");
if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
{
if (sd->cur)
{
- if (sd->cur->func) sd->cur->func(sd->cur->data);
+ /* get rid of accidental release and presses */
+ if ((t - sd->down_time) > 0.2)
+ {
+ edje_object_signal_emit(sd->edje_obj, "e,action,select", "e");
+ if (sd->cur->func) sd->cur->func(sd->cur->data);
+ }
}
}
}
@@ -166,6 +175,20 @@ _e_smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf
sd = data;
ev = event_info;
+ if ((sd->down) && (!sd->down_cancel))
+ {
+ Evas_Coord d1, d2, d;
+
+ printf("DRAG @ %3.3f\n", ecore_time_get());
+ d1 = ev->cur.canvas.x - sd->down_x;
+ d2 = ev->cur.canvas.y - sd->down_y;
+ d = (d1 * d1) + (d2 * d2);
+ if (d > (16 * 16))
+ {
+ edje_object_signal_emit(sd->edje_obj, "e,state,slide,hint,off", "e");
+ sd->down_cancel = 1;
+ }
+ }
}
static void
diff --git a/src/modules/conf_engine/e_int_config_engine.c b/src/modules/conf_engine/e_int_config_engine.c
index 31f652bd3..0a700b687 100644
--- a/src/modules/conf_engine/e_int_config_engine.c
+++ b/src/modules/conf_engine/e_int_config_engine.c
@@ -97,6 +97,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
if (!strcmp("SOFTWARE", l->data)) engine = E_EVAS_ENGINE_SOFTWARE_X11;
else if (!strcmp("GL", l->data)) engine = E_EVAS_ENGINE_GL_X11;
else if (!strcmp("XRENDER", l->data)) engine = E_EVAS_ENGINE_XRENDER_X11;
+ else if (!strcmp("SOFTWARE_16", l->data)) engine = E_EVAS_ENGINE_SOFTWARE_X11_16;
else continue;
ob = e_widget_radio_add(evas, _(l->data), engine, rg);
e_widget_framelist_object_append(of, ob);