diff --git a/kitty/screen.c b/kitty/screen.c index 0c042e29b..7cbd16a0e 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -2714,15 +2714,21 @@ screen_xtversion(Screen *self, unsigned int mode) { } void -screen_report_size(Screen *self, unsigned int which) { +screen_report_size(Screen *self, unsigned which, unsigned modifier) { char buf[32] = {0}; - unsigned int code = 0; - unsigned int width = 0, height = 0; + unsigned code = 0, width = 0, height = 0; switch(which) { case 14: code = 4; width = self->cell_size.width * self->columns; height = self->cell_size.height * self->lines; + if (modifier == 2 && self->window_id) { + OSWindow *osw = os_window_for_kitty_window(self->window_id); + if (osw) { + int w, h, fw, fh; get_os_window_size(osw, &w, &h, &fw, &fh); + width = fw; height = fh; + } + } break; case 16: code = 6; diff --git a/kitty/screen.h b/kitty/screen.h index a81c537fe..cdd450b9d 100644 --- a/kitty/screen.h +++ b/kitty/screen.h @@ -291,7 +291,7 @@ bool screen_set_last_visited_prompt(Screen*, index_type); bool screen_select_cmd_output(Screen*, index_type); void screen_dirty_sprite_positions(Screen *self); void screen_rescale_images(Screen *self); -void screen_report_size(Screen *, unsigned int which); +void screen_report_size(Screen *, unsigned which, unsigned modifier); void screen_manipulate_title_stack(Screen *, unsigned int op, unsigned int which); bool screen_is_overlay_active(Screen *self); void screen_update_overlay_text(Screen *self, const char *utf8_text); diff --git a/kitty/vt-parser.c b/kitty/vt-parser.c index a2d308b1c..144c74c08 100644 --- a/kitty/vt-parser.c +++ b/kitty/vt-parser.c @@ -1286,7 +1286,7 @@ dispatch_csi(PS *self) { case 14: case 16: case 18: - CALL_CSI_HANDLER1(screen_report_size, 0); + CALL_CSI_HANDLER2(screen_report_size, 0, 0); break; case 22: case 23: