Move HotCorner to chrome instead of in the panel

This prepares for there being multiple hot corners, one per monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=642881
This commit is contained in:
Alexander Larsson 2011-02-23 14:35:45 +01:00
parent 196d10454a
commit 259c84ed9a
2 changed files with 18 additions and 12 deletions

View File

@ -48,6 +48,7 @@ DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
let chrome = null; let chrome = null;
let panel = null; let panel = null;
let hotCorner = null;
let placesManager = null; let placesManager = null;
let overview = null; let overview = null;
let runDialog = null; let runDialog = null;
@ -140,6 +141,7 @@ function start() {
magnifier = new Magnifier.Magnifier(); magnifier = new Magnifier.Magnifier();
statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher(); statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher();
panel = new Panel.Panel(); panel = new Panel.Panel();
hotCorner = new Panel.HotCorner();
wm = new WindowManager.WindowManager(); wm = new WindowManager.WindowManager();
messageTray = new MessageTray.MessageTray(); messageTray = new MessageTray.MessageTray();
notificationDaemon = new NotificationDaemon.NotificationDaemon(); notificationDaemon = new NotificationDaemon.NotificationDaemon();
@ -389,6 +391,11 @@ function _getAndClearErrorStack() {
function _relayout() { function _relayout() {
let primary = global.get_primary_monitor(); let primary = global.get_primary_monitor();
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
hotCorner.actor.set_position(primary.x + primary.width, primary.y);
else
hotCorner.actor.set_position(primary.x, primary.y);
panel.setHotCorner(hotCorner);
panel.actor.set_position(primary.x, primary.y); panel.actor.set_position(primary.x, primary.y);
panel.actor.set_size(primary.width, Panel.PANEL_HEIGHT); panel.actor.set_size(primary.width, Panel.PANEL_HEIGHT);
overview.relayout(); overview.relayout();

View File

@ -706,6 +706,8 @@ HotCorner.prototype = {
} }
} }
}); });
Main.chrome.addActor(this.actor, { visibleInOverview: true, affectsStruts: false });
}, },
destroy: function() { destroy: function() {
@ -865,16 +867,6 @@ Panel.prototype = {
let childBox = new Clutter.ActorBox(); let childBox = new Clutter.ActorBox();
childBox.y1 = 0;
childBox.y2 = this._hotCorner.actor.height;
if (this.actor.get_direction() == St.TextDirection.RTL) {
childBox.x1 = allocWidth;
} else {
childBox.x1 = 0;
}
childBox.x2 = childBox.x1 + this._hotCorner.actor.width;
this._hotCorner.actor.allocate(childBox, flags);
childBox.y1 = 0; childBox.y1 = 0;
childBox.y2 = allocHeight; childBox.y2 = allocHeight;
if (this.actor.get_direction() == St.TextDirection.RTL) { if (this.actor.get_direction() == St.TextDirection.RTL) {
@ -941,8 +933,7 @@ Panel.prototype = {
corner.actor.set_style_pseudo_class(pseudoClass); corner.actor.set_style_pseudo_class(pseudoClass);
})); }));
this._hotCorner = new HotCorner(); this._hotCorner = null;
this._boxContainer.add_actor(this._hotCorner.actor);
let appMenuButton = new AppMenuButton(); let appMenuButton = new AppMenuButton();
this._leftBox.add(appMenuButton.actor); this._leftBox.add(appMenuButton.actor);
@ -1032,6 +1023,14 @@ Panel.prototype = {
this.button._xdndTimeOut = 0; this.button._xdndTimeOut = 0;
}, },
// While there can be multiple hotcorners (one per monitor), the hot corner
// that is on top of the Activities button is special since it needs special
// coordination with clicking on that button
setHotCorner: function(corner) {
this._hotCorner = corner;
},
startStatusArea: function() { startStatusArea: function() {
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) { for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
let role = STANDARD_TRAY_ICON_ORDER[i]; let role = STANDARD_TRAY_ICON_ORDER[i];