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 *desk, *new_desk;
|
||||
int x, y, xx, yy, moved;
|
||||
int x, y, xx, yy, moved, nx, ny;
|
||||
E_Border *bd;
|
||||
E_Event_Zone_Desk_Count_Set *ev;
|
||||
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;
|
||||
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 *));
|
||||
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_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_y_count = yy;
|
||||
e_config_save_queue();
|
||||
|
|
Loading…
Reference in New Issue