2522 Commits (feb54979c0940655e36119c63e18a9ee72cc03b0)

Author SHA1 Message Date
Alexander Orzechowski 48f2a7a3a1 wlr_scene: Simplify direct scanout handling
1 year ago
Alexander Orzechowski 9613b3bc8a wlr_scene: Wrap render_list nodes in struct
1 year ago
Simon Ser 53b07b5b72 cursor: set image for new outputs
1 year ago
Simon Ser d5581e42d4 cursor: add cursor_update_outputs()
1 year ago
Simon Ser d1d6cd9008 cursor: keep track of XCursor manager and name
1 year ago
Simon Ser 69c44de22f cursor: track surface globally, instead of per-output
1 year ago
Simon Ser c46fabe45c cursor: use wlr_cursor_unset_image() in wlr_cursor_set_surface()
1 year ago
Simon Ser f0b8a68654 cursor: store wlr_cursor inline in wlr_cursor_state
1 year ago
Alexander Orzechowski 8243399385 output: Set output mode during main commit
1 year ago
Alexander Orzechowski ea3c6fde3a wlr_scene: Add opaque region blend mode optimization
1 year ago
Kirill Primak 71b57b8d27 fullscreen-shell: set surface role
1 year ago
Simon Ser be05097968 output: add wlr_output_state_init()
1 year ago
Simon Ser 8a5b5e6f28 compositor: listen to role_resource destroy signal
1 year ago
Simon Ser 89cb484220 compositor: replace role_data with role_resource
1 year ago
Simon Ser 00f1870d35 input-method-v2: add popup_surface_from_resource()
1 year ago
Kirill Primak fc9b58e84d compositor: don't call role unmap hook without an object
1 year ago
Kirill Primak 0f67580aab compositor: introduce wlr_surface_set_role_object()
1 year ago
Kirill Primak 0040c78c0b compositor: fix wlr_surface_set_role() error messages
1 year ago
Simon Ser d59749aa44 cursor: add support for animated XCursor
1 year ago
Simon Ser 6dd8b092e9 output/swapchain: fix error return value types
1 year ago
Alexander Orzechowski b5eaa47049 scene: Use wlr_output_state_copy for direct scanout path
1 year ago
Alexander Orzechowski 4b7c526578 output: Introduce wlr_output_state_copy()
1 year ago
Simon Ser 1e68e1f661 seat: fix keyboard/pointer/touch resource destroy
1 year ago
Simon Ser c4d4409deb output: stop using wlr_output.back_buffer in output_ensure_buffer()
1 year ago
Simon Ser b625a13156 output: attach buffer to state in output_ensure_buffer()
1 year ago
Alexander Orzechowski 2ac31fc630 wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
1 year ago
Alexander Orzechowski 64c0272f81 output_state: Gamma lut should be freed only if committed
1 year ago
Simon Ser 220402b717 cursor: add wlr_cursor_unset_image()
1 year ago
Simon Ser da04b066ea cursor: add wlr_cursor_set_xcursor()
1 year ago
Alexander Orzechowski 58a2f8bd5c wlr_scene: Clear damage ring on transform change
1 year ago
Alexander Orzechowski 61667404ce wlr_scene: Clear damage ring on scale change
1 year ago
Alexander Orzechowski 96b95bf775 wlr_scene: Reset damage ring bounds every frame
1 year ago
Alexander Orzechowski 4391845910 wlr_damage_ring_set_bounds: Ignore duplicate size requests
1 year ago
Alexander Orzechowski 3896b6b107 wlr_scene: Fix transforms with non 1 scale
1 year ago
Kirill Primak 753f3cc4fa compositor: add wlr_surface_role.no_object
1 year ago
Simon Ser 670915eeea output: add wlr_output_state_set_layers()
1 year ago
Alexander Orzechowski 0925a500d1 wlr_scene: Don't use direct scanout if trying to commit a new render_format
1 year ago
Alexander Orzechowski a09bb1314d wlr_output_state: Consider gamma_lut uninitialized if not committed
1 year ago
Alexander Orzechowski b80e67d6e6 wlr_output_state: Consider buffer uninitialized if not committed
1 year ago
Simon Ser 6e8fb5509f cursor: only reset the cursor when the surface changes
1 year ago
Alexander Orzechowski 05dd08afe5 scene: introduce wlr_scene_output_build_state()
1 year ago
Alexander Orzechowski 7e67b8152b scene: Don't rely on output current state during rendering
1 year ago
Alexander Orzechowski ae7bad86dd output: introduce wlr_output_state_set_damage()
1 year ago
Simon Ser 36376e2ddf gamma-control-v1: stop applying gamma LUTs implicitly
1 year ago
Simon Ser ec9b79ef19 gamma-control-v1: add wlr_gamma_control_v1_send_failed_and_destroy()
1 year ago
Simon Ser 026fc6eda0 gamma-control-v1: add wlr_gamma_control_v1_apply()
1 year ago
Simon Ser 5d5cf34486 output: add wlr_output_state_set_gamma_lut()
1 year ago
Simon Ser 6e635d2fd3 gamma-control-v1: add wlr_gamma_control_manager_v1_get_control()
1 year ago
Simon Ser 70c1a57248 gamma-control-v1: introduce set_gamma event
1 year ago
Kirill Primak 63f3802e0f subcompositor: set role_data with wlr_surface_set_role()
1 year ago
Kirill Primak 24a479a501 drag: don't set icon's role_data
1 year ago
Kirill Primak 31d958f70a cursor: fix applying hotspot offset
1 year ago
Simon Ser 544c0622fa presentation-time: constify wlr_presentation_feedback_send_presented()
1 year ago
Kirill Primak 25a62a3775 subcompositor: simplify subsurface_consider_map(), call on add
1 year ago
Kirill Primak 2acc74a3db Clear input regions if they're ignored
1 year ago
Alexander Orzechowski 9f28366b55 wlr_tablet_v2_tool: Tablet tool surfaces are always mapped
1 year ago
Alexander Orzechowski d700bd2d7c wlr_seat_pointer: cursor surfaces are always mapped
1 year ago
Rose Hudson 9e8947e4d5 add render timer API
2 years ago
Kirill Primak 37b5f8a89e compositor: unmap subsurfaces too on unmap
2 years ago
Kenny Levinsen 15f2f6642f gamma-control: Read ramps using pread
2 years ago
Kirill Primak b61d5922f1 compositor: notify subsurfaces about a commit in the rendering order
2 years ago
Kirill Primak 49e9be62ae subcompositor: consider mapping on parent map
2 years ago
Väinö Mäkelä a2f94b500c virtual-keyboard: Handle inert seats
2 years ago
Väinö Mäkelä f9f17b6236 virtual-pointer: Handle inert seats
2 years ago
Väinö Mäkelä 07e27ba854 xdg-popup: Handle inert seats
2 years ago
Väinö Mäkelä 0601813ab6 text-input: Handle inert seats
2 years ago
Väinö Mäkelä bcb69b1827 primary-selection: Handle inert seats
2 years ago
Väinö Mäkelä 247e86dca9 keyboard-shortcuts-inhibit: Handle inert seats
2 years ago
Väinö Mäkelä 16948c7369 input-method: Handle inert seats
2 years ago
Väinö Mäkelä 126222884d wlr_idle: Handle inert seats
2 years ago
Väinö Mäkelä f988a75a80 tablet: Handle inert seats
2 years ago
Väinö Mäkelä 5120addfbb data-control: Handle inert seats
2 years ago
Väinö Mäkelä f97f4496de data-device: Handle inert seats
2 years ago
Väinö Mäkelä 0e5f76186e seat: Allow binding to inert seats
2 years ago
Simon Ser 52b93f7eb4 output/cursor: fix scale and transform
2 years ago
Simon Ser 09c87cec3f cursor: fix wl_pointer.set_cursor hotspot updates
2 years ago
Kirill Primak 8c0eeb6a86 session-lock: fix buffer check
2 years ago
Kirill Primak e75407fd4d session-lock: remove unused wlr_session_lock_surface_v1.events.map
2 years ago
Kirill Primak d086ee1b9e compositor: remove wlr_surface_role.precommit
2 years ago
Kirill Primak af4181f388 drag: use unified map logic
2 years ago
Kirill Primak 743da5c0ae input-method: use unified map logic
2 years ago
Kirill Primak 229abfae0c session-lock: use unified map logic
2 years ago
Kirill Primak c63f3659c5 layer-shell: use unified map logic
2 years ago
Kirill Primak b0437fc416 xdg-shell: use unified map logic
2 years ago
Kirill Primak c590bb600f subcompositor: use unified map logic
2 years ago
Kirill Primak 6b40e08148 compositor: introduce unified map logic
2 years ago
Simon Ser 6668c822b3 cursor: unset wlr_output_cursor.texture on surface destroy
2 years ago
Simon Ser 9c9e3f6263 cursor: ignore wlr_cursor_set_surface() with same surface
2 years ago
Simon Ser 5bcd537ff4 output/cursor: use new rendering API
2 years ago
Simon Ser 93a6acae9f output: add wlr_output_begin_render_pass()
2 years ago
Alexander Orzechowski 95062904c7 wlr_scene: Introduce wlr_scene_buffer_set_opacity
2 years ago
Alexander Orzechowski 2346b90a9f wlr_scene: Make scene_rect_from_node public
2 years ago
Alexander Orzechowski 88f80c4a7c wlr_scene: Make scene_tree_from_node public
2 years ago
Simon Ser 2c6aeed7d6 output: use pending render format if any
2 years ago
Alexander Orzechowski d495fb8c04 wlr_{box, fbox}_equal: Consider empty boxes NULL
2 years ago
Simon Ser 96f3f3c92e render/pixel-format: add support for block-based formats
2 years ago
Simon Ser a0ebc401d0 linux-dmabuf-v1: fix wlr_drm_format_set leak in feedback_compile()
2 years ago
Austin Shafer 43b25fd34e dmabuf: Remove assumption that all mods are in fallback tranche
2 years ago
Alexander Orzechowski c4bed48fcc output_pick_format: Fail if no format could be chosen
2 years ago
Kirill Primak 75293d5fb0 keyboard: use the new data in wlr_keyboard_set_keymap()
2 years ago
Simon Ser e2647c5151 keyboard: add support for resetting the keymap
2 years ago
Simon Ser e725f234d7 keyboard: don't change current keymap on wlr_keyboard_set_keymap() error
2 years ago
Simon Ser 69aeccddb7 seat/keyboard: allow no keymap
2 years ago
Alexander Orzechowski 300bd80772 wlr_drm_format_set: Store formats on array
2 years ago
Alexander Orzechowski 90d08f8f1c wlr_drm_format: Rework wlr_drm_format_intersect
2 years ago
Alexander Orzechowski 340700cb70 wlr_drm_format: Change wlr_drm_format_dup to copy
2 years ago
Alexander Orzechowski e427e019c4 wlr_drm_format: Don't take double pointer in wlr_drm_format_add
2 years ago
Alexander Orzechowski b45396c790 wlr_drm_format: Introduce drm_format_finish
2 years ago
Simon Ser 2a1234a820 wlr-export-dmabuf-v1: handle output destroy
2 years ago
Alexander Orzechowski 18139f4d87 wlr_cursor: Don't multiply hotspot by scale^2
2 years ago
Alexander Orzechowski 47a250ae12 wlr_cursor: Consider surface state when setting new cursor surface
2 years ago
Simon Ser d933f5204b output: drop wlr_output_cursor_set_surface
2 years ago
Simon Ser 78afce5e2d cursor: add surface handling
2 years ago
Simon Ser b64e7e88bf output: add output_cursor_set_texture()
2 years ago
Alexander Orzechowski 1ee75786b4 drm_format_set_union: Require initialized dst and remove assert
2 years ago
Alexander Orzechowski ec796afb6e wlr_compositor: Decide opacity from new has_buffer flag.
2 years ago
Alexander Orzechowski 394accbe4a wlr_compositer: Keep track if surface has committed a buffer before.
2 years ago
Alexander Orzechowski cbe8876050 linux_dmabuf_v1: Use wlr_drm_format_set_union
2 years ago
Simon Ser bf8ae8a036 output/cursor: fix buffer size when nested and scaled
2 years ago
Simon Ser d7fcc1e96f scene: port to wlr_render_pass
2 years ago
Simon Ser 587852056c output: add wlr_output_add_software_cursors_to_render_pass()
2 years ago
Simon Ser 44069dfd5e output-layer: add cropping support
2 years ago
Andri Yngvason 00489b11a0 seat: Provide dummy resources for inert seats
2 years ago
Andri Yngvason 3898bb482d seat: Let client manage its own resources
2 years ago
Andri Yngvason 1689a3503b wlr_seat: Extract seat_client_create() function
2 years ago
Alexander Orzechowski eac2eaa6a9 wlr_scene: Fix potential use-after-free in wlr_scene_buffer_set_buffer
2 years ago
Alexander Orzechowski 39be67df46 wlr_scene: Send presentation event before direct scanout output commit
2 years ago
Simon Ser dae2deb3c9 compositor: add wlr_surface_set_preferred_buffer_transform()
2 years ago
Simon Ser 42edd36785 compositor: add wlr_surface_set_preferred_buffer_scale()
2 years ago
Simon Ser 0bb574239d compositor: pass version in wlr_compositor_create
2 years ago
Kirill Primak 87e7584dd4 compositor: use defunct_role_object error
2 years ago
Kirill Primak fac7a5cc9d subcompositor: use bad_parent error
2 years ago
Kirill Primak 49435cb27b subcompositor: simplify get_subsurface handler
2 years ago
Alexander Orzechowski b1e38fc7ea output: Drop output_is_direct_scanout
2 years ago
Simon Ser 9ef98452a3 output-damage: drop
2 years ago
Simon Ser 7abda952d0 output: drop direct scan-out check in output_basic_test()
2 years ago
Simon Ser ec5135cb09 scene: check wlr_output_is_direct_scanout_allowed()
2 years ago
Simon Ser 079ff9e6fb output: add wlr_output_is_direct_scanout_allowed()
2 years ago
Simon Ser 835208db98 output-layer: add support for scaling buffers
2 years ago
Simon Ser e00c4cd7dc output-layer: cache current state
2 years ago
Kirill Primak a3489f2c64 xdg-shell: improve unmapping logic slightly
2 years ago
Simon Ser 1b6fac4aa6 output-layer: require all layers in wlr_output_state.layers
2 years ago
Isaac Freund 87969c1c7c
xdg-decoration: send missing protocol errors
2 years ago
Alexander Orzechowski 9ac94516b8 wlr_scene: Skip direct scanout if there is no damage
2 years ago
Simon Ser 38839ac536 gamma-control-v1: simplify get_gamma_control error handling
2 years ago
Simon Ser 9108717d5d gamma-control-v1: fix handling of duplicate control
2 years ago
Isaac Freund 5ae17de23f
xdg-shell: improve validation of resize edges
2 years ago
Simon Ser 5079000e49 output: allow modeset with buffer while frame is pending
2 years ago
Simon Ser ab7eabac84 output: leverage wlr_output_configure_primary_swapchain()
2 years ago
Simon Ser fef8ab22e3 output: introduce wlr_output_configure_primary_swapchain()
2 years ago
Simon Ser b33ab26fe7 render/swapchain: make public
2 years ago
Simon Ser 7215bd1e0f output: expose wlr_output_state_set_buffer()
2 years ago
Simon Ser 4629d0ef40 output: expose wlr_output_state_finish()
2 years ago
Simon Ser d25ab03326 screencopy-v1: drop unnecessary pixman_region32_t casts
2 years ago
Alexander Orzechowski 3ef9f91283 wlr_scene: Add dmabuf_feedback helper
2 years ago
Alexander Orzechowski 4ddc20e14c wlr_scene: Extract considering logic for direct scanout
2 years ago
Alexander Orzechowski 323f0b94db wlr_scene: Cleanup header includes
2 years ago
Simon Ser 849c362ffb linux-dmabuf-v1: add helper for output layer feedback events
2 years ago
Simon Ser e1335a792a output-layer: add feedback event
2 years ago
Simon Ser 3e0ce761ad output: add wlr_output_set_layers()
2 years ago
Simon Ser 2f29b0c438 Add wlr_output_layer
2 years ago
Vasyl Vavrychuk 58067a2084 fullscreen-shell: add release request handler
2 years ago
Kenny Levinsen 1225f81a6a scene: Add fractional scale handling
2 years ago
Kenny Levinsen efb8df8b22 wp-fractional-scale-v1: new protocol implementation
2 years ago
Simon Ser c6ecbf09b5 linux-dmabuf-v1: fix missing SCANOUT flag
2 years ago
Simon Ser 8c5713bd7a linux-dmabuf-v1: use wlr_linux_dmabuf_feedback_v1_init_with_options()
2 years ago
Simon Ser 0c966f102c linux-dmabuf-v1: add wlr_linux_dmabuf_feedback_v1_init_with_options()
2 years ago
Simon Ser b264ec7767 linux-dmabuf-v1: add basic helpers for feedback
2 years ago
Simon Ser 5cd14dfc91 linux-dmabuf-v1: stop using const in feedback
2 years ago
Consolatis f6008ffff4 xdg-activation: accept pointer focus for new tokens
2 years ago
Alexander Orzechowski 7b32c25a4f wlr_scene: Rename wlr_scene_surface_from_buffer
2 years ago
Kirill Primak dc7b5ab21e layer-shell: forbid changing the existing popup parent
2 years ago
Simon Ser 92eedb84c1 output: don't attach buffer on first commit if disabled
2 years ago
Kirill Primak 911648f430 subcompositor: fix mapped parent check
2 years ago
Simon Ser eb3e8f08a8 subcompositor: convert to try_from
2 years ago
Simon Ser c5f7f8ab98 ext-session-lock-v1: convert to try_from
2 years ago
Simon Ser f9bd416d41 layer-shell-v1: convert to try_from
2 years ago
Simon Ser 49cb85ad72 input-method-v2: convert to try_from
2 years ago
Simon Ser 711a1a3ed4 xdg-shell: convert to try_from
2 years ago
Simon Ser 0f24d27e0b xdg-shell: rename wlr_xdg_popup.committed to sent_initial_configure
2 years ago
Simon Ser df0c926a7a xdg-shell: rename wlr_xdg_toplevel.added to sent_initial_configure
2 years ago
Simon Ser e1a1dc4be5 xdg-shell: remove unnecessary return
2 years ago
Simon Ser e69dd909f7 xdg-shell: reset added/committed flag on unmap
2 years ago
Simon Ser 0e54b861e9 seat/keyboard: constify wlr_seat_keyboard_notify_enter()
2 years ago
Simon Ser 695d28c250 seat/keyboard: constify wlr_seat_keyboard_notify_modifiers()
2 years ago
Simon Ser e44834595d seat/keyboard: constify args in wlr_seat_keyboard_enter()
2 years ago
Simon Ser 12e04d8f83 seat/keyboard: constify wlr_seat_keyboard_send_modifiers()
2 years ago
Simon Ser f41dcb3a97 seat/keyboard: skip wl_array allocation
2 years ago
Alexander Orzechowski 5007e713b4 wlr_scene: Send intersecting list of scene outputs for outputs_update signal
2 years ago
Kirill Primak 843b874f22 output-layout: improve closest point for no outputs case
2 years ago
Alexander Orzechowski 5f264a7d6c subcompositor: Clean up subsurface_consider_map
2 years ago
Alexander Orzechowski 84aee1d708 subcompositor: Clarify comment on subsurface mapped consideration
2 years ago
Isaac Freund 869af1cfbb
session-lock: send more protocol errors
2 years ago
Kirill Primak b28a9afd4b presentation-time: finish surface addon
2 years ago
bi4k8 790fb93794 cursor: compare to scaled coords
2 years ago
xiliuya 7f6d646e0a keyboard: only update LEDs when changed
2 years ago
Kirill Primak 79248e4961 xdg-shell: use defunct_role_object error
2 years ago
Ronan Pigott f8e70af318 wlr_xdg_activation_v1: add new_token event
2 years ago
Kirill Primak 097ea84cda output-layout: improve API
2 years ago
Kirill Primak 27ea18cc33 output-layout: remove wlr_output_layout_output_state
2 years ago
Simon Ser 512deebd82 compositor: add wlr_surface.events.precommit
2 years ago
Simon Ser d92f92f2d3 wl-drm: only advertise formats supporting implicit modifiers
2 years ago
Simon Ser f36a5915da wl-drm: don't store wlr_renderer
2 years ago
Simon Ser c8eb24d30e output: drop enable/mode events
2 years ago
Simon Ser 4287f70dc3 output-layout: stop listening for output mode events
2 years ago
Simon Ser 19dfe99496 output-damage: stop listening for output mode events
2 years ago
Simon Ser fecbaa2bd6 scene: stop listening for output enable/mode events
2 years ago
Alexander Orzechowski fe891ebd4e output_init_render: Allow re-initialization
2 years ago
Simon Ser f103dc74d8 linux-dmabuf-v1: introduce wlr_linux_dmabuf_v1_create()
2 years ago
Simon Ser 9c04fd2496 linux-dmabuf-v1: drop wlr_renderer field
2 years ago
Simon Ser 88493d1f7c linux-dmabuf-v1: don't use wlr_renderer to send legacy format list
2 years ago
Simon Ser d45cffb865 linux-dmabuf-v1: don't use wlr_renderer to sanity check DMA-BUFs
2 years ago
Simon Ser c99c60090c linux-dmabuf-v1: add version arg to create()
2 years ago
Simon Ser 444d94ef89 linux-dmabuf-v1: add "_with_renderer" suffix to create() function
2 years ago
Simon Zeni 0611c10909 types/wlr_seat: finish keyboard_state during wlr_seat_destroy
2 years ago
Johan Malm 338e0a3976 scene/layer_shell_v1.c: remove redundant comment
2 years ago
Johan Malm 8e80432a72 scene/layer_shell_v1.c: set exclusive zone correctly
2 years ago
Alexander Orzechowski 32d00984e1 wlr_scene: Expand damage cull region with fractional scales
2 years ago
Alexander Orzechowski fe21fc6920 wlr_scene: Don't cull the entire output when entering direct scanout
2 years ago
Kirill Primak 5477ad7d90 scene: fix output damage expansion condition
2 years ago
Simon Ser 35a0d9c85d scene: set output damage during direct scan-out
2 years ago
Simon Ser ce089498cc scene: use wlr_output_state for direct scanout
2 years ago
Simon Ser 76b3687739 shm: add create() function without a wlr_renderer
2 years ago
Kirill Primak 060df4c6c0 scene: introduce wlr_scene_buffer.events.outputs_update
2 years ago
Simon Ser 42016fa262 compositor: make renderer optional
2 years ago
Simon Ser 1978a91717 compositor: release current buffer after commit event
2 years ago
Guido Günther 8a56490229 seat/pointer: Initialize low_res_value
2 years ago
Simon Ser f84f7c7710 wl-drm: use resource interface
2 years ago
Simon Ser 772066a174 linux-dmabuf-v1: use resource interface
2 years ago
Kirill Primak c2fb5289c2 xdg-shell: send invalid_size errors
2 years ago
Simon Ser 6c3d6be74b output: drop wlr_output_damage_whole()
2 years ago
Simon Ser ef5e2cc5e3 output: call wlr_output_update_enabled() after commit
2 years ago
bi4k8 8b12037cad wlr_seat: clear `drag->seat_client` when destroyed
2 years ago
Alexander Orzechowski 265439600e output: Initialize request_state
2 years ago
Simon Ser 270b8dd342 shm: allow accessing multiple shm mapping concurrently
2 years ago
Simon Ser 6c277e3c39 buffer: drop wlr_shm_client_buffer
2 years ago
Simon Ser 0ae3c7b1a2 Introduce wlr_shm
2 years ago
Simon Ser 48541d2f2e scene: check wlr_renderer_begin return value
2 years ago
Simon Ser 45159f8708 output: check wlr_renderer_begin return value
2 years ago
Simon Ser bf623ec782 content-type-v1: add version param to wlr_content_type_manager_v1_create()
2 years ago
Simon Ser ff55663906 output: introduce request_state event
2 years ago
Simon Ser 024627e872 content-type-v1: new protocol implementation
2 years ago
Simon Ser 258bf9be1e compositor: drop wlr_surface.{sx,sy}
2 years ago
Alexander Orzechowski c8a5dfcc87 wlr_scene: Add drag icon helper
2 years ago
Simon Ser 9f793d3503 layer-shell-v1: specify version in constructor
2 years ago
Simon Ser 2b22a10478 scene: constify region APIs
2 years ago
Simon Ser c5d79bfb26 region: constify
2 years ago
Simon Ser fe4225d5de output: constify damage APIs
2 years ago
Simon Ser 9e10e9af7f output-damage: constify wlr_output_damage_add()
2 years ago
Simon Ser fb7bd920a6 damage-ring: constify wlr_damage_ring_add()
2 years ago