@ -356,7 +356,7 @@ static void handle_frame(struct wl_listener *listener, void *user_data) {
wlr_scene_output_for_each_buffer ( output - > scene_output , send_frame_done_iterator , & data ) ;
wlr_scene_output_for_each_buffer ( output - > scene_output , send_frame_done_iterator , & data ) ;
}
}
static void update_output_manager_config ( struct sway_server * server ) {
void update_output_manager_config ( struct sway_server * server ) {
struct wlr_output_configuration_v1 * config =
struct wlr_output_configuration_v1 * config =
wlr_output_configuration_v1_create ( ) ;
wlr_output_configuration_v1_create ( ) ;
@ -387,9 +387,6 @@ static int timer_modeset_handle(void *data) {
server - > delayed_modeset = NULL ;
server - > delayed_modeset = NULL ;
apply_all_output_configs ( ) ;
apply_all_output_configs ( ) ;
transaction_commit_dirty ( ) ;
update_output_manager_config ( server ) ;
return 0 ;
return 0 ;
}
}
@ -414,7 +411,6 @@ static void begin_destroy(struct sway_output *output) {
wl_list_remove ( & output - > layout_destroy . link ) ;
wl_list_remove ( & output - > layout_destroy . link ) ;
wl_list_remove ( & output - > destroy . link ) ;
wl_list_remove ( & output - > destroy . link ) ;
wl_list_remove ( & output - > commit . link ) ;
wl_list_remove ( & output - > present . link ) ;
wl_list_remove ( & output - > present . link ) ;
wl_list_remove ( & output - > frame . link ) ;
wl_list_remove ( & output - > frame . link ) ;
wl_list_remove ( & output - > request_state . link ) ;
wl_list_remove ( & output - > request_state . link ) ;
@ -437,26 +433,6 @@ static void handle_layout_destroy(struct wl_listener *listener, void *data) {
begin_destroy ( output ) ;
begin_destroy ( output ) ;
}
}
static void handle_commit ( struct wl_listener * listener , void * data ) {
struct sway_output * output = wl_container_of ( listener , output , commit ) ;
struct wlr_output_event_commit * event = data ;
if ( ! output - > enabled ) {
return ;
}
if ( event - > state - > committed & (
WLR_OUTPUT_STATE_MODE |
WLR_OUTPUT_STATE_TRANSFORM |
WLR_OUTPUT_STATE_SCALE ) ) {
arrange_layers ( output ) ;
arrange_output ( output ) ;
transaction_commit_dirty ( ) ;
update_output_manager_config ( output - > server ) ;
}
}
static void handle_present ( struct wl_listener * listener , void * data ) {
static void handle_present ( struct wl_listener * listener , void * data ) {
struct sway_output * output = wl_container_of ( listener , output , present ) ;
struct sway_output * output = wl_container_of ( listener , output , present ) ;
struct wlr_output_event_present * output_event = data ;
struct wlr_output_event_present * output_event = data ;
@ -473,7 +449,20 @@ static void handle_request_state(struct wl_listener *listener, void *data) {
struct sway_output * output =
struct sway_output * output =
wl_container_of ( listener , output , request_state ) ;
wl_container_of ( listener , output , request_state ) ;
const struct wlr_output_event_request_state * event = data ;
const struct wlr_output_event_request_state * event = data ;
uint32_t committed = event - > state - > committed ;
wlr_output_commit_state ( output - > wlr_output , event - > state ) ;
wlr_output_commit_state ( output - > wlr_output , event - > state ) ;
if ( committed & (
WLR_OUTPUT_STATE_MODE |
WLR_OUTPUT_STATE_TRANSFORM |
WLR_OUTPUT_STATE_SCALE ) ) {
arrange_layers ( output ) ;
arrange_output ( output ) ;
transaction_commit_dirty ( ) ;
update_output_manager_config ( output - > server ) ;
}
}
}
static unsigned int last_headless_num = 0 ;
static unsigned int last_headless_num = 0 ;
@ -537,8 +526,6 @@ void handle_new_output(struct wl_listener *listener, void *data) {
output - > layout_destroy . notify = handle_layout_destroy ;
output - > layout_destroy . notify = handle_layout_destroy ;
wl_signal_add ( & wlr_output - > events . destroy , & output - > destroy ) ;
wl_signal_add ( & wlr_output - > events . destroy , & output - > destroy ) ;
output - > destroy . notify = handle_destroy ;
output - > destroy . notify = handle_destroy ;
wl_signal_add ( & wlr_output - > events . commit , & output - > commit ) ;
output - > commit . notify = handle_commit ;
wl_signal_add ( & wlr_output - > events . present , & output - > present ) ;
wl_signal_add ( & wlr_output - > events . present , & output - > present ) ;
output - > present . notify = handle_present ;
output - > present . notify = handle_present ;
wl_signal_add ( & wlr_output - > events . frame , & output - > frame ) ;
wl_signal_add ( & wlr_output - > events . frame , & output - > frame ) ;