layout: Use a MetaBackgroundActor, not a custom ClutterX11TexturePixmap
While looking at how the plymouth implementation was built, I was so short-sighted and focused on the string "_XROOTPMAP_ID" that I didn't realize it was the name of the standard background on the root window. Remove our own implementation, and switch to using a standard mutter MetaBackgroundActor. https://bugzilla.gnome.org/show_bug.cgi?id=682428
This commit is contained in:
parent
9396849d56
commit
85728f0d15
@ -104,7 +104,7 @@ const LayoutManager = new Lang.Class({
|
||||
this.primaryMonitor = null;
|
||||
this.primaryIndex = -1;
|
||||
this._hotCorners = [];
|
||||
this._rootPixmap = null;
|
||||
this._background = null;
|
||||
this._leftPanelBarrier = 0;
|
||||
this._rightPanelBarrier = 0;
|
||||
this._trayBarrier = 0;
|
||||
@ -333,30 +333,30 @@ const LayoutManager = new Lang.Class({
|
||||
// to the greeter. Otherwise, we'll just animate the panel,
|
||||
// as usual.
|
||||
if (Main.sessionMode.isGreeter) {
|
||||
this._rootPixmap = global.create_xrootpmap_texture();
|
||||
if (this._rootPixmap != null) {
|
||||
Main.uiGroup.add_actor(this._rootPixmap);
|
||||
Tweener.addTween(this._rootPixmap,
|
||||
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||
if (this._background != null) {
|
||||
Main.uiGroup.add_actor(this._background);
|
||||
Tweener.addTween(this._background,
|
||||
{ opacity: 0,
|
||||
time: PLYMOUTH_TRANSITION_TIME,
|
||||
transition: 'linear',
|
||||
onComplete: this._fadeRootpmapComplete,
|
||||
onComplete: this._fadeBackgroundComplete,
|
||||
onCompleteScope: this });
|
||||
plymouthTransitionRunning = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!plymouthTransitionRunning)
|
||||
this._fadeRootpmapComplete();
|
||||
this._fadeBackgroundComplete();
|
||||
},
|
||||
|
||||
_fadeRootpmapComplete: function() {
|
||||
_fadeBackgroundComplete: function() {
|
||||
// Don't animate the strut
|
||||
this._chrome.freezeUpdateRegions();
|
||||
|
||||
if (this._rootPixmap != null) {
|
||||
this._rootPixmap.destroy();
|
||||
this._rootPixmap = null;
|
||||
if (this._background != null) {
|
||||
this._background.destroy();
|
||||
this._background = null;
|
||||
}
|
||||
|
||||
Tweener.addTween(this.panelBox,
|
||||
|
@ -1693,43 +1693,3 @@ shell_global_get_session_mode (ShellGlobal *global)
|
||||
|
||||
return global->session_mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_create_xrootpmap_texture:
|
||||
* @global: The #ShellGlobal
|
||||
*
|
||||
* This returns the _XROOTPMAP_ID pixmap that gdm should have stuffed
|
||||
* in the root window. The goal here is to allow a smooth fade between
|
||||
* plymouth and the shell greeter. This is also a workaround for gjs not
|
||||
* supporting raw xlib types.
|
||||
*
|
||||
* Returns: (transfer floating): A #ClutterActor that represents the
|
||||
* _XROOTPMAP_ID pixmap property from the root window.
|
||||
*/
|
||||
ClutterActor *
|
||||
shell_global_create_xrootpmap_texture (ShellGlobal *global)
|
||||
{
|
||||
Atom res_type;
|
||||
int res_format;
|
||||
unsigned long res_nitems, bytesafter;
|
||||
unsigned char *data;
|
||||
Pixmap root_pixmap_id = None;
|
||||
|
||||
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
|
||||
|
||||
if (XGetWindowProperty (global->xdisplay,
|
||||
DefaultRootWindow (global->xdisplay),
|
||||
XInternAtom (global->xdisplay, "_XROOTPMAP_ID", False),
|
||||
0, G_MAXLONG, False, XA_PIXMAP,
|
||||
&res_type, &res_format, &res_nitems, &bytesafter, &data) == Success)
|
||||
{
|
||||
if (res_type == XA_PIXMAP && res_format == 32 && res_nitems == 1)
|
||||
root_pixmap_id = * (Pixmap *) data;
|
||||
XFree (data);
|
||||
}
|
||||
|
||||
if (root_pixmap_id != None)
|
||||
return clutter_x11_texture_pixmap_new_with_pixmap (root_pixmap_id);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
@ -136,8 +136,6 @@ void shell_global_reexec_self (ShellGlobal *global);
|
||||
|
||||
const char * shell_global_get_session_mode (ShellGlobal *global);
|
||||
|
||||
ClutterActor * shell_global_create_xrootpmap_texture (ShellGlobal *global);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_GLOBAL_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user