diff options
author | Carsten Haitzler <raster@rasterman.com> | 2007-03-02 14:45:09 +0000 |
---|---|---|
committer | Carsten Haitzler <raster@rasterman.com> | 2007-03-02 14:45:09 +0000 |
commit | e57524d44c49eeb73d5aac329f2e81b9d6a4b761 (patch) | |
tree | 41bd8cd555f882a09303ca719268bf699700ab7e /src/bin/e_zone.c | |
parent | 8903420e4df3a27ba36f4cb2dba8ee116b9eae47 (diff) | |
download | enlightenment-e57524d44c49eeb73d5aac329f2e81b9d6a4b761.tar.gz |
fix segv with orphaned windows when their desk goes bye bye.
SVN revision: 28526
Diffstat (limited to 'src/bin/e_zone.c')
-rw-r--r-- | src/bin/e_zone.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c index 238ffcdd89..12e669d31b 100644 --- a/src/bin/e_zone.c +++ b/src/bin/e_zone.c @@ -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(); |