From 0df5b952af45f50839a969cb0e21adfe488aa1e4 Mon Sep 17 00:00:00 2001
From: phasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Date: Wed, 20 Oct 2010 21:10:51 +0000
Subject: [PATCH] Patch from tsbere for new tab versus current tab behavior
 with the button bar: --- The attached patch to trunk adds the ability to set
 an open-ils.toolbar.defaultnewtab preference to cause the toolbar buttons to
 open in a new tab instead of the current tab. Holding the "accel" key
 (default of ctrl on windows/linux and command on mac) will do the opposite.

I only applied this to the five commands currently in use on the toolbar for now. Any other commands added to the toolbar will need to have their command handlers in menu.js updated.

Thomas Berezansky
Merrimack Valley Library Consortium


git-svn-id: svn://svn.open-ils.org/ILS/trunk@18431 dcc99617-32d9-48b4-a31d-7c20da2025e4
---
 .../xul/staff_client/chrome/content/main/menu.js   | 56 +++++++++++++++++-----
 .../staff_client/chrome/content/util/controller.js |  2 +-
 .../xul/staff_client/defaults/preferences/prefs.js |  2 +-
 3 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/Open-ILS/xul/staff_client/chrome/content/main/menu.js b/Open-ILS/xul/staff_client/chrome/content/main/menu.js
index 62a25d30ab..fa37d37fe4 100644
--- a/Open-ILS/xul/staff_client/chrome/content/main/menu.js
+++ b/Open-ILS/xul/staff_client/chrome/content/main/menu.js
@@ -261,8 +261,8 @@ main.menu.prototype = {
             /* Search Menu */
             'cmd_patron_search' : [
                 ['oncommand'],
-                function() {
-                    obj.set_patron_tab();
+                function(event) {
+                    obj.set_patron_tab({},{},event);
                 }
             ],
             'cmd_search_opac' : [
@@ -345,16 +345,16 @@ main.menu.prototype = {
             ],
             'cmd_copy_status' : [
                 ['oncommand'],
-                function() {
+                function(event) {
                     obj.data.stash_retrieve();
-                    obj.set_tab(obj.url_prefix(urls.XUL_COPY_STATUS),{},{});
+                    obj.command_tab(event,obj.url_prefix(urls.XUL_COPY_STATUS),{},{});
                 }
             ],
 
             /* Circulation Menu */
             'cmd_patron_register' : [
                 ['oncommand'],
-                function() {
+                function(event) {
 
                     function log_registration(p) {
                         try {
@@ -403,7 +403,8 @@ main.menu.prototype = {
                     obj.data.stash_retrieve();
                     var loc = obj.url_prefix( urls.XUL_BROWSER ) 
                         + '?url=' + window.escape( obj.url_prefix(urls.XUL_PATRON_EDIT) );
-                    obj.set_tab(
+                    obj.command_tab(
+                        event,
                         loc, 
                         {}, 
                         { 
@@ -428,9 +429,9 @@ main.menu.prototype = {
             ],
             'cmd_circ_checkin' : [
                 ['oncommand'],
-                function() { 
+                function(event) { 
                     obj.data.stash_retrieve();
-                    obj.set_tab(obj.url_prefix(urls.XUL_CHECKIN),{},{});
+                    obj.command_tab(event,obj.url_prefix(urls.XUL_CHECKIN),{},{});
                 }
             ],
             'cmd_circ_renew' : [
@@ -442,9 +443,9 @@ main.menu.prototype = {
             ],
             'cmd_circ_checkout' : [
                 ['oncommand'],
-                function() { 
+                function(event) { 
                     obj.data.stash_retrieve();
-                    obj.set_tab(obj.url_prefix(urls.XUL_PATRON_BARCODE_ENTRY),{},{});
+                    obj.command_tab(event,obj.url_prefix(urls.XUL_PATRON_BARCODE_ENTRY),{},{});
                 }
             ],
             'cmd_circ_hold_capture' : [
@@ -1351,6 +1352,37 @@ main.menu.prototype = {
         }
     },
 
+    'command_tab' : function(event,url,params,content_params) {
+        var newTab = false;
+        if(event && event.explicitOriginalTarget.nodeName == 'toolbarbutton' && event.explicitOriginalTarget.command == event.originalTarget.id) {
+            var value = xulG.pref.getIntPref('ui.key.accelKey');
+            switch(value) {
+                case 17:
+                    newTab = event.ctrlKey;
+                    break;
+                case 18:
+                    newTab = event.altKey;
+                    break;
+                case 224:
+                    newTab = event.metaKey;
+                    break;
+            }
+            try {
+                if(xulG.pref.getBoolPref('open-ils.toolbar.defaultnewtab')) {
+                    newTab = !newTab;
+                }
+            }
+            catch (e) {
+            }
+        }
+        if(newTab) {
+            this.new_tab(url,params,content_params);
+        }
+        else {
+            this.set_tab(url,params,content_params);
+        }
+    },
+
     'new_tab' : function(url,params,content_params) {
         var obj = this;
         var max_tabs = 0;
@@ -1489,11 +1521,11 @@ main.menu.prototype = {
             }
         }
     },
-    'set_patron_tab' : function(params,content_params) {
+    'set_patron_tab' : function(params,content_params,event) {
         var obj = this;
         var horizontal_interface = String( obj.data.hash.aous['ui.circ.patron_summary.horizontal'] ) == 'true';
         var url = obj.url_prefix( horizontal_interface ? urls.XUL_PATRON_HORIZ_DISPLAY : urls.XUL_PATRON_DISPLAY );
-        obj.set_tab(url,params ? params : {},content_params ? content_params : {});
+        obj.command_tab(event,url,params ? params : {},content_params ? content_params : {});
     },
     'new_patron_tab' : function(params,content_params) {
         var obj = this;
diff --git a/Open-ILS/xul/staff_client/chrome/content/util/controller.js b/Open-ILS/xul/staff_client/chrome/content/util/controller.js
index fb3411a375..facecfa340 100644
--- a/Open-ILS/xul/staff_client/chrome/content/util/controller.js
+++ b/Open-ILS/xul/staff_client/chrome/content/util/controller.js
@@ -34,7 +34,7 @@ util.controller.prototype = {
                             case 'oncommand':
                                 if (!this.window_knows_me_by) 
                                     throw('util.controller: on_command requires window_knows_me_by');
-                                var s = 'try{'+this.window_knows_me_by+".cmds."+i+"();}catch(E){alert(E);}";
+                                var s = 'try{'+this.window_knows_me_by+".cmds."+i+"(event);}catch(E){alert(E);}";
                                 cmd.setAttribute(ev_type, s);
                                 this.cmds[i] = this.control_map[i][1];
                             break;
diff --git a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
index 6d51b41bd2..91812d91eb 100644
--- a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
+++ b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
@@ -17,4 +17,4 @@ pref("open-ils.repository.revision","$Revision$");
 pref("open-ils.repository.date","$Date$");
 pref("open-ils.repository.id","$Id$");
 
-
+pref("open-ils.toolbar.defaultnewtab", false);
-- 
2.11.0