Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
665e4c9
Prevent compositor crash on Lua callback errors
jbms Jun 17, 2026
c63c533
Fix visibility bounds check in filter_container_visible
jbms Jun 17, 2026
96aea8e
layout: reap empty parent after moving container
jbms Jun 19, 2026
16f3b4e
tree: introduce node hash map for O(1) lookups and safety
jbms Jun 19, 2026
bbf1387
Fix scratchpad UAF and double reap
jbms Jun 19, 2026
84eac14
Fix use-after-free of focused_inactive_child in container
jbms Jun 19, 2026
bb9e0a5
Fix memory leaks in swaybar and compositor exit
jbms Jun 19, 2026
da91a42
Fix use-after-free in transactions and node destruction on shutdown
jbms Jun 19, 2026
f4ea1aa
Fix memory leaks in transactions
jbms Jun 19, 2026
4473a73
Merge sway node hash map change and bug fixes into scroll
jbms Jun 19, 2026
b6c8306
lua: use node IDs instead of light userdata pointers for safety
jbms Jun 19, 2026
2f754ae
Add pytest-based integration test harness and test clients
jbms Jun 17, 2026
1b63cf2
Add comprehensive integration tests for Lua APIs and clients
jbms Jun 18, 2026
55912c7
lua: expand path using wordexp and support relative paths
jbms Jun 18, 2026
ac61761
Add scroll.node_get_type Lua API function and document it
jbms Jun 18, 2026
b4fe0da
Add tests for scroll.node_get_type Lua API
jbms Jun 18, 2026
52e7631
Add reproduction test for scratchpad double reap crash
jbms Jun 19, 2026
b9fc8b0
Fix UAF risks in space restore and extract view
jbms Jun 19, 2026
69797f1
Add tests for space restore and move cleanup
jbms Jun 19, 2026
46dac8a
Add reproduction test for workspace split UAF crash
jbms Jun 19, 2026
1dcbd35
Fix use-after-free in workspace split destroy
jbms Jun 19, 2026
9c30948
Defer workspace switch animation cleanup transaction commit to idle loop
jbms Jun 19, 2026
ac9f63a
Add reproduction tests for focused_inactive UAF and fullscreen move
jbms Jun 19, 2026
64d5df2
Add integration tests for space restore and workspace switch animation
jbms Jun 19, 2026
eb825e6
Use container IDs instead of sway_view pointers in space restore
jbms Jun 19, 2026
2bfc5eb
Fix memory leaks at exit (scroll-specific)
jbms Jun 19, 2026
a1dc9c1
Add integration test for shutdown leaks
jbms Jun 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ build-*/
.lvimrc
config-debug
wayland-*-protocol.*
__pycache__
.wraplock
.pytest_cache/
.ruff_cache/

506 changes: 506 additions & 0 deletions include/khashl.h

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions include/sway/desktop/transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

struct sway_transaction_instruction;
struct sway_view;
struct sway_server;

/**
* Find all dirty containers, create and commit a transaction containing them,
Expand Down Expand Up @@ -71,4 +72,6 @@ void arrange_popups(struct wlr_scene_tree *popups);
*/
void config_default_animation_callbacks();

void transaction_shut_down(struct sway_server *server);

#endif
1 change: 1 addition & 0 deletions include/sway/input/input-manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ struct sway_input_manager {
struct sway_input_manager *input_manager_create(struct sway_server *server);

void input_manager_finish(struct sway_input_manager *input);
void input_manager_destroy(struct sway_input_manager *input);

bool input_manager_has_focus(struct sway_node *node);

Expand Down
7 changes: 7 additions & 0 deletions include/sway/tree/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const char *node_type_to_str(enum sway_node_type type);
* next transaction then unmarked as dirty.
*/
void node_set_dirty(struct sway_node *node);
void node_clear_dirty(struct sway_node *node);

bool node_is_view(struct sway_node *node);

Expand Down Expand Up @@ -106,4 +107,10 @@ void node_set_focus_warp(struct sway_node *node, enum sway_node_focus_warp warp)

enum sway_node_focus_warp node_get_focus_warp(struct sway_node *node);

void node_fini(struct sway_node *node);
struct sway_node *node_by_id(size_t id);
void node_map_init(void);
void node_map_fini(void);

#endif

2 changes: 1 addition & 1 deletion include/sway/tree/space.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ enum sway_space_restore {
};

struct sway_space_view {
struct sway_view *view;
size_t container_id;
struct sway_space_container *container;
float content_scale;
};
Expand Down
11 changes: 11 additions & 0 deletions include/swaybar/tray/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,24 @@
#define _SWAYBAR_TRAY_HOST_H

#include <stdbool.h>
#include "config.h"
#if HAVE_LIBSYSTEMD
#include <systemd/sd-bus.h>
#elif HAVE_LIBELOGIND
#include <elogind/sd-bus.h>
#elif HAVE_BASU
#include <basu/sd-bus.h>
#endif

struct swaybar_tray;

struct swaybar_host {
struct swaybar_tray *tray;
char *service;
char *watcher_interface;
sd_bus_slot *reg_slot;
sd_bus_slot *unreg_slot;
sd_bus_slot *watcher_slot;
};

bool init_host(struct swaybar_host *host, char *protocol, struct swaybar_tray *tray);
Expand Down
2 changes: 2 additions & 0 deletions include/swaybar/tray/watcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ struct swaybar_watcher {
list_t *hosts;
list_t *items;
int version;
sd_bus_slot *vtable_slot;
sd_bus_slot *signal_slot;
};

struct swaybar_watcher *create_watcher(char *protocol, sd_bus *bus);
Expand Down
2 changes: 2 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ wayland_cursor = dependency('wayland-cursor')
wayland_protos = dependency('wayland-protocols', version: '>=1.47', default_options: ['tests=false'])
xkbcommon = dependency('xkbcommon', version: '>=1.5.0')
cairo = dependency('cairo')
fontconfig = dependency('fontconfig')
pango = dependency('pango')
pangocairo = dependency('pangocairo')
gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf'))
Expand Down Expand Up @@ -246,6 +247,7 @@ if get_option('default-wallpaper')
endif

subdir('completions')
subdir('tests')

summary({
'gdk-pixbuf': gdk_pixbuf.found(),
Expand Down
Loading