mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-05-13 16:37:27 +00:00
Panel: fix height, exclusive zone flag, better helptext
This commit is contained in:
parent
00d67a6557
commit
2005069f90
6 changed files with 42 additions and 10 deletions
2
glfw/glfw3.h
vendored
2
glfw/glfw3.h
vendored
|
|
@ -1317,6 +1317,8 @@ typedef struct GLFWLayerShellConfig {
|
|||
unsigned requested_left_margin;
|
||||
unsigned requested_bottom_margin;
|
||||
unsigned requested_right_margin;
|
||||
int requested_exclusive_zone;
|
||||
unsigned override_exclusive_zone;
|
||||
void (*size_callback)(GLFWwindow *window, const struct GLFWLayerShellConfig *config, unsigned monitor_width, unsigned monitor_height, uint32_t *width, uint32_t *height);
|
||||
} GLFWLayerShellConfig;
|
||||
|
||||
|
|
|
|||
15
glfw/wl_window.c
vendored
15
glfw/wl_window.c
vendored
|
|
@ -964,7 +964,7 @@ find_output_by_name(const char* name) {
|
|||
static void
|
||||
layer_set_properties(_GLFWwindow *window) {
|
||||
enum zwlr_layer_surface_v1_anchor which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
|
||||
int exclusive_zone = -1;
|
||||
int exclusive_zone = window->wl.layer_shell.config.requested_exclusive_zone;
|
||||
enum zwlr_layer_surface_v1_keyboard_interactivity focus_policy = ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE;
|
||||
switch(window->wl.layer_shell.config.focus_policy) {
|
||||
case GLFW_FOCUS_NOT_ALLOWED: focus_policy = ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; break;
|
||||
|
|
@ -973,7 +973,8 @@ layer_set_properties(_GLFWwindow *window) {
|
|||
}
|
||||
int panel_width = 0, panel_height = 0;
|
||||
switch (window->wl.layer_shell.config.type) {
|
||||
case GLFW_LAYER_SHELL_BACKGROUND: break; case GLFW_LAYER_SHELL_NONE: break;
|
||||
case GLFW_LAYER_SHELL_NONE: break;
|
||||
case GLFW_LAYER_SHELL_BACKGROUND: exclusive_zone = -1; break;
|
||||
case GLFW_LAYER_SHELL_TOP:
|
||||
case GLFW_LAYER_SHELL_OVERLAY:
|
||||
case GLFW_LAYER_SHELL_PANEL:
|
||||
|
|
@ -981,27 +982,27 @@ layer_set_properties(_GLFWwindow *window) {
|
|||
case GLFW_EDGE_TOP:
|
||||
which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
|
||||
panel_height = window->wl.height;
|
||||
exclusive_zone = window->wl.height;
|
||||
if (!window->wl.layer_shell.config.override_exclusive_zone) exclusive_zone = window->wl.height;
|
||||
break;
|
||||
case GLFW_EDGE_BOTTOM:
|
||||
which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
|
||||
panel_height = window->wl.height;
|
||||
exclusive_zone = window->wl.height;
|
||||
if (!window->wl.layer_shell.config.override_exclusive_zone) exclusive_zone = window->wl.height;
|
||||
break;
|
||||
case GLFW_EDGE_LEFT:
|
||||
which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
|
||||
panel_width = window->wl.width;
|
||||
exclusive_zone = window->wl.width;
|
||||
if (!window->wl.layer_shell.config.override_exclusive_zone) exclusive_zone = window->wl.width;
|
||||
break;
|
||||
case GLFW_EDGE_RIGHT:
|
||||
which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;
|
||||
panel_width = window->wl.width;
|
||||
exclusive_zone = window->wl.width;
|
||||
if (!window->wl.layer_shell.config.override_exclusive_zone) exclusive_zone = window->wl.width;
|
||||
break;
|
||||
case GLFW_EDGE_NONE:
|
||||
which_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM; // None is anchored to "top left"
|
||||
panel_width = window->wl.width;
|
||||
panel_width = window->wl.height;
|
||||
panel_height = window->wl.height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,24 +44,28 @@ The number of columns shown in the panel. Ignored for background and horizontal
|
|||
type=int
|
||||
default=0
|
||||
Request a given top margin to the compositor.
|
||||
Only works on a Wayland compositor that supports the wlr layer shell protocol.
|
||||
|
||||
|
||||
--margin-left
|
||||
type=int
|
||||
default=0
|
||||
Request a given left margin to the compositor.
|
||||
Only works on a Wayland compositor that supports the wlr layer shell protocol.
|
||||
|
||||
|
||||
--margin-bottom
|
||||
type=int
|
||||
default=0
|
||||
Request a given bottom margin to the compositor.
|
||||
Only works on a Wayland compositor that supports the wlr layer shell protocol.
|
||||
|
||||
|
||||
--margin-right
|
||||
type=int
|
||||
default=0
|
||||
Request a given right margin to the compositor.
|
||||
Only works on a Wayland compositor that supports the wlr layer shell protocol.
|
||||
|
||||
|
||||
--edge
|
||||
|
|
@ -72,14 +76,15 @@ Which edge of the screen to place the panel on. Note that some window managers
|
|||
The value :code:`background` means make the panel the "desktop wallpaper". This
|
||||
is only supported on Wayland, not X11 and note that when using sway if you set
|
||||
a background in your sway config it will cover the background drawn using this
|
||||
kitten. The value :code:`none` allow free placement of the window
|
||||
when combined with explicit margin parameters.
|
||||
kitten.
|
||||
The value :code:`none` anchors the panel to the top left corner by default
|
||||
and the panel should be placed using margins parameters.
|
||||
|
||||
|
||||
--layer
|
||||
choices=background,bottom,top,overlay
|
||||
default=bottom
|
||||
On a compositor that supports the wlr layer shell protocol, specifies the layer
|
||||
On a Wayland compositor that supports the wlr layer shell protocol, specifies the layer
|
||||
on which the panel should be drawn. This parameter is ignored and set to
|
||||
:code:`background` if :option:`--edge` is set to :code:`background`.
|
||||
|
||||
|
|
@ -120,6 +125,22 @@ On a Wayland compositor that supports the wlr layer shell protocol, specify the
|
|||
interactivity with the panel. Please refer to the wlr layer shell protocol documentation for more details.
|
||||
|
||||
|
||||
--exclusive-zone
|
||||
type=int
|
||||
default=-1
|
||||
On a Wayland compositor that supports the wlr layer shell protocol, request a given exclusive zone for the panel.
|
||||
Please refer to the wlr layer shell documentation for more details on the meaning of exclusive and its value.
|
||||
If :option:`--edge` is set to anything else than :code:`none`, this flag will not have any effect unless
|
||||
the flag :option:`--override-exclusive-zone` is also set.
|
||||
If :option:`--edge` is set to :code:`background`, this option has no effect.
|
||||
|
||||
|
||||
--override-exclusive-zone
|
||||
type=bool-set
|
||||
On a Wayland compositor that supports the wlr layer shell protocol, override the default exclusive zone.
|
||||
This has effect only if :option:`--edge` is set to :code:`top`, :code:`left`, :code:`bottom` or :code:`right`.
|
||||
|
||||
|
||||
--debug-rendering
|
||||
type=bool-set
|
||||
For internal debugging use.
|
||||
|
|
@ -218,6 +239,8 @@ def layer_shell_config(opts: PanelCLIOptions) -> LayerShellConfig:
|
|||
requested_bottom_margin=max(0, opts.margin_bottom),
|
||||
requested_right_margin=max(0, opts.margin_right),
|
||||
focus_policy=focus_policy,
|
||||
requested_exclusive_zone=opts.exclusive_zone,
|
||||
override_exclusive_zone=opts.override_exclusive_zone,
|
||||
output_name=opts.output_name or '')
|
||||
|
||||
|
||||
|
|
|
|||
2
kitty/glfw-wrapper.h
generated
2
kitty/glfw-wrapper.h
generated
|
|
@ -1055,6 +1055,8 @@ typedef struct GLFWLayerShellConfig {
|
|||
unsigned requested_left_margin;
|
||||
unsigned requested_bottom_margin;
|
||||
unsigned requested_right_margin;
|
||||
int requested_exclusive_zone;
|
||||
unsigned override_exclusive_zone;
|
||||
void (*size_callback)(GLFWwindow *window, const struct GLFWLayerShellConfig *config, unsigned monitor_width, unsigned monitor_height, uint32_t *width, uint32_t *height);
|
||||
} GLFWLayerShellConfig;
|
||||
|
||||
|
|
|
|||
|
|
@ -1094,6 +1094,8 @@ translate_layer_shell_config(PyObject *p, GLFWLayerShellConfig *ans) {
|
|||
A(requested_left_margin, PyLong_Check, PyLong_AsLong);
|
||||
A(requested_bottom_margin, PyLong_Check, PyLong_AsLong);
|
||||
A(requested_right_margin, PyLong_Check, PyLong_AsLong);
|
||||
A(requested_exclusive_zone, PyLong_Check, PyLong_AsLong);
|
||||
A(override_exclusive_zone, PyBool_Check, PyLong_AsLong);
|
||||
#undef A
|
||||
#define A(attr) { \
|
||||
RAII_PyObject(attr, PyObject_GetAttrString(p, #attr)); if (attr == NULL) return false; \
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ class LayerShellConfig(NamedTuple):
|
|||
requested_left_margin: int = 0
|
||||
requested_bottom_margin: int = 0
|
||||
requested_right_margin: int = 0
|
||||
requested_exclusive_zone: int = -1
|
||||
override_exclusive_zone: bool = False
|
||||
|
||||
|
||||
def mod_to_names(mods: int, has_kitty_mod: bool = False, kitty_mod: int = 0) -> Iterator[str]:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue