Skip to content

Commit

Permalink
1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Noitidart committed May 15, 2014
1 parent ec3d8b5 commit da47958
Show file tree
Hide file tree
Showing 5 changed files with 252 additions and 77 deletions.
245 changes: 179 additions & 66 deletions chrome/content/MouseControl.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,76 @@ var MouseControl = {
prefs: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch('[email protected].'),
ss: Components.classes['@mozilla.org/browser/sessionstore;1'].getService(Components.interfaces.nsISessionStore),
fm: Components.classes["@mozilla.org/focus-manager;1"].getService(Components.interfaces.nsIFocusManager),
wm: Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator),
itabHistory: [],
lastUp: 0,
register: function(event) {
gBrowser.addEventListener("DOMMouseScroll", MouseControl.scrollHandler, true);
gBrowser.addEventListener("mousedown", MouseControl.downHandler, true);
gBrowser.addEventListener("mouseup", MouseControl.upHandler, true);
gBrowser.mPanelContainer.addEventListener("DOMMouseScroll", MouseControl.scrollHandler, true);
gBrowser.mPanelContainer.addEventListener("mousedown", MouseControl.downHandler, true);
gBrowser.mPanelContainer.addEventListener("mouseup", MouseControl.upHandler, true);
gBrowser.mPanelContainer.addEventListener("mousemove", MouseControl.moveHandler, true);
gBrowser.tabContainer.addEventListener("TabSelect", MouseControl.tabSeld, false);
gBrowser.tabContainer.addEventListener("TabOpen", MouseControl.tabOpened, false);
gBrowser.tabContainer.addEventListener("TabClose", MouseControl.tabClosed, false);
window.addEventListener('popupshowing', MouseControl.prevC, true);
gBrowser.addEventListener("click", MouseControl.clickHandler, true);
gBrowser.addEventListener("dblclick", MouseControl.dblHandler, true);
gBrowser.mPanelContainer.addEventListener('popupshowing', MouseControl.prevC, true);
gBrowser.mPanelContainer.addEventListener("click", MouseControl.clickHandler, true);
gBrowser.mPanelContainer.addEventListener("dblclick", MouseControl.dblHandler, true);
try {
MouseControl.notifier = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);
} catch(e) { }
MouseControl.zoomStyle = MouseControl.prefs.getIntPref('zoomStyle');
//detect and set zoomStyle
MouseControl.globalZoom = MouseControl.prefs.getCharPref('globalZoom');
if (MouseControl.globalZoom > 0) {
MouseControl.zoomStyle = 2;
} else {
if (gPrefService.getBoolPref('browser.zoom.siteSpecific')) {
MouseControl.zoomStyle = 1;
} else {
MouseControl.zoomStyle = 0;
}
}
MouseControl.prefs.setIntPref('zoomStyle',MouseControl.zoomStyle);
FullZoom.onLocationChange=function FullZoom_onLocationChange(aURI,aIsTabSwitch,aBrowser){MouseControl.globalZoom=MouseControl.prefs.getCharPref('globalZoom');MouseControl.zoomStyle=MouseControl.prefs.getIntPref('zoomStyle');if(!this.siteSpecfic&&MouseControl.zoomStyle==2&&MouseControl.globalZoom>0){if(ZoomManager.zoom!=MouseControl.globalZoom){ZoomManager.setZoomForBrowser(aBrowser||gBrowser.selectedBrowser,MouseControl.globalZoom)}return}if(!aURI||aIsTabSwitch&&!this.siteSpecific){return}if(aURI.spec=="about:blank"){this._applyPrefToSetting(undefined,aBrowser);return}var self=this;Services.contentPrefs.getPref(aURI,this.name,function(aResult){var browser=aBrowser||gBrowser.selectedBrowser;if(aURI.equals(browser.currentURI)){self._applyPrefToSetting(aResult,browser)}})};
FullZoom._applySettingToPref=function FullZoom__applySettingToPref(){MouseControl.globalZoom=MouseControl.prefs.getCharPref('globalZoom');MouseControl.zoomStyle=MouseControl.prefs.getIntPref('zoomStyle');if(!this.siteSpecfic&&MouseControl.zoomStyle==2&&MouseControl.globalZoom>0){var zoomLevel=ZoomManager.zoom;MouseControl.globalZoom=zoomLevel;MouseControl.prefs.setCharPref('globalZoom',zoomLevel)}if(!this.siteSpecific||gInPrintPreviewMode||content.document instanceof Ci.nsIImageDocument){return}var zoomLevel=ZoomManager.zoom;Services.contentPrefs.setPref(gBrowser.currentURI,this.name,zoomLevel)};
FullZoom.reset=function FullZoom_reset(){if(typeof this.globalValue!="undefined"){ZoomManager.zoom=this.globalValue}else{ZoomManager.reset()}MouseControl.globalZoom=MouseControl.prefs.getCharPref('globalZoom');MouseControl.zoomStyle=MouseControl.prefs.getIntPref('zoomStyle');if(!this.siteSpecfic&&MouseControl.zoomStyle==2&&MouseControl.globalZoom){var zoomLevel=ZoomManager.zoom;MouseControl.globalZoom=zoomLevel;MouseControl.prefs.setCharPref('globalZoom',zoomLevel)}this._removePref();};
},
unregister: function(event) {
gBrowser.removeEventListener("DOMMouseScroll", MouseControl.scrollHandler, true);
gBrowser.removeEventListener("mousedown", MouseControl.downHandler, true);
gBrowser.removeEventListener("mouseup", MouseControl.upHandler, true);
gBrowser.mPanelContainer.removeEventListener("DOMMouseScroll", MouseControl.scrollHandler, true);
gBrowser.mPanelContainer.removeEventListener("mousedown", MouseControl.downHandler, true);
gBrowser.mPanelContainer.removeEventListener("mouseup", MouseControl.upHandler, true);
gBrowser.tabContainer.removeEventListener("TabSelect", MouseControl.tabSeld, false);
gBrowser.tabContainer.removeEventListener("TabOpen", MouseControl.tabOpened, false);
gBrowser.tabContainer.removeEventListener("TabClose", MouseControl.tabClosed, false);
window.removeEventListener('popupshowing', MouseControl.prevC, true);
gBrowser.removeEventListener("click", MouseControl.clickHandler, true);
gBrowser.removeEventListener("dblclick", MouseControl.dblHandler, true);
},
undoCloseTab: function() {
MouseControl.closedTabUndid = true;
MouseControl.ss.undoCloseTab(window, 0);
gBrowser.mPanelContainer.removeEventListener('popupshowing', MouseControl.prevC, true);
gBrowser.mPanelContainer.removeEventListener("click", MouseControl.clickHandler, true);
gBrowser.mPanelContainer.removeEventListener("dblclick", MouseControl.dblHandler, true);
},
setInscroll: function() {
if (!MouseControl.inscroll) {
if ((!MouseControl.inscroll && MouseControl.down) || MouseControl.dblDown) {
if (window.fullScreen) {
FullScreen.mouseoverToggle(true);
gBrowser.mPanelContainer.removeEventListener("mousemove", FullScreen._collapseCallback, false);
if (MouseControl.dblDown && !MouseControl.duped) {
} else {
gBrowser.mPanelContainer.removeEventListener("mousemove", FullScreen._collapseCallback, false);
}
}
var menu = document.getElementById('contentAreaContextMenu');
if (menu.state == 'open') {
menu.hidePopup();
}
MouseControl.inscroll = true;
MouseControl.restoreFocus();
}
if (!MouseControl.inscroll && MouseControl.pdown) {
MouseControl.inscroll = true;
MouseControl.restoreFocus();
if (gBrowser.contentDocument.body) {
gBrowser.contentDocument.body.style.MozUserSelect = '-moz-none';
}
}
},
restoreFocus: function() {
if (MouseControl.focPreDown != MouseControl.fm.focusedElement) {
if (MouseControl.focPreDown) {
var dontFocusTags = ['EMBED', 'APPLET'];
Expand All @@ -53,7 +81,13 @@ var MouseControl = {
} else {
MouseControl.fm.clearFocus(gBrowser.selectedTab.ownerDocument.defaultView);
}
}
}
},
moveHandler: function(event) {
if (MouseControl.pdown && MouseControl.inscroll) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
},
scrollHandler: function(event) {
Expand All @@ -68,34 +102,13 @@ var MouseControl = {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
},
dblHandler: function(event) {
if (event.button == 2) {
document.getElementById('contentAreaContextMenu').hidePopup();
var relativeToCurrent = MouseControl.prefs.getBoolPref('newTabRelativeToCurrent');
if (relativeToCurrent) {
try {
gBrowser.loadOneTab(null, {inBackground: false, relatedToCurrent: true});
} catch (e) {
var newIndex = gBrowser.selectedTab._tPos + 1;
var newTab = gBrowser.addTab();
gBrowser.selectedTab = newTab;
gBrowser.moveTabTo(newTab, newIndex);
}
} else {
try {
gBrowser.loadOneTab(null, {inBackground: false, relatedToCurrent: false});
} catch (e) {
var newTab = gBrowser.addTab();
gBrowser.selectedTab = newTab;
}
} else if (MouseControl.pdown) {
MouseControl.setInscroll();
if (event.detail > 0) {
FullZoom.reduce();
} else {
FullZoom.enlarge();
}
focusAndSelectUrlBar();
MouseControl.lastUp = new Date().getTime();
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
},
cleanHistory: function() {
Expand Down Expand Up @@ -123,32 +136,73 @@ var MouseControl = {
MouseControl.closedTabUndid = false;
MouseControl.undoClosedTabTimeout = setTimeout(MouseControl.undoCloseTab, 200);
}
} else if (MouseControl.pdown) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
if (event.button == 1) {
MouseControl.restoreFocus();
MouseControl.inscroll = true;
FullZoom.reset();
if (MouseControl.zoomStyle == 2) {
MouseControl.globalZoom = 1;
}
}
} else {
if (event.button == 2 && !MouseControl.down) {
if (event.button == 2 && !MouseControl.down && !MouseControl.pdown) {
var secDblClickAble = MouseControl.prefs.getBoolPref('secDblClickAble');
if (secDblClickAble && new Date().getTime() - MouseControl.lastDown <= 200) {
//trigger dbl on mouse up
MouseControl.down = true;
MouseControl.dblDown = true;
MouseControl.setInscroll();
MouseControl.duped = false;
MouseControl.dupeTO = setTimeout(MouseControl.dupeTab,300);
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
return false;
}
MouseControl.down = true;
MouseControl.dblDown = false;
MouseControl.lastDown = new Date().getTime();
document.getElementById('contentAreaContextMenu').popupBoxObject.setConsumeRollupEvent(Components.interfaces.nsIPopupBoxObject.ROLLUP_NO_CONSUME);
MouseControl.focPreDown = MouseControl.fm.focusedElement;
MouseControl.scrollUpMoveRight = MouseControl.prefs.getBoolPref('scrollUpMoveRight');
MouseControl.down = true;
if (MouseControl.itabHistory.length > 0 && MouseControl.itabHistory[MouseControl.itabHistory.length - 1] != gBrowser.selectedTab) {
MouseControl.itabHistory.push(gBrowser.selectedTab);
}
}
var primClickAble = MouseControl.prefs.getBoolPref('primClickAble');
if (primClickAble && event.button == 0 && !MouseControl.down && !MouseControl.pdown) {
MouseControl.focPreDown = MouseControl.fm.focusedElement;
MouseControl.pdown = true;
}
}
},
upHandler: function(event) {
if (event.button == 0 || event.button == 1) {
if (MouseControl.down) {
if (MouseControl.down || (MouseControl.pdown && MouseControl.inscroll)) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
if (MouseControl.pdown) {
if (event.button == 0) {
MouseControl.offscroll();
}
}
} else if (event.button == 2) {
if (MouseControl.inscroll) {
if (MouseControl.inscroll || MouseControl.dblDown) {
MouseControl.lastUp = new Date().getTime();
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
if (MouseControl.dblDown && !MouseControl.duped) {
clearTimeout(MouseControl.dupeTO);
MouseControl.newTab();
}
if (MouseControl.itabHistory.length > 0 && MouseControl.itabHistory[MouseControl.itabHistory.length - 1] != gBrowser.selectedTab) {
MouseControl.itabHistory.push(gBrowser.selectedTab);
}
Expand All @@ -163,11 +217,17 @@ var MouseControl = {
if (event.button == 1) {
if (!MouseControl.closedTabUndid) {
clearTimeout(MouseControl.undoClosedTabTimeout);
if (MouseControl.itabHistory.length > 0 && MouseControl.itabHistory[MouseControl.itabHistory.length - 1] == gBrowser.selectedTab) {
MouseControl.itabHistory.splice(MouseControl.itabHistory.length - 1, 1);
if (new Date().getTime() < MouseControl.domainCloseLimit) {
MouseControl.closeDomain();
} else {
if (MouseControl.itabHistory.length > 0 && MouseControl.itabHistory[MouseControl.itabHistory.length - 1] == gBrowser.selectedTab) {
MouseControl.itabHistory.splice(MouseControl.itabHistory.length - 1, 1);
}
MouseControl.setInscroll();
MouseControl.targetHostname = gBrowser.currentURI.asciiHost;
gBrowser.removeCurrentTab();
MouseControl.domainCloseLimit = new Date().getTime() + 200;
}
MouseControl.setInscroll();
gBrowser.removeCurrentTab();
} else {
MouseControl.closedTabUndid = false;
}
Expand All @@ -186,6 +246,10 @@ var MouseControl = {
}
}
}
} else if (MouseControl.pdown) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
} else {
if (new Date().getTime() - MouseControl.lastUp <= 100) {
event.preventDefault();
Expand All @@ -194,6 +258,52 @@ var MouseControl = {
}
}
},
dblHandler: function(event) {
if (new Date().getTime() - MouseControl.lastUp <= 100) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
},
undoCloseTab: function() {
MouseControl.closedTabUndid = true;
MouseControl.ss.undoCloseTab(window, 0);
},
closeDomain: function() {
var closeThese = [];
var tabbrowser = MouseControl.wm.getMostRecentWindow('navigator:browser').gBrowser;
for (var index = 0; index < tabbrowser.tabContainer.childNodes.length; index++) {
// Get the next tab
var currentTab = tabbrowser.tabContainer.childNodes[index];
if (!currentTab.pinned && gBrowser.getBrowserForTab(currentTab).currentURI.asciiHost == MouseControl.targetHostname) {
closeThese.push(currentTab);
}
}
for (var i=0; i<closeThese.length; i++) {
tabbrowser.removeTab(closeThese[i]);
}
},
dupeTab: function() {
MouseControl.duped = true;
var newIndex = gBrowser.tabContainer.childNodes.length;
var tab = MouseControl.ss.duplicateTab(window, gBrowser.selectedTab);
var relativeToCurrent = MouseControl.prefs.getBoolPref('newTabRelativeToCurrent');
if (!relativeToCurrent) {
gBrowser.moveTabTo(tab, newIndex);
}
gBrowser.selectedTab = tab;
},
newTab: function() {
//document.getElementById('contentAreaContextMenu').hidePopup();
var relativeToCurrent = MouseControl.prefs.getBoolPref('newTabRelativeToCurrent');
if (relativeToCurrent) {
//var newIndex = gBrowser.selectedTab._tPos + 1;
eval('('+uneval(BrowserOpenTab).replace('inBackground:','relatedToCurrent:true,inBackground:')+')')();
//gBrowser.moveTabTo(gBrowser.tabContainer.childNodes[gBrowser.tabContainer.childNodes.length-1], newIndex);
} else {
BrowserOpenTab()
}
},
jumpTab: function() {
var jumped = false;
if (MouseControl.itabHistory.length > 1) {
Expand All @@ -216,26 +326,29 @@ var MouseControl = {
}
},
prevC: function(event) {
if (MouseControl.inscroll) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
} else if (new Date().getTime() - MouseControl.lastUp <= 100) {
if (MouseControl.inscroll || (new Date().getTime() - MouseControl.lastUp <= 100)) {
event.preventDefault();
event.returnValue = false;
event.stopPropagation();
}
},
offscroll: function() {
if (MouseControl.down || MouseControl.dblDown) {
clearTimeout(MouseControl.undoClosedTabTimeout);
if (MouseControl.itabHistory.length == 0 || MouseControl.itabHistory[MouseControl.itabHistory.length - 1] != gBrowser.selectedTab) {
MouseControl.itabHistory.push(gBrowser.selectedTab);
}
if (window.fullScreen) {
FullScreen.mouseoverToggle(false);
}
} else if (MouseControl.inscroll && MouseControl.pdown) {
if (gBrowser.contentDocument.body) {
gBrowser.contentDocument.body.style.MozUserSelect = '';
}
}
MouseControl.down = false;
MouseControl.pdown = false;
MouseControl.inscroll = false;
clearTimeout(MouseControl.undoClosedTabTimeout);
if (MouseControl.itabHistory.length == 0 || MouseControl.itabHistory[MouseControl.itabHistory.length - 1] != gBrowser.selectedTab) {
MouseControl.itabHistory.push(gBrowser.selectedTab);
}
if (window.fullScreen) {
FullScreen.mouseoverToggle(false);
}
},
tabSeld: function() {
if (!MouseControl.inscroll) {
Expand Down
Loading

0 comments on commit da47958

Please sign in to comment.