From 10d5aaca83142ecbbb7ab5b4ea1c7da2b54548ad Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 28 Nov 2008 22:05:09 +0000 Subject: [PATCH] Hook up activate on search entry to launch if only one app displayed svn path=/trunk/; revision=90 --- js/ui/appdisplay.js | 36 ++++++++++++++++++++++++++++++++---- js/ui/overlay.js | 14 ++++++++++++-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/js/ui/appdisplay.js b/js/ui/appdisplay.js index 0651439fa..69a6349c0 100644 --- a/js/ui/appdisplay.js +++ b/js/ui/appdisplay.js @@ -63,7 +63,7 @@ _init: function(appinfo, width) { width: width, height: APPDISPLAY_HEIGHT}); this._group.connect('button-press-event', function(group, e) { - me.emit('launch'); + me.emit('activate'); return true; }); this._bg = new Clutter.Rectangle({ color: APPDISPLAY_BACKGROUND_COLOR, @@ -102,6 +102,12 @@ _init: function(appinfo, width) { y: this._name.height + 4}) this._group.add_actor(this._comment); this.actor = this._group; +}, +launch: function() { + this._appinfo.launch([], null); +}, +appinfo: function () { + return this._appinfo; } } Signals.addSignalMethods(AppDisplayItem.prototype); @@ -155,6 +161,7 @@ _removeItem: function(appid) { let group = item.actor; group.destroy(); delete this._displayed[appid]; + }, _removeAll: function() { @@ -180,11 +187,11 @@ _filterAdd: function(appid) { let appinfo = this._appset[appid]; let name = appinfo.get_name(); - let index = 0; for (i in this._displayed) { index += 1; } + let index = 0; for (i in this._displayed) { index += 1; }; let appdisplay = new AppDisplayItem(appinfo, this._width); - appdisplay.connect('launch', function() { - appinfo.launch([], null); + appdisplay.connect('activate', function() { + appdisplay.launch(); me.emit('activated'); }); let group = appdisplay.actor; @@ -256,6 +263,27 @@ setSearch: function(text) { this._redisplay(); }, +searchActivate: function() { + let displayedActors = this._grid.get_children(); + if (displayedActors.length != 1) + return; + let selectedActor = displayedActors[0]; + let selectedMenuItem = null; + for (appid in this._displayed) { + let item = this._displayed[appid]; + if (item.actor == selectedActor) { + selectedMenuItem = item; + break; + } + } + log("selected " + selectedMenuItem); + if (!selectedMenuItem) + return; + + selectedMenuItem.launch(); + this.emit('activated'); +}, + show: function() { this._redisplay(); this._grid.show(); diff --git a/js/ui/overlay.js b/js/ui/overlay.js index 406118b0d..22b197df9 100644 --- a/js/ui/overlay.js +++ b/js/ui/overlay.js @@ -82,15 +82,25 @@ _init : function(width) { this._group.add_actor(this._searchEntry); global.stage.set_key_focus(this._searchEntry); this._searchQueued = false; - this._searchEntry.connect('notify::text', function (se, prop) { + this._searchActive = false; + this._searchEntry.connect('notify::text', function (se, prop) { if (me._searchQueued) return; Mainloop.timeout_add(250, function() { + let text = me._searchEntry.text; me._searchQueued = false; - me._appdisplay.setSearch(me._searchEntry.text); + me._searchActive = text != ''; + me._appdisplay.setSearch(text); return false; }); }); + this._searchEntry.connect('activate', function (se) { + log("activate " + me._searchActive); + if (!me._searchActive) + return false; + me._appdisplay.searchActivate(); + return true; + }); let appsText = new Clutter.Label({ color: SIDESHOW_TEXT_COLOR, font_name: "Sans Bold 14px",