Guest User

Untitled

a guest
Nov 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. diff --git a/content/browser.js b/content/browser.js
  2. index e6e9556..13d1c27 100644
  3. --- a/content/browser.js
  4. +++ b/content/browser.js
  5. @@ -335,6 +335,16 @@ function GM_showPopup(aEvent) {
  6. GM_MenuCommander.onPopupShowing(menuCommandPopup);
  7. }
  8.  
  9. +/**
  10. + * Clean up the menu after it hides to prevent memory leaks
  11. + */
  12. +function GM_hidePopup(aEvent) {
  13. + var popup = aEvent.target;
  14. +
  15. + var menuCommandPopup = popup.getElementsByTagName('menupopup')[0];
  16. + if(menuCommandPopup) GM_MenuCommander.destroyItems(menuCommandPopup);
  17. +}
  18. +
  19.  
  20. // Short-term workaround for #1406: Tab Mix Plus breaks opening links in
  21. // new tabs because it depends on this function, and incorrectly checks for
  22. diff --git a/content/browser.xul b/content/browser.xul
  23. index 14cbb2f..d9af0eb 100644
  24. --- a/content/browser.xul
  25. +++ b/content/browser.xul
  26. @@ -52,6 +52,7 @@
  27. >
  28. <menupopup
  29. onpopupshowing="GM_showPopup(event);"
  30. + onpopuphiding="GM_hidePopup(event);"
  31. onclick="GM_popupClicked(event);event.stopPropagation();"
  32. oncommand="GM_popupClicked(event);event.stopPropagation();"
  33. oncontextmenu="event.preventDefault();"
  34. diff --git a/content/menucommander.js b/content/menucommander.js
  35. index 4c61ad8..8d37004 100644
  36. --- a/content/menucommander.js
  37. +++ b/content/menucommander.js
  38. @@ -6,7 +6,8 @@ GM_MenuCommander.createMenuItem = function(command) {
  39. var menuItem = document.createElement("menuitem");
  40. menuItem.setAttribute("label", command.name);
  41. if ('function' == typeof command.commandFunc) {
  42. - menuItem.addEventListener("command", command.commandFunc, true);
  43. + menuItem._callback = command.commandFunc;
  44. + menuItem.setAttribute("oncommand", "this._callback();");
  45. }
  46.  
  47. if (command.accessKey) {
  48. @@ -16,6 +17,14 @@ GM_MenuCommander.createMenuItem = function(command) {
  49. return menuItem;
  50. };
  51.  
  52. +GM_MenuCommander.destroyItems = function(aMenuPopup) {
  53. + var menuItems = aMenuPopup.getElementsByTagName("menuitem");
  54. + for(var i = menuItems.length - 1; i >= 0; i--) {
  55. + delete menuItems[i]._callback;
  56. + }
  57. + GM_util.emptyEl(aMenuPopup);
  58. +};
  59. +
  60. GM_MenuCommander.onPopupShowing = function(aMenuPopup) {
  61. GM_util.emptyEl(aMenuPopup);
Add Comment
Please, Sign In to add comment