forked from enlightenment/enlightenment
fix segv with orphaned windows when their desk goes bye bye.
SVN revision: 28526
This commit is contained in:
parent
8903420e4d
commit
e57524d44c
|
@ -337,7 +337,7 @@ e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count)
|
||||||
{
|
{
|
||||||
E_Desk **new_desks;
|
E_Desk **new_desks;
|
||||||
E_Desk *desk, *new_desk;
|
E_Desk *desk, *new_desk;
|
||||||
int x, y, xx, yy, moved;
|
int x, y, xx, yy, moved, nx, ny;
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
E_Event_Zone_Desk_Count_Set *ev;
|
E_Event_Zone_Desk_Count_Set *ev;
|
||||||
E_Border_List *bl;
|
E_Border_List *bl;
|
||||||
|
@ -350,6 +350,28 @@ e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count)
|
||||||
yy = y_count;
|
yy = y_count;
|
||||||
if (yy < 1) yy = 1;
|
if (yy < 1) yy = 1;
|
||||||
|
|
||||||
|
moved = 0;
|
||||||
|
if (zone->desk_x_current >= xx) moved = 1;
|
||||||
|
if (zone->desk_y_current >= yy) moved = 1;
|
||||||
|
if (moved)
|
||||||
|
{
|
||||||
|
nx = zone->desk_x_current;
|
||||||
|
ny = zone->desk_y_current;
|
||||||
|
if (zone->desk_x_current >= xx) nx = xx - 1;
|
||||||
|
if (zone->desk_y_current >= yy) ny = yy - 1;
|
||||||
|
printf("show desk %i,%i\n", nx, ny);
|
||||||
|
e_desk_show(e_desk_at_xy_get(zone, nx, ny));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
desk = e_desk_current_get(zone);
|
||||||
|
if (desk)
|
||||||
|
{
|
||||||
|
desk->visible = 0;
|
||||||
|
e_desk_show(desk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
new_desks = malloc(xx * yy * sizeof(E_Desk *));
|
new_desks = malloc(xx * yy * sizeof(E_Desk *));
|
||||||
for (x = 0; x < xx; x++)
|
for (x = 0; x < xx; x++)
|
||||||
{
|
{
|
||||||
|
@ -410,19 +432,6 @@ e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count)
|
||||||
zone->desk_x_count = xx;
|
zone->desk_x_count = xx;
|
||||||
zone->desk_y_count = yy;
|
zone->desk_y_count = yy;
|
||||||
|
|
||||||
moved = 0;
|
|
||||||
if (zone->desk_x_current >= xx)
|
|
||||||
moved = 1;
|
|
||||||
if (zone->desk_y_current >= yy)
|
|
||||||
moved = 1;
|
|
||||||
if (moved)
|
|
||||||
e_desk_show(e_desk_at_xy_get(zone, xx - 1, yy - 1));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
desk = e_desk_current_get(zone);
|
|
||||||
desk->visible = 0;
|
|
||||||
e_desk_show(desk);
|
|
||||||
}
|
|
||||||
e_config->zone_desks_x_count = xx;
|
e_config->zone_desks_x_count = xx;
|
||||||
e_config->zone_desks_y_count = yy;
|
e_config->zone_desks_y_count = yy;
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
|
Loading…
Reference in New Issue