Enlightenment CVS committal Author : handyande Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_desk.c e_desk.h e_int_menus.c e_zone.c e_zone.h Log Message: Hook in menu configuring of desktops and dynamic resizing =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- e_desk.c 8 Jan 2005 14:41:21 -0000 1.11 +++ e_desk.c 8 Jan 2005 17:32:07 -0000 1.12 @@ -42,7 +42,6 @@ desk->name = strdup(name); e_object_ref(E_OBJECT(zone)); - zone->desks[x + (y * zone->desk_x_count)] = (E_Object *) desk; return desk; } @@ -86,8 +85,7 @@ for (y = 0; y < desk->zone->desk_y_count; y++) { E_Desk *next; - next = - (E_Desk *)desk->zone->desks[x + (y * desk->zone->desk_x_count)]; + next = e_desk_at_xy_get(desk->zone,x, y); next->visible = 0; if (next == desk) { @@ -103,62 +101,45 @@ void e_desk_row_add(E_Zone *zone) { - + e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count + 1); } void e_desk_row_remove(E_Zone *zone) { - + if (zone->desk_y_count < 2) + return; + e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count - 1); } void e_desk_col_add(E_Zone *zone) { - + e_zone_desk_count_set(zone, zone->desk_x_count + 1, zone->desk_y_count); } void e_desk_col_remove(E_Zone *zone) { - -} -/* -void -e_desk_remove(E_Desk *desk) -{ - Evas_List *l; - E_Desk *previous; - - E_OBJECT_CHECK(desk); - if (evas_list_count(desk->zone->desks) < 2) + if (zone->desk_x_count < 2) return; - l = evas_list_find_list(desk->zone->desks, desk); - l = l->prev; - if (!l) l = evas_list_last(desk->zone->desks); - previous = l->data; - - for (l = desk->clients; l; l = l->next) - { - E_Border *bd = l->data; - e_border_desk_set(bd, previous); - } - desk->zone->desks = evas_list_remove(desk->zone->desks, desk); - if (desk->visible) - e_desk_show(previous); - - evas_list_free(desk->clients); - e_object_del(E_OBJECT(desk)); + e_zone_desk_count_set(zone, zone->desk_x_count - 1, zone->desk_y_count); } -*/ + E_Desk * e_desk_current_get(E_Zone *zone) { - Evas_List *l; - E_OBJECT_CHECK_RETURN(zone, NULL); - return (E_Desk *)zone->desks[zone->desk_x_current + (zone->desk_y_current * zone->desk_x_count)]; + return e_desk_at_xy_get(zone, zone->desk_x_current, zone->desk_y_current); +} + +E_Desk * +e_desk_at_xy_get(E_Zone *zone, int x, int y) +{ + E_OBJECT_CHECK_RETURN(zone, NULL); + + return (E_Desk *) zone->desks[x + (y * zone->desk_x_count)]; } void @@ -185,7 +166,7 @@ y = 0; } - e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]); + e_desk_show(e_desk_at_xy_get(zone, x, y)); } void @@ -213,7 +194,7 @@ } - e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]); + e_desk_show(e_desk_at_xy_get(zone, x, y)); } static void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- e_desk.h 8 Jan 2005 14:41:21 -0000 1.5 +++ e_desk.h 8 Jan 2005 17:32:08 -0000 1.6 @@ -23,6 +23,7 @@ EAPI void e_desk_name_set(E_Desk *desk, const char *name); EAPI void e_desk_show(E_Desk *desk); EAPI E_Desk *e_desk_current_get(E_Zone *zone); +EAPI E_Desk *e_desk_at_xy_get(E_Zone *zone, int x, int y); EAPI void e_desk_next(E_Zone *zone); EAPI void e_desk_prev(E_Zone *zone); EAPI void e_desk_row_add(E_Zone *zone); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- e_int_menus.c 8 Jan 2005 14:41:21 -0000 1.24 +++ e_int_menus.c 8 Jan 2005 17:32:08 -0000 1.25 @@ -390,8 +390,8 @@ if (root && root->con) { E_Zone *zone = e_zone_current_get(root->con); - e_desk_row_add(zone); - // e_desk_show(desk); + e_desk_col_add(zone); +// e_desk_show(desk); } } @@ -405,7 +405,7 @@ E_Zone *zone; zone = e_zone_current_get(root->con); - e_desk_row_remove(zone); + e_desk_col_remove(zone); } } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- e_zone.c 8 Jan 2005 14:41:21 -0000 1.7 +++ e_zone.c 8 Jan 2005 17:32:08 -0000 1.8 @@ -31,7 +31,6 @@ e_zone_new(E_Container *con, int x, int y, int w, int h) { E_Zone *zone; - E_Desk *desk; int i; zone = E_OBJECT_ALLOC(E_Zone, _e_zone_free); @@ -79,18 +78,12 @@ } /* Start off with 4 desktops (2x2) */ - zone->desk_x_count = 2; - zone->desk_y_count = 2; + zone->desk_x_count = 0; + zone->desk_y_count = 0; + zone->desk_x_current = 0; + zone->desk_y_current = 0; + e_zone_desk_count_set(zone, 2, 2); - zone->desks = - malloc(zone->desk_x_count * zone->desk_y_count * sizeof(E_Desk *)); - - int xx, yy; - for (xx = 1; xx >= 0; xx--) - for(yy = 1; yy >= 0; yy--) - desk = e_desk_new(zone, xx, yy); - - e_desk_show(desk); return zone; } @@ -252,3 +245,47 @@ zone = data; } +void +e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count) +{ + E_Object **new_desks; /* match the bug in e_zone.h */ + E_Desk *desk; + int x, y, reshow; + + new_desks = + malloc(x_count * y_count * sizeof(E_Desk *)); + + for (x = 0; x < x_count; x++) + for(y = 0; y < y_count; y++) + { + if (x < zone->desk_x_count && y < zone->desk_y_count) + desk = (E_Desk *) zone->desks[x + (y * zone->desk_x_count)]; + else + desk = e_desk_new(zone, x, y); + new_desks[x + (y * x_count)] = (E_Object *) desk; + } + +/* FIXME catch thigns that have fallen off the end if we got smaller */ + + if (zone->desks) + free(zone->desks); + zone->desks = new_desks; + + zone->desk_x_count = x_count; + zone->desk_y_count = y_count; + + reshow = 0; + if (zone->desk_x_current >= x_count) + { + zone->desk_x_current = x_count - 1; + reshow = 1; + } + if (zone->desk_y_current >= y_count) + { + zone->desk_y_current = y_count - 1; + reshow = 1; + } + if (reshow) + e_desk_show(e_desk_at_xy_get(zone, x_count - 1, y_count - 1)); +} + =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- e_zone.h 8 Jan 2005 14:41:21 -0000 1.4 +++ e_zone.h 8 Jan 2005 17:32:08 -0000 1.5 @@ -31,6 +31,7 @@ EAPI E_Zone *e_zone_current_get(E_Container *con); EAPI void e_zone_bg_reconfigure(E_Zone *zone); EAPI Evas_List *e_zone_clients_list_get(E_Zone *zone); +EAPI void e_zone_desks_set(E_Zone *zone, int x_count, int y_count); #endif ------------------------------------------------------- The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs