forked from 12to11/12to11
Update toplevel surface outputs upon resize
* xdg_surface.c (NoteBounds): Obtain root window position and update the output set upon a resize.
This commit is contained in:
parent
584ea0ac4d
commit
7d11425454
1 changed files with 15 additions and 2 deletions
|
@ -1078,10 +1078,11 @@ NoteBounds (void *data, int min_x, int min_y,
|
||||||
{
|
{
|
||||||
XdgRole *role;
|
XdgRole *role;
|
||||||
int bounds_width, bounds_height, root_x, root_y;
|
int bounds_width, bounds_height, root_x, root_y;
|
||||||
Bool run_reconstrain_callbacks;
|
Bool run_reconstrain_callbacks, root_position_initialized;
|
||||||
|
|
||||||
role = data;
|
role = data;
|
||||||
run_reconstrain_callbacks = False;
|
run_reconstrain_callbacks = False;
|
||||||
|
root_position_initialized = False;
|
||||||
|
|
||||||
if (XLFrameClockIsFrozen (role->clock))
|
if (XLFrameClockIsFrozen (role->clock))
|
||||||
/* We are waiting for the acknowledgement of a configure event.
|
/* We are waiting for the acknowledgement of a configure event.
|
||||||
|
@ -1113,6 +1114,15 @@ NoteBounds (void *data, int min_x, int min_y,
|
||||||
role->bounds_height);
|
role->bounds_height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Update the list of outputs that the surface is inside.
|
||||||
|
First, get the root window position. */
|
||||||
|
CurrentRootPosition (role, &root_x, &root_y);
|
||||||
|
root_position_initialized = True;
|
||||||
|
|
||||||
|
/* Next, update the output set. */
|
||||||
|
XLUpdateSurfaceOutputs (role->role.surface, root_x + min_x,
|
||||||
|
root_y + min_y, -1, -1);
|
||||||
|
|
||||||
if (role->impl->funcs.note_window_pre_resize)
|
if (role->impl->funcs.note_window_pre_resize)
|
||||||
role->impl->funcs.note_window_pre_resize (&role->role,
|
role->impl->funcs.note_window_pre_resize (&role->role,
|
||||||
role->impl,
|
role->impl,
|
||||||
|
@ -1150,10 +1160,13 @@ NoteBounds (void *data, int min_x, int min_y,
|
||||||
/* Move the window by the opposite of the amount the min_x and
|
/* Move the window by the opposite of the amount the min_x and
|
||||||
min_y changed. */
|
min_y changed. */
|
||||||
|
|
||||||
|
if (!root_position_initialized)
|
||||||
CurrentRootPosition (role, &root_x, &root_y);
|
CurrentRootPosition (role, &root_x, &root_y);
|
||||||
|
|
||||||
XMoveWindow (compositor.display, role->window,
|
XMoveWindow (compositor.display, role->window,
|
||||||
root_x + min_x + role->min_x,
|
root_x + min_x + role->min_x,
|
||||||
root_y + min_y + role->min_y);
|
root_y + min_y + role->min_y);
|
||||||
|
run_reconstrain_callbacks = True;
|
||||||
|
|
||||||
/* Set pending root window positions. These positions will be
|
/* Set pending root window positions. These positions will be
|
||||||
used until the movement really happens, to avoid outdated
|
used until the movement really happens, to avoid outdated
|
||||||
|
|
Loading…
Add table
Reference in a new issue