I just noticed one other change that has to be made to make this bugfix robust. An updated patch is attached.
diff -c -3 -r1.106 engine.cpp
*** plugins/engine/3d/engine.cpp        8 Dec 2005 07:30:47 -0000       1.106
--- plugins/engine/3d/engine.cpp        15 Dec 2005 19:26:47 -0000
***************
*** 812,819 ****
  
    // Tell event queue that we want to handle broadcast events
    CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS(objectRegistry);
!   CanvasResize = csevCanvasResize (objectRegistry, G2D);
!   CanvasClose = csevCanvasClose (objectRegistry, G2D);
  
    csRef<iEventQueue> q = CS_QUERY_REGISTRY (objectRegistry, iEventQueue);
    if (q)
--- 812,822 ----
  
    // Tell event queue that we want to handle broadcast events
    CS_INITIALIZE_SYSTEM_EVENT_SHORTCUTS(objectRegistry);
!   if (G2D)
!   {
!     CanvasResize = csevCanvasResize (objectRegistry, G2D);
!     CanvasClose = csevCanvasClose (objectRegistry, G2D);
!   }
  
    csRef<iEventQueue> q = CS_QUERY_REGISTRY (objectRegistry, iEventQueue);
    if (q)
***************
*** 821,826 ****
--- 824,833 ----
      csEventID events[5] = { SystemOpen, SystemClose,
                            CanvasResize, CanvasClose,
                            CS_EVENTLIST_END };
+ 
+     // discard canvas events if there is no canvas, by truncating the array
+     if (!G2D) events[2] = CS_EVENTLIST_END;
+ 
      q->RegisterListener (scfiEventHandler, events);
    }
  
***************
*** 953,967 ****
            DeleteAll ();
            return true;
    }
!   else if (Event.Name == CanvasResize)
    {
            if (((iGraphics2D *)csCommandEventHelper::GetInfo(&Event)) == G2D)
              resize = true;
            return false;
!   }
!   else if (Event.Name == CanvasClose)
!   {
            return false;
    }
  
    return false;
--- 960,977 ----
            DeleteAll ();
            return true;
    }
!   else if (G2D)
    {
+     if (Event.Name == CanvasResize)
+     {
            if (((iGraphics2D *)csCommandEventHelper::GetInfo(&Event)) == G2D)
              resize = true;
            return false;
!     }
!     else if (Event.Name == CanvasClose)
!     {
            return false;
+     }
    }
  
    return false;

Reply via email to