diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 3ced54633..bcdfcffa0 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -459,8 +459,8 @@ function BaseWellItem(appInfo, isFavorite, hasMenu) { BaseWellItem.prototype = { __proto__: AppIcon.AppIcon.prototype, - _init: function(appInfo, isFavorite, hasMenu) { - AppIcon.AppIcon.prototype._init.call(this, appInfo, hasMenu ? AppIcon.MenuType.ON_RIGHT : AppIcon.MenuType.NONE, true); + _init: function(appInfo, isFavorite) { + AppIcon.AppIcon.prototype._init.call(this, appInfo, AppIcon.MenuType.ON_RIGHT, true); this.isFavorite = isFavorite; @@ -519,7 +519,7 @@ RunningWellItem.prototype = { __proto__: BaseWellItem.prototype, _init: function(appInfo, isFavorite) { - BaseWellItem.prototype._init.call(this, appInfo, isFavorite, true); + BaseWellItem.prototype._init.call(this, appInfo, isFavorite); this._dragStartX = 0; this._dragStartY = 0; @@ -592,6 +592,12 @@ InactiveWellItem.prototype = { return true; } return false; + }, + + menuPoppedUp: function() { + }, + + menuPoppedDown: function() { } }; @@ -659,10 +665,8 @@ WellGrid.prototype = { childBox.y2 = childBox.y1 + itemHeight; children[i].allocate(childBox, flags); - let atSeparator = (i == this._separatorIndex - 1); - columnIndex++; - if (columnIndex == columns || atSeparator) { + if (columnIndex == columns) { columnIndex = 0; } @@ -672,27 +676,7 @@ WellGrid.prototype = { } else { x += itemWidth; } - - if (atSeparator) { - y += separatorNatural + WELL_ITEM_VSPACING; - } } - - let separatorRowIndex = Math.ceil(this._separatorIndex / columns); - - /* Allocate the separator */ - let childBox = new Clutter.ActorBox(); - childBox.x1 = box.x1; - childBox.y1 = (itemHeight + WELL_ITEM_VSPACING) * separatorRowIndex; - this._cachedSeparatorY = childBox.y1; - childBox.x2 = box.x2; - childBox.y2 = childBox.y1+separatorNatural; - this._separator.allocate(childBox, flags); - }, - - setSeparatorIndex: function (index) { - this._separatorIndex = index; - this.actor.queue_relayout(); }, removeAll: function () { @@ -700,11 +684,6 @@ WellGrid.prototype = { for (let i = 0; i < itemChildren.length; i++) { itemChildren[i].destroy(); } - this._separatorIndex = 0; - }, - - isBeforeSeparator: function(x, y) { - return y < this._cachedSeparatorY; }, _getItemChildren: function () { @@ -744,8 +723,7 @@ WellGrid.prototype = { let minWidth = itemMinWidth * nColumns; let lastColumnIndex = nColumns - 1; - let separatorColumns = lastColumnIndex - ((lastColumnIndex + this._separatorIndex) % nColumns); - let rows = Math.ceil((children.length + separatorColumns) / nColumns); + let rows = Math.ceil(children.length / nColumns); let itemWidth; if (forWidth < 0) { @@ -847,7 +825,6 @@ AppWell.prototype = { let displays = [] this._addApps(favorites, true); - this._grid.setSeparatorIndex(favorites.length); this._addApps(running, false); this._displays = displays; }, @@ -870,9 +847,7 @@ AppWell.prototype = { let appSystem = Shell.AppSystem.get_default(); let app = null; - if (source instanceof BaseWellItem) { - app = source.appInfo; - } else if (source instanceof AppDisplayItem) { + if (source instanceof AppDisplayItem) { app = appSystem.lookup_cached_app(source.getId()); } else if (source instanceof Workspaces.WindowClone) { let appMonitor = Shell.AppMonitor.get_default(); @@ -889,22 +864,15 @@ AppWell.prototype = { let favoriteIds = this._appSystem.get_favorites(); let favoriteIdsObject = this._arrayValues(favoriteIds); - let dropIsFavorite = this._grid.isBeforeSeparator(x - this._grid.actor.x, - y - this._grid.actor.y); let srcIsFavorite = (id in favoriteIdsObject); - if (srcIsFavorite && (!dropIsFavorite)) { - Mainloop.idle_add(function () { - appSystem.remove_favorite(id); - return false; - }); - } else if ((!srcIsFavorite) && dropIsFavorite) { + if (srcIsFavorite) { + return false; + } else { Mainloop.idle_add(function () { appSystem.add_favorite(id); return false; }); - } else { - return false; } return true; diff --git a/js/ui/appIcon.js b/js/ui/appIcon.js index dd1aac686..e6d8ec8b8 100644 --- a/js/ui/appIcon.js +++ b/js/ui/appIcon.js @@ -382,11 +382,13 @@ AppIconMenu.prototype = { let iconsDiffer = false; let texCache = Shell.TextureCache.get_default(); - let firstIcon = windows[0].mini_icon; - for (let i = 1; i < windows.length; i++) { - if (!texCache.pixbuf_equal(windows[i].mini_icon, firstIcon)) { - iconsDiffer = true; - break; + if (windows.length > 0) { + let firstIcon = windows[0].mini_icon; + for (let i = 1; i < windows.length; i++) { + if (!texCache.pixbuf_equal(windows[i].mini_icon, firstIcon)) { + iconsDiffer = true; + break; + } } } @@ -405,9 +407,24 @@ AppIconMenu.prototype = { } this._appendWindows(otherWorkspaceWindows, iconsDiffer); - this._appendSeparator(); + if (windows.length > 0) + this._appendSeparator(); - this._newWindowMenuItem = this._appendMenuItem(null, _("New Window")); + this._newWindowMenuItem = windows.length > 0 ? this._appendMenuItem(null, _("New Window")) : null; + + let favorites = Shell.AppSystem.get_default().get_favorites(); + let id = this._source.appInfo.get_id(); + this._isFavorite = false; + for (let i = 0; i < favorites.length; i++) { + if (id == favorites[i]) { + this._isFavorite = true; + break; + } + } + if (windows.length > 0) + this._appendSeparator(); + this._toggleFavoriteMenuItem = this._appendMenuItem(null, this._isFavorite ? _("Remove from favorites") + : _("Add to favorites")); this._highlightedItem = null; }, @@ -564,6 +581,12 @@ AppIconMenu.prototype = { } else if (child == this._newWindowMenuItem) { this._source.appInfo.launch(); this.emit('activate-window', null); + } else if (child == this._toggleFavoriteMenuItem) { + let appSys = Shell.AppSystem.get_default(); + if (this._isFavorite) + appSys.remove_favorite(this._source.appInfo.get_id()); + else + appSys.add_favorite(this._source.appInfo.get_id()); } this.popdown(); },