Review Request 108513: Rewrite of KWin's Screen Edge Handling

Commit Hook null at kde.org
Thu Feb 7 09:02:00 UTC 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/108513/#review26825
-----------------------------------------------------------


This review has been submitted with commit 8e007646a920db5e7d0031721e254368bb16ec8d by Martin Gräßlin to branch master.

- Commit Hook


On Feb. 4, 2013, 8:50 a.m., Martin Gräßlin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/108513/
> -----------------------------------------------------------
> 
> (Updated Feb. 4, 2013, 8:50 a.m.)
> 
> 
> Review request for kwin, Plasma and Arthur Arlt.
> 
> 
> Description
> -------
> 
> Screen Edges may belong to fullscreen windows
> 
> Corners are still ours (it's a valid use case to still be able to switch
> window through e.g. Present Windows even when running a fullscreen app).
> 
> How is it done? An Edge can be blocked and does no longer trigger if it
> is blocked. For WindowBasedEdges the edge windows get unmapped in the
> blocking case and mapped again when the blocking condition is no longer
> valid.
> 
> The blocking is so far connected to:
> * changes of active window
> * changes of fullscreen windows
> 
> Whenever one of the events occurs it is checked whether there is:
> 1. an active client
> 2. it is fullscreen
> 3. on the same screen as the edge
> 
> If this is the case the edge will be blocked, otherwise unblocked.
> 
> New Glow on approaching Screen Edge Effect
> 
> Feature stolen from hidden Plasma Panel now available for all edges on
> approach by mouse.
> 
> Split out event handling in ScreenEdges in separate methods
> 
> Allows to also support xcb_generic_event_t in addition to XEvent.
> 
> Notifications when approaching a screen edge
> 
> For each edge an additional "approach" area window is created. When the
> mouse enters this approach window, it gets unmapped and a mouse polling
> interval is started. If the mouse leaves the approach area again, the
> window gets mapped again and the mouse polling is stopped.
> 
> During the approaching a signal is emitted with a factor in [0.0,1.0] to
> describe how close the mouse is to the edge. 0.0 means far away, 1.0
> means triggering the edge. This signal is passed to the effects to allow
> using this information. E.g. to provide a glow corner effect or to make
> use of it in the cube animation effect to start the animation on desktop
> switch.
> 
> Turn ScreenEdges into a Singleton
> 
> In fact it already used to be a Singleton as there is just one object
> hold by the Singleton Workspace. So let's make it a proper Singleton
> following our kind of standard approach of having a ::create factory
> method called from Workspace ctor and a ::self to get to the singleton
> instance.
> 
> Change the way how screen edges interact with Effects/Scripts
> 
> The main difference is that the activation of an edge is no longer
> broadcasted to all effects and scripts, but instead a passed in slot of
> the Effect/Script is invoked.
> 
> For this the EffectsHandler API is changed to take the Effect as an
> argument to (un)reserveElectricBorder. As callback slot the existing
> borderActivated is used.
> 
> In addition the ScreenEdge monitors the object for beeing destroyed and
> unregisters the the edge automatically. This removes the need from the
> Effect to call unregister in the dtor.
> 
> BUG: 309695
> FIXED-IN: 4.11
> 
> Rewrite of KWin's Screen Edge Handling
> 
> This rewrite is mostly motivated by the need to handle multi screen
> setups correctly. That is have edges per screen and not for the combined
> geometry. Also porting from XLib to XCB has been a motivation for the
> rewrite.
> 
> The design of the new ScreenEdge handling is described in the
> documentation of ScreenEdges in screenedge.h.
> 
> In addition the following changes have been performed:
> * move configuration from Options to ScreenEdge
> * add screen edge information to Workspace::supportInformation (obviously
>   replaces what had been read from Options)
> * have Workspace hold a pointer to ScreenEdges instead of an object
> * forward declaration of ScreenEdges in workspaces.h, this explains the
>   seemingly unrelated changes of just another include in some files
> 
> BUG: 290887
> FIXED-IN: 4.11
> 
> Do not update screen edges when compositing settings changes
> 
> The comment says it all: update all settings which can be done through
> the compositing KCM. Years ago screen edges was in the composite KCM, but
> it no longer is. So there is no need to update the edges when the
> compositing settings changes.
> 
> Remove interaction of quick tiling with ScreenEdges
> 
> Quick tiling/maximizing of Clients is completely independent of the
> screen edges functionality. That is it determines the borders itself.
> Nevertheless there has been some code still around which interacted with
> the screen edges each time a window was moved. This code is completely
> useless.
> 
> Remove unused screen edge related methods from kwineffects interface
> 
> No effect has ever used these methods and there is no reason why an
> effect should use them. Reserve/unreserve is sufficient as the effect
> will be notified anyway.
> 
> Adding some convenient functions to wrap xcb calls
> 
> Commonly needed functionality, like
> * move/resize windows
> * restack windows
> * restack to top of stack
> 
> 
> This addresses bugs 271607, 290887 and 309695.
>     http://bugs.kde.org/show_bug.cgi?id=271607
>     http://bugs.kde.org/show_bug.cgi?id=290887
>     http://bugs.kde.org/show_bug.cgi?id=309695
> 
> 
> Diffs
> -----
> 
>   kwin/composite.cpp c27b37f21ec946775497047837c00dc7107c7756 
>   kwin/effects.h 8d721fceef3e0a041e5a38088aef0de3a897d58d 
>   kwin/effects.cpp 6845b748e46d0ffec42af58987dd255ff7a03bbb 
>   kwin/effects/CMakeLists.txt b8d458e6be6397330c10a7d4ab7a4fe8f1e52ffe 
>   kwin/effects/cube/cube.cpp 3fffbd0577194c8c16bf608a04a2eeedd84b3ba1 
>   kwin/effects/desktopgrid/desktopgrid.cpp 187d0588bf1e4a59ce442f7606c2da6e181a8f03 
>   kwin/effects/flipswitch/flipswitch.cpp 445405edb93c39d9e776e6bb7ae40a233a6ab740 
>   kwin/effects/presentwindows/presentwindows.cpp de325df2451f47bca6effeeedefea960bc3ce089 
>   kwin/effects/screenedge/CMakeLists.txt PRE-CREATION 
>   kwin/effects/screenedge/screenedgeeffect.cpp PRE-CREATION 
>   kwin/effects/screenedge/screenedgeeffect.desktop PRE-CREATION 
>   kwin/effects/screenedge/screenedgeeffect.h PRE-CREATION 
>   kwin/events.cpp a39aec07fc9f69438eb38d5569ba4ee0a218db42 
>   kwin/geometry.cpp 7eb7e94d2804aa512b3da23b81c40ffe4b899811 
>   kwin/layers.cpp 05b3d6dd0a6349a58eaf7a0b6a275b3ea6efde8b 
>   kwin/libkwineffects/kwineffects.h 423cfd1140ff4a01fa3e06036383a9ce665b4da7 
>   kwin/options.h f458637b7f7f8210f6c9de3497ad1d49df8261c0 
>   kwin/options.cpp 41dda403ce694c7820b8ee04f22f92b99559c1e2 
>   kwin/screenedge.h 6dd1956332958d11e768c01eb3f91ae411a5cc77 
>   kwin/screenedge.cpp fb6209c1994345cf36da8dbcf097bb3596890cf3 
>   kwin/scripting/scriptedeffect.h 830997b50b2f2d1eaf2aa828b94b110612b2080b 
>   kwin/scripting/scriptedeffect.cpp e9c05091087c8303da53d998d06dc46748b9fdce 
>   kwin/scripting/scripting.h 077fe667dbf76e4165f10f0f19c8700e54e1350e 
>   kwin/scripting/scripting.cpp 6c6e258656eb62bf5811984472f0d0776420b4d5 
>   kwin/scripting/scriptingutils.h 3ed78458131a7fb535e38a08f3c6e7467e9e231b 
>   kwin/workspace.h b26725d0afdcba339aa79348e824bacaec13f32f 
>   kwin/workspace.cpp 9183fd66dace05db6d2ad0b55c4c26e1a288ce95 
>   kwin/xcbutils.h 31bd949b3404d62d8319f0acea521e90a1cfdbeb 
> 
> Diff: http://git.reviewboard.kde.org/r/108513/diff/
> 
> 
> Testing
> -------
> 
> * effects on various edges
> * action on one edge
> * activated/deactivated actions
> * turned on off screen
> * switch desktop (terrible feature)
> * switch desktop when moving Clients
> 
> TODO: unit test for base functionality
> 
> 
> Thanks,
> 
> Martin Gräßlin
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20130207/e0fe740f/attachment-0001.html>


More information about the Plasma-devel mailing list