win: apply conformant features.

Summary:
- implement indicator enable/disable
- implement indicator type
- add indicator swallow area to border.edc
- add 'test win indicator' sample

Test Plan: elementary_test -> win_indicator

Reviewers: woohyun, cedric, jpeg

Subscribers: taxi2se, jypark, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D5418
This commit is contained in:
Hosang Kim 2017-12-12 10:02:23 +09:00 committed by Jean-Philippe Andre
parent ac63a74d1d
commit 26272bf3a2
6 changed files with 419 additions and 65 deletions

View File

@ -46,7 +46,7 @@ group { name: "elm/border/base/default";
desc {
rel1.to: "elm.swallow.menu";
rel1.relative: 0.0 1.0;
rel2.to: "bottom_clip";
rel2.to: "elm.swallow.keyboard";
rel2.relative: 1.0 0.0;
}
}
@ -71,7 +71,9 @@ group { name: "elm/border/base/default";
rect { "bg_clip";
nomouse;
desc { "default";
rel.to: "elm.spacer.content";
rel1.to: "top_clip";
rel1.relative: 0.0 1.0;
rel2.to: "bottom_clip";
}
}
rect { "elm.rect.background";
@ -108,6 +110,17 @@ group { name: "elm/border/base/default";
visible: 1;
}
}
spacer { "indicator_spacer";
desc { "default";
rel.to: "elm.swallow.indicator";
}
desc { "hidden";
rel.to: "top_clip";
rel1.relative: 0.0 1.0;
align: 0.5 0.0;
fixed: 1 1;
}
}
/* main menu */
rect { "menu_bg";
@ -120,7 +133,7 @@ group { name: "elm/border/base/default";
swallow { "elm.swallow.menu";
required: 1; // since 1.19
desc { "default";
rel.to: "top_clip";
rel.to: "indicator_spacer";
rel1.relative: 0.0 1.0;
visible: 0;
align: 0.5 0.0;
@ -137,7 +150,7 @@ group { name: "elm/border/base/default";
desc { "default";
rel1.to: "elm.swallow.menu";
rel1.relative: 0.0 1.0;
rel2.to: "bottom_clip";
rel2.to: "elm.swallow.keyboard";
rel2.relative: 1.0 0.0;
}
}
@ -573,6 +586,14 @@ group { name: "elm/border/base/default";
desc { "hidden"; inherit: "default"; hid; }
}
/* bottom border - spacer and clipper */
swallow { "elm.swallow.keyboard";
desc { "default";
rel.to: "bottom_clip";
rel2.relative: 1.0 0.0;
align: 0.0 1.0;
fixed: 0 1;
}
}
rect { "bottom_clip";
desc { "default";
rel.to: "shadow_spacer";
@ -662,6 +683,34 @@ group { name: "elm/border/base/default";
FIXED_SIZE(69, 5)
}
}
rect { "indicator_bg";
clip: "bg_clip";
desc { "default";
color: 148 23 45 255;
rel.to: "elm.swallow.indicator";
}
desc { "bg_transparent";
inherit: "default";
color: 0 0 0 0;
}
}
swallow { "elm.swallow.indicator";
clip: "bg_clip";
desc { "default";
rel.to: "top_clip";
rel1.relative: 0.0 1.0;
visible: 0;
align: 0.5 0.0;
fixed: 1 1;
}
desc { "visible"; inherit: "default";
visible: 1;
fixed: 0 1;
}
desc { "hidden"; inherit: "visible";
align: 0.5 1.0;
}
}
}
#define BORDERLESS 1
@ -670,9 +719,16 @@ group { name: "elm/border/base/default";
#define SET_MODE(a) script { new m = get_int(border_mode); m |= (a); set_int(border_mode, m); eval_mode(m); }
#define UNSET_MODE(a) script { new m = get_int(border_mode); m &= ~(a); set_int(border_mode, m); eval_mode(m); }
#define INDICATOR_TYPE_UNKNOWN 0
#define INDICATOR_TYPE_BG_OPAQUE 1
#define INDICATOR_TYPE_BG_TRANSPARENT 2
#define INDICATOR_TYPE_HIDDEN 3
programs {
script {
public border_mode;
public indicator_type = 0;
public indicator_enabled = 0;
public eval_mode(m) {
if (m & (BORDERLESS | MAXIMIZED | UNRESIZABLE)) {
set_state(PART:"bottom_clip", "hidden", 0.0);
@ -832,6 +888,78 @@ group { name: "elm/border/base/default";
UNSET_MODE(MAXIMIZED);
}
/*indicator*/
program {
signal: "elm,action,show_indicator"; source: "elm";
script {
set_int(indicator_enabled, 1);
}
after: "update_indicator";
}
program {
signal: "elm,action,hide_indicator"; source: "elm";
script {
set_int(indicator_enabled, 0);
}
after: "update_indicator";
}
program {
signal: "elm,action,indicator,bg_opaque"; source: "elm";
script {
set_int(indicator_type, INDICATOR_TYPE_BG_OPAQUE);
}
after: "update_indicator";
}
program {
signal: "elm,action,indicator,bg_transparent"; source: "elm";
script {
set_int(indicator_type, INDICATOR_TYPE_BG_TRANSPARENT);
}
after: "update_indicator";
}
program {
signal: "elm,action,indicator,hidden"; source: "elm";
script {
set_int(indicator_type, INDICATOR_TYPE_HIDDEN);
}
after: "update_indicator";
}
program {
signal: "elm,action,indicator,show_effect"; source: "elm";
action: STATE_SET "visible";
transition: DECELERATE 0.2;
target: "elm.swallow.indicator";
}
program {
signal: "elm,action,indicator,hide_effect"; source: "elm";
action: STATE_SET "hidden";
transition: DECELERATE 0.2;
target: "elm.swallow.indicator";
}
program { name: "update_indicator";
script {
if (get_int(indicator_enabled)) {
if ((get_int(indicator_type) == INDICATOR_TYPE_BG_OPAQUE) ||
(get_int(indicator_type) == INDICATOR_TYPE_UNKNOWN)) {
set_state(PART:"elm.swallow.indicator", "visible", 0.0);
set_state(PART:"indicator_spacer", "default", 0.0);
set_state(PART:"indicator_bg", "default", 0.0);
} else if (get_int(indicator_type) == INDICATOR_TYPE_BG_TRANSPARENT) {
set_state(PART:"elm.swallow.indicator", "visible", 0.0);
set_state(PART:"indicator_spacer", "default", 0.0);
set_state(PART:"indicator_bg", "bg_transparent", 0.0);
} else if (get_int(indicator_type) == INDICATOR_TYPE_HIDDEN) {
set_state(PART:"elm.swallow.indicator", "hidden", 0.0);
set_state(PART:"indicator_spacer", "hidden", 0.0);
set_state(PART:"indicator_bg", "default", 0.0);
}
} else {
set_state(PART:"elm.swallow.indicator", "default", 0.0);
set_state(PART:"indicator_spacer", "default", 0.0);
}
}
}
/* application desktop menu */
program { name: "show_menu";
signal: "elm,action,show_menu"; source: "elm";

View File

@ -933,6 +933,7 @@ bin/elementary/test_win_dialog.c \
bin/elementary/test_win_modal.c \
bin/elementary/test_efl_ui_text.c \
bin/elementary/test_win_stack.c \
bin/elementary/test_win_indicator.c \
bin/elementary/test_gesture_framework.c \
bin/elementary/test.h

View File

@ -307,6 +307,8 @@ void test_dnd_multi_features(void *data, Evas_Object *obj, void *event_info);
void test_dnd_types(void *data, Evas_Object *obj, void *event_info);
void test_task_switcher(void *data, Evas_Object *obj, void *event_info);
void test_win_dialog(void *data, Evas_Object *obj, void *event_info);
void test_win_indicator(void *data, Evas_Object *obj, void *event_info);
void test_win_modal(void *data, Evas_Object *obj, void *event_info);
void test_win_modal(void *data, Evas_Object *obj, void *event_info);
void test_box_disable(void *data, Evas_Object *obj, void *event_info);
void test_layout_disable(void *data, Evas_Object *obj, void *event_info);
@ -748,6 +750,7 @@ add_tests:
ADD_TEST(NULL, "Window / Background", "Window Keygrab Set", test_win_keygrab);
ADD_TEST(NULL, "Window / Background", "Window Modal", test_win_modal);
ADD_TEST(NULL, "Window / Background", "Window Stack", test_win_stack);
ADD_TEST(NULL, "Window / Background", "Window Indicator", test_win_indicator);
ADD_TEST_EO(NULL, "Window / Background", "Efl.Ui.Win (Bg part)", test_bg_window);
ADD_TEST_EO(NULL, "Window / Background", "Efl.Ui.Bg", test_bg_scale_type);

View File

@ -0,0 +1,122 @@
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
#endif
#include <Elementary.h>
static void
_changed_cb(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
{
printf("Clock value is changed\n");
}
static Evas_Object *
_create_indicator(void)
{
const char *indi_name;
Eo *win = efl_add(EFL_UI_WIN_SOCKET_CLASS, NULL,
efl_text_set(efl_added, "indicator"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE),
efl_ui_win_alpha_set(efl_added, EINA_TRUE));
if (!win)
{
printf("fail to create a portrait indicator window\n");
return NULL;
}
indi_name = "elm_indicator_portrait";
if (!efl_ui_win_socket_listen(win, indi_name, 0, EINA_FALSE))
{
printf("failed to listen portrait window socket.\n");
efl_del(win);
return NULL;
}
Eo *bx = efl_add(EFL_UI_BOX_CLASS, win,
efl_content_set(win, efl_added));
efl_add(EFL_UI_CLOCK_CLASS, bx,
efl_gfx_size_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
efl_gfx_size_hint_align_set(efl_added, 0.5, 0.5),
efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_HOUR, EINA_FALSE),
efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_MINUTE, EINA_FALSE),
efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_AMPM, EINA_FALSE),
efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_SECOND, EINA_FALSE),
efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_DAY, EINA_FALSE),
efl_ui_clock_pause_set(efl_added, EINA_TRUE),
efl_event_callback_add(efl_added, EFL_UI_CLOCK_EVENT_CHANGED, _changed_cb, NULL),
efl_pack(bx, efl_added));
efl_gfx_size_set(win, EINA_SIZE2D(300, 30));
return win;
}
static void
_off_clicked(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_ui_win_indicator_mode_set(data, EFL_UI_WIN_INDICATOR_OFF);
}
static void
_opaque_clicked(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_ui_win_indicator_mode_set(data, EFL_UI_WIN_INDICATOR_BG_OPAQUE);
}
static void
_transparent_clicked(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_ui_win_indicator_mode_set(data, EFL_UI_WIN_INDICATOR_BG_TRANSPARENT);
}
static void
_hidden_clicked(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_ui_win_indicator_mode_set(data, EFL_UI_WIN_INDICATOR_HIDDEN);
}
static void
_win_del(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_del(data);
}
void
test_win_indicator(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *win, *indicator;
indicator = _create_indicator();
// FIXME: Resizing window should no cause sizing issues!
win = efl_add(EFL_UI_WIN_CLASS, NULL,
efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
efl_text_set(efl_added, "Efl.Win.Indicator"),
efl_gfx_size_hint_max_set(efl_added, EINA_SIZE2D(300, -1)),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
efl_event_callback_add(win, EFL_EVENT_DEL, _win_del, indicator);
efl_gfx_size_set(win, EINA_SIZE2D(300, 360));
Eo *bx = efl_add(EFL_UI_BOX_CLASS, win,
efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(300, 0)),
efl_content_set(win, efl_added));
efl_add(EFL_UI_BUTTON_CLASS, win,
efl_text_set(efl_added, "Indicator Off"),
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _off_clicked, win),
efl_pack(bx, efl_added));
efl_add(EFL_UI_BUTTON_CLASS, win,
efl_text_set(efl_added, "Bg Opaque"),
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _opaque_clicked, win),
efl_pack(bx, efl_added));
efl_add(EFL_UI_BUTTON_CLASS, win,
efl_text_set(efl_added, "Bg Transparent"),
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _transparent_clicked, win),
efl_pack(bx, efl_added));
efl_add(EFL_UI_BUTTON_CLASS, win,
efl_text_set(efl_added, "Hidden"),
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _hidden_clicked, win),
efl_pack(bx, efl_added));
}

View File

@ -30,6 +30,7 @@
#include "elm_part_helper.h"
#include "efl_ui_win_part.eo.h"
#include "elm_plug.eo.h"
#define MY_CLASS EFL_UI_WIN_CLASS
#define MY_CLASS_NAME "Efl.Ui.Win"
@ -85,6 +86,7 @@ struct _Efl_Ui_Win_Data
Evas_Object *img_obj, *frame_obj;
Eo /* wref */ *bg, *content;
Evas_Object *obj; /* The object itself */
Evas_Object *indicator;
#ifdef HAVE_ELEMENTARY_X
struct
{
@ -116,8 +118,7 @@ struct _Efl_Ui_Win_Data
Efl_Ui_Win_Type type;
Efl_Ui_Win_Keyboard_Mode kbdmode;
Elm_Win_Indicator_Mode indmode;
Elm_Win_Indicator_Opacity_Mode ind_o_mode;
Efl_Ui_Win_Indicator_Mode indimode;
struct
{
const char *info;
@ -237,6 +238,7 @@ struct _Efl_Ui_Win_Data
Eina_Bool need_bg_standard : 1;
Eina_Bool need_menu : 1;
Eina_Bool need_unresizable : 1;
Eina_Bool need_indicator : 1;
Eina_Bool cur_borderless : 1;
Eina_Bool cur_shadow : 1;
Eina_Bool cur_focus : 1;
@ -245,11 +247,14 @@ struct _Efl_Ui_Win_Data
Eina_Bool cur_bg_standard : 1;
Eina_Bool cur_menu : 1;
Eina_Bool cur_unresizable : 1;
Eina_Bool cur_indicator : 1;
Eina_Bool wayland : 1;
} csd;
struct {
Evas_Object *box, *edje;
Elm_Win_Indicator_Mode indmode;
Elm_Win_Indicator_Opacity_Mode ind_o_mode;
Eina_Bool forbidden : 1; /**< Marks some legacy APIs as not allowed. */
Eina_Bool bg_must_swallow : 1; /**< Legacy theme compatibility (elm_bg for standard window) */
Eina_Bool bg_must_swallow_init : 1;
@ -2872,6 +2877,7 @@ _efl_ui_win_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Win_Data *sd)
eina_stringshare_del(sd->stack_master_id);
evas_object_del(sd->icon);
evas_object_del(sd->main_menu);
evas_object_del(sd->indicator);
sd->focus_highlight.style = NULL;
sd->title = NULL;
@ -3441,10 +3447,10 @@ _elm_win_xwin_update(Efl_Ui_Win_Data *sd)
}
ecore_x_e_virtual_keyboard_state_set
(sd->x.xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
if (sd->legacy.indmode == ELM_WIN_INDICATOR_SHOW)
ecore_x_e_illume_indicator_state_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
else if (sd->legacy.indmode == ELM_WIN_INDICATOR_HIDE)
ecore_x_e_illume_indicator_state_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
@ -3770,7 +3776,7 @@ _elm_win_property_change(void *data,
{
if (e->win == sd->x.xwin)
{
sd->indmode = (Elm_Win_Indicator_Mode)ecore_x_e_illume_indicator_state_get(e->win);
sd->legacy.indmode = (Elm_Win_Indicator_Mode)ecore_x_e_illume_indicator_state_get(e->win);
efl_event_callback_legacy_call
(sd->obj, EFL_UI_WIN_EVENT_INDICATOR_PROP_CHANGED, NULL);
}
@ -4429,7 +4435,7 @@ static void
_elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool calc)
{
Eina_Bool borderless, maximized, shadow, focus, bg_solid, menu, unresizable,
alpha, bg_standard;
alpha, bg_standard, indicator;
Eina_Bool changed = EINA_FALSE;
if (!sd->frame_obj)
@ -4455,6 +4461,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool
sd->csd.need_borderless = EINA_TRUE;
sd->csd.need_unresizable = EINA_TRUE;
sd->csd.need_menu = EINA_FALSE;
sd->csd.need_indicator = EINA_FALSE;
}
else
{
@ -4476,6 +4483,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool
bg_standard = sd->csd.need_bg_standard;
unresizable = sd->csd.need_unresizable;
menu = sd->csd.need_menu;
indicator = sd->csd.need_indicator;
/* FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
* At the moment, E Wayland uses SSD for its internal windows. Which means
@ -4503,6 +4511,7 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool
STATE_SET(bg_standard, "elm,state,background,standard,on", "elm,state,background,standard,off");
STATE_SET(unresizable, "elm,state,unresizable,on", "elm,state,unresizable,off");
STATE_SET(menu, "elm,action,show_menu", "elm,action,hide_menu");
STATE_SET(indicator, "elm,action,show_indicator", "elm,action,hide_indicator");
#undef STATE_SET
@ -4651,6 +4660,80 @@ _elm_win_need_frame_adjust(Efl_Ui_Win_Data *sd, const char *engine)
sd->csd.need = sd->csd.wayland;
}
static void
_indicator_resized(void *data, const Efl_Event *event)
{
ELM_WIN_DATA_GET_OR_RETURN(data, sd);
Evas_Object *indicator = event->object;
Evas_Coord_Size *size = (Evas_Coord_Size *)event->info;
efl_gfx_size_hint_restricted_min_set(indicator, EINA_SIZE2D(size->w, size->h));
_elm_win_frame_obj_update(sd);
}
static Evas_Object*
_create_indicator(Evas_Object *obj)
{
Evas_Object *indicator = NULL;
const char *indicator_serv_name;
indicator_serv_name = "elm_indicator_portrait";
if (!indicator_serv_name)
{
ERR("Conformant cannot get portrait indicator service name");
return NULL;
}
indicator = elm_plug_add(obj);
if (!indicator)
{
ERR("Conformant cannot create plug to server[%s]", indicator_serv_name);
return NULL;
}
if (!elm_plug_connect(indicator, indicator_serv_name, 0, EINA_FALSE))
{
ERR("Conformant cannot connect to server[%s]", indicator_serv_name);
return NULL;
}
return indicator;
}
static void
_indicator_add(Efl_Ui_Win_Data *sd)
{
Eo *obj = sd->obj;
sd->indicator = _create_indicator(obj);
if ((!sd->indicator) ||
(!edje_object_part_swallow(sd->frame_obj, "elm.swallow.indicator", sd->indicator)))
return;
efl_event_callback_add
(sd->indicator, ELM_PLUG_EVENT_IMAGE_RESIZED, _indicator_resized, obj);
efl_canvas_object_is_frame_object_set(sd->indicator, EINA_TRUE);
sd->csd.need_indicator = EINA_TRUE;
_elm_win_frame_style_update(sd, 0, 1);
}
static void
_indicator_del(Efl_Ui_Win_Data *sd)
{
Eo *obj = sd->obj;
efl_event_callback_del
(sd->indicator, ELM_PLUG_EVENT_IMAGE_RESIZED, _indicator_resized, obj);
efl_del(sd->indicator);
sd->indicator = NULL;
sd->csd.need_indicator = EINA_FALSE;
_elm_win_frame_style_update(sd, 0, 1);
}
static Eo *
_elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_Ui_Win_Type type)
{
@ -5052,7 +5135,8 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U
_shot_init(sd);
sd->kbdmode = ELM_WIN_KEYBOARD_UNKNOWN;
sd->indmode = ELM_WIN_INDICATOR_UNKNOWN;
sd->legacy.indmode = ELM_WIN_INDICATOR_UNKNOWN;
sd->indimode = EFL_UI_WIN_INDICATOR_OFF;
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
@ -5310,6 +5394,9 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U
}
_elm_win_frame_add(sd, element, style);
if (sd->indimode != EFL_UI_WIN_INDICATOR_OFF)
_indicator_add(sd);
if (_elm_config->focus_highlight_enable)
elm_win_focus_highlight_enabled_set(obj, EINA_TRUE);
if (_elm_config->focus_highlight_animate)
@ -6355,32 +6442,37 @@ _efl_ui_win_keyboard_mode_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd)
}
EOLIAN static void
_efl_ui_win_indicator_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED, Eina_Bool enable EINA_UNUSED)
_efl_ui_win_indicator_mode_set(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd, Efl_Ui_Win_Indicator_Mode mode)
{
//TODO: this mode will be implemented after removing the conformant.
return;
sd->legacy.forbidden = EINA_TRUE;
if (sd->indimode == mode) return;
sd->indimode = mode;
if (sd->indimode == EFL_UI_WIN_INDICATOR_OFF)
{
_indicator_del(sd);
return;
}
if (!sd->indicator) _indicator_add(sd);
if (sd->indimode == EFL_UI_WIN_INDICATOR_BG_OPAQUE)
edje_object_signal_emit(sd->frame_obj, "elm,action,indicator,bg_opaque", "elm");
else if (sd->indimode == EFL_UI_WIN_INDICATOR_BG_TRANSPARENT)
edje_object_signal_emit(sd->frame_obj, "elm,action,indicator,bg_transparent", "elm");
else if (sd->indimode == EFL_UI_WIN_INDICATOR_HIDDEN)
edje_object_signal_emit(sd->frame_obj, "elm,action,indicator,hidden", "elm");
edje_object_message_signal_process(sd->frame_obj);
evas_object_smart_calculate(sd->frame_obj);
_elm_win_frame_obj_update(sd);
}
EOLIAN static Eina_Bool
_efl_ui_win_indicator_enabled_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED)
EOLIAN static Efl_Ui_Win_Indicator_Mode
_efl_ui_win_indicator_mode_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED)
{
//TODO: this mode will be implemented after removing the conformant.
return EINA_FALSE;
}
EOLIAN static void
_efl_ui_win_indicator_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED, Efl_Ui_Win_Indicator_Type type EINA_UNUSED)
{
//TODO: this mode will be implemented after removing the conformant.
return;
}
EOLIAN static Efl_Ui_Win_Indicator_Type
_efl_ui_win_indicator_type_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED)
{
//TODO: this mode will be implemented after removing the conformant.
return EFL_UI_WIN_INDICATOR_TYPE_UNKNOWN;
sd->legacy.forbidden = EINA_TRUE;
return sd->indimode;
}
EOLIAN static Eina_Bool
@ -7523,19 +7615,25 @@ elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode)
{
Efl_Ui_Win_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
if (!sd) return;
if (sd->legacy.forbidden)
{
CRI("Use of this API is forbidden after calling an EO API on this "
"window. Fix your code!");
return;
}
if (mode == sd->indmode) return;
if (mode == sd->legacy.indmode) return;
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
#endif
sd->indmode = mode;
sd->legacy.indmode = mode;
#ifdef HAVE_ELEMENTARY_X
if (sd->x.xwin)
{
if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
if (sd->legacy.indmode == ELM_WIN_INDICATOR_SHOW)
ecore_x_e_illume_indicator_state_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
else if (sd->legacy.indmode == ELM_WIN_INDICATOR_HIDE)
ecore_x_e_illume_indicator_state_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
}
@ -7549,8 +7647,14 @@ elm_win_indicator_mode_get(const Evas_Object *obj)
{
Efl_Ui_Win_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
if (!sd) return ELM_WIN_INDICATOR_UNKNOWN;
if (sd->legacy.forbidden)
{
CRI("Use of this API is forbidden after calling an EO API on this "
"window. Fix your code!");
return ELM_WIN_INDICATOR_UNKNOWN;
}
return sd->indmode;
return sd->legacy.indmode;
}
EAPI void
@ -7558,20 +7662,26 @@ elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opacity_Mode m
{
Efl_Ui_Win_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
if (!sd) return;
if (sd->legacy.forbidden)
{
CRI("Use of this API is forbidden after calling an EO API on this "
"window. Fix your code!");
return;
}
if (mode == sd->ind_o_mode) return;
sd->ind_o_mode = mode;
if (mode == sd->legacy.ind_o_mode) return;
sd->legacy.ind_o_mode = mode;
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
if (sd->ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
if (sd->legacy.ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
ecore_x_e_illume_indicator_opacity_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_OPAQUE);
else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSLUCENT)
else if (sd->legacy.ind_o_mode == ELM_WIN_INDICATOR_TRANSLUCENT)
ecore_x_e_illume_indicator_opacity_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
else if (sd->legacy.ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
ecore_x_e_illume_indicator_opacity_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_TRANSPARENT);
}
@ -7585,8 +7695,14 @@ elm_win_indicator_opacity_get(const Evas_Object *obj)
{
Efl_Ui_Win_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
if (!sd) return ELM_WIN_INDICATOR_OPACITY_UNKNOWN;
if (sd->legacy.forbidden)
{
CRI("Use of this API is forbidden after calling an EO API on this "
"window. Fix your code!");
return ELM_WIN_INDICATOR_OPACITY_UNKNOWN;
}
return sd->ind_o_mode;
return sd->legacy.ind_o_mode;
}
EAPI void

View File

@ -73,12 +73,12 @@ enum Efl.Ui.Win.Keyboard_Mode
j2me [[J2ME keyboard layout]]
}
enum Efl.Ui.Win.Indicator_Type
enum Efl.Ui.Win.Indicator_Mode
{
[[Defines the type indicator that can be shown]]
legacy: efl_ui_win_indicator;
type_unknown, [[Unknown indicator type]]
off, [[Request to deactivate the indicator]]
bg_opaque, [[The icon of indicator is opaque, the background of indicator is also opaque.
The content of window is located the end of indicator.
The area of indicator and window content are not overlapped]]
@ -168,8 +168,8 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Window,
eo_prefix: efl_ui_win;
event_prefix: efl_ui_win;
methods {
@property indicator_enabled {
[[In some environments, like phones, you may have an indicator that
@property indicator_mode {
[[In some environments, like phones, you may have an indicator that
shows battery status, reception, time etc. This is the indicator.
Sometimes you don't want it because you provide the same functionality
@ -187,23 +187,7 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Window,
legacy: null;
}
values {
enabled: bool; [[If $true, the indicator is enabled,
If $false, the indicator is disabled.]]
}
}
@property indicator_type {
[[The indicator type of the window.
@since 1.18
]]
set {
legacy: null;
}
get {
legacy: null;
}
values {
type: Efl.Ui.Win.Indicator_Type; [[The type, one of #Efl_Ui_Win_Indicator_Type.]]
type: Efl.Ui.Win.Indicator_Mode; [[The mype, one of #Efl_Ui_Win_Indicator_Mode.]]
}
}
@property keyboard_mode {