Enlightenment CVS committal
Author : devilhorns
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_int_config_clientlist.c e_int_menus.c
Log Message:
Patch from ravenlock for client list sorting by Most Recently Used &
stacking layer.
Nice Work :)
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_clientlist.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_int_config_clientlist.c 21 Feb 2007 00:05:27 -0000 1.1
+++ e_int_config_clientlist.c 1 Mar 2007 21:39:06 -0000 1.2
@@ -81,11 +81,12 @@
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 @@
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 @@
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, _("Most recently used"),
E_CLIENTLIST_SORT_MOST_RECENT, rg);
- e_widget_disabled_set(ob, 1);
+ 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, _("Z-Order"), E_CLIENTLIST_SORT_ZORDER, rg);
- e_widget_disabled_set(ob, 1);
+ ob = e_widget_radio_add(evas, _("Most recently used"),
E_CLIENTLIST_SORT_MOST_RECENT, 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, 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 @@
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;
}
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.198
retrieving revision 1.199
diff -u -3 -r1.198 -r1.199
--- e_int_menus.c 21 Feb 2007 01:03:37 -0000 1.198
+++ e_int_menus.c 1 Mar 2007 21:39:06 -0000 1.199
@@ -49,6 +49,14 @@
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 @@
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_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_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_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_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 @@
&& 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_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 @@
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);
}
}
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs