Patch from ravenlock for client list sorting by Most Recently Used &
stacking layer. Nice Work :) SVN revision: 28516
This commit is contained in:
parent
fd550a8c56
commit
4c2a42eaa6
|
@ -81,11 +81,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
static Evas_Object *
|
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Evas_Object *o, *of, *ob;
|
||||
Evas_Object *o, *of, *ob, *ot;
|
||||
E_Radio_Group *rg;
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
||||
ot = e_widget_table_add(evas, 0);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Group By"), 0);
|
||||
rg = e_widget_radio_group_new(&(cfdata->group_by));
|
||||
ob = e_widget_radio_add(evas, _("None"), E_CLIENTLIST_GROUP_NONE, rg);
|
||||
|
@ -94,7 +95,8 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Window Class"), E_CLIENTLIST_GROUP_CLASS, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
//e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Separate Groups By"), 0);
|
||||
rg = e_widget_radio_group_new(&(cfdata->separate_with));
|
||||
|
@ -104,21 +106,21 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Using menus"), E_CLIENTLIST_GROUP_SEP_MENU, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
//e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Sort Order"), 0);
|
||||
of = e_widget_framelist_add(evas, _("Client Sort Order"), 0);
|
||||
rg = e_widget_radio_group_new(&(cfdata->sort_by));
|
||||
ob = e_widget_radio_add(evas, _("None"), E_CLIENTLIST_SORT_NONE, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Alphabetical"), E_CLIENTLIST_SORT_ALPHA, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Window stacking layer"), E_CLIENTLIST_SORT_ZORDER, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Most recently used"), E_CLIENTLIST_SORT_MOST_RECENT, rg);
|
||||
e_widget_disabled_set(ob, 1);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Z-Order"), E_CLIENTLIST_SORT_ZORDER, rg);
|
||||
e_widget_disabled_set(ob, 1);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
//e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
e_widget_table_object_append(ot, of, 0, 1, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Iconified Windows"), 0);
|
||||
rg = e_widget_radio_group_new(&(cfdata->separate_iconified_apps));
|
||||
|
@ -127,11 +129,13 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
ob = e_widget_radio_add(evas, _("Group with current desktop"), E_CLIENTLIST_GROUPICONS_CURRENT, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, _("Separate group"), E_CLIENTLIST_GROUPICONS_SEP, rg);
|
||||
e_widget_disabled_set(ob, 1);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_check_add(evas, _("Warp to owning desktop"), &(cfdata->warp_to_iconified_desktop));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
//e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
e_widget_list_object_append(o, ot, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
@ -49,6 +49,14 @@ static void _e_int_menus_clients_free_hook (void *obj);
|
|||
static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_clients_icon_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_clients_cleanup_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static int _e_int_menus_clients_group_desk_cb (void *d1, void *d2);
|
||||
static int _e_int_menus_clients_group_class_cb (void *d1, void *d2);
|
||||
static int _e_int_menus_clients_sort_alpha_cb (void *d1, void *d2);
|
||||
static int _e_int_menus_clients_sort_z_order_cb (void *d1, void *d2);
|
||||
static void _e_int_menus_clients_add_by_class (Evas_List *borders, E_Menu *m);
|
||||
static void _e_int_menus_clients_add_by_desk (E_Desk *curr_desk, Evas_List *borders, E_Menu *m);
|
||||
static void _e_int_menus_clients_add_by_none (Evas_List *borders, E_Menu *m);
|
||||
static void _e_int_menus_clients_menu_add_iconified (Evas_List *borders, E_Menu *m);
|
||||
static void _e_int_menus_virtuals_pre_cb (void *data, E_Menu *m);
|
||||
static void _e_int_menus_virtuals_item_cb (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_int_menus_themes_about (void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
@ -954,10 +962,48 @@ _e_int_menus_clients_sort_alpha_cb(void *d1, void *d2)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_e_int_menus_clients_sort_z_order_cb(void *d1, void *d2)
|
||||
{
|
||||
E_Border *bd1;
|
||||
E_Border *bd2;
|
||||
|
||||
if (!d1) return 1;
|
||||
if (!d2) return -1;
|
||||
|
||||
bd1 = d1;
|
||||
bd2 = d2;
|
||||
|
||||
if (bd1->layer < bd2->layer) return 1;
|
||||
if (bd1->layer > bd2->layer) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_clients_menu_add_iconified(Evas_List *borders, E_Menu *m)
|
||||
{
|
||||
Evas_List *l;
|
||||
E_Menu_Item *mi;
|
||||
|
||||
if (evas_list_count(borders) > 0)
|
||||
{
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
for (l = borders; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
bd = l->data;
|
||||
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_clients_add_by_class(Evas_List *borders, E_Menu *m)
|
||||
{
|
||||
Evas_List *l = NULL;
|
||||
Evas_List *l = NULL, *ico = NULL;
|
||||
E_Menu *subm = NULL;
|
||||
E_Menu_Item *mi;
|
||||
char *class = NULL;
|
||||
|
@ -967,8 +1013,16 @@ _e_int_menus_clients_add_by_class(Evas_List *borders, E_Menu *m)
|
|||
{
|
||||
E_Border *bd;
|
||||
bd = l->data;
|
||||
if (strcmp(class, bd->client.icccm.class) != 0 &&
|
||||
e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE)
|
||||
|
||||
if ((bd->iconic) &&
|
||||
(e_config->clientlist_separate_iconified_apps == E_CLIENTLIST_GROUPICONS_SEP))
|
||||
{
|
||||
ico = evas_list_append(ico, bd);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (((strcmp(class, bd->client.icccm.class) != 0) &&
|
||||
e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE))
|
||||
{
|
||||
if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
||||
{
|
||||
|
@ -990,17 +1044,20 @@ _e_int_menus_clients_add_by_class(Evas_List *borders, E_Menu *m)
|
|||
_e_int_menus_clients_item_create(bd, subm);
|
||||
else
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
}
|
||||
}
|
||||
|
||||
if ((e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
|
||||
&& subm && mi)
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
|
||||
_e_int_menus_clients_menu_add_iconified(ico, m);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Evas_List *borders, E_Menu *m)
|
||||
{
|
||||
E_Desk *desk = NULL;
|
||||
Evas_List *l = NULL, *alt = NULL;
|
||||
Evas_List *l = NULL, *alt = NULL, *ico = NULL;
|
||||
E_Menu *subm;
|
||||
E_Menu_Item *mi;
|
||||
|
||||
|
@ -1009,17 +1066,25 @@ _e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Evas_List *borders, E_Menu *
|
|||
{
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
bd = l->data;
|
||||
if (bd->iconic && e_config->clientlist_separate_iconified_apps && E_CLIENTLIST_GROUPICONS_SEP)
|
||||
{
|
||||
ico = evas_list_append(ico, bd);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (bd->desk != curr_desk)
|
||||
{
|
||||
if (!bd->iconic ||
|
||||
(bd->iconic && e_config->clientlist_separate_iconified_apps == E_CLIENTLIST_GROUPICONS_OWNER))
|
||||
if ((!bd->iconic) ||
|
||||
(bd->iconic && e_config->clientlist_separate_iconified_apps ==
|
||||
E_CLIENTLIST_GROUPICONS_OWNER))
|
||||
{
|
||||
alt = evas_list_append(alt, bd);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
else
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
}
|
||||
|
||||
desk = NULL;
|
||||
|
@ -1036,7 +1101,8 @@ _e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Evas_List *borders, E_Menu *
|
|||
{
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
bd = l->data;
|
||||
|
||||
if (bd->desk != desk &&
|
||||
e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE)
|
||||
{
|
||||
|
@ -1065,6 +1131,31 @@ _e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Evas_List *borders, E_Menu *
|
|||
&& subm && mi)
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
}
|
||||
|
||||
_e_int_menus_clients_menu_add_iconified(ico, m);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_int_menus_clients_add_by_none(Evas_List *borders, E_Menu *m)
|
||||
{
|
||||
Evas_List *l = NULL, *ico = NULL;
|
||||
E_Menu *subm;
|
||||
E_Menu_Item *mi;
|
||||
|
||||
for (l = borders; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
if (bd->iconic && e_config->clientlist_separate_iconified_apps && E_CLIENTLIST_GROUPICONS_SEP)
|
||||
{
|
||||
ico = evas_list_append(ico, bd);
|
||||
continue;
|
||||
}
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
}
|
||||
|
||||
_e_int_menus_clients_menu_add_iconified(ico, m);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1080,8 +1171,13 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
|||
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
||||
/* get the current clients */
|
||||
zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
|
||||
desk = e_desk_current_get(zone);
|
||||
for (l = e_border_client_list(); l; l = l->next)
|
||||
desk = e_desk_current_get(zone);
|
||||
|
||||
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_MOST_RECENT)
|
||||
l = e_border_focus_stack_get();
|
||||
else
|
||||
l = e_border_client_list();
|
||||
for (; l; l = l->next)
|
||||
{
|
||||
E_Border *border;
|
||||
|
||||
|
@ -1104,31 +1200,31 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
|
|||
|
||||
if (borders)
|
||||
{
|
||||
/* Sort the borders */
|
||||
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ALPHA)
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
_e_int_menus_clients_sort_alpha_cb);
|
||||
|
||||
if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ZORDER)
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
_e_int_menus_clients_sort_z_order_cb);
|
||||
|
||||
/* Group the borders */
|
||||
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_DESK)
|
||||
{
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
_e_int_menus_clients_group_desk_cb);
|
||||
_e_int_menus_clients_add_by_desk(desk, borders, m);
|
||||
_e_int_menus_clients_add_by_desk(desk, borders, m);
|
||||
}
|
||||
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_CLASS)
|
||||
{
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
_e_int_menus_clients_group_class_cb);
|
||||
_e_int_menus_clients_add_by_class(borders, m);
|
||||
{
|
||||
borders = evas_list_sort(borders, evas_list_count(borders),
|
||||
_e_int_menus_clients_group_class_cb);
|
||||
_e_int_menus_clients_add_by_class(borders, m);
|
||||
}
|
||||
if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_NONE)
|
||||
{
|
||||
for (l = borders; l; l = l->next)
|
||||
{
|
||||
E_Border *bd;
|
||||
|
||||
bd = l->data;
|
||||
_e_int_menus_clients_item_create(bd, m);
|
||||
}
|
||||
_e_int_menus_clients_add_by_none(borders, m);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue