mirror of
https://cagebreak.project-repo.co/cagebreak.git
synced 2026-08-23 22:14:18 +02:00
Release 2.2.0
- Add custom events - Fix Issue 62 (#46 Github) - Fix Issue 63 (environment variables test) - Fix Issue 64 (pointer focus bug)
This commit is contained in:
parent
9a4c07d815
commit
12380e3fcc
32 changed files with 138 additions and 31 deletions
36
Bugs.md
36
Bugs.md
|
|
@ -1187,3 +1187,39 @@ being copied to the `status` element of the resultant structure.
|
|||
|
||||
The script introduced with 2.1.1 `scripts/install-development-environment` had some
|
||||
missing dependencies. This has been resolved and tested with bare arch containers.
|
||||
|
||||
## Issue 62
|
||||
|
||||
* github issue number: #46
|
||||
* Fixed: 2.2.0
|
||||
|
||||
When the readable flag of the IPC socket was set with 0 readable bytes
|
||||
available, cagebreak entered an infinite loop which caused high CPU
|
||||
usage before the first event was sent over the IPC socket.
|
||||
|
||||
## Issue 63
|
||||
|
||||
* github issue number: N/A
|
||||
* Fixed: 2.2.0
|
||||
|
||||
A file path in the environment-variables unit test was wrongly set,
|
||||
causing this test to fail.
|
||||
|
||||
## Issue 64
|
||||
|
||||
* github issue number: N/A
|
||||
* Fixed: 2.2.0
|
||||
|
||||
Cagebreak did not update the pointer focus when focussing the
|
||||
background. This means that the first pointer event after focussing the
|
||||
background was sent to the previously focussed window.
|
||||
|
||||
Steps to reproduce:
|
||||
|
||||
* Open an application and hover the mouse over a clickable area.
|
||||
* Switch to an empty desktop using a keybinding without moving the
|
||||
mouse.
|
||||
* Click the mouse without moving it.
|
||||
* Observe that the element in the previously focussed window was
|
||||
clicked.
|
||||
|
||||
|
|
|
|||
|
|
@ -119,3 +119,10 @@ Changelog:
|
|||
* Add miniscule test suite
|
||||
* Adjust Cagebreak to wlroots 0.16.2
|
||||
* New GPG Keys
|
||||
|
||||
## Release 2.2.0
|
||||
|
||||
* Add custom events
|
||||
* Fix Issue 62 (#46 Github)
|
||||
* Fix Issue 63 (environment variables test)
|
||||
* Fix Issue 64 (pointer focus bug)
|
||||
|
|
|
|||
20
Hashes.md
20
Hashes.md
|
|
@ -1,5 +1,25 @@
|
|||
# Hashes
|
||||
|
||||
2.2.0 cagebreak
|
||||
|
||||
* sha 256: 67660297290a18b7822a818d1d43343e4e6f4dc27427ed9099ff803f218aa9b4
|
||||
* sha 512: 9837e3901b2b10453db2663f5a3da6ec2393610c82984cbabe1c64a6d575e32b492cd3326a6fbb91faa912d14c58dfd1160168280b66417ce7f7f2306c5a501c
|
||||
|
||||
2.2.0 cagebreak.1
|
||||
|
||||
* sha 256: 79caf055cb1c75f3751863718728cca5ea6231891d21b4364c877d5e4888e727
|
||||
* sha 512: 843e15e51f01ed25d0630eee8b6e12ebcc68934da49d6fb66e86f6a46d512145d9be22081b0c2b5f0356c2d0e15b9f13170f7ba1d34d5fba69c7e05a069db337
|
||||
|
||||
2.2.0 cagebreak-config.5
|
||||
|
||||
* sha 256: 7047333f5600d3b05caf04caf9910da1468efe49c1418ca3fcdc6163bade9e89
|
||||
* sha 512: 35203d3959594fe5130a561c440bf85a978384bc874fcce773bb02fa5c637ccc375f1b0ce1ad05603266dcdefed2570815363bc2c8ef81df7ff7be865de2cac5
|
||||
|
||||
2.2.0 cagebreak-socket.7
|
||||
|
||||
* sha 256: bf9bd35a17ab78cb93f0f5209daef27908bf02d0e31ae627ae05fabab162c984
|
||||
* sha 512: 023fb99c3a2c47543ae2870f19e8fd6fd8069834dc4fbeee93e890333b4ac24b4613d0e8dfd2bdffb2d5dc7f907868410b0c61f2e1346c76498955e15d0f3b89
|
||||
|
||||
2.1.2 cagebreak
|
||||
|
||||
* sha 256: 7d07864a837ee577a52b2727bfbfe8834fe599712144f0685f458d508717e451
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Cagebreak: A Wayland Tiling Compositor
|
||||
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/6532) [](https://repology.org/project/cagebreak/versions) [](https://repology.org/project/cagebreak/versions)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/6532) [](https://repology.org/project/cagebreak/versions) [](https://repology.org/project/cagebreak/versions)
|
||||
|
||||
## Quick Introduction
|
||||
|
||||
|
|
|
|||
|
|
@ -127,10 +127,6 @@ ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
if(client->write_buffer_len <= 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(fcntl(client->fd, F_GETFD) == -1) {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
15
keybinding.c
15
keybinding.c
|
|
@ -96,6 +96,12 @@ keybinding_free(struct keybinding *keybinding, bool recursive) {
|
|||
if(keybinding->data.c != NULL) {
|
||||
free(keybinding->data.c);
|
||||
}
|
||||
break;
|
||||
case KEYBINDING_SEND_CUSTOM_EVENT:
|
||||
if(keybinding->data.c != NULL) {
|
||||
free(keybinding->data.c);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1245,6 +1251,12 @@ keybinding_display_message(struct cg_server *server, char *msg) {
|
|||
message_printf(server->curr_output, "%s", msg);
|
||||
}
|
||||
|
||||
void
|
||||
keybinding_send_custom_event(struct cg_server *server, char *msg) {
|
||||
ipc_send_event(server,
|
||||
"{\"event_name\":\"custom_event\",\"message\":\"%s\"}", msg);
|
||||
}
|
||||
|
||||
void
|
||||
keybinding_move_view_to_cycle_output(struct cg_server *server, bool reverse) {
|
||||
if(wl_list_length(&server->outputs) <= 1) {
|
||||
|
|
@ -1706,6 +1718,9 @@ run_action(enum keybinding_action action, struct cg_server *server,
|
|||
case KEYBINDING_DISPLAY_MESSAGE:
|
||||
keybinding_display_message(server, data.c);
|
||||
break;
|
||||
case KEYBINDING_SEND_CUSTOM_EVENT:
|
||||
keybinding_send_custom_event(server, data.c);
|
||||
break;
|
||||
case KEYBINDING_RESIZE_TILE_HORIZONTAL:
|
||||
resize_tile(server, data.i, 0);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ struct cg_server;
|
|||
KEYBINDING(KEYBINDING_SHOW_TIME, time) \
|
||||
KEYBINDING(KEYBINDING_SHOW_INFO, show_info) \
|
||||
KEYBINDING(KEYBINDING_DISPLAY_MESSAGE, message) \
|
||||
KEYBINDING(KEYBINDING_SEND_CUSTOM_EVENT, custom_event) \
|
||||
KEYBINDING(KEYBINDING_CURSOR, cursor) \
|
||||
\
|
||||
KEYBINDING(KEYBINDING_SWAP_LEFT, exchangeleft) \
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cagebreak-config(5) "Version 2.1.2" "Cagebreak Manual"
|
||||
cagebreak-config(5) "Version 2.2.0" "Cagebreak Manual"
|
||||
|
||||
# NAME
|
||||
|
||||
|
|
@ -81,9 +81,17 @@ configure_message display_time 4
|
|||
|
||||
*cursor [enable|disable]*
|
||||
Enable or disable cursor
|
||||
|
||||
This simply hides the cursor. Pointing and clicking is
|
||||
still possible.
|
||||
|
||||
*custom_event <message>*
|
||||
Send a custom event to the IPC socket
|
||||
|
||||
This sends an event of type "custom_event" to all programs
|
||||
listening to the IPC socket along with the string <message>.
|
||||
See *cagebreak-socket(7)* for more details.
|
||||
|
||||
*definekey <mode> <key> <command>*
|
||||
Bind <key> to execute <command> if pressed in <mode> -
|
||||
*definekey* is a more general version of *bind*.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cagebreak-socket(7) "Version 2.1.2" "Cagebreak Manual"
|
||||
cagebreak-socket(7) "Version 2.2.0" "Cagebreak Manual"
|
||||
|
||||
# NAME
|
||||
|
||||
|
|
@ -113,6 +113,17 @@ cg-ipc{"event_name":"configure_output","output":"eDP-1","output_id":1}
|
|||
cg-ipc{"event_name":"cursor_switch_tile","old_output":"eDP-1","old_output_id":1,"old_tile":2,"new_output":"eDP-1","new_output_id":1,"new_tile":3}
|
||||
```
|
||||
|
||||
*custom_event*
|
||||
- Trigger: Cagebreak receives the *custom_event* command, either in the config file or via the IPC socket (see *cagebreak-config(5)*).
|
||||
- JSON
|
||||
- event_name: "custom_event"
|
||||
- message: The message passed to the *custom_event* command
|
||||
|
||||
```
|
||||
custom_event Hello World!
|
||||
cg-ipc{"event_name":"custom_event","message":"Hello World!"}
|
||||
```
|
||||
|
||||
*cycle_outputs*
|
||||
- Trigger: *nextscreen* and *prevscreen* commands
|
||||
- JSON
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cagebreak(1) "Version 2.1.2" "Cagebreak Manual"
|
||||
cagebreak(1) "Version 2.2.0" "Cagebreak Manual"
|
||||
|
||||
# NAME
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
project(
|
||||
'cagebreak',
|
||||
'c',
|
||||
version : '2.1.2',
|
||||
version : '2.2.0',
|
||||
license : 'MIT',
|
||||
default_options : ['c_std=c11', 'warning_level=3']
|
||||
)
|
||||
|
|
@ -208,7 +208,7 @@ reproducible_build_versions = {
|
|||
'xkbcommon': '1.5.0',
|
||||
'fontconfig': '2.14.2',
|
||||
'libinput': '1.23.0',
|
||||
'libevdev': '1.13.0',
|
||||
'libevdev': '1.13.1',
|
||||
'libudev': '253',
|
||||
'pango': '1.50.14',
|
||||
'cairo': '1.17.8',
|
||||
|
|
@ -238,7 +238,7 @@ foreach name, dep : cagebreak_dependencies_dict
|
|||
endforeach
|
||||
|
||||
reproducible_build_compiler = 'gcc'
|
||||
reproducible_build_compiler_version = '12.2.1'
|
||||
reproducible_build_compiler_version = '13.1.1'
|
||||
|
||||
if cc.get_id() != reproducible_build_compiler
|
||||
warning('The compiler "' + cc.get_id() + '" differs from the one used to generate to binary specified in Hashes.md (' + reproducible_build_compiler + ').')
|
||||
|
|
@ -260,7 +260,7 @@ install_data('LICENSE', install_dir : '/usr/share/licenses/' + meson.project_nam
|
|||
|
||||
if get_option('man-pages')
|
||||
scdoc = find_program('scdoc')
|
||||
secssinceepoch = 1682363199
|
||||
secssinceepoch = 1685543842
|
||||
shcommand = 'export SOURCE_DATE_EPOCH=' + secssinceepoch.to_string() + ' ; @0@ < @INPUT@'.format(scdoc.path())
|
||||
sh = find_program('sh')
|
||||
mandir1 = join_paths(get_option('mandir'), 'man1')
|
||||
|
|
|
|||
9
parse.c
9
parse.c
|
|
@ -811,6 +811,15 @@ parse_command(struct cg_server *server, struct keybinding *keybinding,
|
|||
return -1;
|
||||
}
|
||||
keybinding->data.c = strdup(saveptr);
|
||||
} else if(strcmp(action, "custom_event") == 0) {
|
||||
keybinding->action = KEYBINDING_SEND_CUSTOM_EVENT;
|
||||
if(saveptr == NULL) {
|
||||
*errstr =
|
||||
log_error("Not enough paramaters to \"custom_event\". Expected "
|
||||
"string to send.");
|
||||
return -1;
|
||||
}
|
||||
keybinding->data.c = strdup(saveptr);
|
||||
} else if(strcmp(action, "time") == 0) {
|
||||
keybinding->action = KEYBINDING_SHOW_TIME;
|
||||
} else if(strcmp(action, "nextscreen") == 0) {
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
2.1.2
|
||||
2023-04-24
|
||||
2.2.0
|
||||
2023-05-31
|
||||
|
|
|
|||
1
seat.c
1
seat.c
|
|
@ -1043,6 +1043,7 @@ seat_set_focus(struct cg_seat *seat, struct cg_view *view) {
|
|||
view_activate(prev_view, false);
|
||||
}
|
||||
wlr_seat_keyboard_clear_focus(wlr_seat);
|
||||
process_cursor_motion(seat, -1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
BIN
signatures/2.1.2-cagebreak-config.5.sig
Normal file
BIN
signatures/2.1.2-cagebreak-config.5.sig
Normal file
Binary file not shown.
BIN
signatures/2.1.2-cagebreak-socket.7.sig
Normal file
BIN
signatures/2.1.2-cagebreak-socket.7.sig
Normal file
Binary file not shown.
BIN
signatures/2.1.2-cagebreak.1.sig
Normal file
BIN
signatures/2.1.2-cagebreak.1.sig
Normal file
Binary file not shown.
BIN
signatures/2.1.2-cagebreak.sig
Normal file
BIN
signatures/2.1.2-cagebreak.sig
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -22,7 +22,7 @@ cp "${MESONCURRENTCONFIGDIR}/test/testing-configurations/config" "${testdir}/env
|
|||
sed -i "s|CONFIGPATH|$testdir\/envvars\/socket|g" "${testdir}/envvars/config"
|
||||
(WLR_BACKENDS=headless ./cagebreak -e -c "${testdir}/envvars/config")
|
||||
sync
|
||||
[[ ! $(cat "${testdir}/socket") = "${oldsocket}" ]] || RESULT=1
|
||||
[[ $(cat "${testdir}/envvars/socket") != "${oldsocket}" ]] || RESULT=1
|
||||
|
||||
# XDG_CONFIG_HOME
|
||||
cp "${MESONCURRENTCONFIGDIR}/test/testing-configurations/env-var-config" "${testdir}/cagebreak/config"
|
||||
|
|
|
|||
|
|
@ -107,6 +107,9 @@ workspace_free_tiles(struct cg_workspace *workspace) {
|
|||
workspace->focused_tile) {
|
||||
workspace->output->server->seat->cursor_tile = NULL;
|
||||
}
|
||||
if(workspace->focused_tile == workspace->server->seat->cursor_tile) {
|
||||
workspace->server->seat->cursor_tile = NULL;
|
||||
}
|
||||
struct cg_tile *next = workspace->focused_tile->next;
|
||||
free(workspace->focused_tile);
|
||||
workspace->focused_tile = next;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue