1. 05 Nov, 2020 2 commits
  2. 04 Nov, 2020 1 commit
  3. 03 Nov, 2020 4 commits
  4. 02 Nov, 2020 1 commit
  5. 31 Oct, 2020 4 commits
  6. 30 Oct, 2020 1 commit
  7. 27 Oct, 2020 1 commit
  8. 20 Oct, 2020 3 commits
  9. 18 Oct, 2020 8 commits
  10. 16 Oct, 2020 1 commit
    • Isaac Freund's avatar
      xdg_positioner: remove unused field · 616f06c2
      Isaac Freund authored and emersion's avatar emersion committed
      The resource field of wlr_xdg_positioner is never initialized or
      accessed within wlroots. The wl_resource for this interface is stored
      in the wlr_xdg_positioner_resource struct.
      616f06c2
  11. 14 Oct, 2020 1 commit
  12. 13 Oct, 2020 1 commit
    • Tudor Brindus's avatar
      xwayland: notify requestor when we fail to respond to their request · afeb941c
      Tudor Brindus authored and emersion's avatar emersion committed
      We already mostly did this, but there were a couple of branches
      (`calloc` failures) where we'd bail without letting the other side know.
      
      Refs swaywm/sway#4007. Likely not going to be a real improvement there
      (if `calloc` fails you're already pretty screwed), but it does address a
      theoretical possibility.
      afeb941c
  13. 12 Oct, 2020 1 commit
    • Tudor Brindus's avatar
      xwayland: remove stale transfers from the same requestor · 7bb9d48d
      Tudor Brindus authored and emersion's avatar emersion committed
      It seems that if we ever try to reply to a selection request after
      another has been sent by the same requestor (we reply in FIFO order),
      the requestor never reads from it, and we end up stalling forever on a
      transfer that will never complete.
      
      It appears that `XCB_SELECTION_REQUEST` has some sort of singleton
      semantics, and new requests for the same selection are meant to replace
      outstanding older ones. I couldn't find a reference for this, but
      empirically this does seem to be the case.
      
      Real (contrived) case where we don't currently do this, and things break:
      
      * run fcitx
      * run Slack
      * wl-copy < <(base64 /opt/firefox/libxul.so)  # or some other large file
      * focus Slack (no need to paste)
      
      fcitx will send in an `XCB_SELECTION_REQUEST`, and we'll start
      processing it. Immediately after, Slack sends its own. fcitx hangs for a
      long, long time. In the meantime, Slack retries and sends another
      selection request. We now have two pending requests from Slack.
      
      Eventually fcitx gives up (or it can be `pkill`'d), and we start
      processing the first request Slack gave us (FIFO). Slack (Electron?)
      isn't listening on the other end anymore, and this transfer never
      completes. The X11 clipboard becomes unusable until Slack is killed.
      
      After this patch, the clipboard is immediately usable again after fcitx
      bails. Also added a bunch of debug-level logging that makes diagnosing
      this sort of issue easier.
      
      Refs swaywm/sway#4007.
      7bb9d48d
  14. 11 Oct, 2020 4 commits
    • Tudor Brindus's avatar
      xwayland: introduce WLR_XWAYLAND for specifying which Xwayland to use · 1b0e4c7e
      Tudor Brindus authored and emersion's avatar emersion committed
      When debugging Xwayland-related issues, a common first step in debugging
      has been to ask the reporter to move their real Xwayland to
      /usr/bin/Xwayland.bin, and create a shell script starting Xwayland with
      extra arguments under the original /usr/bin/Xwayland location.
      
      Introducing a `WLR_XWAYLAND` environment variable makes this less
      invasive, by allowing the user to swap out Xwayland without resorting to
      global system changes (or source patches).
      1b0e4c7e
    • Tudor Brindus's avatar
      xwayland: fix use-after-free in selection handling · feb0e1c7
      Tudor Brindus authored and emersion's avatar emersion committed
      Fixes #2425.
      
      wlroots can only handle one outgoing transfer at a time, so it keeps a
      list of pending selections. The head of the list is the currently-active
      selection, and when that transfer completes and is destroyed, the next
      one is started.
      
      The trouble is when you have a transfer to some app that is misbehaving.
      fcitx is one such application. With really large transfers, fcitx will
      hang and never wake up again. So, you can end up with a transfer list
      that looks like this:
      
      | T1: started | T2: pending | T3: pending | T4: pending |
      
      The file descriptor for transfer T1 is registered in libwayland's epoll
      loop. The rest are waiting in wlroots' list.
      
      As a user, you want your clipboard back, so you `pkill fcitx`. Now
      Xwayland sends `XCB_DESTROY_NOTIFY` to let us know to give up. We clean
      up T4 first.
      
      Due to a bug in wlroots code, we register the (fd, transfer data
      pointer) pair for T1 with libwayland *again*, despite it already being
      registered. We do this 2 more times as we remove T3 and T2.
      
      Finally, we remove T1 and `free` all the memory associated with it,
      before `close`-ing its transfer file descriptor.
      
      However, we still have 3 copies of T1's file descriptor left in the
      epoll loop, since we erroneously added them as part of removing T2/3/4.
      When we `close` the file descriptor as part of T1's teardown, we
      actually cause the epoll loop to wake up the next time around, saying
      "this file descriptor has activity!" (it was closed, so `read`-ing would
      normally return 0 to let us know of EOF).
      
      But instead of returning 0, it returns -1 with `EBADF`, because the file
      descriptor has already been closed. And finally, as part of error-handling
      this, we access the transfer pointer, which was `free`'d. And we crash.
      feb0e1c7
    • Tudor Brindus's avatar
      xwayland: using %m in `wlr_log` is broken, use `wlr_log_errno` instead · ab80ad90
      Tudor Brindus authored and emersion's avatar emersion committed
      This one was awful to track down, but calls to `wlr_log` with %m have
      the errno masked by the `isatty` call in `log_stderr`. Switch them to
      `wlr_log_errno` instead.
      
      Cue quality "how can read(2) POSSIBLY be returning ENOTTY?" moments.
      ab80ad90
    • Tudor Brindus's avatar
      examples: use `perror` instead of `fprintf` GNU %m `printf` extension · ec3f432b
      Tudor Brindus authored and emersion's avatar emersion committed
      ec3f432b
  15. 10 Oct, 2020 1 commit
  16. 09 Oct, 2020 2 commits
    • Roman Gilg's avatar
      output-management-v1: send complete head state on enable change · 86c0b998
      Roman Gilg authored and emersion's avatar emersion committed
      The data of a head is only sent when it is enabled. While the head was disabled
      data might have been changed. In this case clients were not informed about this
      change. A later enable change that does not also update the other data must
      still lead to the propagation of this data.
      
      Since we do not know what other data was changed while the head was disabled
      just send together with an enable change all current data.
      86c0b998
    • Isaac Freund's avatar
      layer-shell: error on 0 dimension without anchors · 8dec751a
      Isaac Freund authored and emersion's avatar emersion committed
      The protocol requires clients to set opposing anchors when requesting
      a width or height of 0.
      
      The goal of this patch is not to break clients that rely on this
      behavior but to improve the consistency of the layer shell ecosystem
      through adherence to the protocol.
      8dec751a
  17. 08 Oct, 2020 1 commit
  18. 16 Sep, 2020 1 commit
    • emersion's avatar
      backend: remove check for _WAYLAND_DISPLAY · 87836dcb
      emersion authored
      I'm not sure what this was used for, but it's not used by libwayland.
      Setting _WAYLAND_DISPLAY would result in the Wayland backend being
      picked but would ignore the actual value of the env variable.
      87836dcb
  19. 10 Sep, 2020 1 commit
    • Isaac Freund's avatar
      layer-shell: add for_each_popup · 8ad2cc39
      Isaac Freund authored and emersion's avatar emersion committed
      This brings the layer-shell api in line with that of xdg-shell and
      avoids reimplementing this function in every compositor in order to
      render layer shell popups correctly.
      8ad2cc39
  20. 04 Sep, 2020 1 commit