ipc: add support for output event

For compatibility with i3 [1].

[1]: https://i3wm.org/docs/ipc.html#_output_event
This commit is contained in:
Simon Ser 2023-02-01 16:19:41 +01:00 committed by Simon Zeni
parent 2e33b0276f
commit 40eb29e7c5
4 changed files with 35 additions and 0 deletions

View file

@ -21,5 +21,6 @@ void ipc_event_mode(const char *mode, bool pango);
void ipc_event_shutdown(const char *reason); void ipc_event_shutdown(const char *reason);
void ipc_event_binding(struct sway_binding *binding); void ipc_event_binding(struct sway_binding *binding);
void ipc_event_input(const char *change, struct sway_input_device *device); void ipc_event_input(const char *change, struct sway_input_device *device);
void ipc_event_output(void);
#endif #endif

View file

@ -20,6 +20,7 @@
#include "sway/desktop/transaction.h" #include "sway/desktop/transaction.h"
#include "sway/input/input-manager.h" #include "sway/input/input-manager.h"
#include "sway/input/seat.h" #include "sway/input/seat.h"
#include "sway/ipc-server.h"
#include "sway/layers.h" #include "sway/layers.h"
#include "sway/output.h" #include "sway/output.h"
#include "sway/server.h" #include "sway/server.h"
@ -789,6 +790,8 @@ static void update_output_manager_config(struct sway_server *server) {
} }
wlr_output_manager_v1_set_configuration(server->output_manager_v1, config); wlr_output_manager_v1_set_configuration(server->output_manager_v1, config);
ipc_event_output();
} }
static void handle_destroy(struct wl_listener *listener, void *data) { static void handle_destroy(struct wl_listener *listener, void *data) {

View file

@ -508,6 +508,20 @@ void ipc_event_input(const char *change, struct sway_input_device *device) {
json_object_put(json); json_object_put(json);
} }
void ipc_event_output(void) {
if (!ipc_has_event_listeners(IPC_EVENT_OUTPUT)) {
return;
}
sway_log(SWAY_DEBUG, "Sending output event");
json_object *json = json_object_new_object();
json_object_object_add(json, "change", json_object_new_string("unspecified"));
const char *json_string = json_object_to_json_string(json);
ipc_send_event(json_string, IPC_EVENT_OUTPUT);
json_object_put(json);
}
int ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) { int ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) {
struct ipc_client *client = data; struct ipc_client *client = data;

View file

@ -1445,6 +1445,9 @@ available:
: workspace : workspace
:[ Sent whenever an event involving a workspace occurs such as initialization :[ Sent whenever an event involving a workspace occurs such as initialization
of a new workspace or a different workspace gains focus of a new workspace or a different workspace gains focus
|- 0x80000001
: output
: Sent when outputs are updated
|- 0x80000002 |- 0x80000002
: mode : mode
: Sent whenever the binding mode changes : Sent whenever the binding mode changes
@ -1565,6 +1568,20 @@ The following change types are currently available:
} }
``` ```
## 0x80000001. OUTPUT
Sent whenever an output is added, removed, or its configuration is changed.
The event is a single object with the property _change_, which is a string
containing the reason for the change. Currently, the only value for _change_ is
_unspecified_.
*Example Event:*
```
{
"change": "unspecified"
}
```
## 0x80000002. MODE ## 0x80000002. MODE
Sent whenever the binding mode changes. The event consists of a single object Sent whenever the binding mode changes. The event consists of a single object