Hook in menu configuring of desktops and dynamic resizing
SVN revision: 12832
This commit is contained in:
parent
a38a5e1de9
commit
92315b7568
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue