Hook in menu configuring of desktops and dynamic resizing

SVN revision: 12832
This commit is contained in:
handyande 2005-01-08 17:32:08 +00:00 committed by handyande
parent a38a5e1de9
commit 92315b7568
5 changed files with 74 additions and 54 deletions

View File

@ -42,7 +42,6 @@ e_desk_new(E_Zone *zone, int x, int y)
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 @@ e_desk_show(E_Desk *desk)
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 @@ e_desk_show(E_Desk *desk)
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 @@ e_desk_next(E_Zone *zone)
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_prev(E_Zone *zone)
}
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

View File

@ -23,6 +23,7 @@ EAPI E_Desk *e_desk_new(E_Zone *zone, int x, int y);
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);

View File

@ -390,8 +390,8 @@ _e_int_menus_desktops_col_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
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_int_menus_desktops_col_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
E_Zone *zone;
zone = e_zone_current_get(root->con);
e_desk_row_remove(zone);
e_desk_col_remove(zone);
}
}

View File

@ -31,7 +31,6 @@ E_Zone *
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 @@ e_zone_new(E_Container *con, int x, int y, int w, int h)
}
/* 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 @@ _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_i
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));
}

View File

@ -31,6 +31,7 @@ EAPI void e_zone_move_resize(E_Zone *zone, int x, int y, int w, int h);
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