Skip to content
Snippets Groups Projects
  1. Nov 28, 2020
  2. Nov 22, 2020
  3. Nov 21, 2020
  4. Nov 15, 2020
  5. Nov 14, 2020
  6. Nov 11, 2020
    • Olivier Fourdan's avatar
      client: Keep tiled size of windows · 93154517
      Olivier Fourdan authored
      
      Tiling works by moving and resizing windows to a specific location  on
      screen.
      
      GTK clients using client-side decorations (aka CSD) draw the drop shadow
      themselves and use the property _GTK_FRAME_EXTENTS to let the window
      manager or compositor know about the actual relative frame size and
      location.
      
      GTK automatically removes the drop shadow on some specific window
      states, such as fullscreen or maximized, and restores the drop shadow
      when the window returns to a normal state.
      
      If that update occurs after the tiled size was computed, the drop shadow
      is not accounted for and the window will appear smaller than the actual
      expected tiled size.
      
      To avoid that issue, the window manager should recompute the tiled size
      whenever the _GTK_FRAME_EXTENTS is updated.
      
      Store the tiled mode and recompute the tiled size/location of windows
      when the frame extents or the screen size change.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      Closes: #450
      93154517
    • Olivier Fourdan's avatar
      compositor: No need to update compositor window on configure · d1d15f82
      Olivier Fourdan authored
      
      Right now, resizing a window would immediately update the compositor
      representation of that window.
      
      The compositor, however, is able to catch the changes on configure
      notify, so there is no need to force that update early.
      
      Remove the resize of the compositor window on each configure requests.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      d1d15f82
    • Olivier Fourdan's avatar
      compositor: Limit opaque region clipping to window extents · d474e073
      Olivier Fourdan authored
      
      The opaque region is set and updated by the client, which may lag when
      the window is resized.
      
      That may leave unpainted areas when resizing a window as the opaque
      region set by the client could be actually larger than the window itself
      and hence prevent areas to be updated while they should, causing
      artifacts on screen.
      
      Make sure to limit the clipping of the opaque region by the window
      extents to avoid the issue.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      d474e073
    • Olivier Fourdan's avatar
      compositor: Damage on opaque region update only if visible · 59e94fb3
      Olivier Fourdan authored
      
      If a client updates the opaque region of its window, regions previously
      opaque may become transparent, meaning that they would need to be
      repainted to let other windows underneath see through.
      
      The compositor already computes that and adds damage for the relevant
      regions.
      
      Make sure to do that only for visible and redirected windows, other
      windows shouldn't trigger that though.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      59e94fb3
  7. Nov 04, 2020
    • Olivier Fourdan's avatar
      client: Send synthetic configure on force redraw · 67595558
      Olivier Fourdan authored
      
      xfwm4 sends a synthetic configure event when required as per the ICCCM
      specification, but a force redraw as when maximizing a window while
      moving generates a fake move, which defats the logic.
      
      Make sure to send a synthetic configure event on force redraw, that
      fixes an issue with VTE terminals (like xfce4-terminal) which do not
      resize correctly if maximized while pushing toward the top of the
      screen.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      67595558
  8. Nov 01, 2020
  9. Oct 31, 2020
    • Olivier Fourdan's avatar
      compositor: Add support for opaque regions · e2c690a9
      Olivier Fourdan authored
      
      Opaque region is a hint set by the clients via the _NET_WM_OPAQUE_REGION
      property to indicate the compositor which regions of an ARGB window are
      considered opaque and therefore can be culled out during repaint.
      
      While this is of little use with regular RGB windows, with the planned
      move to client-side decorations in xfce, we'll have more and more ARGB
      windows, making such an optimization a beneficial improvement.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      e2c690a9
    • Olivier Fourdan's avatar
      compositor: Make cursor zoom optional · 39eb0435
      Olivier Fourdan authored
      
      Xfwm4 4.14 made the cursor zoom along with the desktop. While this
      sounds like a sensible thing to do, it's not necessarily an improvement
      for accessibility, because an enlarged cursor also hides what's being
      zoomed underneath.
      
      Add a new option to control whether the pointer is zoomed along with the
      rest of the desktop.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      Closes: xfce/xfwm4#439
      39eb0435
  10. Oct 30, 2020
  11. Oct 27, 2020
  12. Sep 19, 2020
    • Olivier Fourdan's avatar
      More XErrors traps · 3119b50b
      Olivier Fourdan authored
      
      Previously we would leak error traps in free_win_data() causing
      slowdowns overtime as the list of requests grows.
      
      While fixing the leak is crucial, it also unveiled several places where
      actual error traps are missing, causing xfwm4 to abort more often.
      
      Based on XErrors reported, the issue is triggered when freeing pixmaps
      or render pictures.
      
      Add more XErrors traps to catch those errors.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      xfce/xfwm4#433
      xfce/xfwm4#435
      xfce/xfwm4#436
      3119b50b
  13. Sep 16, 2020
    • bob5972's avatar
      compositor: Add cwindow_hash to optimize find_cwindow_in_screen · a1fbb8f1
      bob5972 authored and bob5972's avatar bob5972 committed
      
      On my system when the window manager is mostly idling (0-12 tiny
      updates per second), about half the CPU time in xfwm4 is spent in
      find_cwindow_in_screen, iterating the linked list looking for a
      matching Window id.  Instead, this patch adds a GHashTable to map
      Window ids to CWindows, completely eliminating that cost in my
      profiles, resulting in a 0.3-1.0% of a core total CPU reduction for
      this workload.
      
      Signed-off-by: default avatarMichael Banack <bob5972@banack.net>
      a1fbb8f1
    • bob5972's avatar
      compositor: Add define for compositor_timeout_cb interval · 2fa246ca
      bob5972 authored and bob5972's avatar bob5972 committed
      
      The call to g_timeout_add in add_repair seems to be mixing up priority
      and callback interval.  Instead, let's call g_timeout_add_full to make
      it clear there are two separate fields, and add an appropriate define
      for the callback interval, setting it to the same 1ms value it was
      currently using.
      
      Signed-off-by: default avatarMichael Banack <bob5972@banack.net>
      2fa246ca
  14. Aug 08, 2020
    • bob5972's avatar
      compositor: use g_slice allocator for compositor windows · 390af609
      bob5972 authored and Olivier Fourdan's avatar Olivier Fourdan committed
      On my system, 2-4% of the CPU time in xfwm4 is being spend in
      find_cwindow_in_screeni() pulling in entries from the linked list on
      a lightly updating desktop.
      
      After this change, 25-50% of that CPU is gone, presumably because the
      slice allocators have better locality of the list-entries.
      
      Closes: #416
      390af609
    • bob5972's avatar
      Fix errorTrap leak in free_win_data · e6a32cf7
      bob5972 authored and Olivier Fourdan's avatar Olivier Fourdan committed
      The function free_win_data() may generate X11 errors as the client
      window may already be gone.
      
      To avoid those, the entire function code is supposed to be enclosed
      within an error trap/push.
      
      A typo in the code would however push twice instead of a balanced
      push/pop which causes the list of event sequences in GDK to grow
      indefinitely, leading to slowdowns as the list grows over time.
      
      Fix the leak by balancing the error push with an error pop at the end
      of the function.
      
      xfce/xfwm4#351
      e6a32cf7
    • Olivier Fourdan's avatar
      compositor: use actual atom · 78c5dc42
      Olivier Fourdan authored
      
      The function compositorCheckCMSelection() would use the atom index in
      our table of atoms, instead of the actual atom, so this is unlikely to
      work as expected.
      
      Fix the code to use the appropriate atom as it should.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      78c5dc42
    • Olivier Fourdan's avatar
      cleanup: prefer zero initialized memory allocation · b510bdba
      Olivier Fourdan authored
      
      Prefer using memory allocation functions which initialize the memory
      with 0's to be on the safe side.
      
      No functional change.
      
      Signed-off-by: default avatarOlivier Fourdan <fourdan@xfce.org>
      b510bdba
  15. Jul 27, 2020
Loading