fix segv with orphaned windows when their desk goes bye bye.

SVN revision: 28526
This commit is contained in:
Carsten Haitzler 2007-03-02 14:45:09 +00:00
parent 8903420e4d
commit e57524d44c
1 changed files with 23 additions and 14 deletions

View File

@ -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();