X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcompositor.c;h=b97ad794064b59f104727e64b115a4a2f6092abf;hb=refs%2Fchanges%2F04%2F28504%2F1;hp=634c468aa1e14853152d9b8a7b0e9ee1308b64e1;hpb=924473ef016ba8dcfa863861740be2289421313d;p=src%2Fagl-compositor.git diff --git a/src/compositor.c b/src/compositor.c index 634c468..b97ad79 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -87,7 +87,8 @@ handle_output_destroy(struct wl_listener *listener, void *data) output = wl_container_of(listener, output, output_destroy); assert(output->output == data); - if (output->fullscreen_view.fs->view) { + if (output->fullscreen_view.fs && + output->fullscreen_view.fs->view) { weston_surface_destroy(output->fullscreen_view.fs->view->surface); output->fullscreen_view.fs->view = NULL; } @@ -112,19 +113,19 @@ static void ivi_output_configure_app_id(struct ivi_output *ivi_output) { if (ivi_output->config) { - if (ivi_output->app_id != NULL) + if (ivi_output->app_ids != NULL) return; weston_config_section_get_string(ivi_output->config, "agl-shell-app-id", - &ivi_output->app_id, + &ivi_output->app_ids, NULL); - if (ivi_output->app_id == NULL) + if (ivi_output->app_ids == NULL) return; weston_log("Will place app_id %s on output %s\n", - ivi_output->app_id, ivi_output->name); + ivi_output->app_ids, ivi_output->name); } } @@ -487,8 +488,22 @@ head_disable(struct ivi_compositor *ivi, struct weston_head *head) weston_head_detach(head); if (count_heads(ivi_output->output) == 0) { - weston_output_disable(ivi_output->output); + if (ivi_output->output) { + /* ivi_output->output destruction may be deferred in + * some cases (see drm_output_destroy()), so we need to + * forcibly trigger the destruction callback now, or + * otherwise would later access data that we are about + * to free + */ + struct weston_output *save = ivi_output->output; + + handle_output_destroy(&ivi_output->output_destroy, save); + weston_output_destroy(save); + } } + wl_list_remove(&ivi_output->link); + free(ivi_output->app_ids); + free(ivi_output); } static struct weston_config_section * @@ -1266,11 +1281,12 @@ choose_default_backend(void) } static int -compositor_init_config(struct weston_compositor *compositor, - struct weston_config *config) +compositor_init_config(struct ivi_compositor *ivi) { struct xkb_rule_names xkb_names; struct weston_config_section *section; + struct weston_compositor *compositor = ivi->compositor; + struct weston_config *config = ivi->config; int repaint_msec; bool vt_switching; bool require_input; @@ -1303,6 +1319,11 @@ compositor_init_config(struct weston_compositor *compositor, /* agl-compositor.ini [core] */ section = weston_config_get_section(config, "core", NULL, NULL); + weston_config_section_get_bool(section, "disable-cursor", + &ivi->disable_cursor, false); + weston_config_section_get_bool(section, "activate-by-default", + &ivi->activate_by_default, true); + weston_config_section_get_bool(section, "require-input", &require_input, true); compositor->require_input = require_input; @@ -1719,11 +1740,6 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da if (!backend) backend = choose_default_backend(); } - /* from [core] */ - weston_config_section_get_bool(section, "hide-cursor", - &ivi.hide_cursor, false); - weston_config_section_get_bool(section, "activate-by-default", - &ivi.activate_by_default, true); display = wl_display_create(); loop = wl_display_get_event_loop(display); @@ -1765,7 +1781,7 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da goto error_signals; } - if (compositor_init_config(ivi.compositor, ivi.config) < 0) + if (compositor_init_config(&ivi) < 0) goto error_compositor; if (load_backend(&ivi, backend, &argc, argv) < 0) { @@ -1816,7 +1832,12 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da weston_compositor_wake(ivi.compositor); ivi_shell_create_global(&ivi); - ivi_launch_shell_client(&ivi); + + ivi_launch_shell_client(&ivi, "shell-client", + &ivi.shell_client.client); + ivi_launch_shell_client(&ivi, "shell-client-ext", + &ivi.shell_client_ext.client); + if (debug) ivi_screenshooter_create(&ivi); ivi_agl_systemd_notify(&ivi);