Commit Graph

184 Commits

Author SHA1 Message Date
Mike Blumenkrantz c685d799c1 avoid setting incorrect geometry during new_client frame calc
in the case where a client has no geometry set, attempting to update
the client's geometry during frame recalc will guarantee that wrong
geometry is set, resulting in a bad first frame
2015-11-24 21:44:38 -05:00
Mike Blumenkrantz 92fd6db69f always create compositor mirror objects, ignore pixmap image state
checking pixmap image state in this case resulted in mirrors failing to
be created in some cases when there was no reason to fail

ref T2846
2015-11-19 16:20:05 -05:00
Mike Blumenkrantz 979d4724b9 further improve csd calculations for x11 clients
there was previously a frame in which maximized x11 csd clients would
reposition themselves offscreen before rendering

this is now fixed by adjusting the client geometries either upon
unsetting the csd or re-setting it, allowing the client to retain its
expected positioning without jitters
2015-11-19 16:13:42 -05:00
Mike Blumenkrantz 755073b5fc Revert "force a software render in all cases when finalizing x11 client iconify"
This reverts commit 280e7e959d.
2015-11-09 14:32:50 -05:00
Mike Blumenkrantz e8c7f5686c add e_comp_object_mirror_visibility_check()
can be used to check whether visible mirrors exist for a comp object
2015-11-09 14:25:25 -05:00
Mike Blumenkrantz a372c31b84 add counter and smart callbacks for comp object visible mirrors
ref T2788
2015-11-09 14:25:16 -05:00
Mike Blumenkrantz 8589289ff5 add native surface (gl) clients to post render list
forgot to add this when I was redoing it for sw

ref 4d30674ab8
2015-11-09 14:23:08 -05:00
Mike Blumenkrantz dfa3b4060c only apply frame geometry deltas for CSD if the CSD region exists
ref e931e86161
2015-11-09 14:04:24 -05:00
Mike Blumenkrantz 1529bebcb0 update csd using deltas of previous values
when applying new csd to a window which already has csd, the previous
csd must be removed in order to apply any new csd offsets in order to
avoid unwanted moving/resizing
2015-11-09 14:03:35 -05:00
Mike Blumenkrantz 280e7e959d force a software render in all cases when finalizing x11 client iconify
since ICCCM requires that clients be unmapped while iconified, it's necessary
for the compositor to perform one last render prior to the unmap in order to
ensure that mirror objects will still appear as expected. this render must use
the pixmap buffer data in order to avoid timing issues due to async/deferred
rendering, and it is only necessary for the case of clients rendering with a
native surface

fix T2788
2015-10-15 17:05:15 -04:00
Mike Blumenkrantz 203932fed9 move client post-update adding into render function
in some cases, it's possible for a client which expects to render on
the next frame to actually render on the frame after. in these cases,
the compositor must not clear the pixmap image until after the render
has occurred in order to avoid inaccuracies. for this reason, the best
place to flag a client for post-render work is at the time of the client's
render

ref T2762
ref D3120
2015-10-02 14:03:31 -04:00
Mike Blumenkrantz fa0e3c48fc unify comp render returns for argb and non-argb clients 2015-10-02 14:03:31 -04:00
Mike Blumenkrantz a558c940eb fix comp render return value for failed draws of non-argb clients 2015-10-02 14:03:31 -04:00
Mike Blumenkrantz b1989c60a5 add RENDER_DEBUG for forced renders when setting dirty flag 2015-10-02 14:03:31 -04:00
Mike Blumenkrantz c22f78dbb8 reject client resize attempts for clients with dirty pixmaps
these clients will resize/render correctly only after the next
render loop, so defer until then to avoid #RenderFail

fix T2754
2015-09-29 12:31:28 -04:00
Mike Blumenkrantz 46b1335ade reject identical calls to e_comp_object_frame_geometry_set() 2015-09-28 16:17:34 -04:00
Mike Blumenkrantz 14ce1880cb use client window coords for resize-moving without a frame_object
improves placement of csd windows

ref T2750
2015-09-28 16:12:28 -04:00
Mike Blumenkrantz 284d3079b7 do not set client window coordinates during a move until after resizing check
fixes case where values would be erroneously updated when they should instead
have been rejected

ref T2750
2015-09-28 16:12:28 -04:00
Mike Blumenkrantz 608b38b2e7 allow client resizes on axes currently unrestricted by maximize state
if this isn't explicitly blocked by config options then allowing resizes
on the unmaximized axes is necessary in order to avoid accidentally
queuing a full unmaximize
2015-09-28 16:12:28 -04:00
Mike Blumenkrantz d103edfd6b force adjustment of client geometry when changing csd frame size
fix T2750
2015-09-28 16:12:28 -04:00
Mike Blumenkrantz 254494a7df initialize pixmap size vars in comp resize interceptor
these are never uninitialized when they are used, but this
is not obvious to the reader

CID 1324956, 1324956
2015-09-25 22:41:23 -04:00
Mike Blumenkrantz bfeeae6adf fix handling of x11 ICCCM WithdrawnState
according to ICCCM 4.1.4:
Only the client can effect a transition into or out of the Withdrawn state

withdrawn windows cannot be shown under any circumstances. the best that can
be done is to try mapping the window and hope it decides to appear.

to prevent any inadvertent showing of the window before it leaves the
withdrawn state, we play games with the E_Client->ignored flag in order
to skip client evals until we get notified that maybe we want to stop
skipping those evals

ref T2745

