Skip to content
  1. Apr 06, 2024
  2. Mar 20, 2024
  3. Mar 15, 2024
  4. Feb 09, 2024
  5. Nov 26, 2023
  6. Oct 29, 2023
  7. Sep 23, 2023
  8. Aug 11, 2023
  9. Jul 10, 2023
  10. May 10, 2023
  11. Mar 23, 2023
  12. Mar 06, 2023
  13. Jan 09, 2023
  14. Dec 24, 2022
  15. Oct 24, 2022
  16. Oct 22, 2022
  17. Oct 17, 2022
  18. Oct 16, 2022
  19. Oct 15, 2022
  20. Oct 05, 2022
    • Alberts Muktupāvels's avatar
      display: avoid unnecessary stack changes · 2e7e3ed4
      Alberts Muktupāvels authored
      Currently docks are raised when a mouse enters the window and are
      lowered when mouse leaves it. Typically this will make unnecessary
      stack changes and unneeded screen redraw.
      
      Functions meta_window_raise and meta_window_lower raises or lowers
      windows within the window layer. For dock windows that means that
      raising/lowering happens between windows in META_LAYER_BOTTOM layer
      or META_LAYER_DOCK/META_LAYER_TOP layers.
      
      In typical configuration with top and bottom panels this means that
      rasing/lowering happens between both panels for no reason. Stop doing
      that if dock does not overlap with other windows in same layer.
      
      Dock raising was added in commit 7be4c63e when panel was put in
      the nromal layer.
      2e7e3ed4
  21. Oct 04, 2022
    • Alberts Muktupāvels's avatar
      display: remove extra unmap events with same window and serial · 3db07faf
      Alberts Muktupāvels authored
      Single XUnmapWindow call can result in multiple UnmapNotify events.
      
      Linked issue has attached python code intended to reproduce original
      bug and can be used to reproduce multiple UnmapNotify events for the
      same window.
      
      Steps to reproduce problem:
      1. Run python3 Untitled.py;
      2. Undock one of the application's child windows;
      3. Minimize main window;
      4. Unminimize main window.
      
      On drag start metacity gets map event - new MetaWindow is created.
      This window has override_redirect set to true, metacity selects
      StructureNotifyMask events. When child window is dropped outside
      main window we get 3 unmap events!
      
      One event was sent because we asked X server to do that by selecting
      StructureNotifyMask events. Second event was sent because child
      window parent was root window. We have asked for such events on root
      window by selecting SubstructureNotifyMask events. Third event seems
      to come from XSendEvent.
      
      At this point these multiple events are not problem. MetaWindow is
      destroyed when we get first event and rest are ignored.
      
      After that application sends map request and we create new
      MetaWindow. This time override_redirect is not set and we choose to
      not select StructureNotifyMask events. Unfortunately this mask is
      already in your_event_mask as we are not unselecting events when
      window is unmanaged.
      
      Now when we minimize main window (step 3) also dock window is
      minimized. We are just hiding window so we are adding pending unmap
      event so we can ignore it when it will arrive. On first event we
      correctly detect that it should be ignored but once second event
      arrives we are unmanaging this window.
      
      And here is our problem - trying to unminimize main window only
      main window gets restored! Main window does not find child window
      because it is destroyed.
      
      Use XCheckIfEvent to remove extra UnmapNotify events that has same
      window and serial preventing unnecessary window destruction.
      
      #31
      3db07faf
  22. Oct 03, 2022
  23. Sep 30, 2022