e-modules/engage: fix 'show current desk' mode (hope so). leak-- in label set

SVN revision: 58350
This commit is contained in:
Hannes Janetzek 2011-04-05 11:27:39 +00:00
parent 1aa2f196be
commit 3cf509f063
2 changed files with 59 additions and 54 deletions

View File

@ -1489,11 +1489,16 @@ _ngi_redraw(Ng *ng)
else
evas_object_hide(box->separator);
pos = 0;
EINA_LIST_FOREACH (box->items, l, it)
{
double size;
if (!l->prev)
if (it->scale == 0.0)
continue;
if (pos == 0)
{
_ngi_zoom_function(ng, it->pos - ng->pos, &pos);
pos = (double)it->pos + pos;

View File

@ -114,9 +114,12 @@ ngi_taskbar_remove(Ngi_Box *box)
static int
_border_check(Ngi_Box *box, E_Border *bd)
{
if (box->cfg->taskbar_show_desktop && bd->desk != e_desk_current_get(box->ng->zone))
return 0;
/* if (box->cfg->taskbar_show_desktop && bd->desk != e_desk_current_get(box->ng->zone))
* return 0; */
if (box->ng->zone != bd->zone)
return 0;
if (box->cfg->taskbar_show_iconified == 0 && bd->iconic)
return 0;
@ -377,48 +380,33 @@ _cb_border_event(void *data, int type, void *event)
return ECORE_CALLBACK_PASS_ON;
}
/* FIXME set it->visible to skip icons */
static Eina_Bool
_cb_desk_show(void *data, int type, void *event)
{
/* E_Event_Desk_Show *ev = (E_Event_Desk_Show*) event; */
Ng *ng;
Ngi_Box *box;
E_Event_Desk_Show *ev = event;
Ngi_Box *box = data;
Ngi_Item_Taskbar *it;
Eina_List *l, *ll, *lll;
E_Desk *desk;
int changed = 0;
Eina_List *l;
EINA_LIST_FOREACH (ngi_config->instances, l, ng)
{
EINA_LIST_FOREACH (ng->boxes, ll, box)
{
if ((box->cfg->type != taskbar) ||
(!box->cfg->taskbar_show_desktop))
continue;
EINA_LIST_FOREACH(box->items, l, it)
{
if ((it->border->desk == ev->desk) || (it->border->sticky))
{
evas_object_show(it->base.obj);
evas_object_show(it->base.over);
it->base.scale = 1.0;
}
else
{
evas_object_hide(it->base.obj);
evas_object_hide(it->base.over);
it->base.scale = 0.0;
}
}
ngi_thaw(box->ng);
desk = e_desk_current_get(ng->zone);
EINA_LIST_FOREACH (box->items, lll, it)
{
if (it->border->desk == desk)
{
changed = 1;
it->base.scale = 1.0;
}
else
{
changed = 1;
it->base.scale = 0.0;
}
}
if (changed)
ngi_thaw(ng);
changed = 0;
}
}
return EINA_TRUE;
return ECORE_CALLBACK_PASS_ON;
}
/* *************************** TASKBAR ITEM *************************** */
@ -427,6 +415,7 @@ static void
_item_new(Ngi_Box *box, E_Border *bd)
{
Ngi_Item_Taskbar *it, *l_it = NULL, *ll_it = NULL;
Ngi_Item *item;
Eina_List *l;
if (!_border_check(box, bd))
@ -437,7 +426,8 @@ _item_new(Ngi_Box *box, E_Border *bd)
it = E_NEW(Ngi_Item_Taskbar, 1);
it->base.box = box;
ngi_item_init_defaults((Ngi_Item*)it);
item = (Ngi_Item*) it;
ngi_item_init_defaults(item);
e_object_ref(E_OBJECT(bd));
it->border = bd;
@ -491,14 +481,24 @@ _item_new(Ngi_Box *box, E_Border *bd)
box->items = eina_list_prepend(box->items, it);
}
ngi_item_show((Ngi_Item*)it, 0);
if ((box->cfg->taskbar_show_desktop) &&
(bd->desk != e_desk_current_get(box->ng->zone)) &&
(!bd->sticky))
{
ngi_item_show(item, 1);
item->scale = 0.0;
}
else
{
ngi_item_show(item, 0);
}
if (bd->iconic)
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,iconic,on");
ngi_item_signal_emit(item, "e,state,taskbar,iconic,on");
it->urgent = bd->client.icccm.urgent;
if (it->urgent)
ngi_item_signal_emit((Ngi_Item*)it, "e,state,taskbar,urgent,on");
ngi_item_signal_emit(item, "e,state,taskbar,urgent,on");
}
static void
@ -507,7 +507,7 @@ _item_cb_free(Ngi_Item *item)
Ngi_Item_Taskbar *it = (Ngi_Item_Taskbar *) item;
if (it->urgent)
ngi_bar_lock(((Ngi_Item*)it)->box->ng, 0);
ngi_bar_lock(item->box->ng, 0);
if (it->border)
e_object_unref(E_OBJECT(it->border));
@ -558,11 +558,9 @@ _border_icon_add(E_Border *bd, Evas *evas)
{
evas_object_del(o);
o = e_icon_add(evas);
double tmp = e_scale;
e_scale = 3.0;
e_icon_scale_size_set(o, 128);
if (!e_util_icon_theme_set(o, bd->internal_icon))
e_util_icon_theme_set(o, "enlightenment");
e_scale = tmp;
}
}
else
@ -687,17 +685,19 @@ _item_set_label(Ngi_Item_Taskbar *it)
{
char *abbv;
const char *left, *right;
abbv = (char *)calloc(E_CLIENTLIST_MAX_CAPTION_LEN + 4, sizeof(char));
abbv = E_NEW(char, E_CLIENTLIST_MAX_CAPTION_LEN + 4);
left = title;
right = title + (strlen(title) - (max_len / 2));
strncpy(abbv, left, max_len / 2);
strncat(abbv, "...", 3);
strncat(abbv, right, max_len / 2);
ngi_item_label_set((Ngi_Item*)it, abbv);
return;
ngi_item_label_set((Ngi_Item*)it, abbv);
E_FREE(abbv);
return;
}
ngi_item_label_set((Ngi_Item*)it, title);