Unix.DisplayRefresher.Mod 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. MODULE DisplayRefresher; (** AUTHOR "staubesv"; PURPOSE "Force redraw of default viewport when receiving a X11 expore event"; *)
  2. IMPORT
  3. Modules, KernelLog, Inputs, WMMessages, WMWindowManager;
  4. VAR
  5. manager : WMWindowManager.WindowManager;
  6. viewport : WMWindowManager.ViewPort;
  7. (* Message preview handler for window manager. MUST NOT TRAP!!! *)
  8. PROCEDURE Handle(VAR msg : WMMessages.Message; VAR discard : BOOLEAN);
  9. VAR meta : BOOLEAN;
  10. BEGIN
  11. discard := FALSE;
  12. IF msg.msgType = WMMessages.MsgKey THEN
  13. meta := (msg.flags * Inputs.Meta # {}) OR ((msg.flags * Inputs.Alt # {}) & (msg.flags * Inputs.Shift # {}));
  14. IF ~meta & (msg.y = 0FFC6H) THEN
  15. manager.RefreshView(viewport);
  16. END;
  17. END;
  18. END Handle;
  19. PROCEDURE Install*;
  20. BEGIN (* load module *)
  21. END Install;
  22. PROCEDURE Cleanup;
  23. BEGIN
  24. IF (manager # NIL) THEN manager.RemoveMessagePreview(Handle); END;
  25. END Cleanup;
  26. BEGIN
  27. Modules.InstallTermHandler(Cleanup);
  28. manager := WMWindowManager.GetDefaultManager();
  29. viewport := WMWindowManager.GetDefaultView();
  30. IF (manager # NIL) & (viewport # NIL) THEN
  31. manager.InstallMessagePreview(Handle);
  32. KernelLog.String("DisplayRefresher installed.");
  33. ELSE
  34. KernelLog.String("DisplayRefresher installation failed (could not find window manager or viewport) ");
  35. END;
  36. KernelLog.Ln;
  37. END DisplayRefresher.
  38. DisplayRefresher.Install ~
  39. System.Free DisplayRefresher ~