Implement title_format

This implements the title_format command, with a new placeholder %shell
which gets substituted with the view type (xwayland, xdg_shell_v6 or
wl_shell).

Example config:

    for_window [title=".*"] title_format %title (class=%class instance=%instance shell=%shell)
This commit is contained in:
Ryan Dwyer 2018-05-05 12:36:50 +10:00
parent 8dae168b77
commit 228c478e8d
10 changed files with 201 additions and 42 deletions

View file

@ -144,6 +144,7 @@ sway_cmd cmd_splitt;
sway_cmd cmd_splitv;
sway_cmd cmd_sticky;
sway_cmd cmd_swaybg_command;
sway_cmd cmd_title_format;
sway_cmd cmd_unmark;
sway_cmd cmd_workspace;
sway_cmd cmd_ws_auto_back_and_forth;

View file

@ -63,7 +63,8 @@ struct sway_container {
*/
size_t id;
char *name;
char *name; // The view's title (unformatted)
char *formatted_title; // The title displayed in the title bar
enum sway_container_type type;
enum sway_container_layout layout;
@ -204,7 +205,6 @@ void container_update_title_textures(struct sway_container *container);
*/
void container_calculate_title_height(struct sway_container *container);
void container_update_title(struct sway_container *container,
const char *new_title);
void container_notify_child_title_changed(struct sway_container *container);
#endif

View file

@ -48,6 +48,7 @@ struct sway_view {
bool is_fullscreen;
char *title_format;
enum sway_container_border border;
int border_thickness;
@ -164,6 +165,8 @@ const char *view_get_class(struct sway_view *view);
const char *view_get_instance(struct sway_view *view);
const char *view_get_type(struct sway_view *view);
void view_configure(struct sway_view *view, double ox, double oy, int width,
int height);
@ -207,4 +210,11 @@ void view_child_init(struct sway_view_child *child,
void view_child_destroy(struct sway_view_child *child);
/**
* Re-read the view's title property and update any relevant title bars.
* The force argument makes it recreate the title bars even if the title hasn't
* changed.
*/
void view_update_title(struct sway_view *view, bool force);
#endif