summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2014-08-04 13:07:24 +0200
committerJonny Lamb <jonny.lamb@collabora.co.uk>2014-08-04 13:07:24 +0200
commit1a494e3536e99661487cdfbb29b2c4c3d15851c1 (patch)
treed90f2130facf403a286aa8844343fea43c89165e
parent7b9820766735f3b5184e9795d7945dcdd784a827 (diff)
desktop-shell: don't create panel if we don't have panel-location=topno-panel
This option is so we can disable showing any panel at all using, for example, panel-location=none in the 'shell' section. The default is to continue showing the panel and no option is added to weston.ini as it's an uncommon request.
-rw-r--r--clients/desktop-shell.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c
index 73b21346..db4a1fd7 100644
--- a/clients/desktop-shell.c
+++ b/clients/desktop-shell.c
@@ -1130,7 +1130,8 @@ static void
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 @@ output_handle_geometry(void *data,
{
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 @@ output_handle_scale(void *data,
{
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 @@ static const struct wl_output_listener output_listener = {
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);