зеркало из https://github.com/mozilla/gecko-dev.git
Bug 884340: Allow addons to add menu items to tools. r=mfinkle, f=sriram
This commit is contained in:
Родитель
fcf87a3142
Коммит
207035c31f
|
@ -99,6 +99,7 @@ abstract public class BrowserApp extends GeckoApp
|
|||
private AboutHome mAboutHome;
|
||||
protected Telemetry.Timer mAboutHomeStartupTimer = null;
|
||||
|
||||
private static final int GECKO_TOOLS_MENU = -1;
|
||||
private static final int ADDON_MENU_OFFSET = 1000;
|
||||
private class MenuItemInfo {
|
||||
public int id;
|
||||
|
@ -990,7 +991,8 @@ abstract public class BrowserApp extends GeckoApp
|
|||
info.enabled = message.optBoolean("enabled", true);
|
||||
info.visible = message.optBoolean("visible", true);
|
||||
info.checkable = message.optBoolean("checkable", false);
|
||||
info.parent = message.optInt("parent", -ADDON_MENU_OFFSET) + ADDON_MENU_OFFSET;
|
||||
int parent = message.optInt("parent", 0);
|
||||
info.parent = parent <= 0 ? parent : parent + ADDON_MENU_OFFSET;
|
||||
final MenuItemInfo menuItemInfo = info;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
|
@ -1384,6 +1386,26 @@ abstract public class BrowserApp extends GeckoApp
|
|||
}
|
||||
}
|
||||
|
||||
private Menu findParentMenu(Menu menu, MenuItem item) {
|
||||
final int itemId = item.getItemId();
|
||||
|
||||
final int count = (menu != null) ? menu.size() : 0;
|
||||
for (int i = 0; i < count; i++) {
|
||||
MenuItem menuItem = menu.getItem(i);
|
||||
if (menuItem.getItemId() == itemId) {
|
||||
return menu;
|
||||
}
|
||||
if (menuItem.hasSubMenu()) {
|
||||
Menu parent = findParentMenu(menuItem.getSubMenu(), item);
|
||||
if (parent != null) {
|
||||
return parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void addAddonMenuItem(final MenuItemInfo info) {
|
||||
if (mMenu == null) {
|
||||
if (mAddonMenuItemsCache == null)
|
||||
|
@ -1396,14 +1418,19 @@ abstract public class BrowserApp extends GeckoApp
|
|||
Menu menu;
|
||||
if (info.parent == 0) {
|
||||
menu = mMenu;
|
||||
} else if (info.parent == GECKO_TOOLS_MENU) {
|
||||
MenuItem tools = mMenu.findItem(R.id.tools);
|
||||
menu = tools != null ? tools.getSubMenu() : mMenu;
|
||||
} else {
|
||||
MenuItem parent = mMenu.findItem(info.parent);
|
||||
if (parent == null)
|
||||
return;
|
||||
|
||||
Menu parentMenu = findParentMenu(mMenu, parent);
|
||||
|
||||
if (!parent.hasSubMenu()) {
|
||||
mMenu.removeItem(parent.getItemId());
|
||||
menu = mMenu.addSubMenu(Menu.NONE, parent.getItemId(), Menu.NONE, parent.getTitle());
|
||||
parentMenu.removeItem(parent.getItemId());
|
||||
menu = parentMenu.addSubMenu(Menu.NONE, parent.getItemId(), Menu.NONE, parent.getTitle());
|
||||
if (parent.getIcon() != null)
|
||||
((SubMenu) menu).getItem().setIcon(parent.getIcon());
|
||||
} else {
|
||||
|
|
|
@ -40,7 +40,8 @@
|
|||
android:title="@string/desktop_mode"
|
||||
android:checkable="true" />
|
||||
|
||||
<item android:title="@string/tools"
|
||||
<item android:id="@+id/tools"
|
||||
android:title="@string/tools"
|
||||
android:icon="@drawable/ic_menu_tools">
|
||||
|
||||
<menu>
|
||||
|
|
|
@ -41,7 +41,8 @@
|
|||
android:title="@string/desktop_mode"
|
||||
android:checkable="true" />
|
||||
|
||||
<item android:title="@string/tools"
|
||||
<item android:id="@+id/tools"
|
||||
android:title="@string/tools"
|
||||
android:icon="@drawable/ic_menu_tools">
|
||||
|
||||
<menu>
|
||||
|
|
|
@ -41,7 +41,8 @@
|
|||
android:title="@string/desktop_mode"
|
||||
android:checkable="true" />
|
||||
|
||||
<item android:title="@string/tools"
|
||||
<item android:id="@+id/tools"
|
||||
android:title="@string/tools"
|
||||
android:icon="@drawable/ic_menu_tools">
|
||||
|
||||
<menu>
|
||||
|
|
|
@ -1576,7 +1576,8 @@ var NativeWindow = {
|
|||
|
||||
menu: {
|
||||
_callbacks: [],
|
||||
_menuId: 0,
|
||||
_menuId: 1,
|
||||
toolsMenuID: -1,
|
||||
add: function() {
|
||||
let options;
|
||||
if (arguments.length == 1) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче