diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2014-08-04 13:07:24 +0200 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2014-08-04 13:07:24 +0200 |
commit | 1a494e3536e99661487cdfbb29b2c4c3d15851c1 (patch) | |
tree | d90f2130facf403a286aa8844343fea43c89165e | |
parent | 7b9820766735f3b5184e9795d7945dcdd784a827 (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.c | 38 |
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); |