From fe0f4060c411cbcdc288a12f8fdde2ff9f7a436c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 4 Mar 2010 00:10:16 +0100 Subject: [PATCH] [Overview] Fix click handling of open panes The top part of the application pane closes the pane, while outside the menu only the workspace area accepts clicks for closing the pane. Let the user close the pane by clicking anywhere outside the menu, but not inside. https://bugzilla.gnome.org/show_bug.cgi?id=611641 --- js/ui/appDisplay.js | 3 ++- js/ui/overview.js | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index f18745f6c..7ae0b08f0 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -87,7 +87,8 @@ AllAppDisplay.prototype = { Main.queueDeferredWork(this._workId); })); - let bin = new St.BoxLayout({ style_class: 'all-app-controls-panel' }); + let bin = new St.BoxLayout({ style_class: 'all-app-controls-panel', + reactive: true }); this.actor = new St.BoxLayout({ style_class: 'all-app', vertical: true }); this.actor.hide(); diff --git a/js/ui/overview.js b/js/ui/overview.js index 1f2ca9bf2..1f0ee4b9a 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -372,9 +372,8 @@ Overview.prototype = { })); } - this._transparentBackground.set_position(this._paneContainer.x, this._paneContainer.y); - this._transparentBackground.set_size(primary.width - this._paneContainer.x, - this._paneContainer.height); + this._transparentBackground.set_position(primary.x, primary.y); + this._transparentBackground.set_size(primary.width, primary.height); }, @@ -391,10 +390,17 @@ Overview.prototype = { this._transparentBackground.raise_top(); this._paneContainer.raise_top(); this._paneContainer.show(); + this._paneReady = false; if (backgroundEventId != null) this._transparentBackground.disconnect(backgroundEventId); - backgroundEventId = this._transparentBackground.connect('button-release-event', Lang.bind(this, function () { - this._activeDisplayPane.close(); + backgroundEventId = this._transparentBackground.connect('captured-event', Lang.bind(this, function (actor, event) { + if (event.get_source() != this._transparentBackground) + return false; + if (event.type() == Clutter.EventType.BUTTON_PRESS) + this._paneReady = true; + if (event.type() == Clutter.EventType.BUTTON_RELEASE + && this._paneReady) + this._activeDisplayPane.close(); return true; })); this._workspaces.actor.opacity = 64;