changeset 1425:1628bf383893

Changes to _dw_redraw() to prevent infinite recursion on OS/2, Win and Mac.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 03 Dec 2011 04:40:35 +0000
parents 36d0e26a5dea
children dfd9f177c34c
files mac/dw.m os2/dw.c win/dw.c
diffstat 3 files changed, 19 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Sat Dec 03 03:40:48 2011 +0000
+++ b/mac/dw.m	Sat Dec 03 04:40:35 2011 +0000
@@ -155,15 +155,16 @@
 void _dw_redraw(id window, int skip)
 {
     static id lastwindow = nil;
+    id redraw = lastwindow;
     
     if(skip && window == nil)
-      return;
-
-    if(lastwindow != window && lastwindow != nil)
-    {
-        dw_window_redraw(lastwindow);
-    }
+        return;
+
     lastwindow = window;
+    if(redraw != lastwindow && redraw != nil)
+    {
+        dw_window_redraw(redraw);
+    }
 }
 
 SignalHandler *_get_handler(HWND window, int messageid)
--- a/os2/dw.c	Sat Dec 03 03:40:48 2011 +0000
+++ b/os2/dw.c	Sat Dec 03 04:40:35 2011 +0000
@@ -238,15 +238,16 @@
 void _dw_redraw(HWND window, int skip)
 {
     static HWND lastwindow = 0;
+    HWND redraw = lastwindow;
     
     if(skip && !window)
-      return;
-    
-    if(lastwindow != window && lastwindow)
+        return;
+
+    lastwindow = window;
+    if(redraw != lastwindow && redraw)
     {
-        dw_window_redraw(lastwindow);
+        dw_window_redraw(redraw);
     }
-    lastwindow = window;
 }
 
 /* Find the desktop window handle */
--- a/win/dw.c	Sat Dec 03 03:40:48 2011 +0000
+++ b/win/dw.c	Sat Dec 03 04:40:35 2011 +0000
@@ -186,15 +186,16 @@
 void _dw_redraw(HWND window, int skip)
 {
     static HWND lastwindow = 0;
+    HWND redraw = lastwindow;
     
     if(skip && !window)
-      return;
-    
-    if(lastwindow != window && lastwindow)
+        return;
+
+    lastwindow = window;
+    if(redraw != lastwindow && redraw)
     {
-        dw_window_redraw(lastwindow);
+        dw_window_redraw(redraw);
     }
-    lastwindow = window;
 }
 
 typedef struct _sighandler