Implement priority sorting for quickpanels.

SVN revision: 44804
This commit is contained in:
Christopher Michael 2009-12-30 18:41:55 +00:00
parent 694a80290f
commit 0f08cc2cac
1 changed files with 29 additions and 0 deletions

View File

@ -13,6 +13,7 @@ static void _e_quickpanel_slide(E_Quickpanel *qp, int visible, double len);
static int _e_quickpanel_cb_animate(void *data);
static int _e_quickpanel_cb_delay_hide(void *data);
static void _e_quickpanel_hide(E_Quickpanel *qp);
static int _e_quickpanel_cb_sort(const void *b1, const void *b2);
/* local variables */
static Eina_List *qps = NULL, *handlers = NULL, *hooks = NULL;
@ -200,6 +201,8 @@ _e_quickpanel_cb_border_pre_post_fetch(void *data, void *data2)
e_border_fx_offset(bd, 0, (bd->h - th));
}
qp->borders = eina_list_append(qp->borders, bd);
qp->borders = eina_list_sort(qp->borders, -1, _e_quickpanel_cb_sort);
qp->borders = eina_list_reverse(qp->borders);
}
static E_Quickpanel *
@ -324,3 +327,29 @@ _e_quickpanel_hide(E_Quickpanel *qp)
_e_quickpanel_slide(qp, 0,
(double)il_cfg->sliding.quickpanel.duration / 1000.0);
}
static int
_e_quickpanel_cb_sort(const void *b1, const void *b2)
{
const E_Border *bd1, *bd2;
int major1, minor1;
int major2, minor2;
if (!(bd1 = b1)) return -1;
if (!(bd2 = b2)) return 1;
major1 = ecore_x_e_illume_quickpanel_priority_major_get(bd1->client.win);
major2 = ecore_x_e_illume_quickpanel_priority_major_get(bd2->client.win);
minor1 = ecore_x_e_illume_quickpanel_priority_minor_get(bd1->client.win);
minor2 = ecore_x_e_illume_quickpanel_priority_minor_get(bd2->client.win);
if (major1 < major2) return -1;
else if (major1 > major2) return 1;
else
{
if (major1 == major2)
{
if (minor1 < minor2) return -1;
else if (minor1 > minor2) return 1;
}
}
return 0;
}