Ibar: Emit the given origin to the Ibar Icon.

Summary:
This fixes T1828.

The theme also would have to support this!

Reviewers: zmike

Subscribers: myoungwoon, cedric

Maniphest Tasks: T1828

Differential Revision: https://phab.enlightenment.org/D1798
This commit is contained in:
Marcel Hollerbach 2015-02-17 17:16:50 -05:00 committed by Mike Blumenkrantz
parent 0094ba4bf7
commit 9b3bdc57c2
1 changed files with 44 additions and 15 deletions

View File

@ -102,6 +102,7 @@ static void _ibar_resize_handle(IBar *b);
static void _ibar_instance_drop_zone_recalc(Instance *inst); static void _ibar_instance_drop_zone_recalc(Instance *inst);
static Config_Item *_ibar_config_item_get(const char *id); static Config_Item *_ibar_config_item_get(const char *id);
static IBar_Icon *_ibar_icon_at_coord(IBar *b, Evas_Coord x, Evas_Coord y); static IBar_Icon *_ibar_icon_at_coord(IBar *b, Evas_Coord x, Evas_Coord y);
static void _ibar_icon_origin_update(IBar_Icon *ic, Instance *inst);
static IBar_Icon *_ibar_icon_new(IBar *b, Efreet_Desktop *desktop, Eina_Bool notinorder); static IBar_Icon *_ibar_icon_new(IBar *b, Efreet_Desktop *desktop, Eina_Bool notinorder);
static IBar_Icon *_ibar_icon_notinorder_new(IBar *b, E_Exec_Instance *exe); static IBar_Icon *_ibar_icon_notinorder_new(IBar *b, E_Exec_Instance *exe);
static void _ibar_icon_free(IBar_Icon *ic); static void _ibar_icon_free(IBar_Icon *ic);
@ -299,44 +300,54 @@ _gc_shutdown(E_Gadcon_Client *gcc)
E_FREE(inst); E_FREE(inst);
} }
static Eina_Bool static int
_gc_vertical(Instance *inst) _convert_theme_ids(Instance *inst)
{ {
switch (inst->orient) switch (inst->orient)
{ {
case E_GADCON_ORIENT_FLOAT: case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ: case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_TOP: case E_GADCON_ORIENT_VERT:
return -1;
case E_GADCON_ORIENT_BOTTOM: case E_GADCON_ORIENT_BOTTOM:
case E_GADCON_ORIENT_CORNER_TL:
case E_GADCON_ORIENT_CORNER_TR:
case E_GADCON_ORIENT_CORNER_BL: case E_GADCON_ORIENT_CORNER_BL:
case E_GADCON_ORIENT_CORNER_BR: case E_GADCON_ORIENT_CORNER_BR:
return EINA_FALSE; return 0;
break; case E_GADCON_ORIENT_TOP:
case E_GADCON_ORIENT_CORNER_TL:
case E_GADCON_ORIENT_VERT: case E_GADCON_ORIENT_CORNER_TR:
return 1;
case E_GADCON_ORIENT_LEFT: case E_GADCON_ORIENT_LEFT:
case E_GADCON_ORIENT_RIGHT:
case E_GADCON_ORIENT_CORNER_LT: case E_GADCON_ORIENT_CORNER_LT:
case E_GADCON_ORIENT_CORNER_RT:
case E_GADCON_ORIENT_CORNER_LB: case E_GADCON_ORIENT_CORNER_LB:
return 2;
case E_GADCON_ORIENT_RIGHT:
case E_GADCON_ORIENT_CORNER_RT:
case E_GADCON_ORIENT_CORNER_RB: case E_GADCON_ORIENT_CORNER_RB:
return 3;
default: default:
break; break;
} }
return EINA_TRUE; return -1;
}
static Eina_Bool
_is_vertical(Instance *inst)
{
int pos = _convert_theme_ids(inst);
return (pos == 3 || pos == 2);
} }
static void static void
_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
{ {
Instance *inst; Instance *inst;
IBar_Icon *ic;
inst = gcc->data; inst = gcc->data;
if ((int)orient != -1) inst->orient = orient; if ((int)orient != -1) inst->orient = orient;
if (_gc_vertical(inst)) if (_is_vertical(inst))
{ {
_ibar_orient_set(inst->ibar, 0); _ibar_orient_set(inst->ibar, 0);
} }
@ -344,6 +355,11 @@ _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
{ {
_ibar_orient_set(inst->ibar, 1); _ibar_orient_set(inst->ibar, 1);
} }
EINA_INLIST_FOREACH(inst->ibar->icons, ic)
{
_ibar_icon_origin_update(ic, inst);
}
} }
static const char * static const char *
@ -645,7 +661,7 @@ _ibar_resize_handle(IBar *b)
} }
if (b->o_sep) if (b->o_sep)
{ {
if (_gc_vertical(b->inst)) if (_is_vertical(b->inst))
h = 16 * e_scale; h = 16 * e_scale;
else else
w = 16 * e_scale; w = 16 * e_scale;
@ -743,7 +759,7 @@ _ibar_sep_create(IBar *b)
b->o_sep = edje_object_add(evas_object_evas_get(b->o_box)); b->o_sep = edje_object_add(evas_object_evas_get(b->o_box));
E_FILL(b->o_sep); E_FILL(b->o_sep);
if (_gc_vertical(b->inst)) if (_is_vertical(b->inst))
e_theme_edje_object_set(b->o_sep, "base/theme/modules/ibar", "e/modules/ibar/separator/horizontal"); e_theme_edje_object_set(b->o_sep, "base/theme/modules/ibar", "e/modules/ibar/separator/horizontal");
else else
e_theme_edje_object_set(b->o_sep, "base/theme/modules/ibar", "e/modules/ibar/separator/default"); e_theme_edje_object_set(b->o_sep, "base/theme/modules/ibar", "e/modules/ibar/separator/default");
@ -776,6 +792,19 @@ _ibar_icon_at_coord(IBar *b, Evas_Coord x, Evas_Coord y)
return NULL; return NULL;
} }
static void
_ibar_icon_origin_update(IBar_Icon *ic, Instance *inst)
{
char buf[PATH_MAX];
char *pos[4] = {"bottom", "top", "right", "left"};
int position = _convert_theme_ids(inst);
if (position >= 0)
{
snprintf(buf, sizeof(buf), "e,origin,%s", pos[position]);
_ibar_icon_signal_emit(ic, buf, "e");
}
}
static IBar_Icon * static IBar_Icon *
_ibar_icon_new(IBar *b, Efreet_Desktop *desktop, Eina_Bool notinorder) _ibar_icon_new(IBar *b, Efreet_Desktop *desktop, Eina_Bool notinorder)
{ {