From 259c84ed9a56178df7a6c0b69093c6ef7c287507 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 23 Feb 2011 14:35:45 +0100 Subject: [PATCH] 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 --- js/ui/main.js | 7 +++++++ js/ui/panel.js | 23 +++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/js/ui/main.js b/js/ui/main.js index ec8a68e52..f0b7e26eb 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -48,6 +48,7 @@ DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff); let chrome = null; let panel = null; +let hotCorner = null; let placesManager = null; let overview = null; let runDialog = null; @@ -140,6 +141,7 @@ function start() { magnifier = new Magnifier.Magnifier(); statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher(); panel = new Panel.Panel(); + hotCorner = new Panel.HotCorner(); wm = new WindowManager.WindowManager(); messageTray = new MessageTray.MessageTray(); notificationDaemon = new NotificationDaemon.NotificationDaemon(); @@ -389,6 +391,11 @@ function _getAndClearErrorStack() { function _relayout() { 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_size(primary.width, Panel.PANEL_HEIGHT); overview.relayout(); diff --git a/js/ui/panel.js b/js/ui/panel.js index 9efe5516a..136eb9346 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -706,6 +706,8 @@ HotCorner.prototype = { } } }); + + Main.chrome.addActor(this.actor, { visibleInOverview: true, affectsStruts: false }); }, destroy: function() { @@ -865,16 +867,6 @@ Panel.prototype = { 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.y2 = allocHeight; if (this.actor.get_direction() == St.TextDirection.RTL) { @@ -941,8 +933,7 @@ Panel.prototype = { corner.actor.set_style_pseudo_class(pseudoClass); })); - this._hotCorner = new HotCorner(); - this._boxContainer.add_actor(this._hotCorner.actor); + this._hotCorner = null; let appMenuButton = new AppMenuButton(); this._leftBox.add(appMenuButton.actor); @@ -1032,6 +1023,14 @@ Panel.prototype = { 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() { for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) { let role = STANDARD_TRAY_ICON_ORDER[i];