phoc (0.57~rc1) experimental; urgency=medium

  * ci: Update to latest image.
    We don't need to pull gmobile from SID anymore either
  * tree: Drop G_GNUC_CONST from get_type()
    First call has side effects, see
    https://gitlab.gnome.org/GNOME/glib/-/merge_requests/5223
    for details.
  * wlroots: Update to 0.20.2
  * view: Get vfunc to get pidfd
  * xdg-toplevel: Implement get_pidfd.
    We can get the pidfd from the socket.
  * phoc-foreign-toplevel-pidfd: Add protocol implementation.
    This allows us to send a pidfd to privileged clients
  * examples: Add client that tracks toplevels and their pids
  * xdg-toplevel: Define SO_PEERPIDFD if missing.
    This helps musl until it catched up
    Thanks to Achill Gilgenast

 -- Guido Günther <agx@sigxcpu.org>  Mon, 10 Aug 2026 15:39:22 +0200

phoc (0.56.0) experimental; urgency=medium

  [ Ekaterine Papava ]
  * po: Add Georgian translation

 -- Guido Günther <agx@sigxcpu.org>  Fri, 03 Jul 2026 15:28:49 +0200

phoc (0.56~rc1) experimental; urgency=medium

  * cairo-texture: Mark texture as invalid when renderer goes away.
    This avoids a crash on shutdown when e.g. phoc's spinner is active
    and phosh aborts during startup. In this case the renderer is
    disposed so
      g_clear_pointer (&self->texture, wlr_texture_destroy);
    would access access free'd memory. Lots of ppl got mislead in
    thinking that the phoc crash is the root cause, so let's fix this.
  * doc: Document missing options.
    This should now cover most of the gsettings we handle
  * wlroots: Update to 0.20.1.
    We update two screenshots due to the pixman changes that brings
    it in line with the GLES2 renderer.
  * server: Move xdg-toplevel related protocols from desktop.
    We want new protocols at the server object and since we add new
    xdg-toplevel related ones, move the existing ones here.
  * view: Add tag.
    A view can have a tag. This could set by the xdg-toplevel-tag protocol
    or `__NET_WM_WINDOW_TAG` atom.
  * xdg-toplevel: Handle xdg-toplevel-tag protocol

 -- Guido Günther <agx@sigxcpu.org>  Sun, 28 Jun 2026 13:20:04 +0200

phoc (0.55.0) experimental; urgency=medium

  [ nicole mikołajczyk ]
  * po: Add Polish translation
  * po: Fix typo
  * po: Update LINGUAS

 -- Guido Günther <agx@sigxcpu.org>  Fri, 15 May 2026 08:13:42 +0200

phoc (0.55~rc1) experimental; urgency=medium

  * view: Rename `view` to `self`
    Clean up the remaining bits
  * examples/idle: Fix typo
  * contributing: Add contributing information.
    As per our https://www.apc.org review as part of
    https://nlnet.nl/project/Phosh-Notch/
    the preferred name here is CONTRIBUTING.md so let's use that.
    While at that shorten and simplify the document moving the
    coding style recommendations to a web page thus avoiding the
    libhandy reference.
  * keyboard: Fall back to default keymap when empty.
    Use reasonable defaults if the gsetting is unset. Otherwise
    we e.g. fail to load any keybindings.
  * cursor: Convert all edges to allow corner resizing.
    Otherwise we never see the corner resize cursor when using server side
    decorations.
    The edges and margins are still hard to hit but that's a separate issue.
  * output: Make damage-ring private.
    Since
    520efc8e3 ("render: Fix debug damage tracking")
    this doesn't leak into the renderer anymore so fix this TODO.
  * output: Don't store desktop on output.
    Get it from the server like everywhere else
  * data: Make sure to rebuild the schema when it changed
  * types: Add convenience macro for color creation
  * view: Emit signals when view moves or changes size
  * view: Add fullscreen property.
    Allows to listen for changes
  * style-manager: New class to track accent color.
    We'll also move other style information there.
  * cursor: Use accent color for tile/maximize suggestions
  * color-rect: Make a derivable class
  * view-deco: Add getters for border width and title bar height
  * view: Allow to insert blings at the end.
    This allows to have them rendered on top of other blings. We could
    move to a tree here for more granular ordering in a follow up.
  * view: Add generic margin value.
    Used for SSD decorations. Will later be used for tile margin
    and focus border.
  * view: Don't scale-to-fit tiled views.
    We reset the scale in this case as there's no point in shrinking views
    when tiling. Warn the user about it for now.
  * view: Use a margin when tiling.
    Add a margin around tiled windows. This will be filled with the focus
    frame later on. The margin is the same as SSDs so that these fit in
    perfectly.
  * view: Add focus border.
    We introduce a new class that draws a border when the view is focused
    and should appear activated.
    Technically we draw a full rectangle until we can make use of the
    xdg-toplevel-shape protocol.
  * desktop: Mark legacy schema as such.
    We'll move that to mobi.phosh but not this cycle
    as we already have the alpha1 out and don't want
    to break distros that already ship it.
  * view: Allow to disable focus frame.
    It's on by default but people might want to turn it off.
  * tests: Disable focus frame.
    That way we don't need to update the screenshots (and then again
    when we improve the frame rendering). It's not particular useful
    for the current tests anyway.
  * renderer: Hook up renderer-lost signal.
    This allows to recreate the renderer after e.g. GPU resets.
    Modelled after what sway does.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/427
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/316
  * tree: Use same increment.
    We use `i++` in all for loops except for two files. Fix that up.
  * xdg-dialog: Track modal dialogs via the xdg-dialog-v1 protocol
  * gtk-shell: Sort headers alphabetically.
    Update copyright too.
  * gtk-shell: Support marking views as modal
  * seat: Focus modal dialog if possible.
    We need to make sure we emit the token from the original view.
    Check with
        phoc -E gtk4-demo
    and open the about dialog. Clicking on the main window keeps focus
    on the about dialog.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/365
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/199
  * xdg-toplevel: Catch up with gtk-modal state on map.
    The view needs to be mapped for this as we need the wlr_surface
    so do it when seeing the map event.
  * keyboard: Log which keyboard reloaded settings
  * ptk: Always set above relationship.
    We skipped that between subsurfaces thus not checking that
    code path. Do so and fix it while at that.
  * build: Enable gcc's analyzer

 -- Guido Günther <agx@sigxcpu.org>  Fri, 08 May 2026 18:06:02 +0200

phoc (0.55~alpha1) experimental; urgency=medium

  [ Ryo Nakano ]
  * po: Add missing de to LINGUAS
  * po: Add Japanese translation

  [ Guido Günther ]
  * reuse: Add Linguas
  * packaging: Install translations
  * wlroots: Update to f04ef79f.
    Update to f04ef79f ("build: bump version to 0.20.0-dev")
    No changes needed
  * wlroots: Update to c2327248.
    Update to c2327248 ("output: don't send make/model")
    No changes needed
  * wlroots: Update to 62c86fb.
    Update to 62c86fb ("Add support for XKB_LED_NAME_COMPOSE and XKB_LED_NAME_KANA USB HID LEDs Requires xkbcommon 1.8.0")
    No changes needed
  * wlroots: Update to 2d5492c.
    Update to 2d5492c ("text-input-v3: Use `NULL` when emitting signals")
    Adjust sginal name
  * wlroots: Update to a08acfc.
    Update to a08acfc ("render/pass: Ensure the precision is consistent during comparison")
    No changes needed
  * wlroots: Update to 6aa654b.
    Update to 6aa654b ("wlr_text_input_v3: remove event arguments from header")
    No changes needed
  * wlroots: Update to ad1b2f2.
    Update to ad1b2f2 ("Avoid including generated headers publicly where possible")
  * wlroots: Update to 06aacb2.
    Update to 06aacb2 ("input-method: rename input_method event to new_input_method")
    Adjust signal name
  * wlroots: Update to 102a6bd.
    Update to 102a6bd ("input-method: use `NULL` when emitting signals")
  * wlroots: Update to 7cb3393.
    Update to 7cb3393 ("scene: send color_management_v1 surface feedback")
  * wlroots: Update to 9119b8a.
    Update to 9119b8a ("session: simplify libudev unref handling")
  * wlroots: Update to 84d603ac.
    Update to 84d603ac ("xwayland: take wlr_buffer in wlr_xwayland_set_cursor()")
    Adjust our wlr_xwayland_set_cursor use for that.
  * wlroots: Update to 0.20.0~rc1
  * wlroots: Update to 0.20.0~rc3
  * wlroots: Update to 0.20.0~rc5.
    No changes needed.
  * server: Move privileged protocol check.
    We want to move desktop into server so make it easier to add
    new protocols there.
  * server: Support ext-data-control-manager-v1.
    We add that as new protocol to the server rather than the desktop.
  * server: Move new image capture protocols to server
  * wlroots: Update to 0.20.0

 -- Guido Günther <agx@sigxcpu.org>  Thu, 09 Apr 2026 18:39:51 +0200

phoc (0.54.0) experimental; urgency=medium

  * No changes over 0.54~rc1

 -- Guido Günther <agx@sigxcpu.org>  Fri, 03 Apr 2026 17:05:47 +0200

