desktop-shell: add option to avoid creating the panel
[platform/upstream/weston.git] / clients / desktop-shell.c
index 73b2134..db4a1fd 100644 (file)
@@ -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);