diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 423fcddb1f..f226af0f38 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -292,6 +292,7 @@ bbb.screensharePublish.restart.tooltip = Resume screen share bbb.screensharePublish.restart.label = Resume bbb.screensharePublish.maximizeRestoreBtn.toolTip = You cannot maximize this window. bbb.screensharePublish.closeBtn.toolTip = Stop Sharing and Close +bbb.screensharePublish.closeBtn.accessibilityName = Stop Sharing and Close Screen Sharing Publish Window bbb.screensharePublish.minimizeBtn.toolTip = Minimize bbb.screensharePublish.minimizeBtn.accessibilityName = Minimize the Screen Sharing Publish Window bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = Maximize the Screen Sharing Publish Window @@ -448,6 +449,8 @@ bbb.caption.transcript.noowner = None bbb.caption.transcript.youowner = You bbb.caption.transcript.pastewarning.title = Caption Paste Warning bbb.caption.transcript.pastewarning.text = Cannot paste text longer than {0} characters. You pasted {1} characters. +bbb.caption.transcript.inputArea.toolTip = Caption Input Area +bbb.caption.transcript.outputArea.toolTip = Caption Output Area bbb.caption.option.label = Options bbb.caption.option.language = Language: bbb.caption.option.language.tooltip = Select Caption Language diff --git a/bigbluebutton-client/resources/prod/lib/bbb_blinker.js b/bigbluebutton-client/resources/prod/lib/bbb_blinker.js index 1eb2bc2463..223b12e20c 100755 --- a/bigbluebutton-client/resources/prod/lib/bbb_blinker.js +++ b/bigbluebutton-client/resources/prod/lib/bbb_blinker.js @@ -64,6 +64,28 @@ function determineGlobalModifier() return modifier; } +function determineGlobalAlternateModifier() +{ + var browser = determineBrowser()[0]; + var modifier; + if (browser == "Firefox"){ + modifier = "control+"; + } + else if (browser == "Chrome"){ + modifier = "control+"; + } + else if (browser == "Microsoft Internet Explorer"){ + modifier = "control+shift+"; + } + //else if (browser == "Safari"){ + // modifier = "control+alt"; + //} + else{ + modifier = "control+shift"; + } + return modifier; +} + function determineBrowser() { // Browser name extraction code provided by http://www.javascripter.net/faq/browsern.htm diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/ShortcutHelpWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/ShortcutHelpWindow.mxml index 1891739534..10505e152e 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/ShortcutHelpWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/ShortcutHelpWindow.mxml @@ -80,10 +80,12 @@ with BigBlueButton; if not, see . private var modifier:String; private var globalModifier:String; + private var globalAlternateModifier:String; private function init():void { modifier = ExternalInterface.call("determineModifier"); globalModifier = ExternalInterface.call("determineGlobalModifier"); + globalAlternateModifier = ExternalInterface.call("determineGlobalAlternateModifier"); ShortcutOptions.initialize(); @@ -194,8 +196,10 @@ with BigBlueButton; if not, see . || convKey == ResourceUtil.getInstance().getString('bbb.shortcutkey.specialKeys.right') || convKey == ResourceUtil.getInstance().getString('bbb.shortcutkey.specialKeys.down')){ keyList.addItem({shortcut:convKey, func:(ResourceUtil.getInstance().getString(resource[i] + '.function'))}); - } - else{ + } else if (convKey == ResourceUtil.getInstance().getString('bbb.shortcutkey.specialKeys.minus') + || convKey == ResourceUtil.getInstance().getString('bbb.shortcutkey.specialKeys.plus')) { + keyList.addItem({shortcut:globalAlternateModifier + convKey, func:(ResourceUtil.getInstance().getString(resource[i] + '.function'))}); + } else{ keyList.addItem({shortcut:mod + convKey, func:(ResourceUtil.getInstance().getString(resource[i] + '.function'))}); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml old mode 100644 new mode 100755 index 6daca0b33c..3e948a5708 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml @@ -160,10 +160,13 @@ with BigBlueButton; if not, see . addTextTab(); } - var tab:Button = captionTabs.getTabAt(0); - if (tab != null) { - tab.setStyle("fillColors", new Array(0xFFAE00, 0xD3800A)); - } + captionTabs.selectedIndex = 0; + + // When the tab is switched we want to autofocus to the area that we likely want to immediately interact with, + // but if we move focus immediately the tab's contents aren't actually visible on the screen. This results in + // a screen reader not recognizing the focus shift. We need to delay the focus change for a couple of frames, + // but there isn't a good event to listen for so a short Timer was used instead. + textTab.delayedFocusTextArea(); } private function onTranscriptOwnerIDChange(o:Object):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as index f4dd6d2884..b60470ff1b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as @@ -19,6 +19,7 @@ package org.bigbluebutton.modules.caption.views { import com.asfusion.mate.events.Dispatcher; + import com.asfusion.mate.events.Listener; import flash.events.Event; import flash.events.KeyboardEvent; @@ -36,6 +37,7 @@ package org.bigbluebutton.modules.caption.views { import mx.controls.Button; import mx.events.FlexEvent; + import org.bigbluebutton.common.events.LocaleChangeEvent; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.modules.caption.events.SendEditCaptionHistoryEvent; import org.bigbluebutton.modules.caption.events.SendUpdateCaptionOwnerEvent; @@ -74,6 +76,8 @@ package org.bigbluebutton.modules.caption.views { private var outputArea:TextArea2; private var claimButton:Button; + private var focusSwitchTimer:Timer; + public function TextTab(startIndex:int, captionOptions:CaptionOptions) { super(); @@ -98,8 +102,6 @@ package org.bigbluebutton.modules.caption.views { addChild(outputArea); claimButton = new Button(); - claimButton.label = ResourceUtil.getInstance().getString('bbb.caption.option.takeowner'); - claimButton.toolTip = ResourceUtil.getInstance().getString('bbb.caption.option.takeowner.tooltip'); claimButton.height = 22; claimButton.visible = false; claimButton.includeInLayout = false; @@ -111,6 +113,12 @@ package org.bigbluebutton.modules.caption.views { _sendTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onSendTimerComplete); addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); + + var localeListener:Listener = new Listener(); + localeListener.type = LocaleChangeEvent.LOCALE_CHANGED; + localeListener.method = localeChanged; + + resourcesChanged(); } private function onCreationComplete(e:FlexEvent):void { @@ -120,6 +128,40 @@ package org.bigbluebutton.modules.caption.views { removeEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); } + private function localeChanged(e:Event):void{ + resourcesChanged(); + } + + override protected function resourcesChanged():void{ + super.resourcesChanged(); + + if (inputArea != null) { + inputArea.toolTip = ResourceUtil.getInstance().getString('bbb.caption.transcript.inputArea.toolTip'); + } + + if (outputArea != null) { + outputArea.toolTip = ResourceUtil.getInstance().getString('bbb.caption.transcript.outputArea.toolTip'); + } + + if (claimButton != null) { + claimButton.label = ResourceUtil.getInstance().getString('bbb.caption.option.takeowner'); + claimButton.toolTip = ResourceUtil.getInstance().getString('bbb.caption.option.takeowner.tooltip'); + } + } + + public function delayedFocusTextArea():void { + focusSwitchTimer = new Timer(250, 1); + focusSwitchTimer.addEventListener(TimerEvent.TIMER, function():void { + focusTextArea(); + }); + focusSwitchTimer.start(); + } + + public function focusTextArea():void { + var areaToFocus:TextArea2 = (inputArea.visible ? inputArea : outputArea); + areaToFocus.setFocus(); + } + public function setCurrentTranscript(t:Transcript):void { if (transcriptChangeWatcher != null && transcriptChangeWatcher.isWatching()) { transcriptChangeWatcher.unwatch(); @@ -134,9 +176,16 @@ package org.bigbluebutton.modules.caption.views { } public function transcriptOwnerIDChange(ownerID:String):void { + //check focus targets before switching visibility + var focusedTextArea:TextArea2 = null; + if (ownerID == UserManager.getInstance().getConference().getMyUserId()) { claimButton.visible = claimButton.includeInLayout = false; + if (focusManager && focusManager.getFocus() == outputArea) { + delayedFocusTextArea(); + } + //release text inputArea.visible = inputArea.includeInLayout = true; outputArea.visible = outputArea.includeInLayout = false; @@ -145,18 +194,15 @@ package org.bigbluebutton.modules.caption.views { } else { claimButton.visible = claimButton.includeInLayout = UserManager.getInstance().getConference().amIModerator(); - if (ownerID == "") { - //unclaimed text - inputArea.visible = inputArea.includeInLayout = false; - outputArea.visible = outputArea.includeInLayout = true; - inputArea.getInternalTextField().type = TextFieldType.DYNAMIC; - } else { - //claimed by other - inputArea.visible = inputArea.includeInLayout = false; - outputArea.visible = outputArea.includeInLayout = true; - inputArea.getInternalTextField().type = TextFieldType.DYNAMIC; + if (focusManager && focusManager.getFocus() == outputArea) { + delayedFocusTextArea(); } + //unclaimed text + inputArea.visible = inputArea.includeInLayout = false; + outputArea.visible = outputArea.includeInLayout = true; + inputArea.getInternalTextField().type = TextFieldType.DYNAMIC; + resetOverwriteVars(); resetTextToSendVars(); } @@ -189,6 +235,8 @@ package org.bigbluebutton.modules.caption.views { private function onClaimButtonClick(e:MouseEvent):void { claimTranscript(currentTranscript.locale, currentTranscript.localeCode, true); + + delayedFocusTextArea(); } private function claimTranscript(locale:String, localeCode:String, claim:Boolean):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AdvancedList.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AdvancedList.as index 7dcda88dba..fee79c20a2 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AdvancedList.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AdvancedList.as @@ -38,6 +38,10 @@ package org.bigbluebutton.modules.chat.views super(); } + override protected function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void { + //intentionally empty to not show on hover + } + override protected function measure():void { super.measure(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml index c7a3ade850..f5f7ad77be 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml @@ -133,6 +133,7 @@ with BigBlueButton; if not, see . windowControls.maximizeRestoreBtn.enabled = false; + titleBarOverlay.tabIndex = dsOptions.baseTabIndex; titleBarOverlay.focusEnabled = true; resourcesChanged(); @@ -529,8 +530,6 @@ with BigBlueButton; if not, see . private function switchView(showHelp:Boolean):void { helpInfoBox.visible = helpInfoBox.includeInLayout = showHelp; previewBox.visible = !showHelp; - - titleBarOverlay.tabIndex = dsOptions.baseTabIndex; shareTypeBox.visible = showHelp; cancelBtn.visible = cancelBtn.includeInLayout = showHelp; @@ -555,8 +554,8 @@ with BigBlueButton; if not, see . styleName="micSettingsWindowHelpButtonStyle" right="0" click="onHelpButtonClicked()" - toolTip="{ResourceUtil.getInstance().getString('bbb.screensharePublish.helpbutton.toolTip')}" - accessibilityName="{ResourceUtil.getInstance().getString('bbb.screensharePublish.helpbutton.accessibilityName')}"/> + toolTip="{ResourceUtil.getInstance().getString('bbb.screensharePublish.helpButton.toolTip')}" + accessibilityName="{ResourceUtil.getInstance().getString('bbb.screensharePublish.helpButton.accessibilityName')}"/>