mirror of
https://github.com/swaywm/sway.git
synced 2026-04-27 06:46:25 -04:00
Initial IPC_EVENT_OUTPUT support
This commit is contained in:
parent
4b892a79aa
commit
50f82f19b0
4 changed files with 32 additions and 6 deletions
|
|
@ -13,6 +13,7 @@ struct sockaddr_un *ipc_user_sockaddr(void);
|
|||
|
||||
void ipc_event_workspace(struct sway_workspace *old,
|
||||
struct sway_workspace *new, const char *change);
|
||||
void ipc_event_output(struct sway_output *output, const char *change);
|
||||
void ipc_event_window(struct sway_container *window, const char *change);
|
||||
void ipc_event_barconfig_update(struct bar_config *bar);
|
||||
void ipc_event_bar_state_update(struct bar_config *bar);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include "sway/desktop/transaction.h"
|
||||
#include "sway/input/input-manager.h"
|
||||
#include "sway/input/seat.h"
|
||||
#include "sway/ipc-server.h"
|
||||
#include "sway/layers.h"
|
||||
#include "sway/output.h"
|
||||
#include "sway/server.h"
|
||||
|
|
@ -29,7 +30,8 @@
|
|||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
|
||||
struct sway_output *output_by_name_or_id(const char *name_or_id) {
|
||||
struct sway_output *
|
||||
output_by_name_or_id(const char *name_or_id) {
|
||||
for (int i = 0; i < root->outputs->length; ++i) {
|
||||
struct sway_output *output = root->outputs->items[i];
|
||||
char identifier[128];
|
||||
|
|
@ -516,6 +518,7 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
|
|||
if (output->enabled) {
|
||||
output_disable(output);
|
||||
}
|
||||
ipc_event_output(output, "destroy");
|
||||
output_begin_destroy(output);
|
||||
|
||||
wl_list_remove(&output->destroy.link);
|
||||
|
|
@ -550,6 +553,7 @@ static void handle_mode(struct wl_listener *listener, void *data) {
|
|||
arrange_layers(output);
|
||||
arrange_output(output);
|
||||
transaction_commit_dirty();
|
||||
|
||||
}
|
||||
|
||||
static void handle_transform(struct wl_listener *listener, void *data) {
|
||||
|
|
@ -640,4 +644,5 @@ void handle_new_output(struct wl_listener *listener, void *data) {
|
|||
}
|
||||
|
||||
transaction_commit_dirty();
|
||||
ipc_event_output(output, "new");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,11 +198,12 @@ static void ipc_json_describe_output(struct sway_output *output,
|
|||
ipc_json_output_transform_description(wlr_output->transform)));
|
||||
|
||||
struct sway_workspace *ws = output_get_active_workspace(output);
|
||||
if (!sway_assert(ws, "Expected output to have a workspace")) {
|
||||
return;
|
||||
}
|
||||
if (ws == NULL) {
|
||||
json_object_object_add(object, "current_workspace", NULL);
|
||||
} else {
|
||||
json_object_object_add(object, "current_workspace",
|
||||
json_object_new_string(ws->name));
|
||||
}
|
||||
|
||||
json_object *modes_array = json_object_new_array();
|
||||
struct wlr_output_mode *mode;
|
||||
|
|
|
|||
|
|
@ -289,6 +289,22 @@ static void ipc_send_event(const char *json_string, enum ipc_command_type event)
|
|||
}
|
||||
}
|
||||
|
||||
void ipc_event_output(struct sway_output *old,
|
||||
const char *change) {
|
||||
if (!ipc_has_event_listeners(IPC_EVENT_OUTPUT)) {
|
||||
return;
|
||||
}
|
||||
sway_log(SWAY_DEBUG, "Sending output::%s event", change);
|
||||
json_object *obj = json_object_new_object();
|
||||
json_object_object_add(obj, "change", json_object_new_string(change));
|
||||
json_object_object_add(
|
||||
obj, "container", ipc_json_describe_node(&old->node));
|
||||
|
||||
const char *json_string = json_object_to_json_string(obj);
|
||||
ipc_send_event(json_string, IPC_EVENT_OUTPUT);
|
||||
json_object_put(obj);
|
||||
}
|
||||
|
||||
void ipc_event_workspace(struct sway_workspace *old,
|
||||
struct sway_workspace *new, const char *change) {
|
||||
if (!ipc_has_event_listeners(IPC_EVENT_WORKSPACE)) {
|
||||
|
|
@ -705,11 +721,14 @@ void ipc_client_handle_command(struct ipc_client *client) {
|
|||
} else if (strcmp(event_type, "tick") == 0) {
|
||||
client->subscribed_events |= event_mask(IPC_EVENT_TICK);
|
||||
is_tick = true;
|
||||
} else if (strcmp(event_type, "output") == 0) {
|
||||
client->subscribed_events |= event_mask(IPC_EVENT_OUTPUT);
|
||||
} else {
|
||||
const char msg[] = "{\"success\": false}";
|
||||
client_valid = ipc_send_reply(client, msg, strlen(msg));
|
||||
json_object_put(request);
|
||||
sway_log(SWAY_INFO, "Unsupported event type in subscribe request");
|
||||
sway_log(SWAY_INFO,
|
||||
"Unsupported event type in subscribe request");
|
||||
goto exit_cleanup;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue