desktop-shell: add option to avoid creating the panel
This option is so we can disable showing any panel at all. The default
is to continue showing the panel and no example is added to weston.ini
because it's an uncommon request.
Tested-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c
index 73b2134..db4a1fd 100644
--- a/clients/desktop-shell.c
+++ b/clients/desktop-shell.c
@@ -1130,7 +1130,8 @@
output_destroy(struct output *output)
{
background_destroy(output->background);
- panel_destroy(output->panel);
+ if (output->panel)
+ panel_destroy(output->panel);
wl_output_destroy(output->output);
wl_list_remove(&output->link);
@@ -1160,7 +1161,8 @@
{
struct output *output = data;
- window_set_buffer_transform(output->panel->window, transform);
+ if (output->panel)
+ window_set_buffer_transform(output->panel->window, transform);
window_set_buffer_transform(output->background->window, transform);
}
@@ -1187,7 +1189,8 @@
{
struct output *output = data;
- window_set_buffer_scale(output->panel->window, scale);
+ if (output->panel)
+ window_set_buffer_scale(output->panel->window, scale);
window_set_buffer_scale(output->background->window, scale);
}
@@ -1198,15 +1201,36 @@
output_handle_scale
};
+static int
+want_panel(struct desktop *desktop)
+{
+ struct weston_config_section *s;
+ char *location = NULL;
+ int ret = 1;
+
+ s = weston_config_get_section(desktop->config, "shell", NULL, NULL);
+ weston_config_section_get_string(s, "panel-location",
+ &location, "top");
+
+ if (strcmp(location, "top") != 0)
+ ret = 0;
+
+ free(location);
+
+ return ret;
+}
+
static void
output_init(struct output *output, struct desktop *desktop)
{
struct wl_surface *surface;
- output->panel = panel_create(desktop);
- surface = window_get_wl_surface(output->panel->window);
- desktop_shell_set_panel(desktop->shell,
- output->output, surface);
+ if (want_panel(desktop)) {
+ output->panel = panel_create(desktop);
+ surface = window_get_wl_surface(output->panel->window);
+ desktop_shell_set_panel(desktop->shell,
+ output->output, surface);
+ }
output->background = background_create(desktop);
surface = window_get_wl_surface(output->background->window);