X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcompositor.c;h=d81fc16cbad9956cefe0846f290d4f9b828aba41;hb=17f92b23b99d6c34793b6b636dc4d508113f0489;hp=fd5f5a6f797f8a37a823e947ba8d731714db8fe9;hpb=26c37c4140ce5739d646c104f1e378b2c5d8ec27;p=src%2Fagl-compositor.git diff --git a/src/compositor.c b/src/compositor.c index fd5f5a6..d81fc16 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -301,14 +301,14 @@ static int parse_transform(const char *transform, uint32_t *out) { static const struct { const char *name; uint32_t token; } transforms[] = { - { "normal", WL_OUTPUT_TRANSFORM_NORMAL }, - { "90", WL_OUTPUT_TRANSFORM_90 }, - { "180", WL_OUTPUT_TRANSFORM_180 }, - { "270", WL_OUTPUT_TRANSFORM_270 }, - { "flipped", WL_OUTPUT_TRANSFORM_FLIPPED }, - { "flipped-90", WL_OUTPUT_TRANSFORM_FLIPPED_90 }, - { "flipped-180", WL_OUTPUT_TRANSFORM_FLIPPED_180 }, - { "flipped-270", WL_OUTPUT_TRANSFORM_FLIPPED_270 }, + { "normal", WL_OUTPUT_TRANSFORM_NORMAL }, + { "rotate-90", WL_OUTPUT_TRANSFORM_90 }, + { "rotate-180", WL_OUTPUT_TRANSFORM_180 }, + { "rotate-270", WL_OUTPUT_TRANSFORM_270 }, + { "flipped", WL_OUTPUT_TRANSFORM_FLIPPED }, + { "flipped-rotate-90", WL_OUTPUT_TRANSFORM_FLIPPED_90 }, + { "flipped-rotate-180", WL_OUTPUT_TRANSFORM_FLIPPED_180 }, + { "flipped-rotate-270", WL_OUTPUT_TRANSFORM_FLIPPED_270 }, }; for (size_t i = 0; i < ARRAY_LENGTH(transforms); i++) @@ -321,6 +321,23 @@ parse_transform(const char *transform, uint32_t *out) return -1; } +static int +parse_activation_area(const char *geometry, struct ivi_output *output) +{ + int n; + unsigned width, height, x, y; + + n = sscanf(geometry, "%ux%u+%u,%u", &width, &height, &x, &y); + if (n != 4) { + return -1; + } + output->area_activation.width = width; + output->area_activation.height = height; + output->area_activation.x = x; + output->area_activation.y = y; + return 0; +} + static int configure_output(struct ivi_output *output) { @@ -344,6 +361,10 @@ configure_output(struct ivi_output *output) if (parse_transform(t, &transform) < 0) weston_log("Invalid transform \"%s\" for output %s\n", t, output->name); + weston_config_section_get_string(section, "activation-area", &t, ""); + if (parse_activation_area(t, output) < 0) + weston_log("Invalid activation-area \"%s\" for output %s\n", + t, output->name); free(t); } @@ -876,14 +897,15 @@ load_drm_backend(struct ivi_compositor *ivi, int *argc, char *argv[]) int use_current_mode = 0; int use_pixman = 0; bool use_shadow; + bool without_input = false; int ret; const struct weston_option options[] = { { WESTON_OPTION_STRING, "seat", 0, &config.seat_id }, - { WESTON_OPTION_INTEGER, "tty", 0, &config.tty }, { WESTON_OPTION_STRING, "drm-device", 0, &config.specific_device }, { WESTON_OPTION_BOOLEAN, "current-mode", 0, &use_current_mode }, { WESTON_OPTION_BOOLEAN, "use-pixman", 0, &use_pixman }, + { WESTON_OPTION_BOOLEAN, "continue-without-input", false, &without_input } }; parse_options(options, ARRAY_LENGTH(options), argc, argv); @@ -898,6 +920,9 @@ load_drm_backend(struct ivi_compositor *ivi, int *argc, char *argv[]) weston_config_section_get_bool(section, "pixman-shadow", &use_shadow, 1); config.use_pixman_shadow = use_shadow; + if (without_input) + ivi->compositor->require_input = !without_input; + ret = weston_compositor_load_backend(ivi->compositor, WESTON_BACKEND_DRM, &config.base); if (ret < 0) @@ -1303,18 +1328,25 @@ to_ivi_surface(struct weston_surface *surface) static void activate_binding(struct weston_seat *seat, - struct weston_view *focus_view) + struct weston_view *focus_view, uint32_t flags) { - struct weston_surface *focus = focus_view->surface; - struct weston_surface *main_surface = - weston_surface_get_main_surface(focus); - struct ivi_surface *surface; + struct weston_surface *focus_surface; + struct weston_surface *main_surface; + struct ivi_surface *ivi_surface; + struct ivi_shell_seat *ivi_seat = get_ivi_shell_seat(seat); + + if (!focus_view) + return; + + focus_surface = focus_view->surface; + main_surface = weston_surface_get_main_surface(focus_surface); - surface = to_ivi_surface(main_surface); - if (!surface) + ivi_surface = to_ivi_surface(main_surface); + if (!ivi_surface) return; - weston_seat_set_keyboard_focus(seat, focus); + if (ivi_seat) + ivi_shell_activate_surface(ivi_surface, ivi_seat, flags); } static void @@ -1327,7 +1359,8 @@ click_to_activate_binding(struct weston_pointer *pointer, if (pointer->focus == NULL) return; - activate_binding(pointer->seat, pointer->focus); + activate_binding(pointer->seat, pointer->focus, + WESTON_ACTIVATE_FLAG_CLICKED); } static void @@ -1340,7 +1373,8 @@ touch_to_activate_binding(struct weston_touch *touch, if (touch->focus == NULL) return; - activate_binding(touch->seat, touch->focus); + activate_binding(touch->seat, touch->focus, + WESTON_ACTIVATE_FLAG_NONE); } static void @@ -1589,7 +1623,7 @@ copy_command_line(int argc, char * const argv[]) } WL_EXPORT -int wet_main(int argc, char *argv[]) +int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_data) { struct ivi_compositor ivi = { 0 }; char *cmdline; @@ -1645,18 +1679,19 @@ int wet_main(int argc, char *argv[]) if (version) { printf(PACKAGE_STRING "\n"); - return EXIT_SUCCESS; + ret = EXIT_SUCCESS; + goto exit_signals; } - log_ctx = weston_log_ctx_compositor_create(); + log_ctx = weston_log_ctx_create(); if (!log_ctx) { fprintf(stderr, "Failed to initialize weston debug framework.\n"); - return ret; + goto exit_signals; } - log_scope = weston_compositor_add_log_scope(log_ctx, "log", - "agl-compositor log\n", - NULL, NULL, NULL); + log_scope = weston_log_ctx_add_log_scope(log_ctx, "log", + "agl-compositor log\n", + NULL, NULL, NULL); log_file_open(log); weston_log_set_handler(vlog, vlog_continue); @@ -1677,8 +1712,10 @@ int wet_main(int argc, char *argv[]) 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); + 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); @@ -1699,7 +1736,7 @@ int wet_main(int argc, char *argv[]) if (!signals[i]) goto error_signals; - ivi.compositor = weston_compositor_create(display, log_ctx, &ivi); + ivi.compositor = weston_compositor_create(display, log_ctx, &ivi, test_data); if (!ivi.compositor) { weston_log("fatal: failed to create compositor.\n"); goto error_signals; @@ -1773,15 +1810,13 @@ error_compositor: free(modules); modules = NULL; - weston_compositor_tear_down(ivi.compositor); + weston_compositor_destroy(ivi.compositor); - weston_compositor_log_scope_destroy(log_scope); + weston_log_scope_destroy(log_scope); log_scope = NULL; - weston_log_ctx_compositor_destroy(ivi.compositor); - weston_compositor_destroy(ivi.compositor); - - weston_log_subscriber_destroy_log(logger); + weston_log_subscriber_destroy(logger); + weston_log_ctx_destroy(log_ctx); ivi_policy_destroy(ivi.policy); @@ -1796,5 +1831,10 @@ error_signals: if (ivi.config) weston_config_destroy(ivi.config); +exit_signals: + free(log); + free(config_file); + free(socket_name); + free(option_modules); return ret; }