}
EAPI void
-_elm_access_highlight_object_activate(Evas_Object *obj)
+_elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act)
{
Evas_Object *highlight_obj;
highlight_obj = elm_widget_focused_object_get(obj);
- elm_widget_activate(highlight_obj);
+ elm_widget_activate(highlight_obj, act);
}
EAPI char *
evas_object_size_hint_min_set(obj, minw, minh);
}
-static void
-_elm_button_smart_activate(Evas_Object *obj)
+static Eina_Bool
+_elm_button_smart_activate(Evas_Object *obj, Elm_Activate act)
{
+ if (act != ELM_ACTIVATE_DEFAULT) return EINA_FALSE;
+
evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
elm_layout_signal_emit(obj, "elm,anim,activate", "elm");
+
+ return EINA_TRUE;
}
/* FIXME: replicated from elm_layout just because button's icon spot
#include <Elementary.h>
#include "elm_priv.h"
#include "elm_widget_scroller.h"
-
EAPI const char ELM_SCROLLER_SMART_NAME[] = "elm_scroller";
static const char SIG_SCROLL[] = "scroll";
return EINA_TRUE;
}
+static Eina_Bool
+_elm_scroller_smart_activate(Evas_Object *obj, Elm_Activate act)
+{
+ Evas_Coord x = 0;
+ Evas_Coord y = 0;
+ Evas_Coord v_w = 0;
+ Evas_Coord v_h = 0;
+ Evas_Coord page_x = 0;
+ Evas_Coord page_y = 0;
+
+ ELM_SCROLLER_DATA_GET(obj, sd);
+
+ if ((elm_widget_disabled_get(obj)) ||
+ (act == ELM_ACTIVATE_DEFAULT)) return EINA_FALSE;
+
+ sd->s_iface->content_pos_get(obj, &x, &y);
+ sd->s_iface->page_size_get(obj, &page_x, &page_y);
+ sd->s_iface->content_viewport_size_get(obj, &v_w, &v_h);
+
+ if (act == ELM_ACTIVATE_UP)
+ {
+ if (page_y < 0)
+ y -= -(page_y * v_h) / 100;
+ else
+ y -= page_y;
+ }
+ else if (act == ELM_ACTIVATE_DOWN)
+ {
+ if (page_y < 0)
+ y += -(page_y * v_h) / 100;
+ else
+ y += page_y;
+ }
+ else if (act == ELM_ACTIVATE_LEFT)
+ {
+ if (page_x < 0)
+ x -= -(page_x * v_w) / 100;
+ else
+ x -= page_x;
+ }
+ else if (act == ELM_ACTIVATE_RIGHT)
+ {
+ if (page_x < 0)
+ x += -(page_x * v_w) / 100;
+ else
+ x += page_x;
+ }
+
+ sd->s_iface->content_pos_set(obj, x, y);
+ return EINA_TRUE;
+}
+
static void
_elm_scroller_smart_sizing_eval(Evas_Object *obj)
{
ELM_WIDGET_CLASS(sc)->focus_next = _elm_scroller_smart_focus_next;
ELM_WIDGET_CLASS(sc)->event = _elm_scroller_smart_event;
ELM_WIDGET_CLASS(sc)->focus_direction = NULL;
+ ELM_WIDGET_CLASS(sc)->activate = _elm_scroller_smart_activate;
ELM_CONTAINER_CLASS(sc)->content_set = _elm_scroller_smart_content_set;
ELM_CONTAINER_CLASS(sc)->content_get = _elm_scroller_smart_content_get;
return EINA_TRUE;
}
+static Eina_Bool
+_elm_slider_smart_activate(Evas_Object *obj, Elm_Activate act)
+{
+ ELM_SLIDER_DATA_GET(obj, sd);
+
+ if ((elm_widget_disabled_get(obj)) ||
+ (act == ELM_ACTIVATE_DEFAULT)) return EINA_FALSE;
+
+ if ((act == ELM_ACTIVATE_UP) ||
+ (act == ELM_ACTIVATE_RIGHT))
+ {
+ if (sd->inverted) _drag_up(obj, NULL, NULL, NULL);
+ else _drag_down(obj, NULL, NULL, NULL);
+ }
+ else if ((act == ELM_ACTIVATE_DOWN) ||
+ (act == ELM_ACTIVATE_LEFT))
+ {
+ if (sd->inverted) _drag_down(obj, NULL, NULL, NULL);
+ else _drag_up(obj, NULL, NULL, NULL);
+ }
+
+ _slider_update(obj);
+
+ return EINA_TRUE;
+}
+
static void
_visuals_refresh(Evas_Object *obj)
{
ELM_WIDGET_CLASS(sc)->theme = _elm_slider_smart_theme;
ELM_WIDGET_CLASS(sc)->event = _elm_slider_smart_event;
+ ELM_WIDGET_CLASS(sc)->activate = _elm_slider_smart_activate;
/* not a 'focus chain manager' */
ELM_WIDGET_CLASS(sc)->focus_next = NULL;
return sd->focus_order;
}
-EAPI void
-elm_widget_activate(Evas_Object *obj)
+EAPI void
+elm_widget_activate(Evas_Object *obj, Elm_Activate act)
{
+ Evas_Object *parent;
+ Eina_Bool ret;
+
API_ENTRY return;
- if (!sd->api->activate) return;
+ ret = EINA_FALSE;
+ if (sd->api->activate)
+ ret = sd->api->activate(obj, act);
- sd->api->activate(obj);
+ if (ret) return;
+
+ parent = elm_widget_parent_get(obj);
+ if (parent)
+ elm_widget_activate(parent, act);
+
+ return;
}
/**
#define ELM_WIDGET_SMART_CLASS_INIT_NAME_VERSION(name) \
ELM_WIDGET_SMART_CLASS_INIT(EVAS_SMART_CLASS_INIT_NAME_VERSION(name))
+/* Elm_Activate is used in 'Virtual' function Eina_Bool (*activate)
+ * (Evas_Object *obj, Elm_Activate act); of Elm_Widget_Smart_Class */
+typedef enum
+{
+ ELM_ACTIVATE_DEFAULT = 0,
+ ELM_ACTIVATE_UP,
+ ELM_ACTIVATE_DOWN,
+ ELM_ACTIVATE_RIGHT,
+ ELM_ACTIVATE_LEFT
+} Elm_Activate;
+
/* Please, ALWAYS update the ELM_WIDGET_SMART_CLASS_INIT macro
* whenever you change the following struct! */
Evas_Object *sobj); /**< 'Virtual' function handling sub objects being removed */
void (*access)(Evas_Object *obj,
Eina_Bool is_access); /**< 'Virtual' function on the widget being set access */
- void (*activate)(Evas_Object *obj); /**< 'Virtual' function to activate widget */
+ Eina_Bool (*activate)(Evas_Object *obj,
+ Elm_Activate act); /**< 'Virtual' function to activate widget */
} Elm_Widget_Smart_Class;
/**
typedef char *(*Elm_Access_Content_Cb)(void *data, Evas_Object *obj, Elm_Widget_Item *item);
typedef void (*Elm_Access_On_Highlight_Cb)(void *data);
-typedef void (*Elm_Access_Activate_Cb)(Evas_Object *obj, void *data);
struct _Elm_Access_Item
{
Ecore_Timer *delay_timer;
void *on_highlight_data;
Elm_Access_On_Highlight_Cb on_highlight;
- void *activate_data;
- Elm_Access_Activate_Cb activate;
};
EAPI void _elm_access_clear(Elm_Access_Info *ac);
EAPI void _elm_access_widget_item_register(Elm_Widget_Item *item);
EAPI void _elm_access_widget_item_unregister(Elm_Widget_Item *item);
EAPI void _elm_access_on_highlight_hook_set(Elm_Access_Info *ac, Elm_Access_On_Highlight_Cb func, void *data);
-EAPI void _elm_access_highlight_object_activate(Evas_Object *obj);
+EAPI void _elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act);
/**< put this as the first member in your widget item struct */
#define ELM_WIDGET_ITEM Elm_Widget_Item base
EAPI void elm_widget_focus_tree_unfocusable_handle(Evas_Object *obj);
EAPI void elm_widget_focus_disabled_handle(Evas_Object *obj);
EAPI unsigned int elm_widget_focus_order_get(const Evas_Object *obj);
-EAPI void elm_widget_activate(Evas_Object *obj);
+EAPI void elm_widget_activate(Evas_Object *obj, Elm_Activate act);
EAPI void elm_widget_text_part_set(Evas_Object *obj, const char *part, const char *label);
EAPI const char *elm_widget_text_part_get(const Evas_Object *obj, const char *part);
EAPI void elm_widget_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text);
else if ((unsigned int)e->data.l[1] ==
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE)
{
- _elm_access_highlight_object_activate(ELM_WIDGET_DATA(sd)->obj);
+ _elm_access_highlight_object_activate
+ (ELM_WIDGET_DATA(sd)->obj, ELM_ACTIVATE_DEFAULT);
}
else if ((unsigned int)e->data.l[1] ==
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ)
else if ((unsigned int)e->data.l[1] ==
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP)
{
- // XXX: call right access func
+ _elm_access_highlight_object_activate
+ (ELM_WIDGET_DATA(sd)->obj, ELM_ACTIVATE_UP);
}
else if ((unsigned int)e->data.l[1] ==
ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN)
{
- // XXX: call right access func
+ _elm_access_highlight_object_activate
+ (ELM_WIDGET_DATA(sd)->obj, ELM_ACTIVATE_DOWN);
}
}
}