forked from enlightenment/efl
efl_ui_calendar: apply efl_ui_focus_composition
This commit is contained in:
parent
a386597ad9
commit
68b366c831
|
@ -6,6 +6,7 @@ elm_public_eolian_files = \
|
||||||
lib/elementary/efl_ui_bg.eo \
|
lib/elementary/efl_ui_bg.eo \
|
||||||
lib/elementary/efl_ui_button.eo \
|
lib/elementary/efl_ui_button.eo \
|
||||||
lib/elementary/efl_ui_calendar.eo \
|
lib/elementary/efl_ui_calendar.eo \
|
||||||
|
lib/elementary/efl_ui_calendar_item.eo \
|
||||||
lib/elementary/efl_ui_check.eo \
|
lib/elementary/efl_ui_check.eo \
|
||||||
lib/elementary/efl_ui_flip.eo \
|
lib/elementary/efl_ui_flip.eo \
|
||||||
lib/elementary/efl_ui_frame.eo \
|
lib/elementary/efl_ui_frame.eo \
|
||||||
|
|
|
@ -4,10 +4,12 @@
|
||||||
|
|
||||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||||
|
#define EFL_UI_FOCUS_COMPOSITION_PROTECTED
|
||||||
|
|
||||||
#include <Elementary.h>
|
#include <Elementary.h>
|
||||||
#include "elm_priv.h"
|
#include "elm_priv.h"
|
||||||
#include "efl_ui_calendar_private.h"
|
#include "efl_ui_calendar_private.h"
|
||||||
|
#include "efl_ui_calendar_item.eo.h"
|
||||||
|
|
||||||
#define MY_CLASS EFL_UI_CALENDAR_CLASS
|
#define MY_CLASS EFL_UI_CALENDAR_CLASS
|
||||||
|
|
||||||
|
@ -293,6 +295,28 @@ _access_calendar_register(Evas_Object *obj)
|
||||||
_access_calendar_item_register(obj);
|
_access_calendar_item_register(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_flush_calendar_composite_elements(Evas_Object *obj, Efl_Ui_Calendar_Data *sd)
|
||||||
|
{
|
||||||
|
Eina_List *items = NULL;
|
||||||
|
int max_day = _maxdays_get(&sd->shown_date, 0);
|
||||||
|
|
||||||
|
#define EXTEND(v) \
|
||||||
|
if (v) items = eina_list_append(items, v); \
|
||||||
|
|
||||||
|
EXTEND(sd->month_access);
|
||||||
|
EXTEND(sd->dec_btn_month);
|
||||||
|
EXTEND(sd->inc_btn_month);
|
||||||
|
EXTEND(sd->year_access);
|
||||||
|
|
||||||
|
#undef EXTEND
|
||||||
|
|
||||||
|
for (int i = sd->first_day_it; i <= max_day; ++i)
|
||||||
|
items = eina_list_append(items, sd->items[i]);
|
||||||
|
|
||||||
|
efl_ui_focus_composition_elements_set(obj, items);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_populate(Evas_Object *obj)
|
_populate(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
|
@ -381,6 +405,8 @@ _populate(Evas_Object *obj)
|
||||||
|
|
||||||
elm_layout_thaw(obj);
|
elm_layout_thaw(obj);
|
||||||
edje_object_message_signal_process(elm_layout_edje_get(obj));
|
edje_object_message_signal_process(elm_layout_edje_get(obj));
|
||||||
|
|
||||||
|
_flush_calendar_composite_elements(obj, sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -986,6 +1012,13 @@ _efl_ui_calendar_constructor_internal(Eo *obj, Efl_Ui_Calendar_Data *priv)
|
||||||
if ((_elm_config->access_mode != ELM_ACCESS_MODE_OFF))
|
if ((_elm_config->access_mode != ELM_ACCESS_MODE_OFF))
|
||||||
_access_calendar_spinner_register(obj);
|
_access_calendar_spinner_register(obj);
|
||||||
|
|
||||||
|
// Items for composition
|
||||||
|
for (int i = 0; i < 42; ++i)
|
||||||
|
{
|
||||||
|
priv->items[i] = efl_add(EFL_UI_CALENDAR_ITEM_CLASS, obj,
|
||||||
|
efl_ui_calendar_item_day_number_set(efl_added, i));
|
||||||
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1239,3 +1272,51 @@ ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_calendar, Efl_Ui_Calendar_Data)
|
||||||
ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_calendar)
|
ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_calendar)
|
||||||
|
|
||||||
#include "efl_ui_calendar.eo.c"
|
#include "efl_ui_calendar.eo.c"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int v;
|
||||||
|
Evas_Object *part;
|
||||||
|
} Efl_Ui_Calendar_Item_Data;
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_calendar_item_day_number_set(Eo *obj, Efl_Ui_Calendar_Item_Data *pd, int i)
|
||||||
|
{
|
||||||
|
char pname[14];
|
||||||
|
Evas_Object *po;
|
||||||
|
|
||||||
|
pd->v = i;
|
||||||
|
snprintf(pname, sizeof(pname), "cit_%i.access", i);
|
||||||
|
|
||||||
|
po = (Evas_Object *)edje_object_part_object_get
|
||||||
|
(elm_layout_edje_get(efl_parent_get(obj)), pname);
|
||||||
|
|
||||||
|
if (_elm_config->access_mode != ELM_ACCESS_MODE_ON)
|
||||||
|
pd->part = po;
|
||||||
|
else
|
||||||
|
pd->part = evas_object_data_get(po, "_part_access_obj");
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(pd->part);
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static int
|
||||||
|
_efl_ui_calendar_item_day_number_get(Eo *obj EINA_UNUSED, Efl_Ui_Calendar_Item_Data *pd)
|
||||||
|
{
|
||||||
|
return pd->v;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_calendar_item_efl_ui_focus_object_focus_set(Eo *obj, Efl_Ui_Calendar_Item_Data *pd, Eina_Bool focus)
|
||||||
|
{
|
||||||
|
efl_ui_focus_object_focus_set(efl_super(obj, EFL_UI_CALENDAR_ITEM_CLASS), focus);
|
||||||
|
|
||||||
|
_update_focused_it(efl_parent_get(obj), pd->v);
|
||||||
|
evas_object_focus_set(pd->part, efl_ui_focus_object_focus_get(obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static Eina_Rect
|
||||||
|
_efl_ui_calendar_item_efl_ui_focus_object_focus_geometry_get(Eo *obj EINA_UNUSED, Efl_Ui_Calendar_Item_Data *pd)
|
||||||
|
{
|
||||||
|
return efl_gfx_geometry_get(pd->part);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "efl_ui_calendar_item.eo.c"
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
class Efl.Ui.Calendar.Item (Efl.Object, Efl.Ui.Focus.Object)
|
||||||
|
{
|
||||||
|
methods {
|
||||||
|
@property day_number {
|
||||||
|
values {
|
||||||
|
i : int;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
implements {
|
||||||
|
Efl.Ui.Focus.Object.focus {set;}
|
||||||
|
Efl.Ui.Focus.Object.focus_geometry {get;}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue