TODO 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. plans for XplatUIX11.cs:
  2. - 1 thread watching X socket, doing nothing but
  3. XNextEvent/hwnd.Queue.Enqueue (with minimal motion
  4. compression/key repeat detection)
  5. - figure out how to deal with the selection events, since they
  6. busy loop waiting on a response from the X socket. maybe
  7. block that thread with an event and wake it up when the
  8. event thread get enough info?
  9. - Idle event raised once regardless of how many thread queues
  10. we have (should it come from the X event thread?)
  11. - X11Hwnd which caches (amongst other things) the properties
  12. for the toplevel window so we can avoid doing all those
  13. XChangeProperty things on every single UpdateStyle call.
  14. - have RULES for things (like "do not call this function
  15. except from ...", etc) and make sure they're enforced.
  16. - SendMessage.. can't we just insert the right message on the
  17. hwnd's queue instead of using SendAsyncMethod?
  18. - what's the difference between PostMessage and SendMessage?
  19. - clean up the MESS that is:
  20. GetWindowState
  21. SetWindowState
  22. and especially:
  23. SetHwndStyles
  24. SetWMStyles
  25. DeriveStyles
  26. the Style handling in CreateWindow
  27. - multiple screens? do we care? xinerama foo?
  28. - fix the mostly static, somewhat instance nature of
  29. XplatUIX11.cs. Either make it static, or make it an
  30. instance.
  31. - we need to rethink the expose event handling. right now
  32. expose events are only handled once all the other events in
  33. the queue are handled. So, if you're resizing quickly you
  34. get no redraws until you're done. maybe look at the
  35. _NET_WM_SYNC_REQUEST protocol (for the resize/redraw case
  36. specifically). Also, the current expose handling has us
  37. accessing the invalid list/rectangle from multiple threads.
  38. - factor out ALL knowledge of the multiple windows
  39. (client/whole) into the X11Hwnd class, so we can try to
  40. factor it out.
  41. - clean up the systray icon stuff - right now it destroys (!)
  42. the client_window and sets client_window == whole_window.
  43. ugh.
  44. - hwnds should keep track of the width/height they report to
  45. SWF as well as the x window's width/height. That is, we
  46. should allow hwnds with 0,0 width/height even though X
  47. doesn't allow it. There's some "zero_size" stuff in Hwnd,
  48. but it still appears impossible to have 0,0 sized controls.
  49. - window (subwindow, really) destruction should move to Hwnd
  50. if possible.
  51. - remove 90% of "lock (XlibLock)" usage. It's not really
  52. needed at all, except perhaps to synchronize the
  53. XEventThread and the PeekMessage/GetMessage methods.
  54. - the big synchronization problem now is the XEventQueue
  55. class. I think all queue operations need to be done while
  56. holding a lock, as the events are queued from the
  57. XEventThread and dequeued from GetMessage.
  58. possible classes:
  59. - XplatUIX11 (creates the first (only?) X11Display class.
  60. Most calls should just get the hwnd/display and make a
  61. method call)
  62. - X11Display (manages the display handle, creates the event
  63. thread, keeps ref to an X11Atoms and the X11RootHwnd)
  64. - XEventThread (does this need to be a separate class? can
  65. probably just be a method in X11Display)
  66. - X11Hwnd (move all the style translation here? handles
  67. property changes and caches them. window title here too)
  68. - X11RootHwnd (add the special root window property stuff
  69. here)
  70. - X11Atoms (per display atom list. should these be properties
  71. or fields? fields probably, with the builtins as constants).
  72. - Xlib (the pinvoke wrapper for Xlib calls)
  73. window managers we need to test again:
  74. - metacity on SLED/SUSE
  75. - metacity on ubuntu edgy
  76. - compiz on SLED
  77. - compiz HEAD
  78. - beryl? or should compiz be enough?
  79. specs:
  80. Extended Window Manager Hints: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html
  81. XEmbed spec: http://standards.freedesktop.org/xembed-spec/latest/
  82. Systray spec: http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html