libweston: Don't move outputs during enable
This is pretty counter-intuitive, and should probably happen outside of the core in the front end while configuring the outputs. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
committed by
Daniel Stone
parent
3b3fdc52c3
commit
8409b74ec2
@@ -1707,6 +1707,38 @@ wet_head_tracker_create(struct wet_compositor *compositor,
|
|||||||
weston_head_add_destroy_listener(head, &track->head_destroy_listener);
|
weston_head_add_destroy_listener(head, &track->head_destroy_listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Place output exactly to the right of the most recently enabled output.
|
||||||
|
*
|
||||||
|
* Historically, we haven't given much thought to output placement,
|
||||||
|
* simply adding outputs in a horizontal line as they're enabled. This
|
||||||
|
* function simply sets an output's x coordinate to the right of the
|
||||||
|
* most recently enabled output, and its y to zero.
|
||||||
|
*
|
||||||
|
* If you're adding new calls to this function, you're also not giving
|
||||||
|
* much thought to output placement, so please consider carefully if
|
||||||
|
* it's really doing what you want.
|
||||||
|
*
|
||||||
|
* You especially don't want to use this for any code that won't
|
||||||
|
* immediately enable the passed output.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
weston_output_lazy_align(struct weston_output *output)
|
||||||
|
{
|
||||||
|
struct weston_compositor *c;
|
||||||
|
struct weston_output *peer;
|
||||||
|
int next_x = 0;
|
||||||
|
|
||||||
|
/* Put this output to the right of the most recently enabled output */
|
||||||
|
c = output->compositor;
|
||||||
|
if (!wl_list_empty(&c->output_list)) {
|
||||||
|
peer = container_of(c->output_list.prev,
|
||||||
|
struct weston_output, link);
|
||||||
|
next_x = peer->x + peer->width;
|
||||||
|
}
|
||||||
|
output->x = next_x;
|
||||||
|
output->y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
simple_head_enable(struct wet_compositor *wet, struct weston_head *head)
|
simple_head_enable(struct wet_compositor *wet, struct weston_head *head)
|
||||||
{
|
{
|
||||||
@@ -1723,6 +1755,8 @@ simple_head_enable(struct wet_compositor *wet, struct weston_head *head)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
weston_output_lazy_align(output);
|
||||||
|
|
||||||
if (wet->simple_output_configure)
|
if (wet->simple_output_configure)
|
||||||
ret = wet->simple_output_configure(output);
|
ret = wet->simple_output_configure(output);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@@ -2359,6 +2393,8 @@ drm_try_enable(struct weston_output *output,
|
|||||||
{
|
{
|
||||||
/* Try to enable, and detach heads one by one until it succeeds. */
|
/* Try to enable, and detach heads one by one until it succeeds. */
|
||||||
while (!output->enabled) {
|
while (!output->enabled) {
|
||||||
|
weston_output_lazy_align(output);
|
||||||
|
|
||||||
if (weston_output_enable(output) == 0)
|
if (weston_output_enable(output) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
+1
-12
@@ -7268,11 +7268,8 @@ weston_output_create_heads_string(struct weston_output *output)
|
|||||||
WL_EXPORT int
|
WL_EXPORT int
|
||||||
weston_output_enable(struct weston_output *output)
|
weston_output_enable(struct weston_output *output)
|
||||||
{
|
{
|
||||||
struct weston_compositor *c = output->compositor;
|
|
||||||
struct weston_output *iterator;
|
|
||||||
struct weston_head *head;
|
struct weston_head *head;
|
||||||
char *head_names;
|
char *head_names;
|
||||||
int x = 0, y = 0;
|
|
||||||
|
|
||||||
if (output->enabled) {
|
if (output->enabled) {
|
||||||
weston_log("Error: attempt to enable an enabled output '%s'\n",
|
weston_log("Error: attempt to enable an enabled output '%s'\n",
|
||||||
@@ -7297,20 +7294,12 @@ weston_output_enable(struct weston_output *output)
|
|||||||
assert(head->model);
|
assert(head->model);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator = container_of(c->output_list.prev,
|
|
||||||
struct weston_output, link);
|
|
||||||
|
|
||||||
if (!wl_list_empty(&c->output_list))
|
|
||||||
x = iterator->x + iterator->width;
|
|
||||||
|
|
||||||
/* Make sure the scale is set up */
|
/* Make sure the scale is set up */
|
||||||
assert(output->scale);
|
assert(output->scale);
|
||||||
|
|
||||||
/* Make sure we have a transform set */
|
/* Make sure we have a transform set */
|
||||||
assert(output->transform != UINT32_MAX);
|
assert(output->transform != UINT32_MAX);
|
||||||
|
|
||||||
output->x = x;
|
|
||||||
output->y = y;
|
|
||||||
output->dirty = 1;
|
output->dirty = 1;
|
||||||
output->original_scale = output->scale;
|
output->original_scale = output->scale;
|
||||||
|
|
||||||
@@ -7319,7 +7308,7 @@ weston_output_enable(struct weston_output *output)
|
|||||||
|
|
||||||
weston_output_transform_scale_init(output, output->transform, output->scale);
|
weston_output_transform_scale_init(output, output->transform, output->scale);
|
||||||
|
|
||||||
weston_output_init_geometry(output, x, y);
|
weston_output_init_geometry(output, output->x, output->y);
|
||||||
weston_output_damage(output);
|
weston_output_damage(output);
|
||||||
|
|
||||||
wl_list_init(&output->animation_list);
|
wl_list_init(&output->animation_list);
|
||||||
|
|||||||
Reference in New Issue
Block a user