forked from enlightenment/efl
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:
parent
ac63a74d1d
commit
26272bf3a2
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue