terminal: Only add the new size to the title when we're resizing

Add a new state_changed_handler callback to the window to know when the
window has changed state; the terminal will use this to know when the
window started and ended its resize operation, and modify the terminal's
titlebar accordingly.
dev
Jasper St. Pierre 11 years ago committed by Kristian Høgsberg
parent 5befdda84f
commit de6809912e
  1. 38
      clients/terminal.c
  2. 17
      clients/window.c
  3. 8
      clients/window.h

@ -833,13 +833,27 @@ terminal_resize_cells(struct terminal *terminal,
ioctl(terminal->master, TIOCSWINSZ, &ws);
}
static void
update_title(struct terminal *terminal)
{
if (window_is_resizing(terminal->window)) {
char *p;
if (asprintf(&p, "%s — [%dx%d]", terminal->title, terminal->width, terminal->height) > 0) {
window_set_title(terminal->window, p);
free(p);
}
} else {
window_set_title(terminal->window, terminal->title);
}
}
static void
resize_handler(struct widget *widget,
int32_t width, int32_t height, void *data)
{
struct terminal *terminal = data;
int32_t columns, rows, m;
char *p;
m = 2 * terminal->margin;
columns = (width - m) / (int32_t) terminal->average_width;
rows = (height - m) / (int32_t) terminal->extents.height;
@ -849,14 +863,17 @@ resize_handler(struct widget *widget,
width = columns * terminal->average_width + m;
height = rows * terminal->extents.height + m;
widget_set_size(terminal->widget, width, height);
if (asprintf(&p, "%s — [%dx%d]", terminal->title, columns, rows) > 0) {
window_set_title(terminal->window, p);
terminal->size_in_title = 1;
free(p);
}
}
terminal_resize_cells(terminal, columns, rows);
update_title(terminal);
}
static void
state_changed_handler(struct window *window, void *data)
{
struct terminal *terminal = data;
update_title(terminal);
}
static void
@ -2745,14 +2762,6 @@ static int
enter_handler(struct widget *widget,
struct input *input, float x, float y, void *data)
{
struct terminal *terminal = data;
/* Reset title to get rid of resizing '[WxH]' in titlebar */
if (terminal->size_in_title) {
window_set_title(terminal->window, terminal->title);
terminal->size_in_title = 0;
}
return CURSOR_IBEAM;
}
@ -2860,6 +2869,7 @@ terminal_create(struct display *display)
window_set_fullscreen_handler(terminal->window, fullscreen_handler);
window_set_output_handler(terminal->window, output_handler);
window_set_close_handler(terminal->window, close_handler);
window_set_state_changed_handler(terminal->window, state_changed_handler);
window_set_data_handler(terminal->window, data_handler);
window_set_drop_handler(terminal->window, drop_handler);

@ -241,6 +241,7 @@ struct window {
window_close_handler_t close_handler;
window_fullscreen_handler_t fullscreen_handler;
window_output_handler_t output_handler;
window_state_changed_handler_t state_changed_handler;
struct surface *main_surface;
struct xdg_surface *xdg_surface;
@ -3887,6 +3888,9 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface,
}
window->next_attach_serial = serial;
if (window->state_changed_handler)
window->state_changed_handler(window, window->user_data);
}
static void
@ -4178,6 +4182,12 @@ window_set_maximized(struct window *window, int maximized)
xdg_surface_unset_maximized(window->xdg_surface);
}
int
window_is_resizing(struct window *window)
{
return window->resizing;
}
void
window_set_minimized(struct window *window)
{
@ -4246,6 +4256,13 @@ window_set_output_handler(struct window *window,
window->output_handler = handler;
}
void
window_set_state_changed_handler(struct window *window,
window_state_changed_handler_t handler)
{
window->state_changed_handler = handler;
}
void
window_set_title(struct window *window, const char *title)
{

@ -219,6 +219,8 @@ typedef void (*window_fullscreen_handler_t)(struct window *window, void *data);
typedef void (*window_output_handler_t)(struct window *window, struct output *output,
int enter, void *data);
typedef void (*window_state_changed_handler_t)(struct window *window,
void *data);
typedef void (*widget_resize_handler_t)(struct widget *widget,
int32_t width, int32_t height,
@ -381,6 +383,9 @@ window_is_maximized(struct window *window);
void
window_set_maximized(struct window *window, int maximized);
int
window_is_resizing(struct window *window);
void
window_set_minimized(struct window *window);
@ -415,6 +420,9 @@ window_set_fullscreen_handler(struct window *window,
void
window_set_output_handler(struct window *window,
window_output_handler_t handler);
void
window_set_state_changed_handler(struct window *window,
window_state_changed_handler_t handler);
void
window_set_title(struct window *window, const char *title);

Loading…
Cancel
Save