mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
conf: csd.preferred can now be set to ‘none’
When csd.preferred == none, we will request CSDs from the compositor, but internally render as if we are using SSDs. That is, we don’t render any window decorations at all. Note that some compositors may ignore our request to use CSDs, and still render SSDs for us. Closes #163
This commit is contained in:
parent
e54adbfa7c
commit
6ff97128fc
5 changed files with 46 additions and 20 deletions
|
|
@ -39,6 +39,9 @@
|
|||
from `1.0` to `3.0`.
|
||||
* `shift`+`insert` now pastes from the primary selection by
|
||||
default. This is in addition to middle-clicking with the mouse.
|
||||
* **csd.preferred** can now be set to `none` to disable window
|
||||
decorations. Note that some compositors will render SSDs despite
|
||||
this option being used (https://codeberg.org/dnkl/foot/issues/163).
|
||||
|
||||
|
||||
### Deprecated
|
||||
|
|
|
|||
6
config.c
6
config.c
|
|
@ -813,8 +813,12 @@ parse_section_csd(const char *key, const char *value, struct config *conf,
|
|||
conf->csd.preferred = CONF_CSD_PREFER_SERVER;
|
||||
else if (strcmp(value, "client") == 0)
|
||||
conf->csd.preferred = CONF_CSD_PREFER_CLIENT;
|
||||
else if (strcmp(value, "none") == 0)
|
||||
conf->csd.preferred = CONF_CSD_PREFER_NONE;
|
||||
else {
|
||||
LOG_AND_NOTIFY_ERR("%s:%d: csd.preferred: expected either 'server' or 'client'", path, lineno);
|
||||
LOG_AND_NOTIFY_ERR(
|
||||
"%s:%d: csd.preferred: expected either "
|
||||
"'server', 'client' or 'none'", path, lineno);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
config.h
2
config.h
|
|
@ -140,7 +140,7 @@ struct config {
|
|||
} bindings;
|
||||
|
||||
struct {
|
||||
enum { CONF_CSD_PREFER_SERVER, CONF_CSD_PREFER_CLIENT } preferred;
|
||||
enum { CONF_CSD_PREFER_NONE, CONF_CSD_PREFER_SERVER, CONF_CSD_PREFER_CLIENT } preferred;
|
||||
|
||||
int title_height;
|
||||
int border_width;
|
||||
|
|
|
|||
|
|
@ -238,10 +238,19 @@ values here are in AARRGGBB format. I.e. they contain an alpha
|
|||
component.
|
||||
|
||||
*preferred*
|
||||
Which type of window decorations to prefer: *client* (CSD) or
|
||||
*server* (SSD). Note that this is only a hint to the
|
||||
compositor. Depending on the compositor's configuration and
|
||||
capabilities, it may not have any effect. Default: _server_.
|
||||
Which type of window decorations to prefer: *client* (CSD),
|
||||
*server* (SSD) or *none*.
|
||||
|
||||
Note that this is only a hint to the compositor. Depending on
|
||||
compositor support, and how it has been configured, it may
|
||||
instruct foot to use CSDs even though this option has been set to
|
||||
*client*, or to use SSDs even though CSDs were requested.
|
||||
|
||||
The exception is *none*. In this mode, foot will technically
|
||||
request CSDs from the compositor, but will not actually render any
|
||||
window decorations at all, regardless of the compositors response.
|
||||
|
||||
Default: _server_.
|
||||
|
||||
*size*
|
||||
Height, in pixels (subject to output scaling), of the
|
||||
|
|
|
|||
38
wayland.c
38
wayland.c
|
|
@ -635,22 +635,29 @@ xdg_toplevel_decoration_configure(void *data,
|
|||
{
|
||||
struct wl_window *win = data;
|
||||
|
||||
switch (mode) {
|
||||
case ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE:
|
||||
LOG_INFO("using CSD decorations");
|
||||
win->use_csd = CSD_YES;
|
||||
csd_instantiate(win);
|
||||
break;
|
||||
|
||||
case ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE:
|
||||
LOG_INFO("using SSD decorations");
|
||||
if (win->term->conf->csd.preferred == CONF_CSD_PREFER_NONE) {
|
||||
/* User explicitly disabled window decorations */
|
||||
LOG_INFO("window decorations disabled");
|
||||
win->use_csd = CSD_NO;
|
||||
csd_destroy(win);
|
||||
break;
|
||||
} else {
|
||||
switch (mode) {
|
||||
case ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE:
|
||||
LOG_INFO("using CSD decorations");
|
||||
win->use_csd = CSD_YES;
|
||||
csd_instantiate(win);
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: unknown XDG toplevel decoration mode: %u", mode);
|
||||
break;
|
||||
case ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE:
|
||||
LOG_INFO("using SSD decorations");
|
||||
win->use_csd = CSD_NO;
|
||||
csd_destroy(win);
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: unknown XDG toplevel decoration mode: %u", mode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (win->is_configured && win->use_csd == CSD_YES) {
|
||||
|
|
@ -1184,7 +1191,6 @@ wayl_win_init(struct terminal *term)
|
|||
|
||||
xdg_toplevel_set_app_id(win->xdg_toplevel, conf->app_id);
|
||||
|
||||
/* Request server-side decorations */
|
||||
if (wayl->xdg_decoration_manager != NULL) {
|
||||
win->xdg_toplevel_decoration = zxdg_decoration_manager_v1_get_toplevel_decoration(
|
||||
wayl->xdg_decoration_manager, win->xdg_toplevel);
|
||||
|
|
@ -1200,6 +1206,10 @@ wayl_win_init(struct terminal *term)
|
|||
|
||||
zxdg_toplevel_decoration_v1_add_listener(
|
||||
win->xdg_toplevel_decoration, &xdg_toplevel_decoration_listener, win);
|
||||
} else if (conf->csd.preferred == CONF_CSD_PREFER_NONE) {
|
||||
/* No decoration manager - and user specifically do *not* want CSDs */
|
||||
win->use_csd = CSD_NO;
|
||||
LOG_INFO("no decoration manager available - user has disabled CSDs");
|
||||
} else {
|
||||
/* No decoration manager - thus we *must* draw our own decorations */
|
||||
win->use_csd = CSD_YES;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue