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:
Jasper St. Pierre 2012-10-26 11:09:36 -04:00
parent 9396849d56
commit 85728f0d15
3 changed files with 11 additions and 53 deletions

View File

@ -104,7 +104,7 @@ const LayoutManager = new Lang.Class({
this.primaryMonitor = null; this.primaryMonitor = null;
this.primaryIndex = -1; this.primaryIndex = -1;
this._hotCorners = []; this._hotCorners = [];
this._rootPixmap = null; this._background = null;
this._leftPanelBarrier = 0; this._leftPanelBarrier = 0;
this._rightPanelBarrier = 0; this._rightPanelBarrier = 0;
this._trayBarrier = 0; this._trayBarrier = 0;
@ -333,30 +333,30 @@ const LayoutManager = new Lang.Class({
// to the greeter. Otherwise, we'll just animate the panel, // to the greeter. Otherwise, we'll just animate the panel,
// as usual. // as usual.
if (Main.sessionMode.isGreeter) { if (Main.sessionMode.isGreeter) {
this._rootPixmap = global.create_xrootpmap_texture(); this._background = Meta.BackgroundActor.new_for_screen(global.screen);
if (this._rootPixmap != null) { if (this._background != null) {
Main.uiGroup.add_actor(this._rootPixmap); Main.uiGroup.add_actor(this._background);
Tweener.addTween(this._rootPixmap, Tweener.addTween(this._background,
{ opacity: 0, { opacity: 0,
time: PLYMOUTH_TRANSITION_TIME, time: PLYMOUTH_TRANSITION_TIME,
transition: 'linear', transition: 'linear',
onComplete: this._fadeRootpmapComplete, onComplete: this._fadeBackgroundComplete,
onCompleteScope: this }); onCompleteScope: this });
plymouthTransitionRunning = true; plymouthTransitionRunning = true;
} }
} }
if (!plymouthTransitionRunning) if (!plymouthTransitionRunning)
this._fadeRootpmapComplete(); this._fadeBackgroundComplete();
}, },
_fadeRootpmapComplete: function() { _fadeBackgroundComplete: function() {
// Don't animate the strut // Don't animate the strut
this._chrome.freezeUpdateRegions(); this._chrome.freezeUpdateRegions();
if (this._rootPixmap != null) { if (this._background != null) {
this._rootPixmap.destroy(); this._background.destroy();
this._rootPixmap = null; this._background = null;
} }
Tweener.addTween(this.panelBox, Tweener.addTween(this.panelBox,

View File

@ -1693,43 +1693,3 @@ shell_global_get_session_mode (ShellGlobal *global)
return global->session_mode; 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;
}

View File

@ -136,8 +136,6 @@ void shell_global_reexec_self (ShellGlobal *global);
const char * shell_global_get_session_mode (ShellGlobal *global); const char * shell_global_get_session_mode (ShellGlobal *global);
ClutterActor * shell_global_create_xrootpmap_texture (ShellGlobal *global);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */ #endif /* __SHELL_GLOBAL_H__ */