summaryrefslogtreecommitdiff
path: root/src/bin/e_zone.c
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2007-03-02 14:45:09 +0000
committerCarsten Haitzler <raster@rasterman.com>2007-03-02 14:45:09 +0000
commite57524d44c49eeb73d5aac329f2e81b9d6a4b761 (patch)
tree41bd8cd555f882a09303ca719268bf699700ab7e /src/bin/e_zone.c
parent8903420e4df3a27ba36f4cb2dba8ee116b9eae47 (diff)
downloadenlightenment-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.c37
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();