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);
|
desk->name = strdup(name);
|
||||||
e_object_ref(E_OBJECT(zone));
|
e_object_ref(E_OBJECT(zone));
|
||||||
|
|
||||||
zone->desks[x + (y * zone->desk_x_count)] = (E_Object *) desk;
|
|
||||||
return desk;
|
return desk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,8 +85,7 @@ e_desk_show(E_Desk *desk)
|
||||||
for (y = 0; y < desk->zone->desk_y_count; y++)
|
for (y = 0; y < desk->zone->desk_y_count; y++)
|
||||||
{
|
{
|
||||||
E_Desk *next;
|
E_Desk *next;
|
||||||
next =
|
next = e_desk_at_xy_get(desk->zone,x, y);
|
||||||
(E_Desk *)desk->zone->desks[x + (y * desk->zone->desk_x_count)];
|
|
||||||
next->visible = 0;
|
next->visible = 0;
|
||||||
if (next == desk)
|
if (next == desk)
|
||||||
{
|
{
|
||||||
|
@ -103,62 +101,45 @@ e_desk_show(E_Desk *desk)
|
||||||
void
|
void
|
||||||
e_desk_row_add(E_Zone *zone)
|
e_desk_row_add(E_Zone *zone)
|
||||||
{
|
{
|
||||||
|
e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_desk_row_remove(E_Zone *zone)
|
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
|
void
|
||||||
e_desk_col_add(E_Zone *zone)
|
e_desk_col_add(E_Zone *zone)
|
||||||
{
|
{
|
||||||
|
e_zone_desk_count_set(zone, zone->desk_x_count + 1, zone->desk_y_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_desk_col_remove(E_Zone *zone)
|
e_desk_col_remove(E_Zone *zone)
|
||||||
{
|
{
|
||||||
|
if (zone->desk_x_count < 2)
|
||||||
}
|
|
||||||
/*
|
|
||||||
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)
|
|
||||||
return;
|
return;
|
||||||
l = evas_list_find_list(desk->zone->desks, desk);
|
e_zone_desk_count_set(zone, zone->desk_x_count - 1, zone->desk_y_count);
|
||||||
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_Desk *
|
E_Desk *
|
||||||
e_desk_current_get(E_Zone *zone)
|
e_desk_current_get(E_Zone *zone)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
|
||||||
|
|
||||||
E_OBJECT_CHECK_RETURN(zone, NULL);
|
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
|
void
|
||||||
|
@ -185,7 +166,7 @@ e_desk_next(E_Zone *zone)
|
||||||
y = 0;
|
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
|
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
|
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_name_set(E_Desk *desk, const char *name);
|
||||||
EAPI void e_desk_show(E_Desk *desk);
|
EAPI void e_desk_show(E_Desk *desk);
|
||||||
EAPI E_Desk *e_desk_current_get(E_Zone *zone);
|
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_next(E_Zone *zone);
|
||||||
EAPI void e_desk_prev(E_Zone *zone);
|
EAPI void e_desk_prev(E_Zone *zone);
|
||||||
EAPI void e_desk_row_add(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)
|
if (root && root->con)
|
||||||
{
|
{
|
||||||
E_Zone *zone = e_zone_current_get(root->con);
|
E_Zone *zone = e_zone_current_get(root->con);
|
||||||
e_desk_row_add(zone);
|
e_desk_col_add(zone);
|
||||||
// e_desk_show(desk);
|
// 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;
|
E_Zone *zone;
|
||||||
|
|
||||||
zone = e_zone_current_get(root->con);
|
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_new(E_Container *con, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
E_Zone *zone;
|
E_Zone *zone;
|
||||||
E_Desk *desk;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
zone = E_OBJECT_ALLOC(E_Zone, _e_zone_free);
|
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) */
|
/* Start off with 4 desktops (2x2) */
|
||||||
zone->desk_x_count = 2;
|
zone->desk_x_count = 0;
|
||||||
zone->desk_y_count = 2;
|
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;
|
return zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,3 +245,47 @@ _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_i
|
||||||
zone = data;
|
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 E_Zone *e_zone_current_get(E_Container *con);
|
||||||
EAPI void e_zone_bg_reconfigure(E_Zone *zone);
|
EAPI void e_zone_bg_reconfigure(E_Zone *zone);
|
||||||
EAPI Evas_List *e_zone_clients_list_get(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
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue