[gnome-shell] Add Add/Remove from favorites menu, unify lists more
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] Add Add/Remove from favorites menu, unify lists more
- Date: Fri, 2 Oct 2009 23:28:30 +0000 (UTC)
commit b3a5fc72fba8c474ba70c1acb1f14903f1661ca8
Author: Colin Walters <walters verbum org>
Date: Fri Sep 25 16:20:43 2009 -0400
Add Add/Remove from favorites menu, unify lists more
Also have inactive applications pop up a menu.
Add/Remove from favorites is now in the menu.
Concatenate the favorites/not-favorites instead of having a gap only
if you happened to have a not-divisible-by-4 number of favorites.
https://bugzilla.gnome.org/show_bug.cgi?id=596371
js/ui/appDisplay.js | 62 ++++++++++++--------------------------------------
js/ui/appIcon.js | 37 ++++++++++++++++++++++++-----
2 files changed, 45 insertions(+), 54 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 3ced546..bcdfcff 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 dd1aac6..e6d8ec8 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 = windows.length > 0 ? this._appendMenuItem(null, _("New Window")) : null;
- this._newWindowMenuItem = this._appendMenuItem(null, _("New Window"));
+ 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();
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]