phoc (0.54~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * switch: Don't assert on unknown switch types
    libinput might introduce new ones at any time
  * wlroots: Add build fixes for libinput 1.31
  * desktop: Remove unused headers.
    We include plenty, no need to include ones that aren't direclty used.
  * desktop: Use pointer comparison.
    This makes it obvious that we're not checking a boolean
  * workspace-manager: Name property consistently.
    The property is `active` not `workspace`.
  * workspace-manager: Document properties
  * desktop: Unmap workspace indicator before removing it.
    This ensures the area gets properly damaged
  * workspace-manager: When switching worskpaces focus last focused view.
    This ensures the focus is always on the current workspace. We can simplify this
    by switching to per-workspace SeatViews at some point but let's get it correct
    first.
    Only do so when explicitly asked for to keep things usable in situations where
    focus moves by other means (e.g. activation).
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/425
    Teemu Ikonen <tpikonen@mailbox.org>
  * view: Don't exit early if already fullscreen on the output.
    Different clients want to update geometry later on and currently
    we shourtcut it.
    Fixes: d846bf134 ("view: Clear fullscreen output when switching outputs")
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/428
    Tested-by: Teemu Ikonen <tpikonen@mailbox.org>
  * server: Destroy clients early.
    We want them disconnected before freeing the renderer or other
    things.
  * output: Actually handle preferred mode.
    The logic was inverted so when we wanted to pick a preferred mode
    we ended up in the custom mode path.
    This fixes
    ```sh
    $ wlr-randr --output eDP-1 --mode 2880x1920@120
    $ wlr-randr --output eDP-1 --mode 2880x1920@60.000999Hz
    ```
    for a laptop with
    ```
      Modes:
        2880x1920 px, 120.000000 Hz (preferred, current)
        2880x1920 px, 60.000999 Hz (preferred)
    ```
    Also switching refresh rate via g-c-c works again.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/429
    Fixes: c1ef0ea88 ("output: Use PhocOutputConfig with head states too")
  * event: Drop forward declarations.
    Headers are cleaned up sufficiently nowadays
  * cursor: Simplify.
    Initializing priv early is fine as long as we don't access it
  * wlroots: Update to 0.19.3
  * treewide: Drop unused defines.
    We don't use any _XOPEN_SOURCE or _POSIX_C_SOURCE specific things
    so drop them.
    While at that improve the header ordering in those files. Luckily
    our headers are sufficiently disentangled nowadays that we can
    also sort phoc's headers alphabetically.
  * seat: Split out phoc_seat_set_focus_surface.
    Nice we cleaned that up recently. Will be used for override_redirect
    XWayland handling.
  * xwayland-unmanaged: New class to handle unmanged surfaces.
    These are called unmanaged because the X11 window manager should
    not worry about them.
    We track the position in layout coordinates.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * xwayland-surface: Flip to unmanaged when needed.
    When a xwayland-surface becomes override redirect we create
    an unmanged surface from it.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * desktop: Create unmanaged xwayland surfaces.
    We call them unmanaged instead of override-redirect as we might have
    other unmanaged surfaces later on.
    That's also why we call things "unmanaged" outside the
    `PhocXWaylandUnmanaged` class: If needed we introduce a common
    `PhocUmanaged` base class.
    Simple test case is
    ```
    GDK_BACKEND=x11 gtk3-demo --run=combobox
    ```
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/352
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/44
  * workspace: Allow to add and remove unmanaged surfaces.
    Needed for XWayland `override-redirect` handling
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * desktop: Allow to add, remove and iterate unmanaged surfaces.
    Needed for override-redirect handling
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * output: Add iterators for unmanaged surfaces.
    Similar to what we do for other surface types.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * render: Render unmanaged surfaces.
    Unmanaged go on top of views.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * desktop: Check surface positions for unmanaged surfaces.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/351
  * seat: Drop override redirect case handling.
    XWayland views don't have that set anymore since unmanaged
    surfaces are handled separately.
  * xwayland-surface: Remove override-redirect paths.
    These are handled in a separate class now

  [ Gotam Gorabh ]
  * ci: Update shared scripts to 4a59c2b
  * ci: Use common g-style check.
    Drop the local `g-style` script and use the shared CI check
    from meta-phosh instead. This check is configured to detect
    gchar, gdouble, gfloat, and gint usages.
  * tests/test-xx-cutouts: Drop gint use

 -- Guido Günther <agx@sigxcpu.org>  Thu, 26 Mar 2026 09:13:30 +0100

phoc (0.53.0) experimental; urgency=medium

  * No changes over rc1

 -- Guido Günther <agx@sigxcpu.org>  Sat, 14 Feb 2026 14:10:26 +0100

phoc (0.53~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * desktop: Sort protocols alphabetically
  * view: Simplify clearing toplevel handles
  * server: Bump default buffer size.
    Otherwise we might run out of space with the 4096 byte default.
    Use 1 MiB instead.
  * layer-shell-effects: Remove unused header
  * keybindings: Split out updating accelerators
  * keybindings: Move creating a binding into its own functions
  * keyboards: Move keybindings to keyboard.
    Giving each keyboard its own keybinding instance will allow them
    to have different keysyms when necessary.
    This will allow us to parse pseudo keysyms like `above_tab` per layout.
    The fact that the keybindings are part of `PhocConfig` is mostly historic.
  * keybindings: Properly namespace parser
  * keybindings: Fix indent
  * keybindings: Allow to set context.
    This allows other places in phoc to set data relevant for keybinding parsing.
    This is a bit more generic than passing in the keyboard and also makes it
    clear which data we're actually interested in.
  * keyboard: Update keybindings context when layout changes.
    This is currently a noop.
  * keybindings: Allow to add context argument to parsing
  * keydings: Add a simple parser test
  * view: Don't rely on g_return_fail to be compiled enabled.
    This shouldn't be dependent on G_DISABLE_CHECKS.
  * view: Don't get server multiple times.
    Makes for shorter calls.
  * pointer: Log when we got a 0 serial on button press/release.
    This might indicate that press/release got out of sync but can
    also just be that there's no grab (e.g. when clicking on empty
    screen area).
  * view-child: Don't invoke phoc_input_update_cursor_focus on map.
    This prevents us from resetting the mouse button press counter
    as tracked by wlroots when the button press/release pops up a
    subsurface:
    ```
    phoc_view_child_map_default
      --> phoc_input_update_cursor_focus
        --> phoc_cursor_update_position
          --> send_pointer_enter
            --> wlr_seat_pointer_notify_enter resets button counter
    ```
    Due to that button counter reset we lose the button up event
    as the following
    ```
    send_pointer_button
      --> wlr_seat_pointer_notify_button
    ```
    doesn't see the button as pressed anymore.
    This makes some popups in inkscape (built from a subsurface) or
    some buttons in GTK3 inspector unclickable.
    To reproduce try to change e.g. a boolean property of a widget in
    GTK3 inspector. The opened popup closes when clicking the button
    in the popup instead of toggling the button.
    Same in inkscape when you draw a rectangle and right click on it.
    Selection from the menu then isn't possible.
    As we don't do it on map we shouldn't do it on unmap either.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/406
  * output: Add helper to set fullscreen view.
    Use this from where we set a view as fullscreen
  * view: Clear fullscreen output when switching outputs.
    When switching from one output to another we should clear the
    old one. We also shouldn't overwrite saved geometry with a
    fullscreen geometry in this case.
  * seat: Don't unfullscreen views when they lose focus.
    We only clear and set the outputs notion of fullscreen so scanout, etc
    happens correctly.
  * seat: Exit early when new focus view is old one.
    We don't want to change the fullscreen state in that case.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/386
  * ci: Update to 2025-02-04
  * tablet: Move structs to tablet class.
    This makes the seat header more seat specific and groups the
    tablets ones. We'll split out the pad soon into its own object.
  * seat: Use GSList for tablet pads.
    This treats all input devices the same way
  * tablet: Make TabletPad a GObject.
    This allows us to reuse our PhocInputDevice class
  * seat: Move tablet pad focus handling to PhocTabletPad.
    Addresses another FIXME. We also add sending leave events.
  * tablet-pad: Move most of the device init over from seat.
    This reduces our seat class (which needs some polishing)
  * seat: Drop PhocTablet typedef.
    With the structs moved we don't need to forward declare it.
  * tablet-pad: Move tablet attach to class
  * tablet-pad: Use PhocInputDevice's destroy handling.
    Use the parent class handling so we can drop the listener.
  * tablet-pad: Make class struct private.
    We've removed all direct references
  * tablet: Remove unused links from tool
  * seat: Split out tablet-tool as well.
    We could put it into the tablet unit but let's just use a separte one
  * seat: Drop phoc_ prefix from tool.
    Leftovers from rootston
  * tablet-tool: Add setter for tilt values
  * tablet-tool: Drop unused variables
  * desktop-xwayland: Set log domain.
    Otherwise we can't get useful logs out there
  * desktop-xwayland: Print more surface details.
    Size is relevant for e.g. fullscreen / maxmize
  * input: Remove unused desktop
  * input: Remove unused includes
  * view: Use `self` in view_center.
    We still have some cleanup to do, let's start here. We move
    some variable declarations to the top too.
  * examples/layer-shell-effects: Move anchor optarg parsing into function.
    Cleanup a bit while at that.
  * examples/layer-shell-effects: Set some reasonable defaults.
    Default to emulating a top panel so we don't need to specify dozens
    of options for this.
    As the anchor option can be given multiple times we need to clear the
    default if there are options on the command line.
  * examples/layer-shell-effects: Move layers optarg parsing into function
  * xwayland-surface: Pick up non-1 surface size.
    When starting an X11 application maximized or fullscreen we see
    a 1x1 surface size from Xwayland initially that only later gets
    updated.
    At that point the view_save() for the maximize already happened
    and thus when we unmaxmize the surface disappears as it is only 1x1
    pixel in size.
    Update the surface size in these situations.
    To reproduce:`
       _build/src/phoc --xwayland -E "xterm -fullscreen"
    and then use `foreign-toplevel` from wlr-clients:
       _build/foreign-toplevel -S 0
  * ptk: Damage cursor at 0,0
  * view: Allow to get and set pending box.
    Using this will allow us to make the pending_move_resize struct private eventually.
  * output: Allow to get cutout information for a given view.
    We always fill it in now, not only when drawing the cutout overlay.
  * output: Allow to get corner information for a given view
  * output: Allow to toggle cutout debugging at runtime
  * output: Simplify cutout rendering.
    Avoid going through the `render-end` signal
  * server: Allow to set DT compatibles.
    Useful in tests
  * testlib: Allow to set DT compatibles
  * xx-cutouts: Add xx-cutouts-v1 protocol implementation.
    The base protocol implementation will move to wlroots
    once merged in wayland-protocols.
    We vendor the current protocol version from
    https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/372
  * ptk: Get xdg-cutouts-manager-v1 global
  * ptk: Add cutout demo.
    Renders the cutout information sent by the compositor as bounding boxes. Left click
    maximizes / unmaximizes the surface.
    Run e.g. nested with
    ```
    PHOC_DEBUG=fake-builtin,cutouts _build/run -E "_build/examples/ptk-demo --run cutouts"
    ```
    To add layer-shell to the tests one can spawn an additional client:
    ```
    WAYLAND_DISPLAY=wayland-1 _build/examples/layer-shell-effects -l overlay -h 350 -a left -a top -a right -w 0 -f -300 -t 0.5 -e 50 -A
    ```
    To overlay different cutouts use e.g.
    ```
    export G_RESOURCE_OVERLAYS=/mobi/phosh/gmobile/devices/display-panels=$PWD
    ```
    and add a oneplus,fajita.json with the intended data. See
    https://phosh.mobi/posts/notch-support/#information-about-the-cutouts

  [ Arun Mani J ]
  * xdg-toplevel: Fix typo.
    Fixes: 5b066717b ("xdg-surfae: Rename source files to xdg-toplevel")

  [ Teemu Ikonen ]
  * workspace: Add phoc_workspace_cycle method
  * keybindings: Add handlers for cycling through windows in a workspace
  * keybindings: Set 'switch-windows(-backward)' bindings
  * keybindings: Translate 'Above_Tab' pseudo-keysym to a real keysym.
    Set keybindings context->above_tab_keysym when PhocKeyboard layout is changed and
    (re)load keybindings from GSettings with a new method phoc_keybindings_load_settings().
    Use the keybindings context (if defined) in phoc_keybindings_parse_accelerator() to parse the
    'Above_Tab' pseudo-keysym.
    Remove phoc_keybindings_constructed() method and move initialization to phoc_keybindings_init().
    Add a test for 'Above_Tab' parsing

 -- Guido Günther <agx@sigxcpu.org>  Mon, 09 Feb 2026 11:42:54 +0100

phoc (0.52.0) experimental; urgency=medium

  * build: Use released gmobile

 -- Guido Günther <agx@sigxcpu.org>  Sat, 03 Jan 2026 11:25:09 +0100

phoc (0.52~rc1) experimental; urgency=medium

  * input-method-relay: Inform the input method that we submitted preedit.
    When we submit preedit on focus change we need to
    let the input method know that this happened, otherwise
    it may send the same preedit again.
    Closes: https://gitlab.com/schmiddi-on-mobile/flare/-/issues/272#note_2900347912
  * desktop: Drop device-state. We handle it on the seat
  * data: Let schema file match app-id.
    We don't bother renaming the settings keys
  * main: Sort debug flags alphabetically
  * view: Document get_box()
    Rename `view` to `self` while at that. Old code got this wrong.
  * output-cutouts: Rename from cutouts-overlay.
    We want the class to not only provide the texture but
    also the provide the cutout information for the associated
    output so use a better name.
    Also update the copyright as I'm the only author here so far.
  * output-cutouts: Rename source file.
    We do this in a separate commit to it becomes an (almost) pure
    rename.
  * output-cutouts: Drop unneeded output argument
  * tests: Drop gint use.
    We prefer `int`
  * build: Don't add prefix twice.
    We already have it in datadir
  * view: Declare variable in loop.
    Also gets rid of a gint use
  * tests/decoration: Fix variable naming.
    We don't get the manager but a decoration *from* the manager, name
    the variable like that.
  * view: Don't include child private header.
    Private headers shouldn't be included in public ones 🤓.
  * output: Simplify is_builtin()
    An assignment makes this easier to read. Switch to `self` like
    elsewhere (to clean up this old code).
  * output-shield: Don't access NULL renderer.
    In shell mode we want to make sure we don't access the output shield
    on server shutdown as it is already gone.
    Fixes: 10dedabd8 ("server: Dispose renderer first")
  * server: Fix cleanup in error case
    `phoc_server_setup()` doesn't need to do any cleanup as that is done
    on dispose. Doing so twice causes problems.
    This fixes a crash when the Wayland socket can't be created, e.g.
    ```
    XDG_RUNTIME_DIR=/doesnotexist phoc  -E "..."
    ```
  * ci: Update shared scripts to 834fc85
  * build: Use on newer gmobile.
    We want a version with support for different corner radii
  * testlib: Ease box comparisons
  * testlib: Allow to set ack_configure callback.
    This allows us to send parts in the configure / ack_configure
    sequence of a toplevel.
  * testlib: Don't leak title when set multiple times
  * output: Only add cutout to builtin outputs
  * output: Add debug option to fake builtin displays.
    For nested development it is useful to make an output behave
    like a built-in one. Add a debug flag similar to what we did
    for phosh a while back. Due to our current test setup we
    assume all nested displays are built in, not just the first.
  * output-cutouts: Don't leak compatibles when set multiple times.
    We don't do that atm but better to have it correct
  * output-cutouts: Allow to get region with cutout information.
    We use that to build the texture too.
  * output-cutouts: Allow to get corner information.
    We use that for rendering too so that when gmobile picks
    up more flexible corner handling it will work out of the box.
  * output-cutouts: Handle different corner radii
  * tests/xdg-decoration: Flush display before taking screenshot.
    Sometime the decorations aren't there yet. Flush all events giving
    the compositor a bit more time. This makes the test stable for me with:
    ```
    meson test -j 1 --print-errorlogs --repeat=10000 -C _build xdg-decoration
    ```
  * ci: Update shared scripts to feaba37
  * outpout-cutouts: Don't leak corner array
  * debug-control: Sort flags alphabetically
  * examples/egl: Fix indent
  * ptk: Phoc tiny/toy/trivial/toolkit.
    Some helpers to create demos more easily
  * examples: Add demo using ptk.
    This app will gather different some things we want to run ever so often
    for testing. We start with a small demo to add subsurfaces.
  * examples: Allow to build shaders.
    Taken from wlroots which is MIT licensed.
  * output: Don't track renderer.
    Get the renderer from the server. This allows us to only free
    the wlr-texture for the cutouts when the renderer is still alive
    avoiding a crash on shutdown otherwise.
    Fixes: 10dedabd8 ("server: Dispose renderer first")
  * packaging: Bump wlroots dependency.
    We're building with embedded wlroots for testing so didn't
    notice.

 -- Guido Günther <agx@sigxcpu.org>  Thu, 25 Dec 2025 12:39:23 +0100

phoc (0.51.0) experimental; urgency=medium

  [ Gotam Gorabh ]
  * tree: Prefer char over gchar

  [ Sebastian Krzyszkowiak ]
  * seat: Use the getter to access focused layer's output.
    This gracefully deals with the case where seat->focused_layer->output is NULL.

  [ Guido Günther ]
  * server: Dispose renderer first.
    We create the backend before the renderer and should dispose them
    in opposite order. This fixes a crash when cleaning up the pixman
    renderer on alpine.

 -- Guido Günther <agx@sigxcpu.org>  Fri, 14 Nov 2025 21:28:41 +0100

phoc (0.51~rc1) experimental; urgency=medium

  * render: Use pixman_region_empty()
    We can expect recent enough pixman that supports this nowadays.
  * render: Exit early when there is no damage.
    As touch-points and debug-damage submit proper damage nowadays there's
    no point in proceeding. Software cursors are only rendered when they
    overlap with the pass in damage either.
    This has the nice side effect that we don't emit any tracemarks when
    there was nothing to render.
    We keep emitting `render-end` for the moment until we received that signal
    from the output shields.
  * output: Move pending finish closer to commit.
    No need to keep it around longer
  * output: Use pixman_region_empty()
    We can expect recent enough pixman that supports this nowadays.
  * output: Drop pointless call to wlr_output_transformed_resolution()
    Fixes: 550062499 ("wlroots: Upate to 79e06303")
  * output: Drop pointless copy
    wlr_output_state_set_damage() copies aready so no need to copy
    it upfront.
  * output: Damage output early.
    This ensures we have a sufficiently sized damage size early on.
  * output: Damage whole output.
    Instead of just adding the current damage_ring (of whatever size)
    ensure the damage ring's buffer covers the whole output.
  * output: Drop check for debug_damage.
    When we render debug-damage the damage-ring will contain the
    damage information for the rects to render so damage_ring.current
    will already be non-empty.
  * output: Damage output when transform/scale/mode changes
    wlr_damage_ring_set_bounds() damaged the whole buffer. Since that
    is gone we need to do that on our own.
    Fixes: 550062499 ("wlroots: Upate to 79e06303")
  * ci: Update shared scripts to 5cd8a21
  * ci: Switch to Debian forky
  * wlroots: Switch to 0.19.2
  * server: Dispatch idle loop in prepare.
    Without this we might have the idle callback not running when there are
    no events. This can result in e.g. the workspace indicator not going away
    until e.g. the mouse moves.
  * ci: Switch to newer forky
  * seat: Destroy seat views before cursor.
    Destroy a seat view invokes `phoc_cursor_set_mode` so we
    need to do that first.
    We can't use `g_clear_pointer` as that seats the given pointer
    to `NULL` before invoking the free func. This breaks fails as
    `seat_view_destroy` still accesses `priv->views`.
    As `phoc_seat_handle_destroy` does the same we need to guard
    against double cleanup. We'll disentangle that further when
    looking at multiple seats.
  * server: Kill spawned child gracefully.
    So far we just went away. Instead pass the `SIGTERM` on to
    the child so it can clean up.
    On 2nd `SIGTERM` we exit gracefully.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 08 Nov 2025 09:45:44 +0100

phoc (0.50.0) experimental; urgency=medium

  [ Evangelos Ribeiro Tzaras ]
  * workspace-manager: Fix format specifiers for workspace index

  [ Guido Günther ]
  * output: Add element type annotation
  * output: Allow to add blings.
    Implement the interface similar to other objects that
    can have blings.
  * render: Render output blings.
    The need to be rendered after all views to be visible.
  * bling: Only render when bling is mapped
  * workspace-indicator: New bling to show worspace number
  * desktop: Show workspace indicator on workspace changes

 -- Guido Günther <agx@sigxcpu.org>  Fri, 03 Oct 2025 16:49:28 +0200

phoc (0.50~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * doc: Document `adaptive-sync`
  * doc: Add a slug.
    Otherwise it appears in the docs as "Unknown document"
  * workspace: Introduce workspaces.
    A workspace groups a set of views in layout coordinates. We only
    display one workspace (called `active`) at a time. Views can move
    between workspaces while layer-surfaces are always rendered on all
    workspaces.
    The workspace manager keeps track of the existing workspaces.
  * desktop: Instantiate workspace manager.
    We add the workspace manager, listen to workspace changes and provide
    getters, so other parts of the stack can access those too.
  * keybindings: Allow to switch workspaces
  * keybindings: Allow to move windows between workspaces
  * render: Only render active workspace.
    The other views remain "hidden" until their workspace becomes the active
    one.
  * output: Only use direct scanout if view is on active workspace
  * view: Iterate over workspaces.
    If this becomes to cumbersome we could keep a hash map (wlr_surface,
    view) of all views on the desktop.
  * desktop: Let phoc_desktop_for_each_view iterate all workspaces
  * desktop: Manage the workspace queue rather than global view queue.
    Operations are per workspace now.
  * desktop: Damage output areas that change between workspaces
  * desktop: Drop get_views() and the view queue.
    Everything is per workspace now
  * doc: Document new gsettings.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/330
  * desktop: Remove unused headers
  * cursor: Don't include touch-point in header.
    Let's be more specific as it speeds up compilation
  * cursor: Move view moving code to separate function
  * cursor: Move view resize code to separate function
  * cursor: Save one indent level by exiting early
  * desktop: Support cursor-shape-v1 protocol.
    Avoids some duplicate cursors when e.g. resizing GTK4 apps
  * server: Fix indent
  * server: Use g_idle_add_once.
    It's less error prone
  * server: Bump nofile soft rlimit to the hard limit value.
    Lets not run out of file descriptors when a client requests
    a lot of buffers.
    We restore the rlimit before forking of the child process.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/415
  * pointer: Use libinput's LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY.
    Recommended in the libinput 1.27 release notes:
    https://lists.freedesktop.org/archives/wayland-devel/2024-November/043860.html
  * layout-transaction: Remove unused headers
  * layer-shell-effects: Drop unused headers
  * layer-shell: Include correct headers.
    We can minimize the included headers a bit
  * seat: Rename allow_input to is_input_allowed.
    We check rather than changing the mode
  * cursor: Fix function name.
    The prefix is `phoc_cursor_`
  * layer-shell: Drop unused seats argument from update_cursors()
    The function gets the seats on its own.
  * layer-shell: Update cursor when arranging surfaces.
    The code so far only updated the cursor for the layer surface
    but we need to take the case into account where a layer surface
    moves away and reveals a non layer-surface.
    Otherwise we might get the wrong cursor when we e.g. close
    phosh's overview and the cursor is over an app.
  * seat: Revert "Reject input based on shell state too"
    This breaks (among other things) type to search in Phosh after startup.
    We want to fix that at the input level rather than avoiding
    that the surface gets focus.
    This reverts commit 4f22f58a95af938f129cf9b532d7284a79524dfa.
    Reopens: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/228
  * wlroots: Update 0.19.1

  [ Sebastian Krzyszkowiak ]
  * render: Invert the surface transform before applying.
    The Wayland protocol specification says this about wl_surface::set_buffer_transform:
       This request sets the transformation that the client has already applied to
       the content of the buffer. (...) The compositor applies the inverse of this
       transformation whenever it uses the buffer contents.
    phoc currently did the opposite (applying the specified transform to the received
    buffer), which is a regression since 0.37.0 (for output rendering) and 0.45.0
    (for thumbnails).
    Make it work as specified again by applying the inverse of the buffer transform.
    Fixes 0e31b45f6 ("render: Switch to wlr_render_pass")
    Fixes a51f7cd13 ("render: Switch thumbnail rendering to new render API")

 -- Guido Günther <agx@sigxcpu.org>  Sat, 27 Sep 2025 18:21:41 +0200

phoc (0.49.0) experimental; urgency=medium

  [ Guido Günther ]
  * view: Don't overwrite picked output.
    If we found an output for the view we shouldn't overwrite it
    unconditionally with the first output.

  [ Achill Gilgenast ]
  * tools/output-states: Add missing include <locale.h>

 -- Guido Günther <agx@sigxcpu.org>  Thu, 14 Aug 2025 10:39:28 +0200

phoc (0.49~rc1) experimental; urgency=medium

  * gtk-shell: Remove unused signal
  * gtk-shell: Make sure to init listener links.
    Otherwise cleaning up will fail when we can't get an xdg surface.
    Tested-by: anteater <nt8r@protonmail.com>
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/411
  * cursor: Guard against 0 serial.
    On error the wlr functions return `0`. We don't want to use
    that as last serial.
  * tracing: Namespace tracing symbols.
    Makes the doc build happy but also avoids collisions
  * tracing: Add sysprof support.
    Inspired from what glib is doing
  * render: Add capture mark
  * server: Track whether input is allowed.
    In shell mode we don't want to allow any input when the shell
    isn't attached (yet).
  * seat: Reject input based on shell state too.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/228
  * output: Allow to damage whole output on each frame.
    This allows to rule out damage tracking issues
  * debug-control: Allow to toggle damaging whole output via DBus.
    Can be useful to trigger in a running compositor

 -- Guido Günther <agx@sigxcpu.org>  Wed, 06 Aug 2025 08:53:29 +0200

phoc (0.48.0) experimental; urgency=medium

  * testlib: Store format in GPtrArray.
    The current bitfield isn't large enough for large format values
    which doesn't matter in practice (as we're only interested on
    small valued) but it trips up clang.
    We use a GPtrArray instead of a GArray due to the easier searching.
  * tests/xwayland: Don't quit the main loop in between.
    Rather unmap after map in the callback. This gives a more
    expected flow.
  * tests/xwayland: Move window construction to idle callback.
    This separates the out the window handling to make things
    a bit easier to follow.
  * tests: Make it a bit simpler to create backtraces under asan
  * tests/xwayland: Skip under ASAN.
    Under ASAN we ever so often don't see any map event (sometimes
    also unmap goes missing) although we see other events. So skip
    the test until we figured out the cause.

 -- Guido Günther <agx@sigxcpu.org>  Sun, 29 Jun 2025 12:45:36 +0200

phoc (0.48~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * Use wlroots 0.19
  * ci: Don't use `remote` to access ci templates.
    This avoids the 429 error.
  * drag-icon: Don't forget to unlink map.
  * xdg-toplevel: Check if surface is initialzed.
    The whole position/resize logic needs a rework but this avoids the
    assert  with wlroots 0.19.x.
  * ci: Update image
  * build: Bump wayland dependency
  * output: Rename damage_whole_view.
    We damage the blings as part of damaging the whole view but the view's
    surfaces are damaged via phoc_output_view_for_each_surface.
  * output: Transform to damage ring buffer local coordinates.
    Damage added to the ring buffer now must be buffer local coordinates
    thus we transfrom the damage right before adding it to the buffer in
    phoc_output_damage_{region,box} so callers don't need to bother.
    This means we no longer need to transform this in get_frame_damage()
    when getting the frame damage.
  * render: Use output buffer local coordinates.
    Since damage is in that coordinate space and we clip to it we need to
    transfrom the other coordinates before feeding it to
    phoc_util_is_box_damaged as otherwise the we clip incorrectly.
  * bling: Use phoc_output_damage_box.
    This moves all additions to the damage ring to the output class as it
    should be.
  * subprojects/wlroots: Use GNOME mirror.
    Fewer external dependencies
  * idle-inhibit: Remove destroy listener sooner.
    If we wait until all refs are dropped in cleanup we can hit wlroots
    listener checks as they run just past destroy.
  * build: Use subdir_done(). Avoids one indent level
  * treewide: Format meson files.
    This will make it easier to keep them consistent in the future
    and now is good point in time as we have few outstanding MRs.
  * treewide: Update ci shared scripts and dotfiles to a7ec897
  * ci: Check meson format.
    Make sure we keep meson format happy
  * helpers: Move to tools/
    This makes it match what phosh does
  * build: Add gvdb as subproject.
    We'll use it to store the outputs states
  * utils: Add helper to convert output transform to string.
    We'll need that in more places soon
  * output: Rename output configuration variable.
    The name was pretty generic.
  * settings: Make output_config_{new,destroy} public.
    We want to use it from output-state too
  * output-states: Allow to keep track of output state changes.
    Persist output configuration states so it can be reused for
    automatic output configuration.
  * desktop: Save and load output configuration state changes.
    We trigger persisting output states on config changes and look
    for a matching output configuration when a new output needs to
    be configured.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/255
  * desktop: Allow to ignore saved outputs states
  * desktop: Only handle single output configurations.
    We'll allow for multiple outputs once this got tested more and
    we feel confident enough to also reconfigure existing outputs
    in the same output state change transaction.
  * output: Dump config on state changes
  * tools: Add tool to inspect saved outputs states
  * input: Allow for `NULL` input when setting focus.
    On shutdown we dispose the input before the backend to disconnect
    the signals so allow for a `NULL` input here to avoid a crash
    on shutdown.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/405
  * build: Build 'data' earlier.
    This allows us to use the compiled schema files
  * tests: Depend on compiled schemas
  * ci: Don't compile schemas.
    The tests now have a proper dependency
  * output: Check for width and height when filling mode.
    Just width is not enough. It's fine to not pass in a
    refresh rate though.
  * output: Set layout position for 0,0 too
    (0,0) is a valid config value and when the user forces it (or
    we pick it up from the outputs-states we should use it rather
    than using automatic layout (which would usually yield the same
    result).
  * output: Separate output state and layout position
    phoc_output_fill_state handled both but we want to be able set them independently
    as e.g. an output state test shouldn't prompt any layout position changes.
  * output: Move lx,ly update to phoc_output_set_layout_pos.
    This ensures they stay in sync if we perform all updates that way.
  * output: Use PhocOutputConfig with head states too.
    This ensures we have a single place that sets pending output state.
  * output: Use phoc_output_set_layout_pos when applying head state.
    We already set (x,y) in `phoc_output_config_head_to_output_config`
    so we just need to apply it.
    This brings initial output setup and head config changes even more
    in line.
  * desktop: Don't rebuild output configs for state changes.
    Now that `phoc_output_config_head_to_output_config` builds an
    output config for filling in the pending state we can use that
    same config to persist the outputs states.
    This makes sure we don't have yet another place that needs to
    keep track of the output configuration. The only thing the
    desktop needs to care about is to get the identifier right.
  * settings: Parse adaptive-sync.
    This will be used to enable/disable VRR aka adaptive-sync
  * output: Allow to set adaptive sync.
    It can be set via config or wlr-randr
  * outputs-states: Save and restore adaptive-sync state
  * tools: Print adaptive sync state
  * gtk-shell: Use a single path for freeing resources.
  * xdg-toplevel: Check initialized in set_fullscreen to not hit a wlroots
    assertion

  [ Andrey Skvortsov ]
  * shortcuts-inhibit: Add support for the keyboard shortcuts inhibit protocol.
    This allows applications receive all keyboard input. It is often used
    by remote desktop and virtualisation software. It maybe used, when
    some applications want to temporary override global system shortcuts.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 21 Jun 2025 12:11:11 +0200

phoc (0.47.0) experimental; urgency=medium

  * No changes over 0.47~rc1

 -- Guido Günther <agx@sigxcpu.org>  Fri, 16 May 2025 20:21:35 +0200

phoc (0.47~rc1) experimental; urgency=medium

  * render: Use plain g_warning. This gives us a better error message
  * render: Don't crash when begin buffer pass fails.
    This can happen when e.g. the renderer doesn't find a suitable modifier.
  * render: Use linear modifier.
    The Vulkan renderer isn't happy with invalid and we want a linear layout
    anyway.
  * xdg-surface: Drop needless check for popups. They have their own
    handler
  * xdg-surface: Properly name self
  * output: Drop has_fullscreen_view.
    It is only used in PhocOutput and the `is_mapped` check is
    performed in `scan_out_fullscreen_view()` anyway.
  * desktop: Init output list early.
    This allows us to iterate them
  * desktop: Add helper to iterate all views.
    We will later on switch this to iterate all views on all workspaces thus
    having us leak the workspace details into fewer places.
  * desktop: Use phoc_desktop_for_each_view in handle_layout_change.
    Use the iterator to move all views into valid layout space.
  * desktop: Use phoc_desktop_for_each_view set_auto_maximize.
    Use the iterator to toggle maximize on all views.
  * layer-shell: Use phoc_desktop_for_each_view.
    This also removes a needless output->desktop->maximize indirection.
  * output: Use phoc_desktop_for_each_view.
    Avoid open coding surface iteration. This will allow us to implicitly
    iterate over workspaces.
  * phosh-private: Drop fallback for old libxkbcommon before 0.8.2.
    Debian oldoldstable has 0.8.2.
  * xdg-surface: Destroy object when toplevel role goes away.
    The xdg-surface might be around for longer
    Tested-by: anteater
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/399
  * server: Allow to give Wayland listening socket on the command line.
    This is useful for tests that want a deterministic socket path:
      phoc --socket=whatever
    or
      phoc --socket=/path/to/whatever
  * input-method-relay: Use better naming.
    Name the handler like the methods and the "new" makes it also
    distinguishable from the handler of the created text-inputs /
    input-methods itself.
  * input-method-relay: Print address of new input method.
    Be a bit more helpful when debugging so we can tell different ones
    apart.
  * input-method-relay: Disconnect signals on destroy.
    We should do it anyway and this will trigger an assertion in wlroots
    0.19.x.
  * xdg-surface: Use an xdg-toplevel
    xdg-surfaces can have popup and toplevel roles. This class is concerned
    with the toplevel only.
    We can thus drop the toplevel role checks.
  * xdg-surface: Rename type from XdgSurface to XdgToplevel.
    This renames the GObject type but not yet the source files. We also
    only make minimal changes in e.g. XdgToplevelDecoration.
  * xdg-surfae: Rename source files to xdg-toplevel.
    Done in a separate commit to ease review.
  * xdg-toplevel-decoration: Rename surface to toplevel
  * xdg-popup: Destroy object when role goes away.
    We want to destroy the object when the role goes away rather
    than the underlying xdg-surface.
  * output: Disconnect signals early enough.
    Disconnect in output_destroy to make future wlroots' assertions happy
  * gtk-shell: Disconnect signals earlier.
    Otherwise we assert with newer wlroots.
  * toplevel-decoration: Fix indent
  * toplevel-decoration: Use g_free()
    Just to match the `g_new0`
  * toplevel: Add getter for initialized state
  * toplevel-decoration: Only set mode when initialized.
    Otherwise we assert in `wlr_xdg_surface_schedule_configure` as this
    needs to happen past role commit in wlroots 0.19.x. In wlroots 0.18 this
    avoids the
      [types/xdg_shell/wlr_xdg_surface.c:169] A configure is scheduled for an uninitialized xdg_surface …>
    warning.
    Instead we need to catch up with the set state in XdgToplevel's
    `handle_surface_commit`.
  * main: Allow to disable XWayland.
    We enable it by default so let's have an option to override it.
  * doc: Document --no-xwayland option.
    Add it to the respective manual page

 -- Guido Günther <agx@sigxcpu.org>  Wed, 07 May 2025 13:51:06 +0200

phoc (0.46.0) experimental; urgency=medium

  * idle-inhibit: Fix mapped property name.
    The property is called `is-mapped`
  * idle-inhibit: Hold reference while taking inhibitor.
    If an inhibit is followed by an uninhibit the inhibit call might
    get cancelled, we thus never get the cookie and thus can't clean
    up the inhibitor. Fix this by not cancelling inhibotor calls but
    rater taking a reference while getting the inhibitor is in flight.
    The simplest thing would be to use sync DBus calls but that could block
    the compositor.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/398

 -- Guido Günther <agx@sigxcpu.org>  Sun, 30 Mar 2025 16:11:21 +0200

phoc (0.46~rc2) experimental; urgency=medium

  * server: Init new_surface link early.
    The object can fail initialization so we might remove the link that
    never got initialized.
  * output: Init signal links early.
    The object can fail initialization so we might remove the links that
    never got initialized.
  * xdg-popup: Ignore reposition for layer-shell.
    GTK4 likes to reposition popups however for layer-shell this doesn't
    work as wlr_xdg_popup_get_position is tied to xdg-surface and asserts if
    passed in a layer-surface. Skip the reposition in this case.
    Another approach would be to not connect the signal in the first place
    when handling `new_popup`.
    This fixes a crash with cameractl (https://gitlab.com/NekoCWD/cameractrl.git)
  * ci: Add a dist check.
    Let's make sure we catch future subproject trouble early
  * tests: Fix leaks in layer shell test.
    Fixes 350e4de65 ("xdg-popup: Ignore reposition for layer-shell")
  * build: Probe for opacity for embedded wlroots too.
    This allows us to continue the subprojects in the tarball.
    Since we can't use the `wlroots` dependency as internal dependency we
    specify the include path.
  * ci: Add subprojects to tarball again.
    With the previous commit feature detection works in the unpatched
    wlroots sources as subproject too.
    Since we now embed wlroots we need to add its build-deps via
    `DEB_BUILD_PROFILE` so `meson setup` can pass. We thus use our image
    with the pre-installed build dependencies.

 -- Guido Günther <agx@sigxcpu.org>  Wed, 26 Mar 2025 19:47:04 +0100

phoc (0.46~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * desktop: Sort protocols alphabetically
  * view: Move setting of toplevel and app-id upwards.
    This ensures we do it in the same place when adding support
    for ext-foreign-toplevel-v1
  * treewide: Implement ext-foreign-toplevel-info.
    See wlroots MR
      https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4543
    Test client: https://git.sr.ht/~leon_plickat/lswt
      ./lswt --force-protocol ext-foreign-toplevel-list-v1
  * ci: Pull libwayland-dev from trixie again. It is recent enough now
  * ci: Update ci image
  * build: Enable vulkan rendrer.
    Pull in the glslang for that
  * examples: Make more variables static.
    Remove some unused code while at that
  * testlib: Don't typedef globals twice. Update some vertical indent
    while at that.
  * testlib: Pass globals to mode handler
  * tests: Build config from parameters.
    Rather than having config file data rather build from parameters
    so we can tweak things more easily.
    This allows us to check e.g. the output mode at runtime rather than hard
    coding it.
  * tests: Test scaled and transformed xdg surface as well.
    Should catch the most prominent damage tracking regressions
  * child-root: New interface that is the root of a ViewChild tree.
    We want either a layer surface or a view to be the root so introduce an
    interface. We call it `PhocRootChild` to not interfere with other
    possible roots (e.g. the root of a view tree).
    As a follow up we want to rename the `PhocViewChild` to just
    `PhocChild`.
  * view: Implement child-root interface.
    We implement the interface and make the view's children use it.
  * layer-surface: Rename phoc_layer_surface_damage.
    Make it match what we do for views
  * layer-surface: Add child-root interface.
    Currently unused
  * view: Simplify phoc_view_init_subsurfaces.
    No need to pass the wlr_surface we track.
  * layer-surface: Use PhocViewChild for subsurfaces and popups.
    No need to have the same code in two places
  * layer-surface: Let damage functions damage all surfaces.
    The damage functions so far ignored popups but the corresponding
    functions for views take those into account so do the same here too.
    This fixes the problem where popups in the wlr-layer-surface demo aren't
    being animated.
  * output: Use wlr_layer_surface_v1_for_each_surface.
    No need to roll our own
  * output: Name drag-icon damage func like the others.
    We always damage the whole icon so we don't need a boolean parameter
  * output: Name surface damage-func like the others
  * layer-surface: Assert that the surface is unmapped
    wlroots API guarantees that so no need to damage anything again.
  * timed-animation: Handle gone animatable more gracefully.
    When the animatable gets disposed the weak ref gets cleared.
    Handle that case gracefully rather than crashing so users
    of the animation machinery don't need to worry (which is the
    whole point of the weak ref).
    Reported-by: Sebastian Krzyszkowiak <dos@dosowisko.net>
  * docs: Add setting log domains to examples
  * input-device: Cache is_keyboard check.
    It will become more involved in the next commit and we don't want to
    repeat that each time.
  * input-device: Check for ID_INPUT_KEYBOARD udev property.
    This is set by udev and can be overwritten via hwdb allowing us to
    handle cases like the T9 keypads on flip phones.
    We can't use libinput_device_has_capability as that includes
    ID_INPUT_KEY as well.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/395
  * docs: Document use of ID_INPUT_KEYBOARD
  * utils: Simplify phoc_utils_is_damaged.
    We can use pixman_region32_init_rect directly and avoid the confusing
    !!pixman_region32_not_empty().
  * render: Assume src_box is always set.
    We have a single caller that always sets it
  * render: Apply alpha from alpha-modifier-v1 protocol
  * output: Use wlr_damage_ring_rotate_buffer
    `wlr_damage_ring_get_buffer_damage` will go away in 0.19 and we then
    just need to drop the last parameter from `wlr_swapchain_acquire`.
  * meson: Drop conditional.
    We require meson 0.64 anyway
  * wlroots: Backport wlr_xwayland_surface.set_opacity.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4995
  * build: Check for wlr_xwayland_surface.set_opacity
  * view: Allow derived classes to provide alpha.
    So far we only had "internal" alpha used by the blending animation. Add
    a vfunc so derived classes can provide alpha values used when rendering.
  * xwayland-surface: Get opacity when available.
    Helps: #397
  * ci: Use GNOME's mirror for ci-fairy
  * subprojects/wlroots: Use GNOME mirror. Fewer external dependencies.

  [ Sam Day ]
  * color-rect: Add setter for `box`
    When we switch PhocOutputShield to use a PhocColorRect, we need to be
    able to construct it with an empty box and then set the correct
    dimensions later when the shield is raised.
  * output-shield: Render a PhocColorRect.
    Instead of managing an alpha prop and drawing a rect directly, use
    PhocColorRect. This removes some duplicated code and a TODO.
    Today, PhocBling only has machinery in place to trivialize its
    attachment to the render tree via a PhocView. That's not appropriate for
    our use-case here, so we just map/unmap/render the bling via its
    interface directly.
    It's expected that eventually broader support for PhocBling rendering
    will exist. This will simplify PhocOutputShield further, as it will then
    no longer need to attach to the render pass.
  * bling: Add phoc_bling_damage_box helper method.
    Often, when a PhocBling needs to damage outputs, it simply needs to
    damage the whole region it occupies. This new phoc_bling_damage_box
    makes that trivial.
  * color-rect: Use phoc_bling_damage_box.
    This method was adapted from phoc_color_rect_damage_box in the first
    place.
  * view-deco: Use phoc_bling_damage_box.
    This PhocBling has simple damage tracking needs similar to
    PhocColorRect. So we can use the new helper method here and DRY things
    up a bit.
  * property-easer: Make phoc_lerp public.
    It's a simple enough function, but nicer to use this one than to
    duplicate it elsewhere.
  * cairo-texture: Introduce PhocCairoTexture.
    This object wraps up the bits necessary to create a wlr_texture that is
    backed by a Cairo image surface. It's adapted from the wlroots
    cairo-buffer example code.
    It will be used in the next commit to handle rendering for PhocSpinner.
  * spinner: Introduce PhocSpinner.
    Based heavily on AdwSpinnerPaintable.
    It's rendered as a PhocBling. On being mapped, a PhocCairoTexture will
    be constructed. Each frame is drawn with Cairo and then uploaded to a
    texture.
  * output-shield: Reorder includes.
    I did this instead of checking if I left the stove on for the fifteenth
    time tonight.
  * output-shield: Support displaying a spinner
    phoc_output_shield_raise now allows callers to specify if a spinner
    should be displayed on the raised shield.
    The spinner is automatically disposed when the shield is lowered.
  * output: Show spinner on output-shield in shell mode.
    The spinner will be displayed on the output shield when the shell hasn't
    come up yet. It will not be displayed when modesetting, however.
  * server: Only show a spinner once.
    When in shell mode, we show a spinner before the shell has notified it's
    up. If it goes away, we don't want to show the spinner again.

  [ Sebastian Krzyszkowiak ]
  * cursor: Don't crash when the output goes away during window movement
  * render: Fix subsurface scaling when rendering to buffer.
    Scale needs to be calculated against view geometry and be constant
    across the whole tree, otherwise different subsurfaces are going
    to be rendered at different scales.
    Sampling out of buffer's bounds is not a concern, since we only ever
    sample from its source box. For geometry handling, it's enough to make
    sure the destination position takes geometry into account and the rest
    gets cropped by destination buffer's bounds.
    Since destination box by definition operates in a different coordinate
    system than source box, we can stay in layout coordinates the whole time
    until the very end and entirely avoid problems with subsurfaces having
    different buffer scale than their parent surfaces.
    Fixes a51f7cd13 ("render: Switch thumbnail rendering to new render API")
    Fixes 9a88cade7 ("render: Take geometry into account when rendering to a buffer")
  * view: Clean up unused get_box call.
    Fixes 075d93fc8 ("view: Move state saving into dedicated function")
  * view: Don't multiply by scale in get_geometry_default.
    View geometry shouldn't be affected by its scale.
    This had no chance to cause any troubles so far since the only contexts
    in which this function gets called are those where priv->scale always
    equals 1 (namely, XWayland views that don't support scale-to-fit),
    but let's fix this so it won't bite anyone in the future.
    Fixes 60cf1d813 ("Scale down oversized views")
  * render: Avoid rendering textures with alpha set to zero.
    No need to waste the cycles on rendering something that won't affect
    the resulting image.
  * view-deco: Handle alpha value when drawing decorations.
    It's not entirely correct as the decoration gets also drawn behind
    the actual surface, but it's good enough for the kind of decoration
    we have there right now and it's better than drawing an opaque
    decoration underneath a translucent view.

 -- Guido Günther <agx@sigxcpu.org>  Fri, 21 Mar 2025 18:10:14 +0100

phoc (0.45.0) experimental; urgency=medium

  * build: Bump glib dependency to 2.80.
    We want g_log_writer_default_set_debug_domains()
  * server: Allow to set log domains
  * debug-control: Allow to set and get log domains at runtime.
  * main: Add --verbose option
    wlroots uses `info` for informative (non-debug) messages, info log level
    isn't printed by glib though, so allow to use `message` for it.
    We often ask ourselves: Which renderer and which backend was in use?
    Which GL extensions were detected. wlroots prints this on startup but it
    is very noisy, so add an option `-v` we can add to `phosh-session` but
    not use when people use phoc for nested testing, etc.
  * layout-transaction: Improve naming and debug messages.
    We want to track configure for layer surfaces and views
    separately so add use proper naming.
    This triggers some reindent due to the rather long names now.
  * layout-transaction: Abort transaction on timeout.
    So far we only printed a message. We bump the timeout while at that
    until phosh catches up.
  * layout-transaction: Track starttime when transaction starts.
    We were adding it when we received additional configures
  * layout-transaction: Simplify.
    No need for a temporary variable to track whether this is a
    new transaction
  * layer-surface: Print pending configures.
    We printed the last ack'ed configure but that is less useful than the
    old and new pending configure.

 -- Guido Günther <agx@sigxcpu.org>  Fri, 14 Feb 2025 11:07:45 +0100

phoc (0.45~rc1) experimental; urgency=medium

  * ci: Use Wayland from Debian again. It's recent enough to work with clang
  * ci: Allow to fetch packages from Debian sid.
    Similar to what we do in phosh. We pull in wayland to fix the clang build.
  * layout-transaction: Fix format specifier.
    This unbreaks the build on 32bit. While at that adjust the types since
    g_get_monotonic_time() returns uses a signed type.
  * treewide: Drop wlr_matrix.h include.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4971
    This can be backported
  * seat: Track activity on seat. This will allow us to remember the timestamp
    of the last event.
  * seat: Track last event timestamp on seat. wlroots will dropped support
    in 0b720ae5 ("seat: drop last_event")
  * view: Move destroying toplevel handle to separate method
  * view: Move foreign toplevel handling upwards.
    We want static methods at the top and this is a good opportunity
  * view: Use `self` in view_create_foreign_toplevel_handle()
    For consistency. Old code used `view` and we're cleaning it up when
    convenient.
  * view: Disconnect foreign toplevel listeners.
    Ensure the signals get disconnected before destroying the object
  * xdg-surface: Sort handlers by surface type
  * server: Dispose input earlier.
    Needed to disconnect the signals from the backend.
  * input: Disconnect new_input signal
  * desktop: Use g_signal_connect_object. Ensures outputs don't invoke
    `output-destroyed` when the desktop is already gone on shutdown.
  * seat: Disconnect signals when seat goes away
  * desktop: Disconnect gamma control listener
  * layer-shell-effects: Remove destroy listeners
  * layer-shell-effects: Remove commit listeners
  * desktop: Handle backend destroy.
    This allows us to clean up properly
  * popup: Use the output's layout coordinates. No need to get them from
    the layout again. Easier to access and improves readability.
  * popup: Move finding of unconstrain box to view.
    This will make unifying layer-surface and view code simpler.
  * view: Try harder to find a suitable popup output.
    If the top left corner isn't on screen use another available output.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/383
  * keybindings: Use for loop - easier to read
  * view: Use GSList for child surfaces.
    Will be more convenient when we clean up view childs.
    Since the children remove themselves from the list on dispose we can't
    use plain g_clear_slist().
  * view-child: Add and use getter for parent
  * view-child: Add and use getter for wlr_surface
  * view-child: Add and use setter for mapped
  * view: Use `self`.  No need to retrieve the view again from the child.
  * view-child: Make it a proper derivable class.
    This will make it simpler to extract parts common with LayerSurfaces
    Fixes 6a7bf210a ("view: Make view-child a GObject")
  * view-child: Simplify removal from parent. Introduce a small helper so
    that removing a view child from another view child becomes simple.
  * view-child: Get the correct parent. We failed to updated priv inside
    the loop so we'd always retrieve the same parent leading to an endless
    loop.
    Fixes fb8bfb370 ("view-child: Make it a proper derivable class")
  * view: Don't mention buffer damage. This tracks "external" damage too now.
  * view: Document box coordinates. The values in there are confusing.
  * view-child: Don't access view->desktop directly. Get it from the
    server singleton.
  * seat: Don't access desktop via view. Get it from the server singleton
  * xdg-surface: Don't access desktop via view. Get it from the server
    singleton
  * view: Drop desktop.
    We could consider making it private but lets just use the singleton as
    we want to fold PhocDesktop into PhocServer anyway.
  * render: Take scale into account when rendering to a buffer with geometry.
    The geometry is in layout coordinates space so we need to scale it.
    Fixes 9a88cade7 ("render: Take geometry into account when rendering to a buffer")
  * xdg-popup: Damage old area when repositioning popup.
    Reduce the submitted damage by only damaging the area before the popup
    got repositioned rather than the whole view's surface tree (which didn't
    even work for the case where the popup is outside the parent, see e.g.
    Chatty's spell check popover in floating window mode).

 -- Guido Günther <agx@sigxcpu.org>  Fri, 07 Feb 2025 12:33:46 +0100

phoc (0.45~beta1) experimental; urgency=medium

  * wlroots: Fix build with libliftoff 0.5. This makes bisecting a bit
    simpler
  * build: Switch wlroots dependency to 0.18
  * wlroots: Update to wlroots git 2024-01-09
  * desktop: Drop wlr_presentation member.
    It's no longer in use as wlroots handles that internally.
    See wlroots commit d68ba9d6c2bca6c5e9f7db1b6043d6e742b77bbd
  * desktop: Adjust to wlr_output_layout_create signature change.
    See wlroots commit 6a7463bb8e29c55b906dd66e2ce3625dcccbd3f4
  * render: Adjust to moved output transform helper location.
    See wlroots commit 9e702e9cfe73f5aae665b5847cf470e66714e64a
  * xdg-shell: Adjust to wlroots xdg-shell signal changes.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4345
  * cursor: Adjust to wlroots adding support for axis_relative_direction
  * server: Call wl_display_terminate(). Not handled by wlroots anymore.
  * server: Adjust to wlr_backend_autocreate signature change.
    Forward to wlroots d1b39b58432c471c16e09103fd2c7850e3c41950 for that.
  * server: Bump to linux-dmabuf v5.
    Forward to wlroots 435ca39960f47d622017630b28788f4dd14be757 for that.
  * surface: New class to track wl_surfaces.
    Needed to track surface damage that now isn't collected by wl_surface
    anymore. See
      7dfbd877 ("compositor: drop wlr_surface.external_damage")
  * surface: Ensure we damage the surface on size changes.
    Fixes parts of 7dfbd877 ("compositor: drop wlr_surface.external_damage")
  * xdg-shell: Adjust to 'xdg-shell: drop automatic surface configuration'
    Forward to wlroots commit
        811ca199 ("xdg-shell: drop automatic surface configuration")
  * treewide: Rename WLR_INPUT_DEVICE_TABLET_TOOL.
    Catches up with wlroots commit
      b821be57 ("input-device: unconfuse tablet naming")
  * treewide: Adjust to removal of input device vendor/product.
    Adjusts to wlroots commit
      edbf8bf2 ("input-device: drop wlr_input_device.{vendor,product}")
  * wlroots: Forward to wlroots 0.18.0
  * cursor: Adjust to wlr_seat_touch_notify_cancel signature change.
    See wlroots commit
      34219b03 ("touch: make cancel functions take a wlr_seat_client")
  * server: Adjust to removal of wlr_renderer_get_dmabuf_texture_formats.
    See wlroots commit
        0686666c ("render: drop wlr_renderer_get_dmabuf_texture_formats()")
  * build: Adjust to tablet protocol becoming stable.
    See wlroots commit
       fe429b24 ("Switch to stable tablet-v2 protocol")
  * render: Switch thumbnail rendering to new render API
  * wlroots: Switch to 0.18.1
  * cursor: Fix enum type. Spotted by clang.
  * xwayland-surface: Don't try to restack override-redirect surfaces
  * packaging: Ignore files from 0.18
  * packaging: Bump wlroots version and its dependencies
  * ci: Use newer image. This one contains the needed dependencies
  * ci: Build Wayland. The one on Debian fails to build with clang atm
  * desktop: Drop nested ifdef. No need for a #ifdef PHOC_XWAYLAND in a
    block that already has the same conditional.
  * desktop: Move XWayland setup to a separate file. Grouping XWayland
    related things together would have prompted for some code move so
    let's move to a separate file while at that.  This allows us to
    minimize the #ifdef PHOC_XWAYLAND in PhocDesktop. Pure code move, no
    other changes.
  * desktop-xwayland: Provide stub for phoc_desktop_setup_xwayland()
    This allows us to have a single "#ifdef PHOC_XWAYLAND" block.
  * desktop: Move XWayland shutdown to desktop-xwayland
  * treewide: Always provide PHOC_IS_XWAYLAND_SURFACE.
    We simply return `FALSE` when XWayland is disabled. This eases checks
    in different parts of the code base.
  * xwayland-surface: Move child logic into class. We want to have the
    XWayland surface related logic in the class rather than in generic
    code
  * xwayland-surface: Move has_children check into class. No need to open
    code that either.
  * ci: Make sure we remove wlroots headers. The dev package name changed
    with wlroots 0.18
  * ci: Drop PKG_ONLY. We've not used it since ages
  * packaging: Add more optional wlroots dependencies. Moves our wlroots
    build closer to what distros use
  * seat: Don't init prev before asserting the type
  * layer-shell-effects: Return in case of no memory. Otherwise we
    dereference NULL pointers
  * layer-shell-effects: Check for surface commit early. Otherwise we leak
    alpha_surface when returning the error.
  * layer-shell-effects: Free alpha_surface in error path. Otherwise we
    leak alpha_surface when returning the error.
  * layer-shell-effects: Check for surface commit early. Otherwise we
    leak stacked_surface when returning the error.
  * layer-shell-effects: Free the stacked_surface in error path.
    Otherwise we leak stacked_surface when returning the error.
  * device-state: Free lid_switch in error path. Otherwise we leak
    lid_switch when returning the error.
  * device-state: Free tablet_mode_switch in error path. Otherwise we
    leak tablet_mode_switch when returning the error
  * seat: Init with NULL rather than empty string. This helps static
    analyzers along.
  * testlib: Move flags check out of loop. We always want to check that
    we handled all flags.
  * output: Only perform mode test if we have a preferred mode.
    So far we always performed an output test even when there wasn't a
    preferred mode. Avoid this and pick a mode first in the case that
    there's no preferred mode on the output.
  * output: Check mode is non-NULL. We can't have NULL modes in the list
    but let's make scan-build happy.
  * cursor: Assert if we didn't find a layer surface. If a layer surface
    got touched we better find it.
  * testlib: Use memcpy. The areas can't overlap.
  * testlib: Avoid automatic cleanup. This trips up static-analyzer and in
    this case it's bearable to not use `g_autoptr`. Should this happen
    more often we'd rather filter out these kind of errors.
  * ci: Run scan-build. Let's have it on by default. If we detect too many
    false positives we can always switch to manual builds or allow it to
    fail.  Introduce a common before script for all clang jobs while at
    that.  We use a small wrapper to ensure the scan's exit status is
    reported, scan-build by default reports the build jobs exit status.
  * ci: Disable coverage in clang builds. We don't use the output as it
    doesn't cover more than the gcc build.
  * ci: Add clang to ci image and use it. Save CI resources as we'd
    otherwise install it two times during every build.
  * layer-surface: Don't arrange surfaces / set focus on finalize.
    This already happens on unmap and if we do it in `finalize()` (triggered
    via `handle_destroy()` we might end up in situations where some of the
    destroy handlers already ran but others (e.g. from
    `PhocStackableLayerSurfce`) didn't. wlroots guarantees that a layer
    surface is unmapped before destroy so this should be safe to do.
    Thanks to Sam Day for the nicer reproducer.
    Closes: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/1161
  * packaging: Use packaged gmobile. No need to pull it from git.
  * output: Modernize props and signals. Follow current style. No need to
    explicit-notify props as they're construct only and hence will be set
    only once.
  * layer-shell: Use G_N_ELEMENTS
  * testlib: Use g_timeout_add_seconds_once()
  * wlroots: Switch to 0.18.2
  * desktop: Document phoc_desktop_view_is_visible()
  * desktop: Fix return values of phoc_desktop_view_is_visible(). We
    claim that the function returns `gboolean` not `bool` so adjust the
    returned values to that.
  * desktop: Modernize phoc_desktop_view_is_visible(). Use C style
    comments and drop superfluous braces.
  * layer-surface: Add "covers output" check. Add a helper to check if a
    layer surface fully covers the output it is on.
  * view: Cache visibility. Cache the result from
    `phoc_desktop_view_is_visible()`. Since this function now has side
    effects and doesn't check if the surface is actually visible but
    performs a "certainly invisible" check we rename it to
    `phoc_desktop_view_check_visibility()`.
  * desktop: Use for loop in phoc_desktop_view_check_visibility()
    This is easier to read.
  * view: Move send_frame_done_if_not_visible to xdg-surface.
    This commit is the mere code move
  * xdg-surface: Safe one indent level in send_frame_done_if_not_visible()
  * xdg-surface: Send frame-done when Wayland event loop becomes idle.
    We send the frame.done events to make clients catch up on xdg.configure
    events. However wlroots uses an idle callback for the later so if we
    send them right away they arrive at the client *after* the synthesized
    frame.done event (and hence ignored by the client).
    This can e.g. be seen in GTK4 clients where the surface state is only
    updated in `gdk_frame_clock_get_refresh_info` which won't run if
    there's no frame.done event after the receiving the new state.
    Thus delay the frame.done event until the Wayland event loop becomes
    idle as well.
  * desktop: Bump xdg-shell version. Needed for surface suspension.
  * view: Add and use set_suspended() virtual function.
    As per xdg-shell protocol a suspended surface is fully occluded and thus
    can stop any drawing operations. We toggle the state whenever we update
    the view's visibility but delay suspension to avoid too quick
    suspend/resume cycles which e.g. might video players stutter when
    the window is obscured and made visible again quickly (e.g. on window
    cycling) as they need to refill their hw-decoder queue).
    Since clients like GTK send the `ack_configure` but only emit the state
    change internally on the next frame clock we make sure we send at least
    one other frame done event in `set_suspended`.
    We additionally check visibility when the surface gets activated to make
    sure the surface is taken out of/into suspension when that happens.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/389
  * desktop: Take locksreens into account when checking visibility.
    If the overlay layer has a surface covering the whole screen
    we can't have any visible views.
  * cursor: Move touch point into its own file. We have more code around
    touch points.
  * cursor: Move initialization and finalizing to touch point
  * cursor: Allow to get touch points
  * treewide: Use cursor's list of touch points.
    Let's not track them twice. This unclutters the cursor code as we free
    it from damage tracking and will allow us to deduplicate the code
    further.
  * touch-point: Move output box getter here. The code will be useful for
    in follow up commits
  * touch-point: Move all damage tracking here. This ensures we damage the
    same area in both damaging functions and use the simpler
    wlr_damage_ring_add_box() rather than wlr_damage_ring_add(). Properly
    submit new frames when we add damage.
  * touch-point: Move rendering here. This allow us to make some functions
    static again and makes the layout match what we do for blings.
  * touch-point: Add update method
  * touch-point: Damage when updating and destroying touch points.
    This makes sure they get cleared properly again
  * touch-point: Reduce number of debug flag checks.
    For damage tracking move them into the damage tracking function.
    For rendering we assume that the renderer only invokes us if needed,
    assert if that is not the case.
  * touch-point: Make it a boxed type.
    This allows us to have it in the type system and e.g. use it as types
    for properties but for the moment it makes the doc build happy.
  * timed-animation: Install properties after their definition.
    Having it past the signals is confusing. Modernize indent while at that.
  * output-shield: Move initial setup to init() This way we can drop
    constructed but more importantly just use property setters to tweak
    values.
  * output-shield: Don't leak animation. Minor indent cleanup while at
    that.
  * output-shield: Allow to set easing function. Make the shield useful in
    more situations
  * desktop: Tighten visibility check. Although the surface might cover
    the full screen it might still have transparent regions (which is
    e.g. the case for phosh's modal dialogs). So make sure the surface is
    fully opaque.
    Fixes: 27ed97295 ("desktop: Take lockscreens into account when checking visibility")
  * layer-surface: Save one indent level. Use C style comments while at that.
  * layer-surface: Invalidate layer surface lists less often.
    It is sufficient if we invalidate the list when the surfaces changes
    layers or exclusive zone (which can affect the ordering within a layer).
    This makes us hit the fast path in
      `phoc_output_get_layer_surfaces_for_layer()``
    way more often as we don't invalidate on every commit.
  * layer-shell-effects: Clamp alpha values to [0.0, 1.0]
  * view: Name timer. Useful for debugging.
    Fixes 01754f736 ("view: Add and use set_suspended() virtual function")
  * build: Bump pixman dependency `pixman_region32_empty()` reads so much
    nicer than `!pixman_region32_not_empty()`.
    We bump to 0.43.x rather than 0.44 since alpine doesn't have 0.44 yet.
  * output: Use wlr_output_state_set_damage. Don't manipulate output state
    directly but use the provided setter.
  * output: Rerender if we fail to submit the rendering job
  * render: Fix debug damage tracking. We need to calculate and submit the
    areas to render for debugging before setting the damage via
    `wlr_output_state_set_damage()` (as otherwise it will be rendered to
    the output buffer but the output state doesn't know giving artifacts
    when flipping in older buffers again). We can also simplify the
    rendering by making use of use `wlr_render_pass_add_rect()`'s
    clip_rect to set the damage area rather than splitting it into rects
    manually. We also change from subtracting damage from the previous
    frame highlight damaged areas to highlighting the damaged area.
  * render: Take geometry into account when rendering to a buffer.
    Otherwise e.g. thumbnails of floating windows with drop shadow are cut
    off.
    Fixes a51f7cd13 ("render: Switch thumbnail rendering to new render API")
  * dir-locals: Set indicator column. Makes indenting a bit simpler
  * idle-inhibit: Don't access server when async call got cancelled.
    Make sure we access the server singleton only when async call was
    successful. Otherwise we might recreate the singleton on shutdown (which
    can happen in tests).
  * server: Don't set mainloop twice. We set it a couple of lines upwards
    already
  * server: Make debug flags a property. This eases getting notified about
    changes. For that make sure we generate the enum types.
  * server: Set debug flags as early as possible.
    Now that we have a setter anyway, split that out of setup().
  * debug-control: New interface to control debug settings. It's nice when
    we can enable things like damage tracking dynamically
  * server: Instantiate debug control object
  * docs: Document debug control interface
  * output: Allow to set fade out easing
  * output-shield: Allow to set animation duration
  * output-shield: Allow to check if shield is raised
  * layer-shell: Only rearrange views when usable area changed.
    No need to iterate over all views when nothing changed
  * layout-transactions: Track layout changes. This object tracks whether
    all clients that got notified about layout changes via configure
    events have committed their new buffers.  We currently only do the
    tracking and only for layer surfaces as we want to initially use that
    for mode changes. We'll add handling of views and buffer tracking (to
    render the old buffers while the transaction is processing) as follow
    ups.
  * layer-surface: Notify transaction about configure events.  We notify
    the transaction system when we send a `configure` event to a layer
    surface (potentially kicking off a new transaction). This will later
    on allow us to render the current buffers while the transaction is
    ongoing.
    When a layer surface client commits a new buffer we check if the
    corresponding ack'ed configure serial is recent enough and if so,
    inform the transaction system that we have a recent enough buffer for
    this layer-surface.
  * layer-shell: Let arrange return if configure events were sent.
    This allows callers to figure out if a layout transaction is ongoing.
  * output: Show shield when rearranging layers due to mode change.  When
    the output geometry changes (due to a new mode, transform or scale
    change) layer surfaces need to commit new buffers to match the screen.
    Since we don't want to render non matching buffers on the new output
    buffer we blank the screen until we received all the needed buffers
    (or the transaction times out).
  * wlroots: Backport MR 4973. Touch point tracking was broken.
  * cursor: Capture serials from touch up events too
    wlroots commit
      75ecba44 ("seat: add serials to touch up events")
    added serials to touch up events too.
  * output: Drop surface width and height from PhocOutputSurfaceIteratorData.
    It's unused and just causes confusion about whether that is the actual
    surface width (which e.g. for views wasn't true).
  * surface: Add helpers to add and clear damage. This allows
    e.g. subsurface to track the damage needed due to e.g. moves too.
  * surface: Don't clear damage on commit. This ensures we don't clear
    damage added by other means. E.g. for subsurfaces we can have damage
    added via the subsurface or the surface.  Let the damage iterator on
    the output clear the external damage instead.
  * subsurface: Setup subsurface on property assignment. This allows us
    to drop `constructed` and make things similar to `PhocSurface`.
  * subsurface: Set subsurface to NULL on finalize.
    This makes any use after free a more obvious crash
  * subsurface: Track "external" damage due to moves and stacking changes.
    Track damage triggered by subsurfaces changing their position in the list
    of above/below subsurfaces and due to moves relative to the parent
    surface.
    Fixes parts of wlroot's 7dfbd877 ("compositor: drop wlr_surface.external_damage")
  * layer-shell: Track "external" subsurface damage.
    Track damage incurred by subsurface changing their position in the list
    of above/below subsurfaces and due to moves relative to the parent
    surface. This is the same as for view childs.
    Fixes parts of wlroot's 7dfbd877 ("compositor: drop wlr_surface.external_damage")

 -- Guido Günther <agx@sigxcpu.org>  Sat, 01 Feb 2025 13:09:25 +0100

phoc (0.44.0) experimental; urgency=medium

  * ci: Don't wipe libwlroots-dev.
    It's not in the clang image and not in the Debian archive anymore either
  * view: Don't forget to set window state when tiling.
    A tiled window is not maximized.
    This became visible in phosh now that we set a background for maximized
    windows in the overview.

 -- Guido Günther <agx@sigxcpu.org>  Sun, 29 Dec 2024 14:04:27 +0100

phoc (0.44~rc1) experimental; urgency=medium

  * output: Prefix surface with wlr_ It's our common pattern to prefix with
    wlr_ and with the introduction of PhocSurface it will avoid type
    confusion.
  * xdg-activation: Don't access token directly.
    Use the getter wlr_xdg_activation_token_v1_get_name() instead.
  * xdg-popup: Take geometry into account when getting output.
    Otherwise view.x might e.g. be < 0 in the case of one output and shadow
    around the window. In that case output would be NULL.
  * xdg-popup: Make sure we always send a configure
    wlr_xdg_popup_unconstrain_from_box() sends it but make sure we also send
    it in the case of no output as otherwise the window might become
    unusable.
  * desktop: Drop wlr-input-inhibitor-unstable-v1 protocol support
    wlroots will drop support for it in 0.18.0. See wlroots commit
    5dd614b9adc97bf1c89c8e2ebe8504841f8635ea.
  * doc-check: Relax warning check.
    Check for ' warning' rather than 'warning' so we don't choke on
    Python's SyntaxWarnings.
    Improve output readability while at that
  * doc-check: Allow pixman_region32_t as return value too.
    Until we make it a boxed type we need to allow it as any argument
    and return value.
  * view: Don't crash on NULL output.
    Check there's a wlr_output before trying to make a PhocOutput from it.
  * output: Allow to force shell reveal via debug flag.
    This makes it simpler to test shell reveal in a nested session
  * view: Don't draw decoration on maximized windows.
    No need to do that and it helps to not leak decorations into e.g.
    transparent top or bottom layer surfaces.
    Later on we should restrict this to auto-maxmize mode and rather
    calculate the maximized window size *including* decorations so that
    they're visible and usable in non auto-maximized mode.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 21 Dec 2024 10:46:45 +0100

phoc (0.43.0) experimental; urgency=medium

  * No changes over rc1

 -- Guido Günther <agx@sigxcpu.org>  Thu, 14 Nov 2024 20:20:16 +0100

phoc (0.43~rc1) experimental; urgency=medium

  [ Guido Günther ]
  * treewide: Ack unstable gmobile api in a single place. No need to clutter
    all source files
  * input-method-relay: Only submit preedit when not empty.
    We checked for NULL but need to also check for the empty string as
    otherwise multiple clicks confuse the client and e.g. GTK4 looses text
    when double clicking with a pointer.
    Fixes c252b39d0 ("input-method-relay: Allow to submit preedit")
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/381
    Tested-by: Julian <juliannfairfax@protonmail.com>
  * cursor: Add G_END_DECLS
  * cursor: Make cursor_client private
  * cursor: Move setting of cursor from theme to PhocCursor.
    No need to have it in the seat.
  * cursor: Save one indent level
  * treewide: Use default cursor name.
    No need to go via a fixed theme default. This allows us to drop the
    default cursor from PhocCursor.
  * cursor: Add getters and setters for the cursor mode
  * cursor: Make mode private
  * cursor: Move cursor image handling to cursor.
    It was split between cursor and seat before. To handle that
    introduce `set_image` and `set_name` methods that either
    set a cursor by its name or a surface.
    We also do away with the special `NULL` name handling and let `NULL`
    rather mean "unset cursor".
  * seat: Move cursor setting to PhocCursor.
    No need to go via seat.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/231
  * cursor: Rename cursor_client to image_client.
    It's the client that sets the cursor image not e.g. a client tracked by
    the cursor.
  * xcursor: Drop file.
    It has only a couple of defines that fit into PhocCursor just as well.
  * cursor: Only show cursor if we have motion events.
    Many tablets expose a pointing device that isn't usable. Instead of
    having to override that via libinput rather only ever show a cursor if
    we had a motion event.
  * cursor: Allow to set theme
  * seat: Move xcursor handling to cursor.
    No need to have parts on the seat
  * cursor: Make xcursor_manager private
  * cursor: Chain up to constructed first.
    The parent constructor should get a chance to run first
  * cursor: Attach output layout in constructor.
    Makes the server more self contained
  * cursor: Set cursor theme via GSettings.
    We do that at the very end as we already need the output layout mapping
    set up.
    Close: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/6
  * po: Fix path to phoc-dev unit.
    Fixes efecd3612 ("build: Setup i18n")
  * docs: Mention examples
  * ci: Update shared scripts to 891d0bd
  * ci: Check our markdown.
    This makes sure we don't regress
  * xdg-popup: Delay damaging to the next commit.
    We want to make sure the old popup position gets damaged but not before
    the client submits a new buffer. Otherwise we might see the popup
    flickering at the old position.
    This fixes flickering selection bubbles in e.g. gnome-text-editor when
    repositioning them quickly.

  [ Sebastian Krzyszkowiak ]
  * output: Check for shell reveal before scanning a fullscreen view out.
    Otherwise the shell will remain hidden (but accepting input) whenever
    the fullscreen surface behind it can be scanned out directly.

  [ Evangelos Ribeiro Tzaras ]
  * output: Fix possible segfault with XWayland views.
    Surface might be NULL here, so check before dereferencing it.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/382

 -- Guido Günther <agx@sigxcpu.org>  Mon, 11 Nov 2024 20:15:19 +0100

phoc (0.42.0) experimental; urgency=medium

  * cursor: Don't submit pending im state without a surface.
    Avoids hitting the assert() when dragging a window with server side
    decorations.
    Fixes: 11ac332cf ("cursor: Submit preedit on mouse/touch down")
  * view: Ease focus debugging.
    Allow to print which view tried to get initial focus with which token.
  * seat: Ack that phoc_seat_view_from_view always succeeds.
    If it doesn't it's a programming error.
  * seat: Simplify phoc_seat_set_focus_layer.
    As we're using a queue (since some time now) we can make this easier to
    read.
  * output: Check correct layer surface.
    We're checking the stacked surface a couple of lines above. We want
    to check the target here.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 28 Sep 2024 19:19:34 +0200

phoc (0.42~rc1) experimental; urgency=medium

  * treewide: Fix docstrings
  * view: Clarify scale.
    There's surface scales, scale-to-fit scales, buffer scales, …, let's
    explain what this one refers to.
  * output: Document PhocSurfaceIterator.
    It should rather be PhocSurfaceIteratorFunc as it's the function invoked
    by the various iterators.
  * layer-surface: Handle destroy in PhocLayerSurface.
    Another bit moved.
  * layer-shell: Make child creation/destruction available to PhocLayerSurface.
    We want to move the PhocLayerSurface handling to the class
    implementation. Since popups and subsurfaces are currently handled in
    layer-shell we need to make them available to PhocLayerSurface.
    We do so by introducing a private header which we can then reuse when we
    move the popups and subsurfaces out of layer-shell too.
    This leaks a bit of popup setup details as we expose
    phoc_layer_popup_unconstrain() too but we can fix that up when
    introducing the PhocLayerPopup object.
  * layer-surface: Handle unmap in PhocLayerSurface
  * layer-surface: Make damage() private.
    It's only user unmap() is now handled within the class
  * layer-surface: Handle map in PhocLayerSurface
  * layer-surface: Handle new_popup in PhocLayerSurface.
    We leak a bit of popup setup but we'll fix that when introducing an
    PhocLayerPopup object in the future.
  * layer-surface: Don't forget to remove new_popup handler
  * layer-surface: Move surface_commit to PhocLayerSurface
  * layer-surface: Move adding to output list to PhocLayerSurfce.
    With this we have the listener setup / removal and list manipulation all
    in PhocLayerSurface making it match the destruction bits that moved in
      0a1d0d09e ("layer-surface: Move object destruction to finalize")
    and `phoc_handle_layer_shell_surface ()` can focus on determining the
    output and arranging layers.
  * layer-shell: Make header match symbol prefix.
    Since the dawn of time the header name didn't match the symbol
    prefix (`phoc_layer_shell`). Fix that and rename the C file
    while at that too.
    Fixes: c960805d9 ("Initial commit")
  * layer-surface: Add and use phoc_layer_surface_get_mapped()
  * view: Use self in phoc_view_maximize
  * view: Use self in view_restore
  * view: Use self in phoc_view_tile
  * view: Add decorated property.
    Use it to toggle the decoration. This will allow us to toggle
    decorations based on different factors like window state.
  * view: Add state property.
    This tracks whether the view is floating, tiled or maximized
  * text-input: Use C style comments.
    While we're cleaning up anyway fix some indent too.
  * text-input: Drop underscore from file name.
    This makes it match other source files. Rename to the class
    name while at that.
  * input-method-relay: Move unsetting focus to separate function.
    This makes it more descriptive and we'll add more code there soon.
  * input-method-relay: Submit pending preedit on focus out.
    This ensures we don't lose the preedit when the client has preedit and
    loses focus.
    See https://gitlab.gnome.org/World/Chatty/-/issues/864#note_1962513
  * input-method-relay: Allow to submit preedit.
    Add a function that resets the current IMs preedit
  * cursor: Submit preedit on mouse/touch down.
    This ensures we submit the preedit when e.g.the user opens a menu
    or clicks in another location in the text entry field

 -- Guido Günther <agx@sigxcpu.org>  Fri, 20 Sep 2024 15:45:37 +0200

phoc (0.41.0) experimental; urgency=medium

  * seat: Track last button and touch serials
  * xdg-surface: Validate serials for move and resize.
    We don't care if the serial is from a touch down or button event event
    atm.
    Two more TODOs out of the way
  * output: Fix phys_height condition.
    We want to set it when the height is set, not the width.
    Fixes: 128483f6a ("output: Allow to configure physical width and height")

 -- Guido Günther <agx@sigxcpu.org>  Thu, 15 Aug 2024 08:19:20 +0200

phoc (0.41.0~rc1) experimental; urgency=medium

  * subprojects: Update wlroots to 0.17.4
  * idle-inhibit: Cancel DBus call before freeing an inhibitor.
    Otherwise we might end up accessing already gone memory if the async
    call ending in `on_screensaver_inhibit_finish` is still in progress.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/375
  * layer-shell-effects: When folded reject fling that wouldn't unfold.
    When a surface is folded we reject a fling that doesn't go into the
    unfold direction.
    This prevents us picking up the gesture when an ongoing fling on another
    surface crosses this surface. This can e.g. happen when swipe closing
    apps in phosh where one crosses the top bar during the fling.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/380

 -- Guido Günther <agx@sigxcpu.org>  Wed, 07 Aug 2024 19:30:37 +0200

phoc (0.40.1) experimental; urgency=medium

  * layer-surface: Rename helper.
    The actual unmap happens in `handle_unmap`.
  * layer-shell: Mark layer cache dirty when OSK changes layers.
    Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075857
    Fixes: 109b0afe9 ("output: Cache layer surface ordering")
    Tested-by: Andrey Skvortsov <andrej.skvortzov@gmail.com>
  * ci: Add version number consistency check.

 -- Guido Günther <agx@sigxcpu.org>  Tue, 09 Jul 2024 06:57:49 +0200

phoc (0.40.0) experimental; urgency=medium

  * keyboard: Modernize indent.
    PhocKeyboard is one of the earlier GObjects. Let it catch up with
    current indent.
  * keyboard: Use C style comments
  * keyboard: Chain up to parent's constructed first.
    We want to initialize the parent first. The other children of
    PhocInputDevice to that correctly already.
  * keyboard: Move signals above class
  * subprojects: Update wlroots to 0.17.3
  * tracing: Drop unused variables
  * gesture: Fix indent
  * cursor: Name drag gesture accordingly.
    This makes it distinguishable from other gestures.
  * cursor: Drop cursor_gestures_handle_event.
    We can fold it into handle_gestures_for_event_at
  * layer-shell-effects: Reduce time for fold/unfold animation.
    Feels more snappy without being too hectic.
  * gesture: Allow to retrieve last event sequence
  * layer-shell-effects: Split out is_handle check.
    Will be useful in a follow up commit
  * layer-shell-effects: Allow to fling fold/unfold a draggable surface.
    When the velocity is high enough the surface fold/unfold is animated.
    We don't take the velocity into account for the animation.
  * cursor: Detect swipe gestures.
    Apply them to draggable layer surfaces if present. This allows to
    fling them away with a high velocity swipe gesture.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/284
    Closes: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/792
  * output: Handle NULL output gracefully.
    It's a bit simpler than adding `if (!output)` at the call sites
  * seat: Handle NULL output gracefully.
    We can't arrange layers on gone outputs.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/257
  * desktop: Simplify phoc_desktop_surface_at.
    The function becomes quick to parse if we remove the assignments
    out of the if() clauses and get the output coordinates upfront
    as they apply to both layer surface blocks.
  * desktop: Add wlr to desktop_surface_at.
    Makes it consistent with phoc_view_get_wlr_surface_at
  * output: Get getter for wlr_output.
    We catch lots of errors via type asserts so add a getter with
    that.
  * output: Clear wlr_output->data pointer.
    This points to self which is about to be finalized, clear it out so
    other parts don't access the gone output.
  * desktop: Don't forget to remove the gone output from the layout.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/155
  * tests: Use MALLOC_PERTURB_
  * layer-surface: Add layer getter
  * layer-shell-effects: Drop hash table for alpha layer surfaces.
    We don't need to look up by layer surface so no need to maintain the
    hash.
  * output: Make phoc_output_for_each_surface private
  * output: Clarify phoc_output_get_layer_surfaces_for_layer
  * output: Use a GQueue for the layer surfaces.
    This allows us to go forward and backwards easily.
  * desktop: Use phoc_output_get_layer_surfaces_for_layer.
    This makes sure we confine the layer surface iteration to
    PhocOutput.
  * output: Unify layer surface iteration logic.
    Use phoc_output_get_layer_surfaces_for_layer to iterate the
    surfaces in phoc_output_layer_for_each_surface. This unifies
    layer surface iteration in one place.
  * output: Move queue ownership to output.
    This will allow us to cache it
  * output: Cache layer surface ordering.
    Instead of recalculating on each access cache the ordering
    and make bits that might change the ordering (such as committing
    a layer surface) invalidate the cache.
    This also works towards removing more double accounting in this area.
  * layer-shell-effects: Allow to tweak stacking.
    The stacked-layer-surface protocol allows to stack a layer surface
    directly above or below another layer surface.
  * desktop: Allow to get layer surface stacks
  * output: Process layer surface stackings
  * ci: Fix drm backend build on alpine.
    It needs libdisplay-panel-info
  * doc: Document help and disable-animations flag
  * settings: Split out boolean option parsing
  * output: Simplify update_output_manager_config
    wlr_output_configuration_head_v1_create already sets the values from
    the passed in output.
  * output: Apply drm panel orientation.
    If `drm-panel-orientation` is set to `true` in phoc.ini apply the panel
    orientation transform by default.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/192
  * utils: Ignore displays that encode aspect ratio rather than size.
    This is based on sway's 2f84d6e349d12f3293c44268bc5c8551340e5787 which
    in turn got inspired by mutter.
  * output: Allow to configure physical width and height.
    This can be useful in case edid is off or if we're on a nested
    display (like Wayland or X11)
  * output: Print output info at the very end.
    This allows us to see (possibly overridden) physical size.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 29 Jun 2024 19:30:02 +0200

phoc (0.39.0) experimental; urgency=medium

  [ Guido Günther ]
  * gitlab-ci: Update base image to 2024-04-04.
    Otherwise gcovr fails on us when a submodule has tests disabled.
  * build: Update to gmobile 0.1.0
  * build: Allow to use shared gmobile.
    This makes it a bit simpler to keep notch information up to date.
  * packaging: Ignore gmobile related files
  * doc: Add --skip-subprojects to install.
    This avoids putting gmobile headers and shared objects into the system.
    Switch to using meson while at it
  * settings: Mark some functions as skip.
    This avoids warnings when creating introspection data
  * doc-check: Be more strict
  * tests/xwayland: Wait a bit.
    Wait until the frame got rendered as we otherwise might snapshot
    the previous frame
  * keyboard: Fix indent of keyboard_execute_compositor_binding
  * desktop: Reindent pointer_constraint helpers.
    We move the g_new0 to it's separate line to not hide an allocation in a
    variable declaration, use casts where appropriate.
  * cursor: Don't unlink constraint_commit twice.
    It's unlinked a couple of lines above already.
  * cursor: Deduplicate pointer motion.
    Absolute and relative motion were doing very similar things but
    differently. Use a single function for the common bits.
  * desktop: Drop duplicate include.
    Fixes: c960805d ("Initial commit")
  * color-rect: Premultiply the alpha value.
    This is how render_pass expects it. Fixup the existing animations using
    alpha for that.
  * color-rect: Don't render if unmapped.
    Otherwise we might end up with changed screen state although the
    rect is unmapped.
  * types: Make it simple to compare colors
  * color-rect: Add setter for color.
    This allows us to use g_notify_by_psepc()
  * color-rect: Allow to set alpha.
    So far we only allowed setting the full color, allow to set
    alpha so we can drive the animation.
  * desktop: Add animation when always-on-top is toggled on/off
  * time-animation: Fix use after free
  * main: Include locale.h.
    Needed for LC_MESSAGES
    Fixes the -Dbuildtype=debug build
  * seat: Make seat-views a queue and private.
    Queues are a bit easier on the eyes.
  * seat: Make has_focus private
  * seat: Reverse window cycle focus order.
    Cycling "backward" now means to focus the view that previously had focus
    while moving forward means to focus the view that was out of focus for
    the longest time.
    With this we correctly focus the last focused view when cycling via
    keyboard shortcuts and then closing a window.
    It also fixes the case where opening an application and cycling backward
    would not get one back to the previous application.
  * main: Include locale.h to fix -Dbuildtype=debug build
  * output: Disconnect render_outputs signal from the correct object.
    Otherwise we might try to access an already gone output in render_cutouts
  * build: Indent by two spaces
  * build: The wlroots library is a subproject wrap.
    Fixes: e9b9ef02 ("build: Use meson wrap for the wlroots submodule")
  * build: Add tests to summary
  * build: Separate generated sources and headers.
    This reduces the  number of build steps from 465 to 222 (when linking
    against a shared wlroots).
  * desktop: Fix typo.
    We're looking at phosh's schema here
  * docs: Expand on configuration.
    Mention where we read configuration from and list the schemas and keys
    phoc currently uses.

  [ MoonlightWave-12 ]
  * docs: Update links in README.md.
    The links were outdated and some did not work anymore.
    The link to the documentation for GLib now links directly
    to the relevant part about environment-variables.
    Also add links to the files `debian/control` and
    `src/phoc.ini.example`, to make those easier to open.
  * docs: Update link to libhandy in HACKING.md
    and remove an unused and outdated link.
  * docs: Fix typos in doc/gettingstarted.md.
    Also add a few commas for better readability.
  * docs: Add `./` to commands for running scripts from source-tree.
    To make it clearer that those have to be entered as paths to the scripts.
  * docs: Add more syntax-highlighting

  [ Sam Day ]
  * keyboard: Udev configuration for "wakeup keys"
    If a keyboard has an underlying udev device, and that device has
    properties matching PHOC_WAKEUP_KEY_, these properties are used to
    determine whether a particular key (or all keys) from that device will
    trigger activity events or not.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/363

 -- Guido Günther <agx@sigxcpu.org>  Sun, 12 May 2024 13:12:32 +0200

phoc (0.38.0) experimental; urgency=medium

  * input-device: Add a helper to detect keyboards.
    Should this prove inefficient we can look at ID_INPUT_KEYBOARD
    udev property.
  * seat: Check for keyboard more thoroughly.
    We only want to announce keyboard capabilities if there's actually
    a hw keyboard (and not just buttons).
  * protocols/device-state: Add keyboard capability
  * device-state: Report hw keyboard capability.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/98
  * example/device-state: Use protocol version 2
  * packaging: Use pkgconf
    pkg-config is deprecated
  * manpage: Fix typos
  * build: Validate desktop file
  * build: Validate schema
  * treewide: Move to mobi.phosh prefix.
    We don't change the schema id's to not break existing installations.
  * wlroots: Update to 0.17.2
  * output: Simplify condition.
    No need to for inverse logic.
  * output: Adjust scale to fractional-scale-v1.
    When reading scale form configuration or updated heads make sure we use
    a scale that works for the fractional-scale-v1 protocol.
  * xdg-shell: Notify popups about fractional/buffer scale changes.
    Otherwise the popup might see outdated fractional scale information and
    become blurry.
    To reproduce:
      - Start at scale 100%,
      - scale to 200 via g-c-c (GNOME Settings)
      - open the scale popup again: The scaled numbers in there are blurry
        while the main window has sharp text.
    Note: tiling the window after changing scale hides the problem as the
    move ensures updated scale information is sent to the view and all
    children.
  * view: Add common map function for ViewChilds.
    Consolidate in one place to avoid errors fixed in the previous commit.
    Once ViewChild is a GObject we can chain up "naturally".
  * view: Add common unmap function for ViewChilds.
    Once ViewChild is a GObject we can chain up "naturally".
  * treewide: Use "Phosh Developers" insteady of myself as copyright holders
  * treewide: Remove unneeded cast around g_object_new()
    It gives us the right type anyway. Turns out our yasnippet
    had that wrong and so it ended up in about all classes.
  * desktop: Bump layer shell version to 3.
    Version 3 adds the layer_shell object destructor only.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/364
  * view: Better document parent child relationship
    parent, parent_link and stack are all concerned with the view stack.
    Cleanup indent while at that.
  * view: Improve docstring
  * view: Add docstring for phoc_view_restore()
  * seat: Indent seat_raise_view_stack
  * keybindings: Return early without a view.
    Use the same pattern in all view related keybinding handlers
  * desktop: Get config from server singleton.
    No need to maintain this as extra property. We did this for some initial
    uncluttering but that's long fixed.
  * desktop: Turn list of views into a queue and make it private.
    This will allow for some upcoming changes and also improves readability
    a bit as we get function names instead of just list manipulation.
    We need to take the indirection via `priv` for the moment until we made
    all of desktop private.
  * desktop: Handle always-on-top.
    This allows views to stay on top (e.g. video players).
    When a view is raised it's already mapped as well as new children are
    raised too to avoid a parent hiding it's children. We don't raise any
    parents in order to e.g. allow to raise a single window of an
    application.
    To activate you need to bind a keyboard shortcut
      gsettings set org.gnome.desktop.wm.keybindings always-on-top "['<super>t']"
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/342
  * desktop: Damage view when raising it.
    This frees the seat from any view related damage handling.
  * view: Implement move-to-corner.
    These are unbound by default, test with e.g.
      gsettings set org.gnome.desktop.wm.keybindings move-to-corner-nw "['<super>y']"
      gsettings set org.gnome.desktop.wm.keybindings move-to-corner-ne "['<super>u']"
      gsettings set org.gnome.desktop.wm.keybindings move-to-corner-sw "['<super>i']"
      gsettings set org.gnome.desktop.wm.keybindings move-to-corner-se "['<super>o']"
    We currently reject scale-to-fit, maximized and fullscreened views for
    that as we want to simplify the scale-to-fit vs saved geometry handling
    first. See https://gitlab.gnome.org/World/Phosh/phoc/-/issues/362
  * view: Make view-child a GObject.
    We use the same pattern as with PhocView and allow for public struct
    members so derived classes can access them easily. Since PhocView and
    PhocViewChild are still entangled we leave most of the member functions
    in PhocView for the moment. They'll be moved in follow up commits.
    We need to rename phoc_view_child_init() to not clash with the GObject
    init function.
  * view-child: Add view and surface properties.
    We don't take ref on the view yet as the current code doesn't transfer
    ownership either. We can improve on that once we have the objects in
    place.
  * xdg-shell: Make xdg-popup a minimal GObject.
    The code will move into xdg-suface later.
  * xdg-shell: Create/destroy popup as GObject
  * view: Make subsurface a minimal GObject
  * view: Create/destroy subsurfaces as GOjects
  * view: Move PhocViewChild's public functions over too.
    We skip phoc_view_child_setup() for now as it accesses view's
    private data.
    Since we now have our own compilation unit we can rename `child`
    to `self` to ease readability.
  * view-child: Move most of phoc_view_child_destroy into finalize.
    For that we pull the `g_object_unref` from the custom destroy handlers
    into `phoc_view_child_destroy`.
  * view-child: Use GObject virtual functions for destroy and get_pos.
    This allows us to drop the ViewChildInterface.
  * view-child: Move most of the ViewChild's setup into constructed.
    This allows us to drop more arguments from phoc_view_child_setup() as
    those are already passed to the object constructor.
  * view-child: Add map / unmap virtual methods.
    This allows us to drop the implementation in the derived classes
    completely (while we could still override them if needed).
  * xdg-shell: Use popup constructor.
    Thus we can drop phoc_xdg_popup_create().
    The phoc_xdg_popup_new() invocations without consuming the return value
    look a bit odd but the ref is dropped in handle_destroy. This is the
    same pattern we use for other surface types.
  * view-child: Drop phoc_view_child_destroy()
    We can simply drop the only reference.
  * subsurface: Use casts instead of accessing `child` directly.
    This improves readability and allows us to rename to parent_instance.
  * xdg-popup: Move popup class into it's own file.
    We might want to merge xdg-surface and xdg-popup back into an
    xdg-shell at some point as they serve the originate from the same
    Wayland protocol but let's have this split for now to disentangle
    xdg_shell.
  * xdg-popup: Use GObject generated casts consistently
  * xdg-shell: Move surface creation handler to xdg-surface
  * xdg-surface: Tighten role check
  * xdg-shell: Rename to xdg-toplevel-decoration.
    That's the only bit handled in there now. This allows us to move
    decoration related bits into the matching header too.
  * layer-shell: Move handler into layer-shell related header.
    We ought to rename the header too at some point but there's outstanding
    MRs we don't want to break.
  * output: Prefix handlers.
    Now all public functions are properly namespaced.
  * doc-check: Drop namespace exception.
    Public methods are now properly prefixed.
  * docs: Enable fatal warnings during doc build.
    This makes sure we no longer ignore links that became stale or are
    mistyped.
    See phosh commit 8c4724e44c6727f36bed4fd67e853bddf17b6ccd
  * view: Add and use phoc_view_add_child()
    This ensures the child doesn't access the view's private data.
  * view-child: Move adding to parent's list into constructed.
    One more bit to get rid of phoc_view_child_setup().
  * view-child: Move subsurface creation to constructed too.
    This allows us to drop phoc_view_child_setup(). The only view child
    private method left in view.c is phoc_view_child_subsurface_create()
    which we can remove once subsurface creation becomes public.
  * subsurface: Move into it's own file.
    This disentangles subsurface handling from view handling (positioning,
    window state, etc)
  * subsurface: Add and use wlr-subsurface property
  * subsurface: Move setup into constructed.
    This makes subsurface creation for views and view-children more alike.
  * view-child: Move subsurface creation out of view.
    With subsurface being it's own class we can now move this bit
    over to PhocViewChild too.
  * subsurface: Make struct private.
    Neither view nor view-child require direct member access anymore.
  * view: Use subsurface constructor directly.
    The fact that we don't store the ref isn't ideal. At some point we want
    to move the `handle_destroy` handlers to their containers and drop the
    ref there. This isn't worse than before though, it's just more visible.
  * popup: Use self consistently.
    When these bits were part of view.c we used `popup` to not confuse with
    `self` meaning `view`. This can be fixed now.
    Let's do this now since there can't be any outstanding MRs touching
    this file.
  * popup: Wait for commit before unconstraining popup.
    This fixes a critical:
      [types/xdg_shell/wlr_xdg_surface.c:169] A configure is scheduled for an uninitialized xdg_surface [address]
  * view-child: Add and use view property getter.
    This looks a bit nicer.
  * output: Drop superfluous 'local' from damage helpers.
    The names are long enough already
  * view: Don't init subsurfaces twice.
    The code in phoc_view_init_subsurfaces() does as same things the code in
    map() just above the invocation does.
    Fixes: c2e903e6 ("view: Move subsurface initialization to separate function")
    which added the function but didn't remove the code in _map().

 -- Guido Günther <agx@sigxcpu.org>  Tue, 02 Apr 2024 14:12:22 +0200

phoc (0.37.0) experimental; urgency=medium

  [ Guido Günther ]
  * phosh-private: Add XF86Screensaver to the list of subscribable symbols.
  * doc-check: Allow for pixman_region32_t to be unrsolved.
    Some upcoming helpers will have this function argument.
  * util: Introduce phoc_util_is_box_damaged.
    This will be helpful for damage tracking when switching to render_pass.
    It is similar to is_damge in the renderer but we want it public as e.g.
    blings will want to use that too.
  * output: Add helpers to transform boxes and regions.
    This will be useful when switching to render_pass
  * render: Clarify buffer render vs scanout rendering.
    Rendering to a buffer uses the legacy renderer while rendering targeting
    scanout is using render_pass. Make it clear where the view render
    itertor fits in.
  * render: Switch to wlr_render_pass.
    This switches us to wlr_render_pass and to wlr_output_commit_state.
    phoc_renderer_render_view_to_buffer keeps using wlr_renderer directly as
    it needs wlr_renderer_readpixels. This will be fixed when switching to
    0.18.x and wlr_texture_read_pixels.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/344
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/346
  * output: Add scale filter mode.
    This allows to use different texture filters based on output scale.  For
    fractional we use bilinear filtering and for integer scales the nearest
    filtering (as we don't need to scale down).
  * settings: Allow to set output scale-filter
  * layer-shell-effects: Better document drag handle.
    The current description made it impossible to figure out how it works
    without looking at the code.
  * server: Fix docstring.
    Fixes: ac4e8bbc ("server: Exit when session exits")
  * docs: Update dependent libraries.
    Add phoc and glib. Since wlroots is documented in the source
    code we link to the git repository.
  * docs: Add urlmap.
    This allows for external linking
  * treewide: Add TODOs.
    Add TODOs for the remaining classes we want to encapsulat
  * treewide: Use phoc_server_get_desktop()
    We had about all combinations:
    - Fetching the server, then the desktop
    - Fetching the server, then using server->desktop directly
    - Using phoc_server_get_desktop ()
    - Using phoc_server_get_default ()->desktop
    As we want PhocDesktop in all cases use
      PhocDesktop *desktop = phoc_server_get_desktop (phoc_server_get_default ());
    consistently. Only in the few places that use server and desktop use
      PhocDesktop *desktop = phoc_server_get_desktop (server);
    We also move fetching the desktop to the top of functions and clean up
    some minor misindents along the way.
  * server: Make desktop private.
    This makes sure we only access the desktop that way.
  * server: Make session startup related variables private
  * server: Make init flag private
  * treewide: Add and use phoc_server_get_input()
    This brings it in line with phoc_server_get_desktop() making
    an explicit server variable unnecessary in many functions.
  * server: Make input private
  * server: Add and use phoc_server_get_config()
    This gets it in line with phoc_server_get_desktop()
  * server: Make config private
  * server: Make flags private
  * server: Fix doc string
  * server: Add and use phoc_server_get_debug_flags()
    This gets it in line with phoc_server_get_desktop()
  * server: Make debug flags private
  * treewide: Add and use phoc_server_get_wl_display()
    This gets it in line with phoc_server_get_desktop()
  * server: Make wl_display private
  * server: Make wl_source private
  * server: Make wlr_subcompositor private
  * treewide: Add and use phoc_server_get_backend()
    This gets it in line with phoc_server_get_desktop()
  * server: Make backend private
  * treewide: Use phoc_server_get_render()
    This gets it in line with phoc_server_get_desktop()
  * server: Make renderer private
  * treewide: Add and use phoc_server_get_compositor()
    This gets it in line with phoc_server_get_desktop()
  * server: Make compositor private
  * server: Make data device manager private
  * server: Drop private data.
    As the server is not derivable we can use `self` directly now
    that all data members are private.
  * layer-shell: Improve indent.
    Use full line length, drop superfluous braces and add space before
    function's (). No functional change.
  * layer-shell: Drop phoc_ prefix
  * layer-shell: Use wlr_ prefix for wlr's subsurfaces
  * layer-shell: Drop phoc prefix from phoc's subsurface
  * layer-shell: Add phoc prefix to layer_subsurface_new()
    Make is consistent with other constructors.
  * layer-shell: Prefix destructor.
    Makes it consistent with the constructor
  * text-input: Indent fixes
  * utils: Fix prefix
  * view: Uncrustify view_update_output.
    Let's clean that up before making more changes.
  * output: Move scale updates to separate function
  * view: Move surface enter/leave handling to separate function
  * utils: Update buffer scale when a surface enters/leaves an output.
    Besides doing sending the preferred buffer scale on output scale changes
    we also need to do so when a view moves to another output.
    Fixes: 07315fc7 ("output: Refresh textures on scale changes")
  * treewide: Add support for fractional-scale-v1 protocol.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/345
  * view: Update surface scale on subsurface map.
    Use our new helper for that.
  * layer-shell: Send surface scale on map.
    Use the surface helper to not only notify about output enter but also
    buffer and fractional scale.
  * tests: Use pixman renderer.
    We mostly test positioning / stacking so use a renderer that works well
    in containers.
    If we want to test renderer related bits we can set the renderer
    explicitly.
  * xwayland-surface: Setup view before maximizing.
    Otherwise initially maximized XWayland views aren't rendered.
    Fixes: 1e9df0a2 ("treewide: Adjust to map logic changes")
  * drag-icon: Move into it's own file.
    There's no need for a GObject but it unclutters the seat. This is the
    minimal code move.
  * drag-icon: Add and use is_mapped()
    As in phoc_view_is_mapped() we handle NULL gracefully to simplify
    the checking.
  * drag-icon: Add getters
  * output: Use drag-icon getters
  * drag-icon: Make struct private.
    We don't bother with a GObject until we need properties for e.g.
    animations.
  * output: Use drag-icon header.
    This allows us to drop the forward declaration

  [ Sergey Lisov ]
  * seat: Respect touchscreen to output mapping from wlroots
    wlroots' touchscreen objects (struct wlr_touch) have the "output_name"
    field, which specifies the corresponding output device, from wlroots' own
    point of view. Use these mappings if present not explicitly overridden by
    gsettings.
    This fixes the issue where touch inputs do not get rotated with the screen
    when changing device orientation on setups where wlroots provides this
    information (such as when running nested).
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/312

 -- Guido Günther <agx@sigxcpu.org>  Wed, 06 Mar 2024 17:42:59 +0100

phoc (0.36.0) experimental; urgency=medium

  * ci: Use our ci template.
    This avoids an external dependency and unbreaks ci
  * ci: Update shared scripts.
    Update shared scripts to commit 04a85df2f3311f3012b6c49bf353b376ae0f32b2
    (matching the ci template).
    This isn't strictly necessary but avoids config drift.
  * po: Add de template.
    We want one template to make the po check happy
  * ci: Add po check.
    Just use our shared ci template for that
  * ci: Add commit message style checks.
    Since we pulled in the config in the previous commit let's add the check
    as well.
  * d/control: Update URL.
    While at that fix the section and update the standards version
  * view: Prefix view_unmap.
    No functional change.
  * view: Prefix view_is_ getters.
    This makes them show up in the docs
  * view: Don't leak details of view arrangement.
    Instead of leaking the details how view are laid out keep that
    local to view.
  * view: Use phoc_view_arrange()
    Use phoc_view_arrange() internally too.
  * keybindings: Avoid self for keybinding.
    The object in this unit is PhocKeybindings so don't use self for a
    single keybinding to avoid confusion.
  * keybindings: Allow for a parameter
  * keybindings: Use a single handler to move a view
  * view: Name public functions consistently
  * keybindings: Prefix parse_accelerator.
    It's a public function
  * gtk-shell: Make phoc_gtk_{shell,surface}_from_resource static.
    No need to have them public.
  * doc-check: Make namespace check more strict.
    The only bits not properly namespaced are wlroots signal handlers that
    are located in other compilation units.
  * view: Fix doc string
  * view-deco: New class for decoration handling.
    We'll turn it into a full bling but let's move functionality into a
    separate class first.  As we set the same decoration sizes keep this
    internal to PhocViewDeco.
  * view-deco: Make PhocViewDeco a bling.
    This way we don't need special handling for decorations in
    output and renderer
  * view: Nuke view_update_decorated.
    Just call phoc_view_set_decarated
  * view: Drop decorated boolean.
    We can use the pointer to the decoration object now instead.
  * view: Drop view_get_deco_box.
    Now unused
  * xdg-shell: Use typedefs for enums and structs
  * layer-shell: Use typedefs for enums and structs
  * licenses: Move to LICENSES/ and add missing ones.
    This also helps us to use `reuse` out of the box
  * protocols: Add copyright header to phosh-private
  * treewide: Add a bunch of missing copyright header
  * treewide: Use GPL-3.0-or-later consistently
  * reuse: Add licensing information
  * ci: Check copyright and licenses via reuse
  * desktop: Use g_new0. Avoids possible NULL dereference
  * seat: Guard against NULL focus
  * layer-shell-effects: Guard against NULL output
  * view: Add G_NORETURN.
    This makes building with clang less noisy
  * testlib: Add G_NORETURN.
    This makes building with clang less noisy
  * build: Disable -Wcast-align with clang.
    This triggers for Wayland's wl_container_of() where it doesn't matter for
    us.
  * keybindings: Drop unused function
  * phosh-private: Cast enum.
    Silences the clang warning (and we already co it just above the
    assignment).
  * ci: Add clang build
  * cursor: Drop unused assignment in handle_shell_reveal
    wlr_layer_surface_v1_try_from_wlr_surface is only used to check
    if it's a layer-surface, we don't need the assigned value.
    While at that make things a bit easier to read.
    Fixes: 8c363c72 ("cursor: Convert to try_from")
  * desktop: Drop unused value
  * server: Make session startup failure a critical.
    We exit the compositor so a warning looks like too low severity.
  * server: Avoid shell for argument parsing.
    This avoids yet another exec during session launch.
    See https://gitlab.gnome.org/World/Phosh/phosh/-/merge_requests/1352
  * seat: Grab meta press.
    Instead of just checking if it's pressed grab it so we cancel the
    release event for the meta key "stand alone press".
    This allows to move views via meta + mouse-drag without e.g. bringing up
    phosh's the overview afterwards.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/322
  * keyboard: Remove now unused phoc_keyboard_get_meta_key.
    This prevents some more leaking of keyboard details into the seat.
  * layer-shell: Don't center views unconditionally.
    We only want to do so when using automaximize
    Fixes: 08504c40 ("view: Don't leak details of view arrangement")

 -- Guido Günther <agx@sigxcpu.org>  Wed, 31 Jan 2024 11:26:38 +0100

phoc (0.35.0) experimental; urgency=medium

  [ Guido Günther ]
  * build: Allow to build with released wlroots 0.17.0.
    0.17.0-dev is greater than 0.17.0
  * packaging: Fix phosh relationship
    phosh 0.34.0 switched to ext-idle-notify
  * packaging: Drop default -Dembed-wlroots=disabled.
    Otherwise we end up with
      -Dembed-wlroots=disabled -Dembed-wlroots=enabled
    which works but looks confusing.
  * packaging: Install NEWS and manpages.
    Doesn't hurt to have them in the development builds too.
  * build: Spell Xwayland like on wayland.fdo
  * build: Make paths a bit simpler to read.
    Avoid join_path and prefer '/'.
  * build: Format meson options consistently
  * tracing: Add support for systemtap probes.
    We don't add any actual static trace points yet.
  * helpers: Add tracing scripts.
    Add example scripts that help tracing the render loop and with
    activation.
  * tracing: Allow to exempt functions from inlining.
    Allow to exempt functions from inlining when tracing is enabled.
  * output: Don't inline frame submission.
    Don't inline frame submission when tracing is enabled
  * packaging: Allow to enable tracing via a build profile
  * d/control: Bump wlroots dependency to 0.17.0 too.
    As we're building with the embedded variant only in CI no one noticed yet.
  * wlroots: Bump to 0.17.1
  * xdg-shell: Set mapped before damaging popup.
    Otherwise the following phoc_view_child_damage_whole() will
    always return early as the view isn't mapped yet.
  * output: Drop support for surface rotation.
    We're not using it, it complicates the code and it was broken
    as we generated rotated boxes (e.g. in render_texture() and
    get_surface_box() but never used them.
  * utils: Remove now unused rotated bounds helpers.
    We do this in a separate commit so they can be brought back
    easily if needed.
  * xdg-shell: Fix popup reposition damage.
    Since 40fa76e34f1b4c33c09c377095e7ff9b4897aa55 we don't damage the whole
    view containing a popup but only the popup itself reducing the damage
    submitted. This worked well until we switched to xdg-shell >= 3 where
    popups can be repositioned leaving traces of the old popup behind.
    This can clearly be seen with GTK's magnifier when selecting text.
    Damage the parent view on reposition to avoid this.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/355
  * view: Take geometry into account for fullscreen views.
    If we hit the direct scanout path geometry doesn't matter for the
    rendered surface but when the user e.g. opens a popup we hit the
    rendering path and we need to take geometry into account as otherwise the
    surface is shifted towards the bottom right edge.
    This also fixes UI elements not being responsive in fullscreen.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/356
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/357

  [ Paul Cercueil ]
  * output: Detect DPI screens as built-in.
    Some phones (e.g. Galaxy S2) use a DPI screen. Detect them as built-in.

 -- Guido Günther <agx@sigxcpu.org>  Wed, 03 Jan 2024 19:49:46 +0100

phoc (0.34.0~beta1) experimental; urgency=medium

  * testlib: Print name of taken screenshot. This allows to trace test cases easier
  * output: Don't forget to enable output when config is in use
  * output: Migrate to damage ring.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3530
    See sway commit 7862fa670e208b4871c868f9b0e2a19b46a30e63
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/327
  * output: Remove now unused phoc_output_damage_add_box
  * render: Simplify rendering condition.
    This avoids the double negation:
       !pixman_region32_not_empty()
  * output: Use wlr_output_state when handling config changes.
    This ensures we don't accidentally commit pending state.
  * output: Use wlr_output_state when handling power mode changes.
    This ensures we don't accidentally commit pending state.
  * output: Rename phoc_output_set_mode to phoc_output_state_set_mode.
    We set the mode on the pending output state,  not the output.
  * keyboard: Don't ever blank output on power button press.
    The shell can do this nowadays.
  * desktop: Drop phoc_desktop_toggle_output_blank.
    Now unused. This removes another place where we manipulate output
    state directly
  * output: Drop pending state tracking.
    We use wlr_output_state everywhere except for
    phoc_renderer_render_output() which we'll switch over when moving to
    render_pass.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/328
  * wlroots: Avoid crash when plugging in new output.
    This is exposed now that we don't commit an enabled state early
    anymore. This only triggers when there's a listener for output state
    configuration changes like phosh.
  * build: Bump wlroots dependency to >= 0.17.0-dev.
    This makes sure we don't build against an older system lib accidentally
  * d/control: Add libewmh-dev build-dependency for embedded wlroots build
  * d/control: Add libdisplay-info-dev
  * render: Drop surface->{sx,sy}
    See sway commit 7ec9d07fc597c739760df5223469e9f15340db78
  * desktop: Add layer-shell version
  * server: Pass wl_display version
  * desktop: Use variable for maximum supported version
  * output: Listen to the output's request-state event.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2693
  * server: Adapt to new wlr_backend_autocreate API.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3814
    See sway commit 7623292734d6ba48bbfef1c32da28d02118dac38
  * desktop: Convert to try_from
  * cursor: Convert to try_from
  * gtk-shell: Convert to try_from
  * xdg-activation: Convert to try_from
  * output: Adjust to removed events.{enable,mode}
    See wlroots commit c8eb24d30e18c165728b8788a10716611c3b633d
  * phosh-private: Switch from wl_shm_buffer to wlr_buffer
    zwlr_screencopy_frame changed so we need to adjust
    See wlroots commit c153ae3c5d0e330d5fe90d4db0114e2e5d792bf2
  * d/control: Sort embedded wlroots build-deps alphabetically
  * d/control: Build-dep on libliftoff and hwdata for embedded wlroots build
  * ci: Use wlroots subproject build.
    This allows us to build against git more easily. For that we pull in
    recent wayland-protocols and wayland.
  * ci: Use embedded wlroots for packaging test.
    For that we also want to switch to trixie as it has the needed
    dependencies.
  * ci: Use trixie by default.
    We were upgrading to sid but can now use trixie as it has the necessary
    deps.
  * subprojects: Rediff wlroots patch.
    This makes it apply without fuzz. Otherwise meson might complain.
  * wlroots: Update to 2023-05-04
  * build: Drop custom post_install.
    Just use the gnome module
    See wlroots commit 8af00d5534998dbb53a60c2b0a1ab59a51d5cdf5
  * view: Convert to try_from
  * text_input: Convert to try_from
  * layer_shell: Use wl_container_of to get layer surface.
    This makes us independent from the `data` passed.
    Needed when switching to the new map logic but useful on its own.
  * xwayland-surface: Get wlr_xwayland_surface from self.
    This makes us independent of the data passed
    Needed when switching to the new map logic but useful on its own.
  * treewide: Adjust to map logic changes.
    See sway commit c9e1dab3187d22ada0232d699e759a628e0ed185
    Forwards to wlroots-git 2023-06-05
  * seat: Switch to wlr_cursor_set_buffer and wlr_cursor_set_xcursor.
    Forwards to wlroots-git 2023-07-05
  * xdg-shell: Use toplevel instead of surface.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4316
    See sway commit 363c57984d08ff54bbf31f567ffcd4addad98753
  * render: Use wlr_presentation_surface_scanned_out_on_output.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4081
  * treewide: Drop support for wlr-idle.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3778
  * output: Use actual state struct in handle_comitted.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4331
    See sway commit 4326a26ad6fb64b8f8de7d32c1e7b6423e1f84f3
  * wlroots.wrap: Forward to 2023-10-10
  * seat: Use simpler wlr_cursor_unset_image
  * Revert "wlroots: Avoid crash when plugging in new output"
    This reverts commit 5772172f679400676daa3fc5de883879b73d54aa.
    Not needed with 0.17
  * output: Use wlr_output_state_init.
    See wlroots commit be050979684ae8779a56e4b0166cfb21d1935d35
  * cursor: Remove unused variable
  * phosh-private: Use wlr_buffer_try_from_resource.
    See wlroots commit 8ccbe45143eff1705c0516bcdb02376d7d627198
  * render: Use wlr_output_is_direct_scanout_allowed.
    This obsoletes the cursor check.
  * desktop: Modernize indent in phoc_desktop_setup_xwayland
  * server: Filter out xwayland-shell-v1. This is only meant for XWayland.
  * phosh-private: Allow to get global
  * layer-shell-effects: Allow to get global
  * desktop: Assign more protocols.
    We want these for security context checks
  * desktop: Create security_context_manager_v1
  * desktop: Add check for privileged protocols.
    Allow to easily check if a global belongs to a privileged protocol
    that shouldn't be exported to untrusted clients.
  * server: Don't expose globals of privileged protocols to untrusted clients.
    Clients that have a security-context-v1 attached shouldn't see those
    globals so filter them out.
    This is inspired by sway's MR https://github.com/swaywm/sway/pull/7648
  * ci: Modernize sanitizer build. It won't build on such old versions
  * ci: Use image with updated dependencies. This will allow us to recurring
    package installations from CI
  * ci: Simplify image update
  * ci: Install dependencies for doc build and XWayland into image.
    Speeds up CI. We also add uncrustify as this will become useful
    for formatting checks soon.
  * ci: Install build-deps for embedded wlroots build into the image.
    This speeds up ci. Since we install with --no-install-recommends we need
    to add more build-deps to ensure the x11 backends stays buildable.
  * ci: Install ci deps into the image. Speeds up CI.
  * treewide: Fix indent start columns in function bodies.
    Several places either didn't indent by two spaces or misaligned under
    opening braces or in switch statements. Fix that.
  * treewide: Fix function definition opening brace.
    We want it on a separate line. Fix places where that is off.
  * treewide: Fix initial column of function parameters.
    We want their types vertically aligned. Fix places where that's not the
    case.  We don't bother aligning the parameter names yet.
  * treewide: Fix function definition return types indent.
    Make sure they're on a separate line
  * treewide: Fix function call argument indent.
    Function call parameters are separated by ", ".
  * treewide: Avoid space before array brackets
  * ci: Run merge requests in merge request pipelines.
    This gives us access to more variables so we can e.g. diff against
    the base branch.
  * ci: Check style in merge requests
  * testlib: Print filename of failed screenshot
  * output: Move output configuration handling to separate function
  * output: Allow to test output config changes.
    Another TODO done.
  * output: Simplify
  * settings: Drop unused includes
  * output: Move output state configuration to separate function.
    This makes phoc_output_initable_init() easier to read and will allow us
    to reapply output config from other places too.
  * output: Simplify enable during output setup.
    Do this upfront which saves us one indentation level
  * output: Use wlr_output_layout_add_auto if position isn't specified.
    This gives a better automatic layout if multiple outputs are specified
    in the configuration file but not all of them have a position.
    So far they would all be put at 0,0.
  * ci: Move style checks to separate stage.
    Style checks often fail due to minor nits. When looking at the pipeline
    state we want to see at a single glance if this is just a style check or
    maybe an asan failure.
    So make sure these aren't in the same stage.
  * treewide: Drop unused version.h include
  * desktop: Add phoc_desktop_find_output_by_name
  * cursor: Identify relative pointer motion
  * seat: Don't forget to map pointers.
    This unbreaks running nested phoc with multiple outputs
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/347
  * settings: Split output name on '%'
    Space is too common in EDID names. An alternative would be to reverse
    the matching by constructing the string from the output information but
    that's again fragile.
  * settings: Allow for wildcards in output matches
  * doc: Add manpage for phoc.ini
  * build: Make it simple to switch glib versions
  * build: Assume glib 2.74 as baseline.
    It's in Debian stable
  * server: Use g_spawn_check_wait_status. No need to care about older glib.
  * gmobile: Switch to 0.0.4
  * view: Use MIN() MIN() is easier to read than open coding it
  * layer-shell-effects: Use MIN() and MAX(). Easier to read
  * cursor: Use MAX(). Easier to read
  * seat: Avoid misplacing when dragging maximized views.
    If a toplevel is maximized initially there's no saved width or height.
    Use the maximized width/height in this case. Otherwise the toplevel's top
    left corner suddenly jumps to the cursor position when dragging this
    toplevel via mouse pointer from it's maximized state.
    This can be reproduced with firefox. Use
       WLR_BACKENDS=wayland   _build/src/phoc -E firefox
    and maximize firefox. Then close firefox. This will make it restore
    the maximized state on next startup:
       WLR_BACKENDS=wayland   _build/src/phoc -E firefox
    Now drag the window on the titlebar and notice the top left corner
    jumping to the cursor position. With this patch this will no longer
    happen.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/349
  * server: Don't crash when wl-display was never inited.
    This can happen when we hit another failure early.
  * server: Enable linux dmabuf.
    This was so far inited implicitly via wlr_renderer_init_wl_display.
    See https://gitlab.gnome.org/World/Phosh/phoc/-/issues/350
  * view: Send linux_dmabuf_feedback_v1 for fullscreen views.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/350
  * output: Don't forget to free output pending state struct.
    This wasn't much of a problem as we don't set LUT or damage via this yet
    but it's good to have it cleaned up.
  * output: Wire up gamma-control handler.
    See wlroots commit 36376e2ddf0d16baae37e6b733f0baf53f82ebb7
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/348
  * packaging: Drop unneeded build-deps.
    The clients have been dropped from wlroots source tree.
  * subprojects: Use depth=1 for wlroots too.
    We can depthen the shallow clone if needed for development.
  * subprojects: Update wlroots to 0.17.0
  * ci: Don't enforce non-embedded wlroots for doc build.
    Not needed and can break the build.
  * ci: Improve uncrustify config
    - Automatically drop braces on single line statements
    - Remove duplicate semicolons
    - Remove superfluous braces in case statements
  * cursor: Don't forget to update the drag icons position.
    We also need to move the icon when using touch.
  * seat: Handle drag icon hotspot position.
    The position is sent via wl_surface.offset requests.
  * render: Remove unused render-start signal.
    It wasn't a great idea as we'd better handle it per output
  * output: Move render invocation to separate function
  * render: Move sending frame-done events to output.
    It's not related to any rendering. No functional change.
  * render: Move scan_out_fullscreen_view to output.
    There's no rendering going on.
  * output: Mostly move damage ring handling to output.
    Even after moving the full screen view scan out and the frame-done
    event handling the current render pass is a mixed bag of rendering,
    adding additional damage for debug options (touch-points, damage) and
    committing the new output state.
    As a next step move the rotation of the damage ring and the output
    commit out of the render_output call.
    This makes the render flow easier to track. We pass the render context
    around for that and hence make it public. Context is a slightly better
    fit than the generic data.
  * render: Move adding the frame damage to the output.
    The renderer isn't involved.
  * output: Don't forget to submit the frame callback list.
    This fixes some clients only making progress e.g. on cursor movement
    (when there's actual damage submitted)
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/354
  * d/control: Add Breaks: for known clients using kde_kwin_idle

 -- Guido Günther <agx@sigxcpu.org>  Thu, 30 Nov 2023 11:29:01 +0100

phoc (0.33.0) experimental; urgency=medium

  * seat: Use phoc_desktop_notify_activity to notify idle activity.
    This will allow us to notify idle via different protocols
  * cursor: Use phoc_desktop_notify_activity to notify idle activity.
    This will allow us to notify idle via different protocols
  * desktop: Notify via idle-ext-notify-v1 too.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/339
  * protocols: Rename server_protocols to wayland_protocols.
    We build them for servers and clients
  * protocols: Allow to build protocols for client use only.
    Less targets, faster build. Initial one is ext-idle-notify-v1.
  * examples: Add example idle client.
    Based in the idle example in wlroots

 -- Guido Günther <agx@sigxcpu.org>  Wed, 25 Oct 2023 10:57:10 +0200

phoc (0.32.0) experimental; urgency=medium

  * device-state: Assert on invalid values in switch statement.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/334
  * view: Reindent view_center.
    We'll do some more changes there
  * view: Always pass PhocOutput when an output is needed.
    This boosts readability as we no longer have phoc_output, wlr_output
    and output (the later sometimes meaning a PhocOutput and sometimes
    a wlr_output). We also don't have to guess on function alements.
    Another cleanup series finished.
  * view: Nuke view_get_output. Use phoc_view_get_output() everywhere.
  * seat: Make name private
  * seat: Make exclusive client private. We already have getters and setters
  * seat: Make input mapping settings private. Only used within the seat
  * desktop: Reindent input_inhibit related handlers.
    No changes expected here for some time so let's get this sorted out.
    (spotted while looking at phoc_seat_set_exclusive_client).
  * view: Reindent view_maximize. No other changes
  * view: Add phoc_ prefix to view_maximize
  * view,desktop,text-input,layer-shell: Untabify and the reindent remaining
    bits. Since most parts use the "modern" indent let's move over the last
    bits. Other changes kept to a minimum.
  * keybindig: Handle move-to-monitor-{up,down}
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/336
  * xdg-shell: Sort popup signal unregistration.
    Use the opposite order from registration/as they appear in the struct
  * xdg_shell: Move popup_unconstrain further upwards. Code move only so
    other functions can use it.
  * xdg_shell: Handle reposition event. Unconstrain the popup as it can
    otherwise be positioned oddly.
  * view: Use output relative coordinates when damaging whole child view.
    Otherwise we damage the wrong area. This doesn't show with a single
    output at 0,0 but when e.g. doing
       wlr-randr --output eDP-1 --pos 100,100
    and then e.g opening the right click menu in gnome-terminal and closing
    one can see that the content under the menu isn't redrawn properly.
  * layer-shell: Move osk layer switching into a single function.
    Make it public so it can be used from other parts of the compositor
    Fix up some indent around code we'll change in the next commit
  * text-input: Elevate OSK when text input gets enabled.
    When text input gets enabled on a layer surface we possibly need to
    elevate the OSK. This didn't matter until recently when we rearranged
    the layers on every frame as arrange_layers raises the OSK as well.
    Fixes: a6b3511f0eaadaee9e67843b8495d73ae0374fe3

 -- Guido Günther <agx@sigxcpu.org>  Mon, 02 Oct 2023 14:25:39 +0200

phoc (0.31.0) experimental; urgency=medium

  * ci: Install gcovr.
    Use that instead of lcov to make ninja happy
  * utils: Drop long_side and short_side when calculating scale.
    Otherwise we no longer match the correct width in mm to the
    pixel width and physical height to the pixel height.
  * Add missing includes.
    The modules use wlr_subcompositor or PhocInputMethodRelay
    but didn't include the headers.
  * seat: Add types for GSLists
  * seat: Name `self` as such.
    We're not super consistent in seat.c yet but can fixup functions we
    touch anyway.
  * seat: Make on_tablet_destroy consistent with other on_*_destroy
  * seat: Free device lists
  * virtual: Fix indent
  * pointer: Add missing G_{BEGIN,END}_DECLS
  * switch: Make switches GObjects.
    Helps to further unclutter the headers and improves separation: Switch
    notifies and the seat acts on it.
  * seat: Use `self` in seat_add_switch
  * switch: Allow to infer switch type
  * Simplify getting PhocSeat from wlr_seat.
    No need to get an input (which often involves getting the server first)
    and then iterate when we can infer it directly.
  * render: Move wlr_box_from_pixman_box32 past struct declarations
  * render: Untabify phoc_renderer_initable_init.
    This removes the last tab in this file so we can drop it from
    check-indent to not break the tests.
  * render: Use G_LIKELY to check if touch point debugging is disabled.
    It's likely off so let the compiler optimize for that. In cases
    where we iterate over the list we can check that rather than the
    debug flag.
  * render: Move `continue` to separate line.
    While at that fix some other indentation nits in
    collect_touch_points().
  * treewide: Use g_assert consistently.
    We had some remaining plain `assert ()`. This makes sure we can use
    G_DISABLE_ASSERT.
  * cursor: Use G_UNLIKELY for debug flag
  * cursor: Fix indentation
  * cursor: Use explicit cast
    Make use of the full line length and give every protocol that also
    registers signals a small block to ease readability.
    This also gets rid of tabs in that function which made indenting
    harder than necessary.
  * desktop: Enable support for wp_single_pixel_buffer protocol
  * desktop: Fix formatting of handle_xwayland_*
  * Set xwayland seat when XWayland comes up.
    Since XWayland can run on demand setting it only on server startup
    is not enough.
    This unbreaks copy/paste between X11 and Wayland applications as
    selection handling doesn't work without an assigned seat.
    It also prevents emacs from hanging on close when trying to safe the
    clipboard.
  * seat: Rename seat_{set,get}_focus to seat_{set,get}_focus_view.
    This makes it consistent with seat_set_focus_layer().
  * view: Document phoc_view_activate
  * server: Make it simple to get the last focused seat.
    The current server -> input -> seat wasn't nice.
  * view: Reindent and prefix view_initial_focus
  * view: Reindent and prefix view_setup()
  * view: Simplify phoc_view_set_initial_focus()
    Just use phoc_server_get_last_active_seat ()
  * view: Make the activation token a r/o property.
    It's only supposed to be set by derived classes and those can use the
    phoc_view_set_activation_token().
    We could move that method to view-private.h but keep it in view.h
    for the moment to keep code movement at bay.
  * view: Allow to submit and clear the activation token.
    Will be used in follow up commits
  * xdg-activation: Just let the seat handle the activation.
    The token is meant to focus the view so invoke phoc_seat_focus_view()
    and handle the token submission there.
    This also works for yet unmapped view as all view derived classes
    call phoc_view_setup()
           --> phoc_view_set_initial_focus()
             --> phoc_set_set_focus_view ()
  * view: Drag token type around.
    This will allow us to flush tokens for other protocols too
  * gtk-shell: Add TODO.
    We should use the startup-id for activation.
  * xwayland-surface: Use startup_id for activation.
    Instead of just notifying that we received the startup-id use
    it for actual activation.
  * build: Don't redefine PHOC_XWAYLAND for the doc build.
    We bring it in via phoc-config.h already
  * doc-check: Fail on gi-docgen and (most) gir compiler warnings.
    This way we can use it in ci. We filter out some warnings we don't want
    to fix right away.
  * ci: Fail on gi-docgen warnings.
    Let's make sure we catch these.
  * view: Reindent subsurface_destroy.
    We're adding more code around that
  * view: Implement subsurface:get_pos.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/331
  * view: Drop fallback for ChildView without get_pos.
    It's mandatory now
  * render: No need to schedule frame after adding touch point damage
    damage_touch_point_cb invokes wlr_output_damage_add which does that
    already.
  * render: Move damage checking to a separate function
  * render: Stay clear of wlr_ namespace.
    We use `box` instead of `wlr_box` in function and method names elsewhere.
    This makes sure a function doesn't look like if it's coming from
    wlroots.
  * output: Move phoc_output_scale_box to utils.
    The output argument is unused. This makes it clearer that we don't care
    about any output rotation or scale in this function.
  * output-shield: Use proper prefix
  * utils: Document phoc_utils_compute_scale
  * treewide: Use explicit cast for wlr_output->data.
    This gives us some additional type checks.
  * desktop: Make it simple to get the output at given layout coordinates
  * cursor: Use phoc_desktop_layout_get_output.
    This simplifies the back and forth between output and
    wlr_output. PhocView's methods will soon switch to using PhocOutput
    rather than wlr_output as arguments which will further simplify this.
  * desktop: Simplify phoc_desktop_surface_at
    wlr_output->data, phoc_output and output all refer to the same output.
    Just use output everywhere.
  * view: Use phoc_desktop_layout_get_output
  * output: Invoke arrange-layers less
    phoc_layer_shell_arrange() needs to be called on mode, scale and
    transform changes to adjust the layer surfaces and available space for
    views. It doesn't need to be called when we only submit damage or attach
    new buffers. This reduces the number of invocations (and hence used CPU
    time).
    Fixes: 3d788792 ("Update to wlroots 0.13 and drop support for older versions")
  * output: Handle mode changes in commit handler.
    No need for an extra listener
  * input: Invoke constructed of parent object first.
    For consistency with other objects, doesn't change anything here.
  * input: Use 'self' in 'handle_new_input'
  * input: Make sure we always add a seat.
    Otherwise the headless backend doesn't expose a wl_seat which makes it
    hard to use for tests.
  * layer-shell-effects: Drop version.
    We want to check resource versions anyway so no need to track
    the passed in version.
  * desktop: Make phoc specific protocols private.
    We want to empty out PhocDesktop and as we add a new protocol
    this is another step in that direction.
  * input: Add a doc string for phoc_input_get_seat()
  * seat: Introduce private struct.
    As with other objects we don't want to make more internal members
    public. So introduce a private struct and should we have all members
    private we can drop this again.
    Let's start with PhocInput which will already help to e.g. unclutter
    headers further.
    There's a bunch of easy follow ups like the device lists.
  * switch: Allow to query switch by type.
    We use wlroots enums for the switch types.
  * seat: Update capabilities for seat on switch changes too.
    We want to update the device state caps as well.
  * Add phoc-device-state-unstable protocol.
    This is meant to inform interested clients about hardware device state
    not handled via wl_seat's capabilities. This for now includes lid
    and tablet mode switches but we can also extend that to cover hardware
    keyboards later.
    The `PhocSeat` dispatches between the signals emitted from the
    `PhocSwitch` and the device-state protocol so we keep the switch
    itself clear from caring about any protocol details.
    Can be tested via the `device-state` example.
    Helps: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/320
  * switch: Keep track of switch state.
    This allows us to query the switch state at any time and not only when
    receiving events.
  * device-state: Send initial switch state.
    Whenever a client connects send the switch state if known
  * build: Bump required meson version to 0.63.0
    diff_files was only introduces there and 1.0 is in Debian stable
  * property-easer: Allow for unsigned int properties too
  * output: cache renderer.
    We need the renderer at different places, no need to get it over
    and over again.
  * view: Add method to get dimensions of the maximized box
  * view: Use phoc_view_get_maximized_box in phoc_view_arrange_maximized.
    Note that we don't take the geometry into account as this is the
    clients geometry prior to resize anyway.
  * view: Add method to get dimensions of the tiled box
  * view: Use phoc_view_get_tiled_box in phoc_view_arrange_tiled
  * output: Keep the outputs layout coordinates around.
    We need them ever so often
  * output: Simplify phoc_output_get_decoration_box.
    By using phoc_utils_scale_box we also handle fractional scaling better.
  * output: Make it simple to submit damage
  * Add boxed types for colors and boxes.
    We want to use these as GObject properties so create
    thin wrappers.
  * Add an interface to render blings.
    To attach some graphical sugar in various spaces of the compositor
    add an interface the objects can implement to get rendered.
    This will allow us to have e.g. additional rects or quads in various
    places when needed. We can combine this nicely with PhocTimedAnimation.
  * view: Allow to add and render blings.
    These are currently all rendered before the view.
  * view: Add TODO.
    We want decorations to use the bling interface too
  * Add support for using colored rectangles as blings.
    This allows them to be rendered e.g. when attached to views.
  * output-shield: Add TODO.
    The PhocOutputShields can use a PhocColorRect
  * cursor: Suggest window state changes.
    Instead of changing the size right away suggest the new size when tiling
    and maximizing and only resize if still within the threshold when
    releasing the button.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/309
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/203
  * cursor: Make phoc_cursor_handle_constraint_commit static.
    Not needed outside the cursor code.
  * cursor: Drop unused view parameter from phoc_cursor_submit_pending_view_state_change
  * cursor: Don't forget to apply state changes with touch.
    Fixes: 3c14012350548d49cd074ac9327b4bfd17a7d28c

 -- Guido Günther <agx@sigxcpu.org>  Thu, 31 Aug 2023 11:21:07 +0200

phoc (0.30.0) experimental; urgency=medium

  [ Guido Günther ]
  * desktop: Specify xdg-shell protocol version
  * seat: Get derived class via wlr_*_from_input_device.
    Get the derived class from the wlr_input_device base class via the
    corresponding wlr_<type>_from_input_device()
  * gtk-shell: Use wlr_compository.h instead of deprecated wlr_surface.h
  * xwayland-surface: Use xcb_size_hints_t directly.
    See wlroots commit 640f3b9f2156a007c5d1a36afdee570e123c95e4
    and https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3495
  * layer-shell-effects: Margins are now signed.
    This is good news.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3404
  * output: Look at popup's current coordinates
  * switch: Get name from device
  * phosh-private: Adjust thumbnail flags.
    See wlroots commit 6832ae14aaa659929ea13057616db34536f7f724
  * d/control: Bump wlroots dependency
  * ci: Update image before installing dependencies
  * ci: Install wlroots 0.16.0 from sid.  Update the CI image for that
  * Drop check for wlr_seat_touch_notify_cancel.
    It's part of wlroots 0.16
  * output: Use wlr_output_state when setting up output.
    While at that make sure we pass PhocOutput around rather than wlr_output
    when functions are called phoc_outpu_<foo>.
  * output: Make debugging more useful.
    The output name tells us more than the address
  * output: Fall back to other mode if preferred mode doesn't work
  * output: Don't crash when adding new output.
    We need to set a mode when committing the state as otherwise sending out
    the head config asserts.
  * render: Fix build without xwayland.
    We need to check whether the user enabled xwayland support, not
    if wlroots supports it.
    Fixes e904c0975d480202279e7aafc42f70d28cf4164f
  * dir-locals: Update from phosh.
    This avoids tabs in meson files
  * po: Add Linguas.
    Otherwise msgfmt throws a warning on
      meson setup _build
  * ci: Set defaults.
    This e.g. allows to interrupt builds on new commits
    Taken verbatim from phosh.
  * build: Use project_source_root.
    Avoids a meson deprecation warning.
  * build: Avoid cc.getdefine for subproject.
    Otherwise we fail with
       ERROR:  Dependencies must be external dependencies
    See https://github.com/mesonbuild/meson/issues/4800
  * packaging: Reset dh's wrap-mode.
    We want to fallback for gmobile to have it available.
  * build: Use meson wrap for the wlroots submodule.
    This makes it more obvious what we're tracking and it gives
    us a git archive after all so local development doesn't get
    more complicated.
  * build: Use meson wrap for the gmobile submodule.
    It's a bit easier to handle than the git submodule giving us an explicit
    reference in the source tree. It will then also be simpler to switch to
    the shared library version once we have a stable API.
  * build: No need to update git submodules anymore
  * build: Fetch wlroots from the official repo.
    This finally makes sure we don't have to mess with forks
    somewhere. We still should upstream the one patch.
  * desktop: Bump xdg-shell to 5.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/324
  * xdg-shell: Set capabilities.
    Phoc doesn't provide right click menus or minimize.
  * view: Use `self` in map.
    Old code parts use `view`, let's update this when making other changes.
    See HACKING.
  * view: Allow to retrieve pid.
    This can be useful for force killing and suspending apps
  * layer-shell-effects: Use wlr_layer_surface_v1_from_resource.
    Available in 0.16
  * output: Move public damage handling closer together
  * output: Document some more functions
  * xdg_shell: Use PhocXdgPopup consistently.
    Avoids confusion whether PhocXdgPopup and struct phoc_xdg_popup
    are the same type.
  * view: Implement phoc_view_child_damage_whole for popups.
    So far we damaged the parent surface which doesn't work well when the
    popup extends out of the parent. It also avoids that we submit way
    more damage than necessary.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/325
  * build: Switch to wlroots 0.16
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/272

  [ Sebastian Krzyszkowiak ]
  * treewide: Follow event rename for wlroots 0.16.
    Events are now names wlr_<event_type>_event instead of
    wlr_event_<event_type>. E.g. wlr_touch_motion_event
  * treewide: Get event device from touch, pointer, etc.
    The event does no longer carry the wlr_input_device. It's embedded
    as base class in e.g. wlr_{touch,pointer,...} now.
  * cursor: Adjust to wlr_output_layout_get_box signature change.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3439
  * desktop: Adjust to wlr_output_layout_get_box signature change.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3439
  * layer-shell-effects: Adjust to wlr_output_layout_get_box signature change.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3439
  * output: Adjust to wlr_output_layout_get_box signature change.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3439
  * view: Adjust to wlr_output_layout_get_box signature change.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3439
  * keyboard: Get keyboard via wlr_keyboard_from_input_device
  * xdg-surface: Adjust to toplevel changes
    wlr_xdg_toplevel_* now take a toplevel rather than a wlr_xdg_surface
  * Adjust popups to 0.16 API changes
  * render: read_pixels dropped it's flag argument
  * seat: Signals are now attached without the devices indirection
  * Adjust includes
  * server: Init subcompositor responsible for subsurfaces
  * keyboard: End touch grab in Escape key binding.
    Pointer and keyboard grabs are ended here, but touch has been forgotten.
  * seat: End keyboard grab in set_focus_layer.
    This matches what set_focus does for regular views already.
  * cursor: Ignore touch grab when interacting with layer-surfaces.
    This is needed in order to be able to use the shell (including virtual
    keyboard) while some client has a xdg-popup grab without dismissing that
    popup right away.
    See https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3478
  * cursor: Ignore pointer grab when interacting with layer-surfaces.
    See the previous commit for explanation.

 -- Guido Günther <agx@sigxcpu.org>  Mon, 31 Jul 2023 11:40:38 +0200

phoc (0.29.0) experimental; urgency=medium

  * output: Log when we render a cutout.  This makes it easy from the logs to
    see if it's enabled.
  * output: Render cutouts with WL_OUTPUT_TRANSFORM correctly

 -- Guido Günther <agx@sigxcpu.org>  Sun, 02 Jul 2023 17:32:27 +0200

phoc (0.28.0) experimental; urgency=medium

  [ Newbyte ]
  * NEWS: Fix typo.

  [ Sebastian Krzyszkowiak ]
  * layer-shell: Make find_osk public.
    This is going to be useful in order to reveal shell when fullscreen view
    requests the keyboard and to draw the keyboard inside window thumbnails.
  * output: Reveal the shell when a fullscreen view requests the keyboard.
    Without that, the keyboard would stay hidden unless the user revealed
    shell surfaces manually.

  [ Guido Günther ]
  * output: Only care about mapped views when checking shell reveal.
    This avoids when a surface is marked to become fullscreen but isn't mapped
    yet (doesn't have a wlr_surface attached).
    This happens e.g. when starting electron apps fullscreen.
  * layer-surface: Allow to get and set alpha
  * output: Make layer surface iterator public.
    Name it consistently with the view iterator. We need a forward
    declaration of PhocLayerSurface until we cleanup up more headers.
  * output: Add helper to get layer surfaces in render order.
    We need this in several places.
  * render: Allow to use alpha for layer surfaces
  * layer-shell-effects: Drop unused destroy signal
  * layer-shell-effects: Allow to set surface alpha.
    Extend the protocol with a new effect that allows to set a layer
    surface's alpha value. Bump the protocol version for that.
  * layer-shell-effects: Fix surface typos
  * examples: Allow to test layer surface alpha.
  * layer-shell-effects: Add a test for setting alpha.
    We skip this under pixman. wlroots 0.16 should allow us to
    enable this test permanently.
  * property-easer: Document that we don't ref the object.
    This makes sure that easing of properties stops as soon as the object
    that we track is disposed.
  * desktop: Remove unused code.
    Fixes: a8992d3124442c19d65d1db66ba35727c80ec3f4
  * desktop: Dispose settings
  * desktop: Make settings private.
    We'll add more settings and that makes sure they're in one place
  * desktop: Track whether animations should be used.
    Track the enable-animations GSetting to figure out if we want
    to use animations in the compositor.
    We also add a debug flag to disable animations from the command
    line or in tests.
  * tests: Disable animations.
    Disable animations so the screenshots continue to work. For that
    pass the debug flags to the created compositor.
  * output: Mark cutout texture rendering as unlikely.
    It's a debugging tool after all
  * animatable: Improve documentation
  * timed-animation: Allow to dispose animations when done.
    Setting the dispose-on-done property will dispose the animations so it
    doesn't need to be tracked.
  * tests: Add simple tests for timed animation
  * output: Implement animatable interface.
    This makes it very simple to use an output to drive a
    PhocTimedAnimation without requiring the animated object
    to implement PhocAnimatable itself.
    We currently ignore the case of the output going away while the
    animatable is being driven.
  * view: Add getter for output.
    We want to make all of View's methods use PhocOutput instead of
    wlr_output but let's do that later to avoid more noise.
  * view: Make surface alpha a property
  * view: Animate surface map.
    We fade the surface of a stack in when animations are enabled.
  * view: Make want_automaximize public.
    This can be useful elsewhere and we'd need to move it up anyway
    (or add a forward declaration) as we want to use it in view_map.
  * view: Disable fade in animation when automaximize is in use.
    While the fade in would be nice for slow staring apps (where splash is
    already gone) it introduces flicker for applications using
    xdg-activation. This can be fixed once we landet the xdg-activation
    cleanups.
  * tests: Disable animation for xdg-decoration test.
    The other tests have it disabled.
    Fixes 4a107d661e51f7d0b962c14829aacb2f8e4e36b1
  * layer-shell: Avoid crash when surfaces width or height become negative.
  * Allow to cycle backwards through windows

  [ Alistair Francis ]
  * keyboard: Forward on the super key if pressed by itself.
    If the super key is the only key pressed (so it isn't used as a
    modifier) we want to pass the event onto Phosh. This handles the complex
    logic of looking for the key being pressed and released in Phoc allowing
    Phosh to just easily react to the event.
    Fixes: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/563

 -- Guido Günther <agx@sigxcpu.org>  Thu, 25 May 2023 14:52:59 +0200

phoc (0.27.0) experimental; urgency=medium

  [ Guido Günther ]
  * xwayland: Make wlr_xwayland_signalhandlers private.
    These should be private to the surface object.
  * xwayland-surface: Allow to get the wlr_xwayland_surface.  PhocOutput,
    PhocRenderer and PhocSeat access this directly atm.  Allow to get this in
    favour of keeping the whole structure public (blocking other cleanups).
    We'll cleanup that call sites.
  * xwayland: Drop PhocXWaylandSurface from header
  * xwayland-surface: Reindent according to style
  * xwayland-surface: Use type casts directly
  * xwayland-surface: Nuke phoc_xwayland_surface_from_view
  * xwayland: Drop xwayland.[ch]
    We can remove that middle layer now
  * xwayland-surface: Use `self` instead of `phoc_surface`
    Now that the code is moved over to the class implementation use self
    consistently
  * server: Set flags early. This makes sure that e.g. PhocDesktop can access
    these during construction.
  * server: Add a flag to start XWayland.  This allows us to enable XWayland
    without having to modify the config file
  * main: Add command line flag to launch XWayland.  Can be useful when
    XWayland is disabled in the config
  * ci: Install xwayland. Just until we updated the image
  * tests: Allow to pass flags when creating the compositor
  * tests: Add initial XWayland test.  This makes it simple to check that we
    didn't break things completely.
  * phosh-private: Use view's GObject signals
  * seat: Use view's GObject signals
  * view: Drop wl_signals. We use the GObject based ones now.
  * seat: Use consistent name for seat_view
  * view: Reindent toplevel-handle related functions.
  * view: Make view_create_foreign_toplevel_handle static.
  * view: Make toplevel-handle private.
  * view: Make child_surfaces private
  * view: Move private functions to separate header.
    Reduce view's API surface by moving functions that are meat to be only
    used by derived classes of view into a private header.
  * testlib: Allow to create xdg toplevels without a buffer.
    This is needed for finer grained tests where we want more control
    over the attached buffer. It's also useful for toplevel-decoration
    which wants the decoration set before the buffer is attached.
  * testlib: Handle empty buffers graciously.  This helps when we e.g. create
    a PhocTestXdgToplevelSurface but never fill the buffer.
  * protocols: Generate headers for xdg-toplevel-decoration-unstable-v1
  * tests: Bind bind xdg-toplevel-decoration-unstable-v1
  * tests: Add test for toplevel decoration
  * xdg-shell: Reindent according to codestyle
  * xdg-shell: Use g_assert ()
  * xdg-shell: Don't crash when decoration goes away before the surface.
    This is a protocol error but we need to guard against it nevertheless.
  * ci: Add python3-docutils. We can drop this when we update the image
  * doc: Add a manpage.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/245
  * event: Drop duplicate Return: doc
  * timed-animation: Remove frame callback after the animation ended.
    If we remove the callback based on the time for the next frame we fail
    to render the last frame of the animation.
  * layer-shell-effects: Don't remove signals when layer-surface is already gone.
    The client should destroy the effects first but we shouldn't crash if it
    doesn't.
  * xdg-surface: Drop xdg_surface_from_view() Just use the type case generated
    by glib.
  * view: Reindent several functions according to codestyle
  * view: Use g_free()
  * view: Make several members private
  * output: Use phoc_view_is_mapped()
  * text_input: Use phoc_view_is_mapped()
  * view: Make get_wlr_surface_at a virtual functions.
    This unclutters the code in PhocDesktop's view_at
  * testlib: Fix transfer annotations
  * settings: Reindent according to codestyle
  * settings: Match on PhocOutput.
    Follow the pattern that we want to pass Phoc* objects around
    to public functions
  * output: Allow to get the output's name
  * settings: Avoid peeking into wlr_output for vendor/make/model
  * settings: Use GSList for output list.
    While at that add phoc_output_config_{new,destroy} to make
    the code a bit more expressive.
  * settings: Use less generic name for config loading function
  * settings: Split config loading and path handling.
    This will allow us to load config from e.g. memory too
  * settings: Allow to parse data from memory
  * server: Use config object rather than file path.
    This allows to create servers from in memory data. We could move the
    flags and debug_flags here too.
  * settings: Add automatic cleanup
  * settings: Use a GSList for the modes
  * tests: Add config parsing tests
  * server: Deduplicate XWayland config.
  * build: Drop config.h template.  Makes sure we don't have to maintain
    variables in two places
  * build: Add an app-id for phoc
  * build: Setup i18n. This will allow us to use translations
  * main: Init gettext. This allows us to have translated strings in the
    compositor
  * view: Add getter for app-id
  * idle-inhibit: Use app-id of inhibiting view if possible.
    If we have an app-id for the view that inhibits idle use it's app-id
    when requesting the inhibitor.
    This makes sure applications listing inhibitors can print information
    about the inhibiting application. This is e.g. the case for phosh's
    end-session-dialog.
  * data: Add and install desktop file
  * packaging: Install new files. Switch to dh 13 so we detect missing files.
  * render: Fix surface counting in count_surface_iterator.
    We need to increment the value at the pointer location, not the pointer.
    This fixes fullscreen views with popovers as scan_out_fullscreen_view
    now detects these correctly.
    Fixes: 7632c59b2b98190ced94cc261d7e24fb454d8d4b
  * packaging: Ignore Part-Of in commits added by magit
  * xwayland-surface: Ignore size hints < 0.
    E.g. electron apps set this to `-1` when fullscreened.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/299
  * xwayland-surface: Order signal handlers.
    Use the same ordering as in the struct.
  * xwayland-surface: Don't forget to remove request_fullscreen handler
  * packaging: Ignore Part-Of in commits added by magit
  * server: Drop flag in docstring too.
    Fixes: 75e8003587c9c80716863e8c4ea3f935454bd88a

  [ Sam Hewitt ]
  * data: Add icon

 -- Guido Günther <agx@sigxcpu.org>  Thu, 27 Apr 2023 16:31:46 +0200

phoc (0.26.1) experimental; urgency=medium

  [ Guido Günther ]
  * xwayland: Make wlr_xwayland_signalhandlers private.
    These should be private to the surface object.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Allow to get the wlr_xwayland_surface.
    PhocOutput, PhocRenderer and PhocSeat access this directly atm.  Allow
    to get this in favour of keeping the whole structure public (blocking
    other cleanups).
    We'll cleanup that call sites.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland: Drop PhocXWaylandSurface from header.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Reindent is_movable.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in close.
    Avoid the phoc_xwayland_surface_from_view redirection
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in set_fullscreen.
    Avoid the phoc_xwayland_surface_from_view redirection
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in is_moveable.
    Avoid the phoc_xwayland_surface_from_view redirection
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in set_active.
    Avoid the phoc_xwayland_surface_from_view redirection
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in move.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in resize.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Reindent move_resize.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in move_resize.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use type casts directly in want_auto_maximize.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Nuke phoc_xwayland_surface_from_view.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland: Drop xwayland.[ch]
    We can remove that middle layer now
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Reindent remaining two functions.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * xwayland-surface: Use `self` instead of `phoc_surface`
    Now that the code is moved over to the class implementation use
    self consistently
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * server: Set flags early.
    This makes sure that e.g. PhocDesktop can access these during
    construction.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * server: Add a flag to start XWayland.
    This allows us to enable XWayland without having to modify
    the config file
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * main: Add command line flag to launch XWayland.
    Can be useful when XWayland is disabled in the config
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * ci: Install xwayland.
    Just until we updated the image
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * tests: Allow to pass flags when creating the compositor.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * tests: Add initial XWayland test.
    This makes it simple to check that we didn't break things
    completely.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/427>
  * phosh-private: Use view's GObject signals.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * seat: Use view's GObject signals.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Drop wl_signals.
    We use the GObject based ones now.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * seat: Use consistent name for seat_view.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Reindent toplevel-handle related functions.
    We'll rework these in the next commits. No functional change.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Make view_create_foreign_toplevel_handle static.
    We don't move the function around (to avoid the forward declaration)
    to keep code move under control.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Make toplevel-handle private.
    We move the listseners and the handle over.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Make child_surfaces private.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * view: Move private functions to separate header.
    Reduce view's API surface by moving functions that are meat to be only
    used by derived classes of view into a private header.
    Keeping them in th public header is misleading as calling them from
    elsewhere without doing the derived classes specific setup might not
    give the expected result.
    We don't change function names to keep review simple.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/437>
  * testlib: Allow to create xdg toplevels without a buffer.
    This is needed for finer grained tests where we want more control
    over the attached buffer. It's also useful for toplevel-decoration
    which wants the decoration set before the buffer is attached.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * testlib: Handle empty buffers graciously.
    This helps when we e.g. create a PhocTestXdgToplevelSurface
    but never fill the buffer.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * protocols: Generate headers for xdg-toplevel-decoration-unstable-v1.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * tests: Bind bind xdg-toplevel-decoration-unstable-v1.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * tests: Add test for toplevel decoration.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * xdg-shell: Reindent decoration_handle_destroy.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * xdg-shell: Reindent handle_xdg_toplevel_decoration.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * xdg-shell: Use g_assert ()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * xdg-shell: Don't crash when decoration goes away before the surface.
    This is a protocol error but we need to guard against it nevertheless.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * xdg-shell: Unify indentation.
    There's wasn't much left so just fix it up.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/439>
  * ci: Add python3-docutils.
    We can drop this when we update the image
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/441>
  * doc: Add a manpage.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/245
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/441>
  * event: Drop duplicate Return: doc.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/442>
  * timed-animation: Remove frame callback after the animation ended.
    If we remove the callback based on the time for the next frame we fail
    to render the last frame of the animation.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/442>
  * layer-shell-effects: Don't remove signals when layer-surface is already gone.
    The client should destroy the effects first but we shouldn't crash if it
    doesn't.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/442>
  * layer-shell-effects: Document that effects should be destroyed before layer-surface.
    This was unspecified before. We'll enforce that in a later version.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/442>
  * xdg-surface: Use self in move_resize()
    Rename xdg_surface to self for consistency
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * xdg-surface: Use wlr_xdg_surface in resize()
    Rename wlr's xdg_surface to wlr_xdg_surface for consistency
    with other functions.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * xdg-surface: Drop xdg_surface_from_view()
    Just use the type case generated by glib.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_update_size()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_update_decorated()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_set_title()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_set_parent ()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_update_position()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Reindent view_update_output()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Use g_free()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Use g_free in subsurface_destroy()
    This makes it match the g_new0
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Make fullscreen_output private.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * output: Use phoc_view_is_mapped()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * text_input: Use phoc_view_is_mapped()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * desktop: Reindent view_at()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * desktop: Reindent desktop_view_at()
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * view: Make get_wlr_surface_at a virtual functions.
    This unclutters the code in PhocDesktop's view_at
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/443>
  * testlib: Fix transfer annotations.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Reindent.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Match on PhocOutput.
    Follow the pattern that we want to pass Phoc* objects around
    to public functions
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * output: Allow to get the output's name.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Avoid peeking into wlr_output for vendor/make/model.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Use GSList for output list.
    While at that add phoc_output_config_{new,destroy} to make
    the code a bit more expressive.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Use less generic name for config loading function.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Split config loading and path handling.
    This will allow us to load config from e.g. memory too
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Allow to parse data from memory.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * server: Use config object rather than file path.
    This allows to create servers from in memory data. We could move the
    flags and debug_flags here too.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Add automatic cleanup.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * settings: Use a GSList for the modes.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * tests: Add config parsing tests.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * server: Deduplicate XWayland config.
    Having it as flag and config option was duplication. Now that we have
    pulled config parsing out of the server itself we can deduplicate it.
    Fixes 15373e454a75f4415888a807e0f251a6c5c2f27a
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/444>
  * build: Drop config.h template.
    Makes sure we don't have to maintain variables in two places
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * build: Add an app-id for phoc.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * build: Setup i18n.
    This will allow us to use translations
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * main: Init gettext.
    This allows us to have translated strings in the compositor
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * view: Add getter for app-id.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * idle-inhibit: Use app-id of inhibiting view if possible.
    If we have an app-id for the view that inhibits idle use it's app-id
    when requesting the inhibitor.
    This makes sure applications listing inhibitors can print information
    about the inhibiting application. This is e.g. the case for phosh's
    end-session-dialog.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * data: Add and install desktop file.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * packaging: Install new files.
    Switch to dh 13 so we detect missing files.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>
  * render: Fix surface counting in count_surface_iterator.
    We need to increment the value at the pointer location, not the pointer.
    This fixes fullscreen views with popovers as scan_out_fullscreen_view
    now detects these correctly.
    Fixes: 7632c59b2b98190ced94cc261d7e24fb454d8d4b
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/448>

  [ Sam Hewitt ]
  * data: Add icon.
    Part-of: <https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/446>

 -- Guido Günther <agx@sigxcpu.org>  Thu, 27 Apr 2023 16:30:31 +0200

phoc (0.26.0) experimental; urgency=medium

  [ Affe Null ]
  * Implement input method keyboard grab.
    Based on https://github.com/swaywm/sway/pull/4932

  [ Guido Günther ]
  * layer-surface: Fix indentiation.
    We indent by two spaces, sigh.
  * layer-surface: Fix indent
  * desktop: Reformat and rename signal handler.
    Make it match coding style before we make more changes.
  * desktop: Avoid dereferencing desktop->output.
    This avoids another direct member access.
  * renderer: Reformat iterators.
    We're getting closer to have this file consistent as well.
  * output: Tweak format of phoc_output_layer_handle_surface.
    It's all about reading speed
  * layer-shell-effects: Fix confusing variable name.
    It's a PhocLayerSurface not a wlr_layer_surface
    Fixes an overly eager replacement in
    92f9365ba68878701902280d283f58122a6b614b
  * xdg-shell: Use type casts.
    It was quite a bit of work to make PhocView a parent of PhocXdgSurface
    so lets leverage this by using GObject's generated type casts instead of
    direct member access.
    Enhances 83f96cfef3186a1e34f20fc61b13337990309160
  * xwayland: Use type casts.
    It was quite a bit of work to make PhocView a parent of PhocXwayland so
    lets leverage this by using GObject's generated type casts instead of
    direct member access.
    Enhances 83f96cfef3186a1e34f20fc61b13337990309160
  * cursor: Fix indentation in mixed tabs vs space lines
  * input-device: Fix indentation in mixed tabs vs space lines
  * gesture-single: Fix indentation in mixed tabs vs space lines
  * input: Fix indentation in mixed tabs vs space lines
  * main: Fix indentation in mixed tabs vs space lines
  * virtual: Fix indentation in mixed tabs vs space lines
  * xdg-surface: Fix indentation in mixed tabs vs space lines
  * output: Check enable pending state when an enable commit is pending.
    This can happen in case of failure and we want to retry
    it in this case.
    Closes: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/900
  * xdg-surface: Move all handlers out of xdg_shell.
    This only moves the code, reformatting happens in a later commit.
    For the moment we keep subsurface and popup handling there to keep code
    movement under control.
  * xdg-surface: Wrap phoc_xdg_surface_get_wlr_surface_at.
    This way PhocDesktop doesn't have to worry about the relationship
    between PhocXdgSurface and the resulting wlr_surface avoiding
    direct member access.
  * xdg-surface: Make phoc_xdg_surface_from_view static.
    This just wraps the PHOC_XDG_SURFACE() cast making the code harder to
    read. We can drop it in xdg-surface.c later on too.
  * xdg-surface: Drop PhocXdgSurface definition from header
  * view: Initialize self->desktop in init.
    No point in letting surface specific handlers do it.
  * xdg-surface: Simplify handle_*
    Simplify the functions that were in xdg_shell by using `self`
  * xdg-surface: Reindent class methods
  * xdg-surface: Set view properties during object construction.
    No need to do things at two places. We only leave the app id handling
    behind so we don't leak gtk_shell1 into xdg-surface.
  * xdg_shell: Reindent handle_xdg_shell_surface
  * view: Nuke view type.
    Since we have a type system we don't need to store it explicitly.  We'll
    be able to eliminate lots of special casing later on by using class
    virtual function fields.
  * view: Make alpha private
  * view: Make scale private
  * view: Add type check asserts to public functions.
    We want to be sure we have the right types there. As we want to use
    phoc_view_get_instance_private we need to drop const from two public
    functions.
  * view: Make view decoration private.
    The current implementation (even before these changes) is not great
    as it hardcoded the parameters in several places but as we don't
    want to risk any functional changes leave it like that a little longer.
    It'll need more work once we improve decorations visually anyway.
  * view: Reindent state getters.
    They're one liners and we'll add more code.
  * view: Make state private
  * Fix indentation in mixed tabs vs space lines.
  * helpers: Add indent test.
    For now we test for tab instead of whitespace but keep a list of files
    to clean up.
  * Drop unused code in several places
  * layer-shell-effects: Don't leak drag-surface in error path
  * main: Use G_NORETURN.
    Avoids a clang warning
  * main: Don't fail on format-nonliteral.
    There's not much we can do about the warning itself as we need
    to pass the format on to g_logv().
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/173
  * build: Don't cover submodules.
    They have their individual coverage
  * ci: Allow doc build fail.
    We ignored this as we hit a gi-docgen crash. This was fixed with
    82a162004a2cef0a444cac43cb8f5ce455cdd125.
  * ci: Use meson where possible.
    Consistent with e.g. phosh and avoids warnings
  * build: Set fast_unwind_on_malloc=0 in tests.
    Makes ASAN simpler (we have that in phosh since some time) as
    we get better backtraces of the allocations.
  * render: Destroy wlr_renderer on finalize
  * render: Don't forget to chain up in finalize.
    This had no bad consequences in practice so far as the renderer class
    doesn't do much yet.
    This lets the `run` and `server` tests pass under ASAN.
  * output: Avoid changing the list we iterate over.
    This avoids an illegal access on shutdown when the compositor
    is used with another client and phosh is started separately.
  * event: Add function for automatic cleanup
  * cursor: Don't leak PhocEvent.
    Fixes a8992d3124442c19d65d1db66ba35727c80ec3f4
  * layer-shell-effects: Don't leak hashmap
  * tests: Add leak suppressions
  * tests/testlib: Add a helper to update the attached buffer
  * tests/testlib: Don't forget to cleanup the cairo surfaces in image comparisons
  * tests/testlib: Don't leak test filename
  * tests/testlib: Don't forget to disconnect test client from the display
  * tests/testlib: Destroy globals on client cleanup
  * tests/testlib: Don't leak toplevel handle
  * tests/property-easer: Don't leak cmp_obj.
    We get a ref from g_object_get ().
  * tests/client: Don't leak surface
  * tests/xdg-shell: Rename automaximize check.
    Make it easy to distinguish from maximizing by other means
  * tests/xdg-shell: Test maximization via foreign-toplevel
  * tests/phosh-private: Don't leak keyboard events
  * tests: Don't leak screencopy frames.
    This lets the layer-shell test pass under ASAN
  * tests: Use a single timeout.
    We bump the timeout to 10s to pass under ASAN with
    fast_unwind_on_malloc=0. Individual tests can bump it should
    the need a longer one.
  * ci: Add asan test.
    Run tests under ASAN (based on what phosh does)
  * ci: Add xwayland dependency for alpine.
    Unbreaks the alpine CI pipeline
  * ci: Fix test coverage collection
  * gtk-shell: Include glib.h.
    Needed for G_BEGIN_DECLS and friends
  * leak-suppress: Add suppresson for gvfs.
    See https://gitlab.gnome.org/GNOME/gvfs/-/issues/577. We'll
    need this in the next commit.
  * tests: Wrap in g_test_dbus()
    idle-inhibit will talk to DBus and we don't want to interfere with the
    test system. As this also clears env vars preserve/set them in the test
    fixtures.
  * view: Add mapped property.
    This allows us to connect to `notify::mapped` for map state changes.
  * view: Add "surface-destroy" signal.
    This makes things consistent with the "input-destroy" and
    "output-destroy" signals.
    With that in place we can drop events.{view,destroy} in the view cleanup
    series.
  * Add idle-inhibit implementation.
    This allows programs that don't talk to gnome-session to inhibit screen
    blank (which will also inhibit suspend).
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/143
  * desktop: Wire up idle-inhibit.
    Instead of adding even more to PhocDesktop's public interface add it as
    a instance private instead.
    This will also allow us to make more bits private (and we can drop it
    again once the whole structure becomes private).
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/143
  * keybindings: Document return value
  * keyboard: Clarify doc strings.
    Returning `false` in case the event should be propagated further.  This
    does not necessarily mean it's propagated to wayland clients yet.
  * keyboard: Move state check into the individual functions.
    Let the individual handlers decide if they want to act on key
    press or release. This unclutters `phoc_keyboard_handle_key`
  * phosh-private: Fix description
  * phosh-private: Add missing comment
  * phosh-private: Forward key release as well.
    Forward the key release event so clients can decide whether they
    want to react press or release and do things like long press.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/186
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/248
  * view: Clarify comment
  * view: Reindent resize
  * view: Remove unused variable
  * view: Resize is not optional
  * view: set_activate is not optional.
    Let's drop the check and rename the public method
  * view: Use self in view_resize ()
  * view: Make view_resize static and prefix.
    It's only used in PhocView
  * view: Move resize is not optional so no need to have fallback code
  * view: Reindent view_resize
  * view: Prefix view_resize
  * view: Document optional virtual methods.
    Mark those as optional that have a fallback *and* where at least
    one of the derived classes doesn't provide an implementation.
  * view: Remove checks for set_maximized.
    It's implementation is mandatory
  * view: Add default implementation for for_each_surface.
    Instead of checking if there is an implementation and falling back
    provide a default implementation.
  * view: Add default implementation for get_geometry.
    Instead of checking if there is an implementation and falling back
    provide a default implementation.
  * view: Remove unused code in view_move
  * view: Add default implementation for move.
    Instead of checking if there is an implementation and falling back
    provide a default implementation.
  * view: Make tile direction private.
    Just a matter of using the already present getter
  * view: set_fullscreen is not optional.
    So drop the check
  * view: want_auto_maximize is not optional.
    So drop the check
  * view: Close is not optional.
    So remove check and add prefix
  * view: Add fallback for set_tiled virtual method
  * view: Make required virtual functions purely virtual.
    This makes sure we don't forget to implement them on new view types
    of when refactoring code.

 -- Guido Günther <agx@sigxcpu.org>  Mon, 27 Mar 2023 12:46:52 +0200

phoc (0.25.0) experimental; urgency=medium

  * build: Untabify
  * build: Use summary.
    More in line with other projects and uses colors
  * output: Add getters for scale.
    We want to get rid of direct member access
  * server: Use g_clear_handle_id.
    Less code and easier to read.
  * server: Add getter for desktop.
    Will allow us to reduce direct member access, similar to the renderer.
    We're not updating existing code yet to keep the diff noise under
    control.
  * settings: Strip whitespace from value.
    No need to fail parsing due to this
  * output: Move enums before type definition.
    Just to match coding style, no functional change.
  * build: Build static and shared lib.
    Otherwise gir fails as it trips on the not resolved symbols from
    gmobile.
  * build: Drop gtk_doc vs embedded wlroots restriction.
    With a shared libphoc this works too (see previous commit)
  * Add gmobile as git submodule.
    We're not using the wrap as the submodule makes
    it simpler for distros to bundle it.
  * server: Parse device-tree compatibles.
    This will allow us to query display cutout information for our own
    consumption or to provide it to client.
  * server: Add debug flag to debug cutout information.
    This allows us to overlay the rendering  of notches and cutouts for
    debugging purposes.
  * output: Allow to render display cutout.
    This currently is used on all outputs but as it's for debugging
    only that's fine for the moment.
  * Add test data for a tiny layout.
  * build: Bump meson dependency to 0.56.0
  * build: Avoid deprecated get_pkgconfig_variable()
  * build: Avoid deprecated build_root()
  * build: Use a static dependency to link phoc.
    Otherwise it defaults to dynamic linking and we don't want to
    ship a libphoc atm.
  * ci: Switch to Debian bookworm
  * ci: Update base image.
    It's been a while
  * d/control: Use packaged gi-docgen.
    It trickled into distributions.
  * xdg-activation: Fix indentation
  * keyboard: Minor indentation cleanup.
    Make the 'Handle translated keysyms' part match the 'Handle raw
    keysyms'. It took me a second to convince myself that they match.
  * keyboard: Fix indentation.
    We want the opening brace of a function on a new line
  * keyboard: Check the power key after subscribed bindings.
    This gives clients the possibility to listen to power button presses.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/206

 -- Guido Günther <agx@sigxcpu.org>  Sun, 26 Feb 2023 09:41:46 +0100

phoc (0.24.0) experimental; urgency=medium

  * doc: Add small getting started document.
    Add some hints how to run phoc from sources on constrained
    devices like phones.
  * server: Align enum values at '='
    This matches what we e.g. do in view.h.
  * layer-shell-effects: Use wlr_layer_surface consistently.
    This is similar in spirit than 88b1550aff32c639b1056ee76207295cb46723f5
    and helps to identify the types in use.
  * layer-shell: Remove unused parameter
  * layer-surface: Fix names for output list.
    The list members are PhocLayerSurface and on the output it's
    called layer_surfaces.
    Fixes: afae4a3a ("output: Use a single list for all layer surfaces")
  * layer-shell: Allow to dump layer-surfaces.
    Add a debug option to figure out the current layer surfaces, their order
    and margins.
    This will become more useful with
    https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/352
    but as it's off by default we can have it right now.
  * layer-shell-effects: Don't assert on NULL layer-surface.
    Don't abort the compositor when the client already destroyed the layer
    surface but not yet the drag surface.
    Except for phoc_draggable_layer_surface_slide the functions
    don't actually access the layer-surface but it's easier to be
    consistent in case we need to access it later on when adding new
    features.
  * layer-shell-effects: Don't access data before asserts.
    Check the data before accessing it. Also clarifies some comments
    related to data access.
  * phoc-layer-shell-effects: Fix argument name.
    We set mode, not state
    Fixes 0820da00 ("Add layer-shell-effects protocol")
  * output: Allow to remove frame callbacks by animatable
  * layer-surface: Remove all frame callbacks on finalize.
    When the object goes away we want to drop all animations. This frees
    users of the animatable interface to worry about when the surface goes
    away since the difference between the wlr-layer-surface's destroy
    signal and finalize can be tricky to track.

 -- Guido Günther <agx@sigxcpu.org>  Sat, 28 Jan 2023 16:26:17 +0100

phoc (0.23.0) experimental; urgency=medium

  * build: Add configure file to generated sources.
    Closes: https://gitlab.gnome.org/World/Phosh/phoc/-/issues/310
  * Rename config.h to phoc-config.h.
    This makes sure we don't accidentally include a config.h from another
    project - e.g. when include paths aren't set up correctly.
  * gitignore: Remove copy / paste artifact.
    Fixes: c960805d9f87c157b4d9b0ae0fadd6cfdad5459b
  * Switch development branch to main (Closes: #256)
  * keybindings: Remove unused property getter / setter
  * keybindings: Don't chain up to construct twice.
    We already do so at the top of phoc_keybindings_constructed
  * ci: Collect junit reports.
    Phosh added this about 1y ago, let phoc catch up
  * render: Pass wl_shm_buffer to phoc_renderer_render_view_to_buffer.
    So far only the pointer to the data was passed. This is error prone as
    the data pointer is constrained by wl_shm access restrictions. We also
    reduce the number of parameters passed around.
  * render: Don't access interleaving shm buffers
    wl_shm_buffer_{begin,end}_access docs say
    It is safe to nest calls to these functions as long as the nested calls
    are all accessing the same buffer.
    So let's not access interleaving buffers.
    This fixes the pixman renderer. (Closes: #290)
  * tests: Run thumbnail test when using pixman renderer.
    When we're pretty certain we're using pixman we can enable the
    thumbnail tests.
  * ci: Use pixman renderer for tests.
    This allows us to run the thumbnail tests again
  * d/gbp.conf: Bump meson version automatically.
    Less manual work

 -- Guido Günther <agx@sigxcpu.org>  Thu, 12 Jan 2023 11:24:10 +0100

phoc (0.21.1) byzantium; urgency=medium

  [ Guido Günther ]
  * xdg-surface: Fix crash on close with open popups
  * view: Improve doc strings for {get,set}_scale_to_fit
  * view: Allow to set activation token
  * view: Reindent and prefix view_activated
  * xdg-activation: Delay token submission

  [ Joerg ]
  * seat: Check if touch point is valid (Closes: #278)

  [ Sebastian Krzyszkowiak ]
  * desktop: Allow to pass NULL as sx and sy to view_at
  * render: Handle viewports and transforms when rendering to buffer
  * cursor: Consider root surface for layer-shell check in handle_touch_down
  * layer-shell: Adjust focus order to match rendering and input

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Thu, 01 Sep 2022 10:54:22 +0200

phoc (0.21.0) byzantium; urgency=medium

  [ Guido Günther ]
  * layer-shell-effects: Make sure we remove the mapping

  [ Sebastian Krzyszkowiak ]
  * xdg-shell: Use correct state for maximized and fullscreen flags
  * xdg-surface: Don't schedule configure when the size doesn't change
  * output: Don't check for empty buffer damage in damage_surface_iterator
  * view: Handle initial mapped state of PhocViewChild
  * layer-shell-effects: Calculate slide duration based on distance to travel
  * layer-shell-effect: Split accept_drag out of drag_update
  * layer-shell-effects: Accept drag immediately during an animation
  * render: Keep the aspect ratio when rendering into buffer
  * render: Don't take view scale into account when drawing into buffer
  * render: Apply geometry before scaling to buffer coordinates
  * render: Simplify scale handling when rendering to buffer
  * render: Position the surface using matrix when rendering to buffer
  * layer-shell: Move handling of mapped property out of commit handler
  * desktop: Ignore unmapped surfaces in layer_surface_at
  * layer-shell-effects: Make sure to apply new margin on animation end

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Thu, 04 Aug 2022 12:38:07 +0200

phoc (0.21.0~beta1) byzantium; urgency=medium

  [ Guido Günther ]
  * output: Use g_assert()
  * layer-surface: Move subsurface list init into object
  * layer-shell: Pass wlr-layer-surface as property
  * layer-surface: Move handle_output_destroy to layer-surface
  * layer-shell: Drop NULL check
  * Add PhocAnimatable interface
  * output: Allow to add and remove frame callbacks
  * layer-surface: Implement animatable interface
  * layer-shell-effects: Don't access renderer directly
  * layer-shell-effects: Calculate animation progress based on frame clock
  * tests: Sort alphabetically
  * Add timed animations
  * layer-shell-effects: Use PhocEasing
  * Move open coded shield to PhocOutputShield object
  * examples: Add an example that binds to phosh-private protocol
  * output: Fix typo
  * cursor: Use consistent naming in phoc_cursor_handle_touch_motion
  * cursor: Use phoc_ prefix
  * cursor: Use consistent naming
  * layer-shell: Name PhocLayerSurface layer_surface in arrange_layer()
  * layer-shell: Name PhocLayerSurface layer_surface in find_osk()
  * layer-shell: Name struct wlr_layer_surface wlr_layer_surface in handle_surface_commit()
  * layer-shell: Name PhocLayerSurface layer_surface in handle_surface_commit()
  * layer-shell: Name PhocLayerSurface layer_surface in handle_destroy()
  * layer-shell: Name struct wlr_layer_surface wlr_layer_surface in handle_map()
  * layer-shell: Name PhocLayerSurface layer_surface in handle_map()
  * layer-shell: Name PhocLayerSurface layer_surface in handle_unmap()
  * layer-shell: Name struct wlr_layer_surface wlr_layer_surface in wlr_layer_surface in handle_layer_shell_surface()
  * layer-shell: Name PhocLayerSurface layer_surface in handle_layer_shell_surface()
  * layer-shell: Name PhocLayerSurface layer_surface in update_cursors()
  * layer-shell: Name struct wlr_layer_surface wlr_layer_surface in wlr_layer_surface in arrange_layer()
  * layer-shell: Name PhocLayerSurface layer_surface in phoc_layer_shell_update_focus()
  * layer_shell: Use g_assert() everywhere
  * layer-shell: Pass PhocOutput instead of wlr_output
  * xwayland-surface: Reindent phoc_xwayland_surface_from_view()
  * xwayland-surface: Document phoc_xwayland_surface_from_view()
  * cursor: Add element-type to phoc_cursor_add_gesture
  * view: Add transfer annotation to phoc_view_from_wlr_surface()
  * gesture: Drop superfluous since: annotation
  * input: Add transfer annottation for phoc_input_seat_from_wlr_seat()
  * xdg-surface: Document phoc_xdg_surface_from_view()
  * seat: Document phoc_seat_get_focus()
  * seat: Document currently focused view()
  * output: Indent arguments of "for-each" helpers
  * output: Document iterators
  * desktop: Reindent layer_surface_at()
  * layer_shell: Reindent change_osk()
  * output: Use a single list for all layer surfaces
  * output: Init fixed values in phoc_output_init()
  * time-animation: Use some more links
  * timed-animation: Drop pointless since: annotation
  * output-shield: Fix property name in doc string
  * gesture-zoom: Drop unused parameter in doc string
  * gesture-zoom: Make variable name in declaration match the doc string
  * output: Fix doc string parameter
  * output-shield: Fix docstring
  * timed-animation: Add transfer annotations
  * layer-shell-effects: Document phoc_draggable_layer_surface_get_layer_surface
  * layer-shell-effects: Drop phoc_draggable_layer_surface_is_draggable
  * layer-shell-effects: Make declaration match definition
  * event: Use Phoc prefix
  * build: Add generated enum sources to gir build
  * anim-enums: Fix reference
  * anim-enums: Drop empty line
  * helpers: Add a helper to filter doc gen warnings
  * xdg-surface: Use phoc_ prefix consistently
  * view: Add PhocViewChildInterface typedef
  * layer-surface: Use phoc_ prefix consistently
  * switch: Use phoc_ prefix consistently
  * layer-shell: No need to assign twice
  * desktop: Use g_assert() for consistency with the rest of the code
  * desktop: Make scale-to-fit a property
  * view: Reindent view_update_scale
  * view: Update scale when global scale changes
  * view: Rename and reindeint view_set_app_id()
  * view: Handle scale-to-fit changes via property binding

  [ Arnaud Ferraris ]
  * cursor: avoid NULL pointer dereference

  [ Sebastian Krzyszkowiak ]
  * gitlab-ci: Enable octarine repo in PureOS build jobs
  * Revert "ci: Mark PureOS byzantium job as manual"
  * d/rules: Workaround false positive warnings with Byzantium's GCC version
  * render: phoc_renderer_render_view_to_buffer: Use public wlroots APIs
  * PhocInputMethodRelay: Introduce phoc_input_method_relay_is_enabled method
  * PhocLayerShell: Only elevate OSK if focused layer also has IM relay focus
  * debian: Update "Breaks" relationship with phosh
  * render: Remove broken fullscreen scan out debug code
  * layer-shell-effects: Add phoc_draggable_layer_surface_get_state
  * layer-shell-effects: Add phoc_draggable_layer_surface_is_unfolded
  * output: Add phoc_output_has_shell_revealed
  * output: Reveal shell when a layer-surface is unfolded, focused or dragged
  * layer-shell: Don't ignore TOP layers when setting focus w/ fullscreen view
  * seat: set_focus_layer: Only arrange a single output after unsetting focus
  * output: Add force_shell_reveal and update_shell_reveal methods
  * seat: Update output's shell reveal status on focus layer changes
  * layer-shell-effects: Update output's shell reveal status on state changes

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Sun, 26 Jun 2022 19:32:37 +0200

phoc (0.20.0) byzantium; urgency=medium

  [ Guido Günther ]
  * render: Simplify render_layer invocations
  * render: Use output directly
  * render: Rename _box to box
  * editorconfig: Bump line length to 100
  * testlib: Include header only once
  * test-layer-shell: Fix indent
  * tests: Add code that lets us create layer surfaces easily
  * output: Fix some indentation
  * config.h: Add some comments
  * Add gesture support
  * Add layer-shell-effects protocol
  * layer-shell-effects: Prevent drag in the wrong direction when unfolded
  * Attach draggable surfaces to gestures
  * Add layer-shell-effects example
  * testlib: Fetch layer-shell-effects protocol
  * tests: Add initial layer-surface-effects test
  * xdg-shell: Reformat xdg_popup_unconstrain()
  * xdg-shell: Use toplevels output when unconstraining popups
  * subproject: Update wlroots to 0.15.1 plus our fixes
  * d/control: Bump wlroots dependency to 0.15.1
  * ci: Work around a crash in g-ir-compiler
  * ci: Switch docker container to sid
  * ci: Use wlroots 0.15.1 based container image
  * ci: Mark PureOS byzantium job as manual
  * Remove startup-id compilation
  * build: Drop output power management related checks
  * Adjust to render changes
  * render: Allow to fail initialization
  * desktop: Reindent handle_new_output
  * output: Handle failure to create renderer
  * renderer: Make sure the modifier list isn't empty
  * build: Require wlroots 0.15.1
  * output: Clear list of layers on finalize
  * cursor: Handle touch frame event
  * layer-shell-effects: Adjust to wlroots 0.15.x
  * gtk-shell: Namespace phoc_gtk_surface_from_resource
  * gtk-shell: Add getter for app_id
  * gtk-shell: Make PhocGtk{Shell,Surface} private
  * layer-shell-effects: Make drag-surface related structs private
  * tests: Move xdg-suface helpers to testlib
  * gtk-surface: Drop NULL check
  * view: Make tiled state a bit mask
  * view: Add getter for tile direction
  * gtk-shell: Send edge constraints
  * build: Sort gesture source files alphabetically
  * gesture: Use Phoc prefix consistently
  * seat: Don't use assert and g_error for the same thing
  * cursor: Track and use compositor side touch points
  * gesture: Add helpers needed for zoom and cancel
  * Support zoom gestures
  * build: Check for wlr_seat_touch_send_cancel at build time
  * cursor: Cancel touch gestures

  [ Pablo Barciela ]
  * server: Fix [-Wmissing-field-initializers] warning
  * testlib: Fix [-Wmissing-field-initializers] warning
  * tests: move 'struct _PhocTestXdgToplevelSurface' to 'testlib.h'

  [ Arnaud Ferraris ]
  * utils: Add new function for calculating output scale
  * output: Automatically compute scaling factor

  [ Sebastian Krzyszkowiak ]
  * Adjust to wlroots 0.15
  * layer-shell-effects: Add phoc_draggable_layer_surface_get_layer_surface
  * cursor: Use phoc_draggable_layer_surface_get_layer_surface
  * subprojects: Switch wlroots repo to patch-queue/pureos/octarine branch

  [ anteater ]
  * desktop: Revert output enable when commit fails

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Mon, 30 May 2022 20:03:25 +0200

phoc (0.13.1) byzantium; urgency=medium

  [ Sebastian Krzyszkowiak ]
  * view: move_resize: Cancel a pending move_resize
  * render: scan_out_fullscreen_view: Get rid of view centering

  [ Guido Günther ]
  * testlib: Convert the whole buffer during abgr_to_argb conversion
  * layer_shell: Move surfaces between layers before rearranging
  * tests: Remove superfluous surface commit
  * layer-shell: Test set_layer

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 30 Mar 2022 20:10:58 +0200

phoc (0.13.0) byzantium; urgency=medium

  [ Pablo Barciela ]
  * pointer: remove unused struct member
  * keyboard: declare some parameters with const
  * testlib: Fix weird assignment

  [ Guido Günther ]
  * scale-to-fit: Split printing of into separate function
  * scale-to-fit: Make shellcheck happy
  * seat: Don't dispose input
  * seat: Invoke finalize
  * cursor: Finalize object
  * cursor: Move wlr_xcursor_manager init from seat to cursor
  * desktop: Destroy output layout
  * desktop: Make xcursor manager depend on XWayland
  * desktop: Avoid indirection
  * settings: Reindent and modernize public functions
  * Drop ini file parser
  * settings: Use GKeyFile
  * settings: Don't exit when parsing settings
  * settings: Drop remaining users of roots_config_*
  * settings: Use g_free() to match the g_* allocations
  * settings: Drop unused prefixes
  * settings: Use g_assert()
  * settings: Remove unused includes
  * settings: Use PHOC_CONFIG_DEFAULT_SEAT_NAME
  * server: Invoke phoc_config_destroy
  * Don't include wlr_log.h
  * server: Sort debug flags alphabetically
  * view: Use PhocView consistently
  * view: Use PhocViewType
  * view: Use PhocViewInterface consistently
  * view: Fix parameter name
  * view: Add doc string for view
  * view: Link PhocChildView to PhocView
  * d/control: Add dependencies for embedded wlroots build
  * server: Add and use renderer getter
  * render: Use g_clear_list
  * render: Move damage tracking rendering to separate function
  * render: Don't set clear color again
  * render: Move fullscreen scanout into scanout_fullscreen
  * render: Simplify scanout check a bit
  * output: Add and use phoc_output_has_fullscreen_view ()
  * render: Use faster list empty check
  * output: Remove listeners in the same order as in the struct
  * output: Use g_clear_list
  * render: Invoke 	wlr_renderer_end(wlr_renderer earlier
  * view: Fix more doc links
  * output: Document phoc_output_damage_from_view
  * output: Add docstring for PhocOutput
  * server: Add docstring for PhocServer
  * server: Add docstring for PhocKeyboard
  * seat: Add getters to query seat capabilities
  * layer-surface: Add getter for namespace
  * cursor: Avoid seat round trip for handle_pointer_motion
  * cursor: Avoid seat round trip for handle_pointer_motion_absolute
  * cursor: Avoid seat round trip for handle_pointer_button
  * cursor: Avoid seat round trip for handle_pointer_axis
  * cursor: Avoid seat round trip for handle_pointer_frame
  * server: Fix indentation
  * output: Fix indentation
  * output: Improve indentation
  * layer-surface: Document link
  * layer-surface: Add and use phoc_layer_shell_get_output()
  * desktop: drop last_frame
  * output: Drop last_frame
  * output: Use typedef for iterator
  * render: Make output_render a method
  * render: Make view_render_to_buffer a method
  * render: Use cast
  * view: Drop unused declaration
  * utils: Fix doc string
  * view: Add a GObject as first element
  * Make xdg-surface a minimal GObject
  * xdg-surface: Make destruction private
  * xdg-surface: Add xdg-surface property
  * xdg-surface: Add xdg_surface_get_geometry
  * xdg-surface: Move view interface implementation over
  * server: Move xwayland include out of header
  * Rename xwayland surface's to PhocXWaylandSurface
  * Use phoc_xwayland_surface_from_view()
  * Make PhocXWayland a minimal GObject
  * xwayland-surface: Set PhocXWaylandSurface on the wlr surface
  * xwayland-surface: Remove listeners in finalize
  * xwayland-surface: Move view interface over
  * Update wlroots submodule
  * build: Conditionally check for wlr_xdg_activation_v1_add_token
  * Handle xdg-activation
  * gtk-shell: Submit startup-id as token to xdg-activation
  * Make PhocView a GObject
  * view: Use PHOC_VIEW () as it does type checks
  * view: Move fixed value init to _init()
  * view: Drop destroy
  * view: Move destruction into finalize
  * view: Drop view_destroy()
  * view: Drop custom impl
  * view: Introduce private data
  * view: Make settings private
  * view: Make title and app_id private
  * view: Drop view_init
  * view: Document virtual functions
  * view: Prefix view types with PHOC_
  * view: Move PhocViewDecoPort
  * view: Move deco parts into phoc namespace
  * Use PhocViewDecoPart everywhere
  * desktop: Drop roots_
  * build: Add xdg-surface.h to sources
  * build: Add xdg-activation-v1.h to sources
  * view: Make PhocSubsurface private
  * view: Drop roots_xdg_toplevel_decoration forward declaration
  * view: Make roots_xdg_toplevel_decoration private
  * view: Make roots_xdg_popup private
  * view: Move phoc_xdg_surface_from_view to xdg-surface.h
  * view: Move phoc_xwayland_surface_from_view to xwayland-surface.h
  * view: Remove now unneeded forward declarations
  * view: Drop xdg-* headers
  * Revert "gitlab-ci: Allow PureOS job to fail"

  [ Doug Wood ]
  * scale-to-fit: Query current state if called with just the app id.

  [ Sebastian Krzyszkowiak ]
  * view_render_to_buffer: Gracefully handle buffer creation failure
  * desktop: Handle cases where only some outputs are on in toggle_output_blank
  * desktop: toggle_output_blank: Ignore outputs that aren't part of the layout
  * layer-shell: Don't give focus to TOP layer when there's a fullscreen view
  * cursor: Update layer-shell focus when (un)revealing shell

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Fri, 25 Mar 2022 16:47:20 +0100

phoc (0.12.0) byzantium; urgency=medium

  [ Andreas Streichardt ]
  * remove xkb default assumptions

  [ Guido Günther ]
  * desktop: Enable xdg-foreign support
  * seat: Drop NULL check
  * seat: Make object allocation consistent
  * seat: Fix indentation
  * seat: Use g_critical instead of wlr_log
  * layer-shell: Use g_critical instead of wlr_log
  * desktop: Use g_critical instead of wlr_log
  * settings: Use g_critical instead of wlr_log
  * text-input: Use g_debug instead of wlr_log
  * d/control: Use << for smaller than relationships
  * d/copyright: Drop references to nonexistent files
  * d/control: Bump standards version
  * desktop: Don't remove startup-id listener when not connected
  * desktop: Drop unused code
  * desktop: Move xwayland configuration to separate function
  * desktop: Deconfigure xwayland only when created
  * desktop: Handle XWayland startup errors
  * Use g_setenv() consistently
  * desktop: Enable viewporter
  * output: Remove redundant check in phoc_view_accept_damage()
  * view: Add and use phoc_view_is_mapped
  * view: Rename and reindent view_child_init to phoc_view_child_init
  * view: Use typedefs for child views as well
  * view: Reindent child views
  * view: Clarify "base" classes
  * view: Use typedefs in the header
  * view: Clarify source "object" on `new_subsurface`
  * subsurface: Rename subsurface_create to phoc_view_subsurface_create
  * subsurface: Make phoc_view_subsurface_create void
  * subsurface: Use g_new0 when allocating subsurface
  * view-child: Use the shorter `child` in structs that embed it
  * view: Drop output.h include
  * view: Prefix and reindent view_apply_damage
  * output: Allow phoc_output_damage_from_view() to optionally damage the whole view
  * output: Drop phoc_output_damage_whole_view()
  * view: Make view_damage_whole  match phoc_view_apply_damage
  * view-child: Start tracking mapped state
  * view-child: Add phoc_view_child_{apply_damage,damage_whole}
  * xdg-popup: Use phoc_view_child_damage_whole()
  * view: Move subsurface initialization to separate function
  * view: Rename and reindent view_child_destroy to phoc_view_child_destroy
  * view: Move public function to the end
  * view-child: Use child specific damage function when destroying child
  * view-child: Make sure to init a childs children
  * view-child: Document where `link` links to
  * view: Reindent and rename view_child_handle_new_subsurface
  * view-child: Invoke the child specific creation function
  * view: Use the passed in surface
  * view: Drop remaining use of `struct roots_subsurface`
  * view: Drop remaining use of `struct roots_view_child`
  * view-child: Document struct members a bit
  * view: Only damage child on subsurface map/unmap
  * view: Reindent and rename view_child_handle_new_commit
  * view-child: Only damage child on commit
  * view: Make PhocSubsurface private
  * output: Rename surface iterator to PhocSurfaceIterator
  * text-input: Add typedefs
  * text-input: Separate summary
  * text-input: Move member documentation to docstring
  * text-input: Modernize phoc_text_input_create()
  * text-input: Modernize relay_handle_text_input
  * text-input: Modernize phoc_input_method_relay_{init,destroy}
  * text-input: Modernize phoc_input_method_relay_set_focus()
  * text-input: Modernize relay_handle_input_method()
  * text-input: Use Phoc* types
  * text-input: Make PhocTextInput private
  * text-input: Handle text-input being registered late
  * output: Use PhocView
  * desktop: Use PhocView
  * xwayland: Use PhocView
  * xdg_shell: Use PhocView
  * cursor: Use PhocView
  * keybindings: Use PhocView
  * seat: Use PhocView
  * gtk-shell: Use PhocView
  * input: Use PhocView
  * layer-shell: Use PhocView
  * phosh-private: Use PhocView
  * render: Use PhocView
  * Rename roots_view_from_wlr_surface
  * view: Fix comment
  * output: Use G_N_ELEMENTS() for layers consistently
  * view: Add phoc_ prefix to view_set_fullscreen
  * output: Unfullscreen when output damage goes away
  * output: Free output-damage related bits in handle_output_damage_destroy
  * output: Only emit output-destroy from phoc_output_destroy()

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Tue, 25 Jan 2022 14:28:19 +0100

phoc (0.11.0) byzantium; urgency=medium

  [ Sebastian Krzyszkowiak ]
  * Update to wlroots 0.13 and drop support for older versions
  * Adjust to subsurface handling changes in wlroots 0.14
  * desktop: Switch to wlr_primary_selection_v1
  * desktop: Remove unused wlr_list header
  * render: Visualize touch points with rects instead of circles
  * Depend on wlroots 0.14
  * Thumbnail rendering with wlr_allocator

  [ Guido Günther ]
  * build: Allow wlroots >= 0.14.1
  * ci: Use system wlroots on Debian
  * ci: Print package list on Debian
  * ci: Switch to wlroots 0.14.1
  * input: Add guard to public function
  * testlib: Use g_test_message for buffer match messages
  * testlib: Print all mismatches
  * tests: Update empty.png
  * tests: Update test-xdg-shell-maximized-1.png
  * tests: Update test-xdg-shell-normal-1.png
  * tests: Update test-phosh-private-thumbnail-simple-1.png
  * tests: Update layer-shell screenshots
  * test-layer-shell: Reverse layer surface destruction
  * tests: Add resolution for headless backend
  * tests: Hide thumbnail test behind PHOC_TEST_HAVE_DRM
  * gitlab-ci: No need for xvfb when collecting coverage
  * gitlab-ci: Run tests through meson
  * gitlab-ci: Allow PureOS job to fail

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 15 Dec 2021 21:04:53 +0100

phoc (0.10.0) byzantium; urgency=medium

  [ Guido Günther ]
  * cursor: Drop unused struct member
  * Use g_debug() instead of wlr_log()
  * build: Sort settings correctly
  * text-input: Fix doc string
  * input: Add a doc string
  * seat: Make a GObject
  * Add input-device class
  * pointer: Use PhocInputDevice
  * touch: Move public function and _init() to the end of the file
  * touch: Remove unused dispose
  * touch: Use input-device as base class
  * touch: Remove unused headers
  * touch: Add doc string
  * pointer: Add doc string
  * data: Add systemd unit and config to simplify phoc development
  * data: Make dev user id configurable
  * output: Untangle includes
  * output: Remove unused includes
  * output: Use 'pragma once' and G_{BEGIN,END}_DECLS
  * view: Untangle includes
  * view: Use 'pragma once' and G_{BEGIN,END}_DECLS
  * input: Drop unneeded includes
  * desktop: Untangle includes
  * Use #pragma consistently
  * xcursor: Use PHOC_ prefix
  * Make layer-surface a GObject
  * layers: Use PhocLayerSurface
  * cursor: Use PhocLayerSurface
  * output: Use PhocLayerSurface
  * desktop: Use PhocLayerSurface
  * layer_shell: Use PhocLayerSurface
  * layer-surface: Remove compat define
  * README: Fix embed-wlroots option
  * phosh-private: Properly name callback
  * output: Fix debug message
  * build: Make sure g-ir-scanner knows if XWayland is enabled
  * build: Rename server_protos_sources to protos_sources
  * seat: Drop superfluous line breaks
  * Replace PhocSeat leftovers
  * view: Add typedefs for views
  * view: Fix doc string
  * desktop: Document phoc_desktop_surface_at
  * layer-surface: Add doc string
  * layer-surface: Move unmap into layer-surface
  * layer-surface: Move object destruction to finalize
  * input: Add seat to list of known seats
  * input: Document phoc_input_get_seat
  * seat: Don't hold a ref on the input
  * server: Unref input
  * input: Unref seat
  * view: Don't leak title
  * view: Don't leak app_id
  * view: Use g_strdup ()
  * desktop: Disconnect wlr signal listeners
  * ci: Add helpers to build prebuilt docker images
  * gitlab-ci: Use prebuilt images
  * data: Set `version` in configuration data too
  * input: Add G_{BEGIN,END}_DECLS
  * input: Replace forward declaration by include
  * input: Add type checks to public functions
  * input: Move _init and _new downwards
  * build: Use glib >= 2.64.0
  * input: Use GSList instead of wl_list
  * input: Move PhocInput out of header
  * input: Drop unused declraration
  * Move get_last_active_seat
  * input: Use PhocView
  * seat: Make arguments names match docstring / definition
  * touch: Add G_{BEGIN,END}_DECLS
  * touch: Use correct parent class
  * cursor: Use surface relative coordinates for touch motion (Closes: #212)
  * server: Set debug flags early
  * desktop: Allow to override auto-maximize via a debug flag
  * utils: Add helpers to get an instance from it's private data
  * input-device: Add getter for device name
  * input-device: Add 'device-destroy' signal
  * touch: Drop "touch-destroyed" signal
  * pointer: Use "device-destroyed" signal
  * seat: Use a GSList to track pointers
  * pointer: Move PhocPointer out of header
  * seat: Use a GSList to track touch devices
  * touch: Move PhocTouch out of header
  * HACKING: document callback names
  * seat/cursor: Add TODOs
  * keyboard: Remove trailing semicolons from defines
  * keyboard: Add G_{BEGIN,END}_DECLS
  * seat: Drop unused header
  * keyboard: Drop unused includes
  * keyboard: Document parameter in `phoc_keyboard_next_layout`
  * input: Drop unused include
  * keyboard: Move list membership removal to seat
  * keyboard: Derive PhocKeyboard from PhocInput too
  * keyboard: Use destroy signal from input_device
  * keyboard: Add "activity" signal
  * keyboard: Move keyboard listeners from seat to keyboard
  * seat: Use a GSList for keyboards
  * keyboard: Add getter for meta key
  * keyboard: Move PhocKeyboard out of header
  * keyboard: Make phoc_keyboard_handle_{key,modifiers} static
  * tablet: Make a minimal GObject
  * tablet: Use seat from PhocInput
  * tablet: Use device from PhocInputDevice
  * tablet: Use "device-destroy" signal
  * tablet: Remove unused struct members
  * seat: Use a GSList for tablets
  * output: Add helper to match on make/model/serial
  * desktop: Add method to find an output by make/model/serial
  * desktop: Add method to find built-in output
  * desktop: Merge #ifdef PHOC_XWAYLAND blocks
  * input-device: Add type getter
  * input-device: Drop unneeded cast
  * input-device: Add getters for vendor and product id
  * seat: Move variable inits to _init ()
  * seat: Make device-destroy handler names consistent
  * seat: Don't track device mappings on pointer changes
  * seat: Drop seat_reset_device_mappings()
  * seat: Track input-output mappings
  * output: Use g_* logging functions consistently
  * output: Improve logging output
  * input: Fix annotation errors
  * seat: Hide cursor on tablet proximity out
  * run: Select a suitable backend for nested

  [ Sebastian Krzyszkowiak ]
  * view: Report toplevel's parent via wlr_foreign_toplevel_management
  * xdg-shell: Send frame done events on configure and close to invisible views
  * view: Always recenter a floating view in auto maximize mode
  * xdg-shell: Only compensate size in pending_move_resize for floating views
  * xwayland: Only compensate size in pending_move_resize for floating views
  * roots_view_interface: Rename activate and maximize functions
  * view_arrange_tiled: Handle view scale
  * view: Take geometry into account when maximizing and tiling
  * view: Add set_tiled to roots_view_interface
  * xdg-shell: Implement set_tiled interface
  * keybindings: Restore the view when trying to tile it again
  * view_move_resize: Move immediately if size doesn't change
  * debian: Reintroduce pkg.phoc.embedwlroots build profile support
  * debian/control: Bump meson dependency to 0.54
  * gitlab-ci: Add an optional job to build a deb with ASan and UBSan
  * xdg-shell: Use output's usable area for popup positioning
  * layer-shell: Reformat the code in arrange_layers
  * layer-shell: Split and rename arrange_layers
  * phoc_layer_shell_arrange: Iterate over a list of layers

  [ Arnaud Ferraris ]
  * seat: don't add POINTER capability to tablets

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 15 Dec 2021 20:19:07 +0100

phoc (0.9.0) byzantium; urgency=medium

  [ Guido Günther ]
  * ci: Drop unneeded tags
  * ci: Drop support for bullseye and amber
  * ci: Add the arm64 job explicitly
  * server: Don't assert when we fail to initialize the backend
  * cursor: Rename to PhocCursor and reindent
  * Make PhocCursor a GObject
  * seat: Unref cursor
  * cursor: Use g_debug() instead of wlr_debug()
  * seat: No need to poke cursor directly
  * seat: Rename structs to Phoc* and reindent
  * wlroots: Update to 0.12.x
  * gitignore: Ignore more package build files
  * Add dir-locals.el
  * Rename phosh to phosh-private to match protocol name
  * phosh-private: Rename test as well
  * phosh-private: Make a GObject
  * phosh-private: Make screencopy frame private
  * phosh-private: Use g_new0
  * phosh-private: Remove unused define
  * phosh-private: Remove panel tracking
  * phosh-private: Make phoc_phosh_private_from_resource static
  * phosh-private: Mark unused interfaces and requests
  * testlib: Wire up gtk_shell1 protocol
  * phosh-private: Allow clients to be informed about application startup
  * protocols: Update toplevel management
  * protocols: Update layer-shell
  * seat: Ignore docs for internal comments
  * seat: Fix doc strings
  * utils: Fix doc strings
  * settings: Remove unused declarations
  * settings: Move doc comments to c file
  * keyboard: Ignore docs for inline function
  * build: Use shared wlroots
  * desktop: Add doc header
  * build: Add headers to list of sources
  * build: Rename phoc_dep to libphoc_dep
  * d/control: Add deps for doc build
  * build: Add gi-docgen
  * build: Forbid doc generation with embedded wlroots build
  * build: Add doc generation via introspection data
  * protocols: Use custom_target instead of generate
  * gitlab-ci: Update and publish docs
  * Update screencopy-unstable protocol
  * wlroots: Update submodule
  * xwayland: Forward startup-ids as well
  * desktop: Handle xwayland startup-id removal
  * Adjust section headers for gi-docgen
  * desktop: Cleanup headers
  * server.c: Add doc string
  * output: Use correct base class for signal
  * touch: Remove unused headers
  * touch: Use correct base class for signal
  * gitlab-ci: Use bookworm
  * Bump minimum wlroots version to 0.12.0
  * build: Generate enum types
  * server: Set name for wayland source
  * input: Drop nowadays unused config argument
  * output: Handle desktop prop as GObject
  * phosh-private: Remove 'desktop' property
  * Make renderer a GObject
  * gitlab-ci: Fix branch name for publishing
  * README: link to API docs
  * utils: Add ease in/out helpers
  * phosh-private: Add shell state protocol and property
  * server: Allow to pass mode flags
  * main: Add shell mode command line option
  * renderer: Emit signals at start and end of rendering loop
  * server: Render shield until shell is attached

  [ Sebastian Krzyszkowiak ]
  * seat: Trigger layer arrangement when unsetting layer focus
  * xwayland: Guard set_startup_id listener removal with PHOC_HAVE_WLR_SET_STARTUP_ID
  * seat: Don't allow to start resizing a fullscreen window
  * cursor, seat: Allow to move fullscreen windows between outputs
  * view: Don't center tiled views in view_setup
  * view: Turn roots_view::saved into wlr_box
  * view: Guard roots_view::saved usage by wlr_box_empty checks
  * view: Center the surface when resizing after (0, 0) configure
  * view: Move view_update_output to update_position/size
  * view: Fix updating surface's fullscreen state when exiting fullscreen
  * view: Rename PHOC_VIEW_STATE_NORMAL to FLOATING and explicitly initialize
  * view: Revamp view_is_[state] functions
  * output: Turn damage_whole_decoration into damage_whole_view
  * view: Don't recreate GSettings object on every window resize
  * gtk-shell/xdg-shell: Use app_id from gtk_surface::set_dbus_properties
  * phosh-private: Fix zwlr_screencopy_frame_v1_flags handling
  * view: Don't allow unfocused surfaces to make themselves fullscreen
  * view: Implement fullscreen view handling in view_move_to_next_output
  * view: Allow to pass output to center the view on to view_center
  * view: Check whether the view is floating before attempting to center
  * view: Center the view in view_move_to_next_output

  [ Evangelos Ribeiro Tzaras ]
  * server: Stop using deprecated g_spawn_check_exit_status()

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 27 Oct 2021 16:56:10 +0200

phoc (0.8.0) byzantium; urgency=medium

  [ Guido Günther ]
  * desktop: Don't create idle-inhibit
  * settings: Drop device configuration from config file
  * input: Drop references to config file
  * input: s/roots/phoc/
  * settings: Drop cursor handling
  * Make pointers proper GObjects
  * input: Remove unused headers
  * pointer: Handle some touchpad configuration (Closes: #70)
  * build: Require gsettings-desktop-schemas
  * pointer: Handle left-right mode on touchpads
  * pointer: Handle mouse settings
  * settings: Drop switch configuration

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Sat, 10 Jul 2021 02:02:33 +0200

phoc (0.7.1) byzantium; urgency=medium

  * cursor: g_assert on NULL cursor.
    Don't try to go on without a cursor (which can only happen when calloc
    fails). wlroots also only returns NULL in case of memory problems. This
    allows to remove the NULL checks elsewhere
  * tests/phosh: Use GrabStatus.
    The current accelerator tests try to encode two boolean values
    into two variables making it a bit hard to read. Use a single
    enum instead.
  * tests/phosh: Make tested keybindins more obvious.
    Currently one needs to look up what's tested in an array but each most
    of the keys are only used a single time. So drop that array and use a
    define for the single key that is used multiple times so it's clear we
    just add an accelerator.
  * tests/phosh: Set and check both test vars.
    Always set and check both keybinding results. This tests that
    we don't invoke the wrong callback accidentally.
  * phosh: Don't crash when we failed to parse the accelerator.
    Passing an invalid keybinding otherwise doesn't end well.
  * phosh: Allow to bind misc keys.
    Until we allow to bind all keys let's allow for these as well since
    this block includes e.g. PrintScreen for screenshots.

 -- Guido Günther <agx@sigxcpu.org>  Sun, 13 Jun 2021 13:05:17 +0200

phoc (0.7.0) byzantium; urgency=medium

  [ Sebastian Krzyszkowiak ]
  * gitlab-ci: Use "needs" keyword to specify dependencies
  * debian: Drop pkg.phoc.embedwlroots build profile support
  * gitlab-ci: Switch to CI job templates for amber-phone and byzantium
  * gitlab-ci: Exclude non-package jobs when PKG_ONLY variable is set
  * view: Allow to explicitly set an output when tiling or maximizing
  * cursor: Implement snap-to-edge behavior for tiling and maximizing
  * cursor: Define PHOC_SHELL_REVEAL_*_THRESHOLD in layout pixels
  * Take view geometry into account when dealing with saved state
  * xdg-shell: Adjust position for updated geometry
  * Make all views appear activated when automaximizing is enabled
  * text-input: Don't leave dangling roots_text_input signal listeners
  * text-input: Use text_input_clear_pending_focused_surface in handle_pending_focused_surface_destroy
  * text-input: Remove relay's signal listeners when seat is destroyed
  * text-input: Assert a non-null surface in text_input_set_pending_focused_surface
  * seat: Update the cursor in roots_seat_end_compositor_grab
  * roots_passthrough_cursor: Reset the cursor when there's no surface under it
  * seat: Fix primary touch tracking
  * cursor: Add preliminary touch support for move and resize
  * render: Use wlr_presentation_surface_sampled_on_output for fullscreen surfaces
  * render: Use wlr_output_test to check whether fullscreen scan out is possible

  [ louib ]
  * Add build-dep command to README

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Fri, 19 Mar 2021 03:20:49 +0100

phoc (0.6.0) amber-phone; urgency=medium

  [ Clayton Craft ]
  * utils: apply phosh code formatting styles
  * output: apply phosh code formatting styles
  * Move rotate_child_position to phoc_utils_rotate_child_position
  * output: convert roots_output to PhocOutput gobject
  * desktop: add handler for new output
  * desktop: add handler for output destroy
  * Use PhocOutput instead of roots_output
  * touch: emit g_signal on touch destroy
  * seat: use touch-destroy signal from PhocTouch
  * desktop: add input_output_map hash for tracking mapping of input-->output
  * seat: create mapping of touch devices to outputs
  * seat: disable touch events when mapped output is disabled

  [ Sebastian Krzyszkowiak ]
  * d/rules: Enable all hardening options
  * Reintroduce a5bdd630bbb67a680aa5308a32c2e69aef0a08e5 (!210) back
  * server: Don't set _WAYLAND_DISPLAY
  * view_move: Cancel pending move_resize when moving
  * seat: begin_move: Try to put the surface behind the cursor when unmaximized
  * cursor: Update cursor immediately when move/resize/rotate ends
  * cursor: Don't error out on a unhandled meta key+mouse button press
  * view: Add view_is_tiled function
  * view: Split view_restore from view_maximize
  * view: Don't backup state when the surface is already maximized or tiled
  * view: Move tiling logic into view_arrange_tiled
  * view: Move state saving into dedicated function
  * view_restore: Don't restore saved state
  * view_set_fullscreen: Correctly restore previous window state when leaving fullscreen
  * view: Properly restore maximized/tiled views when moved or resized
  * automaximize: Don't draw surfaces that aren't part of the current stack
  * desktop: Rename desktop_surface_at to phoc_desktop_surface_at
  * output: Don't accept damage from views that aren't visible
  * render: Don't send frame done events to views that aren't visible
  * view_unmap: Damage the newly activated stack when in automaximize mode
  * view_activate: Damage the output when disabling forced shell reveal
  * Remove view rotation handling
  * Replace struct memcpy's with assignment operator
  * view_center: Try to clamp the view size into available space
  * roots_handle_shell_reveal: Do not require surface to be non-null
  * gitlab-ci: Add package-deb-without-wlroots:arm64 job
  * roots_handle_shell_reveal: Null-check wlr_output_layout_output_at result
  * phoc_desktop_view_is_visible: Check for the view being unmapped
  * view_unmap: Remove from the view list after destroying children

  [ Guido Günther ]
  * cursor: Fix missing-default-case warning

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Mon, 04 Jan 2021 20:38:41 +0100

phoc (0.5.1) amber-phone; urgency=high

  [ Dorota Czaplejewicz ]
  * text_input: Don't forward events from unfocused text inputs

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 18 Nov 2020 21:20:45 +0100

phoc (0.5.0) amber-phone; urgency=high

  [ Guido Günther ]
  * phosh: Allow to bind rebular keys plust <SUPER> modifier
  * gitlab-ci: Remove build artifacts in ..
  * output: handle_output_manager_apply: Make both loops use the same logic
  * Drop PHOC_HAS_WLR_OUTPUT_POWER_MANAGEMENT
  * output: handle_output_manager_apply: Don't disable already disabled outputs
  * phosh: Define keysym for older libxkb-common
  * phosh: Allow to bind more keys

  [ Dorota Czaplejewicz ]
  * keyboard: Do not override keymap on virtual keyboard

  [ Sebastian Krzyszkowiak ]
  * view: Allow to switch outputs of fullscreen surface
  * output: Refresh fullscreen view when its output is reconfigured
  * gitlab-ci: Don't pull wlroots from sid
  * virtual: Allow suggested_output usage on recent enough wlroots

  [ Alexander Mikhaylenko ]
  * meson: Compile gschemas on install

  [ Clayton Craft ]
  * input: remove unused PhocInput members
  * touch: add new PhocTouch gobject for touch input devices
  * seat: use PhocTouch for touch input devices

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Sat, 14 Nov 2020 17:54:34 +0100

phoc (0.4.4) amber-phone; urgency=medium

  [ Guido Günther ]
  * desktop: Refresh all views when auto-maximize changes.
    So far this only affected new views but when e.g. unplugging an
    external (switching to 'phone' mode) we want running apps to
    behave.
  * phosh: Drop rotate-display.
    The rotate_display served us well but it's too simplistic (no events,
    degrees instead of transforms, ...). Since phosh now uses
    wlr-output-management for bid to use this part of the private protocol.
  * d/control: Add breaks for older phosh.
    These require the rotate_display private protocol bit
  * phosh: Fix indentation
  * phosh: Ungrab accelerators.
    This lead to a compositor crash so far

  [ Clayton Craft ]
  * input: convert roots_input to PhocInput gobject
  * input: apply phosh code formatting styles.
    This is a cosmetic change that applies code formatting styles from
    Phosh's style guidelines to input.c/h.
  * Use PhocInput objects instead of roots_input

 -- Guido Günther <agx@sigxcpu.org>  Tue, 27 Oct 2020 09:01:06 +0100

phoc (0.4.3) amber-phone; urgency=medium

  [ Guido Günther ]
  * Drop xdg_shell_V6 support
  * xdg-shell: Drop mention of v6 protocol
  * desktop: Adjust to wlr_xcursor_manager_load 0.11.0 API change
  * server: Unblock SIGUSR1 when spawning child
  * desktop: Reindent handle_layout_change
  * desktop: Refresh all outputs on layout changes

  [ Arnaud Ferraris ]
  * src: add utility function to fix rotation on wlroots v0.11+

  [ Sebastian Krzyszkowiak ]
  * xwayland: Don't apply size constraints to maximized windows
  * xwayland: Correctly handle windows that are maximized on map
  * xwayland: Automaximization support
  * seat: Check whether moving and resizing is allowed
  * xwayland: Don't allow to move non-regular windows
  * xwayland: Don't automaximize non-resizable windows
  * layer-shell: Recenter non-maximized views when rearranging
  * Update wlroots submodule

  [ Dorota Czaplejewicz ]
  * input method: Forward only supported state

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Thu, 08 Oct 2020 01:40:58 +0200

phoc (0.4.2) amber-phone; urgency=medium

  [ Evangelos Ribeiro Tzaras ]
  * d/control: Use Rules-Requires-Root: no
  * Implement keyforwarding with a new interface in phosh-private protocol

  [ Guido Günther ]
  * phosh: Damage output after rotation

  [ Sebastian Krzyszkowiak ]
  * render: Allow view_render_to_buffer to indicate failure
  * phosh: Handle view_render_to_buffer failing in thumbnail_frame_handle_copy
  * render: Check whether the root surface isn't NULL in view_render_to_buffer

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Thu, 06 Aug 2020 14:42:40 +0200

phoc (0.4.1) amber-phone; urgency=high

  [ Sebastian Krzyszkowiak ]
  * render: Rework damage tracking debug mode
  * render: Use G_(UN)LIKELY for debug flags
  * render: Use defines for color values
  * cursor: Put a touched view into focus
  * debian: Add sign-tags=true to gbp.conf
  * gitlab-ci: Un-silence grep invocations
  * gitlab-ci: Set package jobs dependencies to empty
  * render: Don't try to render a surface with no texture
  * cursor: Avoid damaging the whole output in touch points debug mode
  * render: Catch up with wlroots' wlr_client_buffer
  * render: Make the EGL context current when rendering to texture

  [ &t ]
  * Add --version flag

  [ Yann Büchau ]
  * scale-to-fit: Default to "on" without extra argument

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Wed, 22 Jul 2020 15:47:52 +0200

phoc (0.4.0) amber-phone; urgency=high

  [ Guido Günther ]
  * server: Always print socket on startup
  * phosh: Reindent
  * phosh: Remove leftovers from the xdg interface

  [ Sebastian Krzyszkowiak ]
  * Scale down oversized views
  * Make auto-scaling configurable per application
  * phoc.ini.example: Drop outdated entries
  * phosh: Make sure thumbnail dimensions aren't set to zeros
  * phosh: Remove signal listener from view when destroying screencopy frame
  * Send wl_surface_{enter,leave} events to subsurfaces

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Tue, 30 Jun 2020 16:52:02 +0200

phoc (0.1.9) amber-phone; urgency=medium

  [ Arnaud Ferraris ]
  * gtk-shell: fix typos

  [ Sebastian Krzyszkowiak ]
  * protocols: Add wlr-foreign-toplevel-management-unstable-v1
  * Create render.h header to hold declarations from render.c
  * view: Make view_get_geometry accessible outside of view.c
  * view: Store a pointer to view in wlr_foreign_toplevel_handle data
  * meson: Depend on GLESv2
  * protocols: Update wlr-screencopy-unstable-v1 to version 2
  * Update wlroots submodule
  * Implement window thumbnails via phosh-private+wlr-foreign-toplevel-management+wlr-screencopy protocol hybrid
  * tests: Introduce PhocTestScreencopyFrame and generalize screencopy logic
  * tests: Fix inverted condition in phoc_test_buffer_equal
  * tests: phoc_test_client_capture_output: Handle ARGB/XRGB format mismatch
  * tests: Basic window thumbnail test
  * protocols: Add a description for thumbnail interface in phosh-private
  * CI: Move coverage gathering to separate step

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Tue, 23 Jun 2020 13:56:47 +0200

phoc (0.1.8) amber-phone; urgency=medium

  [ Guido Günther ]
  * d/control: Bump wlroots dependency.
    Bumped to 0.10.0 since this is sufficient to build and run
    although 0.10.1 is preferred.
  * build: Bump project version.
    This makes it match the version in the changelog
  * PhocServer: Move startup command from config.
    No need to tuck away the command we run in config, it's only
    configurable via the command line.
  * main: Use automatic cleanup for mainloop
  * main: Use automatic cleanup for the server
  * server: Get hold of the main loop.
    This allows the server to exit cleanly
  * server: Exit when session exits.
    This allows e.g. a systemd unit to properly restart compositor
    and shell in case of session crash. It also allows to support
    logout under display managers like GDM.
    Prerequisite for phosh#117 since we also need to update gnome-session
    for this.
  * Remove output mapping for devices and cursors.
    For cursors we don't have a real use and for devices we're going
    to make this default properly.
  * output: Add helper to detect built-in panels.
    This is similar to what phosh does.
  * roots_seat_configure_cursor: Pass roots_output.
    This avoids going back and forth between roots_ and wlr_output;
  * seat: Map touch screens to build in displays by default.
    This is currently hard coded and can not be changed
  * seat: Map tablet devices as well
  * seat: Fix wrong struct type.
    Touch is not a pointer but 'struct roots_touch'
  * server: Fix odd indentation
  * server: Introduce debug flags.
    This keeps the number of arguments and variables under control.
  * Parse debug flags from environment.
    This makes things more consistent with other glib applications
    and allows us to use expressive comma separated lists instead
    of command line flags.
  * Use PHOC_SERVER_DEBUG_DAMAGE_TRACKING.
    This avoids passing boolean flags around
  * Use PHOC_SERVER_DEBUG_TOUCH_POINTS.
    This avoids passing boolean flags around
  * server: Introduce no-quit debug flag.
    This allow to not quit the session which is useful for e.g.
    phosh development where one wants to replace the running shell
    without the compositor caring.
  * README: Document PHOC_DEBUG
  * gitlab-ci: Enable coverage information
  * README: add coverage information.
    This makes current coverage very visible
  * README: fix cut'n'paste error
  * d/copyright: Use correct licenses.
    As per de56ea6b1e3cfa41981fd4dd349b0eef852aee23 we default to GPL-3+
    (same as phosh). That's also consistent with the COPYING file.
    We keep `src/*` separate to respect the copyright notices brought
    over from rootston and keep the protocols under their initial
    licenses.
  * server: Fix method name.
    We use it as finalize() but called it dispose().
  * Don't destroy xwayland in phoc_server.
    We create it in phoc_desktop so it should be destroyed there as well.
    This also fixes a crash on server shutdown when the desktop wasn't even
    created.
  * server: Track multiple setup.
    We currently track whether the singleton was inited which
    is broken since we have a weak ref. Rather make sure we
    don't setup the instance multiple times.
  * server: Fix error output.
    We only create the backend, it's started later on in _setup().
  * tests: Add simple test that runs a main loop
  * server: Remove wayland source on shutdown
  * server: Unset envvars on shutdown.
    It's always better to clean up but this also allows to run
    two tests using the wayland backend in the same process.
  * tests: Properly finalize the server.
    So far we used the same server instance in all the tests
    which fails when we allow to run init just once.
  * tests: Pass a phoc.ini.
    This one disables Xwayland since that causes trouble when
    restarting it multiple times and we currently don't need it.
  * server: Use self conistently.
    We call the first method argument self elsewhere so this consistently in
    all methods.
  * server: Move wl_display_destroy_clients() to dispose.
    This allows clients to shut down properly, we'll call into
    already freed objects like input.
    Note that wl_display_destroy() was never run since the wl_display was
    already NULL when and we were using g_clear_pointer().
  * server: Call wlr_backend_destroy() in dispose.
    This allows wlroots to clean up and we can call wl_display_destroy ()
    in finalize.
  * input: Guard against NULL input.
    This one pops up often when wlroots or the server cleans
    up and this makes it obvious at a glance what's wrong.
    We can't use PHOC_IS_INPUT yet since it's not a gobject yet.
  * README: document how to run the tests.
    This allows us to mention xvfb-run which is needed for screenshot
    comparison tests.
  * protocols: Generate client protocols.
    These are needed by the tests
  * protocols: Add wlr-screencopy-manager
  * tests: Add testlib.
    This allows to run a wayland client against the compositor
    and to take and compare screenshot of the output. (Closes: #40)
  * tests: Add simple client test.
    This validates that clients can connect and find their globals
    and also demos the library usage.
  * tests: Add layer shell test.
    Initial tests to test layer-shell layout (since we had several
    surprises there). This also demos the screenhost machinery.
    For tests to succeed they need to run under e.g. xfvb since
    the mouse cursor might get placed differently otherwise.
  * gitlab-ci: Don't reset xvfb between test runs.
    This should avoid connection failures with multiple tests. We
    do the same with libhandy.
  * seat: Be consistent with whitespace.
    Let's not mix tab and spaces in the same function.
  * seat: Don't notify activity on `set_cursor`
    Rather notify on tool set_cursor activity where it is important.
    This avoids setting activity events on `set_cursor` when nothing
    really changed.
    To see what this fixes blank the screen using `lock screen` in phosh
    with https://source.puri.sm/Librem5/phosh/-/merge_requests/300
    applied and see it wake up right away.
  * desktop: Add getter/setter for maximization
  * tests: testlib: Add server prepare hook.
    This allows to tweak the compositor configuration before
    launching the client
  * tests: Wire up xdg_wm_base.
    This will be used in followup commits for xdg-shell testing
  * tests: Add initial xdg-shell tests
  * output: Enable new outputs by default.
    This was done by wlroots but isn't in 'recent' versions (which gives
    the compositor more room). (Closes: #130)
  * phosh: Drop xdg-switcher interface.
    Instead of requiring a phosh/phoc lockstep upgrade post an error if a
    client wants to bind the protocol. This keeps the code we need carry
    minimal but we can still be backward compatible (this is not breaking
    clients that don't use that part of the protocol).
  * input: Make_device_type() public
    public. While at that rename to phoc_get_device_type ()
  * Rename virtual_keyboard.[ch] to virtual_[ch]
    We handle virtual pointer there as well.
  * virtual: Use g_return_if_fail () instead of wlr_log ()
    We can turn this into a type check later on and it makes
    sure log domains work correctly.
  * Implement virtual pointer protocol

  [ Arnaud Ferraris ]
  * d/copyright: fix upstream files list and improve readability

  [ Nícolas F. R. A. Prado ]
  * Use default switch cases where they make sense.
    This removes -Wswitch-default warnings.
  * Use default switch cases to report invalid values.
    This removes -Wswitch-default warnings.
  * Add -Wswitch-default to compile flags

  [ Jordi Masip ]
  * build: add missing dependency 'libdrm' used for 'drmModeModeInfo'

  [ Sebastian Krzyszkowiak ]
  * cursor: Fix touch point surface attachment.
    Touch points should remain attached to surface they originate from
    regardless of the touch point position on screen.

 -- Guido Günther <agx@sigxcpu.org>  Wed, 10 Jun 2020 17:14:04 +0200

phoc (0.1.7) amber-phone; urgency=medium

  [ &t ]
  * keybindings: Declare roots_seat as incomplete type
  * cursor: Don't shadow sx and sy
  * build: Add -Wshadow to cflags

  [ Sebastian Krzyszkowiak ]
  * Guard wlr-output-power-management usage with header existence check
  * gbp.conf: Set multimaint-merge as default when generating changelogs

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Thu, 26 Mar 2020 17:04:53 +0100

phoc (0.1.6) amber-phone; urgency=medium

  [ Guido Günther ]
  * Add arm64 build
  * Move server setup into PhocServer
  * build: Build phoc_lib
  * Add initial test
  * gitlab-ci: Run unit tests
  * debian: Run tests via xvfb
  * settings: Don't init logging twice
  * server: Move command line parsing to main()
  * tests: Test option passing
  * Adjust to wlroots 0.8.1 layer shell changes
  * debian: Add breaks on older phosh
  * build: Drop custom tags generation
  * gitlab-ci: Run lintian and autopkgtests
  * Add superficial autopkgtest
  * Add wlr-output-power-management protocol
  * Update wlroots submodule
  * Drop roots_output_from_wlr_output
  * Support wlr-output-power-management

  [ Sebastian Krzyszkowiak ]
  * view: Simplify roots_view_get_from_wlr_surface
  * view: Rename roots_view_get_from_wlr_surface to roots_view_from_wlr_surface
  * main: Fix uninitialized debug_damage value
  * Touch point visualization
  * Update to wlr_output's atomic API and wlroots 0.9.x branch
  * layer-shell: Fix incorrect variable passed to debug log
  * layer-shell: Handle layer changes
  * Update git submodule to 8fd62aaa18bd4f31933e99ef5d5fd15aff5b6c5e (wlroots 0.10.0)
  * CI: Update to deal with newer wlroots
  * debian: Update wlroots dependency version
  * Update wlroots submodule

  [ Dorota Czaplejewicz ]
  * doap: Fix malformed Person tag

  [ Simon Ser ]
  * Update to new presentation-time API

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Tue, 24 Mar 2020 15:59:24 +0100

phoc (0.1.5) amber; urgency=medium

  [ Guido Günther ]
  * input: Use g_* for logging.
    This makes log domains work for input as well.
  * seat: Don't initialize tablets if we don't have libinput.
    This leads to crashes otherwise e.g. on the wayland backend
  * phosh: Fix indentation
  * view: Introduce helper to find a roots_surface from a given wlr_surface.
  * protocols: Add gtk-shell v3.
    Taken from gtk 3.24.8. This will allow to implement raising surfaces on
    their request and startup notifications if we want these before there's a
    mainlineable protocol.
  * Implement gtk-shell's handle_request_focus.
    This allows to raise windows on their request.
    See https://source.puri.sm/Librem5/phoc/issues/93
  * desktop: Wire up gtk-shell

  [ Sebastian Krzyszkowiak ]
  * view: Hide shell overlay when activating a fullscreen window.
    Without that, the overlay stays needlessly visible after selecting a
    fullscreen window in the activity switcher until further input event.

 -- Guido Günther <agx@sigxcpu.org>  Thu, 02 Jan 2020 23:52:47 +0100

phoc (0.1.4) amber; urgency=medium

  [ Guido Günther ]
  * build: drop rootston=false from wlroots submodule build
    rootston is no longer part of wlroots so the option causes
    a warning during build.
  * view: Add helper to move windows between outputs
  * keybindings: allow to move windows to left/right output
  * Update submodule.
    This pulls in the gbm fix.
  * Add doap file.
    This helps to identify project maintainers and contact points.
  * d/control: Add Sebastian to uploaders
  * xdg_shell_v6: Implement get_geometry.
    As long as these are around there's no reason why v6 should
    be worse than stable
  * Introduce view_is_maximized.
    This will allow us to introduce a tiled state as well.
  * view: Simple left right tilig.
    This uses the 'maximized' state to get rid of GTK's drop
    shadows until we have fixed
    https://gitlab.gnome.org/GNOME/gtk/issues/2171
  * view: Differentiate between tiled and normal on unmaximize
  * keybindings: bind left and right tiling
  * d/control: Depend on gsettings schemas.
    Not having them makes us not start

  [ Sebastian Krzyszkowiak ]
  * Update wlroots submodule.
    Forward to 9fb251c33fc404f106f0b4e3b6839de9d4753a4c for virtual
    keyboard keycode 0 fix.

  [ Simon Ser ]
  * render: set surface as sampled for presentation.
    This is necessary after [1].
    [1]: https://github.com/swaywm/wlroots/pull/1798
  * Fix presentation feedback when scanning out fullscreen views.
    References: https://github.com/swaywm/sway/pull/4667

 -- Guido Günther <agx@sigxcpu.org>  Tue, 17 Dec 2019 17:54:07 +0100

phoc (0.1.3) amber; urgency=medium

  [ Guido Günther ]
  * wlroots: Update submodule
  * desktop: Allow to blank/unblank all outputs
  * keyboard: Blank/unblank all outputs on power button press (Closes: #86)

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Sat, 23 Nov 2019 00:27:10 +0100

phoc (0.1.2) amber-phone; urgency=medium

  [ Sebastian Krzyszkowiak ]
  * layer-shell: Don't apply exclusive zones of unmapped surfaces
  * Revert "Use old gamma control protocol if available"
  * Update wlroots submodule
  * Add a way to reveal shell on a fullscreen surface
  * layer-shell: Create/destroy layer_subsurface objects on parent map/unmap

  [ Guido Günther ]
  * gitlab-ci: Remove redundancy in alpine deps
  * Add libgnome-desktop-3-dev
  * Turn keyboard into a gobject
  * keyboard: Read keyboard config from gsettings
  * settings: Remove superfluous include
  * keyboard: fix indentation
  * Use g_clear_object
  * keyboard: Set wlr_keyboard's data to phoc_keyboard
  * keyboard: Add method to witch to next layout
  * keybindinds: Listen to switch-input-source changes

  [ Simon Ser ]
  * Remove orbital screenshooter and gamma-control
  * rootston: add support for direct scan-out
  * Remove all wayland-server.h includes

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Mon, 18 Nov 2019 22:48:51 +0100

phoc (0.1.1) amber-phone; urgency=medium

  [ Dorota Czaplejewicz ]
  * text_input: Add asserts guarding focus state
  * Clear pending surface before setting it to a new value
  * text_input: Eliminate excessive messages
  * layer shell: Adjust position of osk depending on presence of the prompter

  [ Guido Günther ]
  * gitlab-ci: Disable the deb build for the moment
  * build: Delay config file creation
  * build: print detected wlroots version
  * desktop: Include config.h early
  * Use old gamma control protocol if available
  * debian: Allow to build against 0.7.0
  * switch: Drop switch handling
  * keyboard: Reformat keyboard_execute_binding
  * Add PhocKeybindings
  * Use PhocKeybindings
  * Drop old bindings related code
  * gitlab-ci: De-duplicate build logic
  * gitlab-ci: Specify the docker image to use
  * gitlab-ci: Build against Debian Bullseye as well
  * keybindings: bind toggle-maximized too
  * view_arrange_maximized: Drop unused variable
  * keybindings: Pass settings to add_keybindings
  * view: Drop view_cycle_alpha
  * gitlab-ci: Allow alpine linux build to fail but not break ci
  * Include config.h first in all .c files
  * render: Use PHOC_XWAYLAND instead of WLR_HAS_XWAYLAND
  * output: Use PHOC_XWAYLAND instead of WLR_HAS_XWAYLAND
  * Update wlroots submodule
  * server: Drop redundant 'extern struct'
  * server: Turn into a GObject
  * Use the PhocServer singleton
  * server: Move server init/deinit into constructor/dispose
  * keybindings: Fix missing chain-up in constructed()
  * debian: Add gbp.conf

  [ Sebastian Krzyszkowiak ]
  * layer_surface_at: Fix the order of surface processing to match rendering
  * seat: Call roots_input_method_relay_set_focus for layer-surfaces
  * layer-shell: Elevate layer of OSK when same or higher layer is focused
  * meson: Don't add wlroots as subproject when embed-wlroots is disabled
  * xdg-shells: Block interactive resize when in auto-maximizing mode
  * layer-shell: Update focus order in arrange_layers
  * phosh: Fix rejection of multiple clients binding to phosh private protocol
  * seat: Handle unfocusing layer-surface with no other focusable view
  * layer-shell: Handle subsurfaces and nested popups
  * desktop_surface_at: Set a "view" argument in case of fullscreen surface
  * Clean up desktop_surface_at calls

  [ Simon Ser ]
  * Remove orbital screenshooter
  * layer-shell: Don't give focus to unmapped layer surfaces

  [ Aleksis ]
  * layer-shell: Remove unused "configured" variable

  [ Bart Ribbers ]
  * gitlab-ci: Build and unit test for Alpine Linux edge as well

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Mon, 14 Oct 2019 23:08:40 +0200

phoc (0.1.0) purple; urgency=medium

  [ Guido Günther ]
  * Avoid conflict with close(2)
  * Add HACKING.md
  * Drop wlroots CONTRIBUTING to avoid confusion
  * Use glib main loop
  * Rename roots_server to phoc_server
  * main: Block SIGUSR1 early
  * Maximize xdg_shell surfaces by default
  * desktop: Allow to toggle maximization via dconf
  * helpers: Add helper to toggle maximization
  * Add run script
  * Add editorconfig from libhandy
  * desktop: Allow to toggle maximization via dconf
  * Revert "Avoid conflict with close(2)"
  * Don't access views directly
  * Avoid conflict with close(2)
  * Switch to wlroots 0.5.0
  * output: Check for PHOC_XWAYLAND instead of WLR_HAS_XWAYLAND
  * xwayland: Don't include config.h twice
  * rootston: Also iterate layer shell popups
  * render: Don't use rootston's types and headers
  * Add phosh private protocol (Closes: #2)
  * view: Move want_maximize upwards
  * view: Introduce maybe_maximize()
  * Update wlroots to 930e37eae97e2ae965f7ae3a05d2fdd700827688
  * layer-shell: Don't dereference gone output
  * Update wlroots to 0.6.0 (Closes: #14)
  * run: Avoid word splitting
  * main: Fix indentation
  * main: Launch client in idle main loop
  * xdg_shell: Don't move windows with auto_maximize == true (Closes: #8)
  * main: Block SIGUSR1 instead of ignoring it (Closes: #20)
  * Use glib logging (Closes: #21)
  * gitlab-ci: Build a deb
  * debian: Add compositor parts (Closes: #16)
  * build: Allow to toggle using the embedded wlroots
  * debian: Use a build profile for linking against embedded wlroots
    (Closes: #17)
  * gitlab-ci: Use build profile
  * gitlab-ci: Build against packaged wlroots as well (Closes: #25)
  * debian: Add missing build-dep for x11 backend with embedded wlroots
  * Turn desktop in a PhocDesktop GObject
  * PhocDesktop: Use constructed and finalize
  * PhocDesktop: Use g_signal_connect_swapped
  * desktop: Fix type check
  * Only set a cursor when we have a pointer device (Closes: #31)
  * Update submodule
  * view: Make maximaziation logic match the comment
  * Add logging domains
  * Log wlroots messages as 'phoc-wlroots'
  * view: Take geometry into account when centering views
  * view: Use sane geometry when impl is missing
  * view: Default geometry x,y to 0
  * render: Clear to black background
  * Add some debugging hints
  * view: Take usable area into account when centering views (Closes: #45)
  * roots_seat: Add roots_set_get_cursor ()
  * phosh-private: Add a close request
  * phosh: Implement phosh-private's close request
  * phosh: Use g_* logging
  * Update wlroots submodule
  * protocols: Remove unused protocols
  * protocols: Drop client protocol generation
  * protocols: Don't generate unused server protocols
  * text_input: Don't forget to send enter events (Closes: #51, #28, #12)
  * cursor: Drop btn left emulation for touch
  * Update submodule
  * switch: Drop switch handling
  * keyboard: Reformat keyboard_execute_binding
  * Add PhocKeybindings
  * Use PhocKeybindings
  * Drop old bindings related code
  * Revert "Drop old bindings related code"
  * Revert "Use PhocKeybindings"
  * Revert "Add PhocKeybindings"
  * Revert "keyboard: Reformat keyboard_execute_binding"
  * Revert "switch: Drop switch handling"

  [ emersion ]
  * data-device: refactor wlr_drag
  * rootston: cancel drag on invalid serial
  * rootston: move part of desktop.c to view.c, use an interface for views
  * rootston: add a view child interface
  * rootston: make roots_view embedded and remove unions
  * rootston: refactor rendering
  * rootston: fix rotated views rendering
  * rootston: fix Xwayland children rendering when fullscreen
  * rootston: split rendering code into render.c
  * rootston: fix input events for rotated views
  * xwayland: don't set DISPLAY
  * rootston: add output-management-v1 support
  * rootston: update output-management-v1 state when output is modeset
  * output-management-v1: support applying configuration
  * output-management-v1: update protocol, add set_custom_mode
  * rootston: disable then enable outputs when applying output-management state
  * output: remove lx, ly

  [ Sebastian Krzyszkowiak ]
  * rootston: surface_at: check for fullscreen surfaces in between TOP and OVERLAY layers
  * Auto-maximize unfullscreened surfaces
  * phosh: Fix incorrect type being passed to sizeof in calloc
  * seat: Move view damage in set_focus to where the drawing list is handled
  * Handle stacks (xdg_toplevel::set_parent relationships) (#4)
  * seat: Move focus back to first shell surface when unfocusing layer surface
  * xdg_shell(_v6): Take maximize/fullscreen state into account on view init
  * seat: Don't try to raise unmapped surfaces in stacks
  * Update wlroots submodule
  * view: Move want_maximize above view_maximize
  * view: Don't allow to unmaximize auto-maximized surfaces
  * view: Null-check output in view_arrange_maximized
  * view: Rename "maximized" argument in view_maximize
  * view: Move want_maximize logic into protocol code
  * Auto-maximize before mapping the surface
  * Update wlroots submodule
  * layer_shell: Guard against negative exclusive zone
  * view: Create foreign-toplevel-handle before focusing
  * Move wlr-foreign-toplevel-management support into view
  * Refine the ordering of layer-shell surfaces
  * Update cursor focus on popup unmap
  * Update wlroots submodule

  [ Ryan Walklin ]
  * s/lid_switch/switch_device

  [ Ilia Bozhinov ]
  * rootston: remove disabled outputs from the output layout
  * rootston: add support for foreign-toplevel fullscreening

  [ Alyssa Ross ]
  * Fix missing headers when building without X11

  [ Simon Ser ]
  * rootston: use wlr_output_preferred_mode
  * output-damage: refactor API
  * output: rename needs_commit to needs_frame
  * rootston: don't submit too much damage
  * rootston: fix damage tracking debug mode

  [ Drew DeVault ]
  * Remove wlr_wl_shell

  [ Dorota Czaplejewicz ]
  * build: Link supplied wlroots statically
  * debian: Use build profile for shared wlroots build

 -- Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>  Mon, 16 Sep 2019 19:17:34 +0200

phoc (0.0.0) purple; urgency=medium

  * Initial release

 -- Guido Günther <agx@sigxcpu.org>  Mon, 25 Feb 2019 19:31:00 +0100