also includes 0e3cc2f533
2015-09-25 22:40:15 -04:00
Mike Blumenkrantz aa665020e6 set comp object client_inset.calc based on frame_object existence 2015-09-24 16:42:31 -04:00
Mike Blumenkrantz fc1da30ad4 add util function for determining if a client is allowed to have a frame
returns false if mwm borderless is set or if csd exists
2015-09-24 16:42:31 -04:00
Mike Blumenkrantz 53e0c56f5e fully support _GTK_FRAME_EXTENTS
gtk apps set an atom which provides information about the area
where non-window content (eg. shadows) may be drawn; this area
must not be used in placement calculations.

the easiest method for implementing this functionality was to add
a case to the compositor geometry interceptors which effectively
flip the client struct geometry values such that the E_Client->client
is outside of the more commonly used E_Client->x/y/w/h

fix T2744
2015-09-24 16:42:24 -04:00
Mike Blumenkrantz 52c66793f1 calculate comp object visibility regardless of pending damages
in the case of clients on non-visible vdesks, this improves the reliability
of mirrored rendering
2015-09-22 13:22:24 -04:00
Mike Blumenkrantz 7a142970cb do not emit client iconify signal when reapplying compositor theme
this has no effect other than breaking the animation counter for the
client and preventing it from being deleted
2015-09-22 13:21:11 -04:00
Mike Blumenkrantz 2c77b0591a ensure that normal clients are stacked below overrides when raising
when a client is set to "Always on Top", it will be on the same layer
as override clients. this can cause strange stacking and mouse eventing
in cases where these windows occupy the same space and the normal client
is stacked over the override
2015-09-08 17:51:21 -04:00
Mike Blumenkrantz 625088f296 reject focus-set attempt if desk flip to client's desk was rejected
in the case of recursive desk flips, toggling a desk's visibility may
erroneously send queued evas events to the client's frame object, leading
to a focus-set (mouse-based focus models) which triggers a desk flip
inside the original desk flip. this "inner" desk flip is spurious and
should be ignored
2015-08-21 16:43:59 -04:00
Mike Blumenkrantz 6298e7d81c add some smart callbacks for comp objects on redirect/dirty state change 2015-08-20 15:58:28 -04:00
Mike Blumenkrantz ba15a571b5 force render queue and check for redirection on clients with 0x0 pixmaps
fixes an issue where resizing the current nocomp client could result in a
broken compositor until a render queue was triggered
2015-08-20 15:58:22 -04:00
Mike Blumenkrantz 0fa853d742 account for race condition when creating initial comp object updates tiler
added to maintain compositor logic parity
2015-07-08 12:45:41 -04:00
Mike Blumenkrantz 303edb544d block client signal binding activation when mouse action is active
this prevents oddities such as activating [window shade] and [resize] actions
simultaneously from breaking the compositor
2015-07-07 13:12:40 -04:00
Chris Michael 099861c55a enlightenment: Make E build again with EFL from git
sed -i 's/EAPI/E_API/g'

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2015-07-01 15:56:20 -04:00
Mike Blumenkrantz a491a3fa9e fix focus FIXME regarding focus-setting on clients from other desks
fix T2259
2015-06-29 16:04:38 -04:00
Mike Blumenkrantz 1e5eea91ee return an accurate value for override clients in e_comp_object_util_zone_get() 2015-06-17 15:59:23 -04:00
Mike Blumenkrantz 187608ba7a use client geom for comp object centering functions if ec->new_client is set 2015-04-28 12:27:33 -04:00
Carsten Haitzler 666da6ab83 e clients - make sure we handle client with a NULL zone 2015-03-11 16:05:52 -04:00
Mike Blumenkrantz 5e48e67b23 fix crash when using e_comp_object_util_center_pos_get() with non comp_objects 2015-03-06 18:57:37 -05:00
Mike Blumenkrantz 35e1e2488f never resize client clip object 2015-03-04 17:08:23 -05:00
Mike Blumenkrantz 800ec5eaa3 do not reapply focus on canvas object ungrab/close for pointer-focus enthusiasts 2015-02-20 09:56:15 -05:00
Mike Blumenkrantz c15e0848b5 revert some comp object debugging bits that snuck into another commit 2015-02-19 11:13:46 -05:00
Mike Blumenkrantz 9567acde42 don't send unfocused signal to override clients
fix T2099
2015-02-18 16:36:11 -05:00
Vincent Torri 3bdc2ebbba add MIN define for non-linux systems 2015-02-15 17:54:25 -05:00
Mike Blumenkrantz f7701ff905 don't change shade.x/y during unshade or after shade
fix T1930
2015-01-08 18:23:48 -05:00
Mike Blumenkrantz c3e86c328d comp pending resizes should not require both w+h to change 2014-12-31 15:39:06 -05:00
Mike Blumenkrantz 6d7ecefa02 greatly reduce FAILURE_MAX
ref T1820
2014-12-08 17:08:00 -05:00
Mike Blumenkrantz 9d1a3ad45b reduce shape recalc for clients which cannot currently receive input 2014-12-07 20:24:09 -05:00
Mike Blumenkrantz 0d2001013f redo shaped client checks to use shape flags instead of rect pointer, fix shapeless clients
according to the shape extension protocol, the number of rectangles returned should be checked to determine a client's shape. if 0 is returned, the client has no shape, meaning that it either should not be drawn or should have no input region. this improves behavior with various client window types such as tooltips

ref T1820
2014-12-07 20:18:27 -05:00
Mike Blumenkrantz 6f024d3abf add failure count for client rendering, drop clients after FAILURE_MAX tries
this traps clients which are showing and hiding themselves extremely quickly and prevents them from crashing us when we try to draw them

fix T1820
2014-12-07 20:18:27 -05:00