From 206822f141546b3ff2c38803e6bae0829aacc2e7 Mon Sep 17 00:00:00 2001 From: Chad Pilkey <capilkey@gmail.com> Date: Sat, 20 May 2017 16:06:23 -0400 Subject: [PATCH] fix race conditions in the presentation and whiteboard startup --- .../main/events/PresenterStatusEvent.as | 2 - .../present/ui/views/PresentationWindow.mxml | 51 +++++++++++-------- .../whiteboard/managers/WhiteboardManager.as | 7 ++- .../whiteboard/models/WhiteboardModel.as | 4 ++ .../whiteboard/views/WhiteboardCanvas.as | 2 + .../whiteboard/views/WhiteboardToolbar.mxml | 10 +--- 6 files changed, 40 insertions(+), 36 deletions(-) diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/PresenterStatusEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/PresenterStatusEvent.as index b6139dc226..691e753b69 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/PresenterStatusEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/PresenterStatusEvent.as @@ -25,12 +25,10 @@ package org.bigbluebutton.main.events public static const PRESENTER_NAME_CHANGE:String = "PRESENTER_NAME_CHANGE"; public static const SWITCH_TO_VIEWER_MODE:String = "VIEWER_MODE"; public static const SWITCH_TO_PRESENTER_MODE:String = "PRESENTER_MODE"; - public static const ANNOTATIONS_PERMISSION_CHANGE:String = "ANNOTATIONS_PERMISSION_CHANGE"; public var presenterName:String; public var assignerBy:Number; public var userID:String; - public var enableAnnotations:Boolean; public function PresenterStatusEvent(type:String) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/PresentationWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/PresentationWindow.mxml index 3aaf945041..e2009d8471 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/PresentationWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/PresentationWindow.mxml @@ -177,6 +177,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private var noticeSound:Sound = new noticeSoundClass() as Sound; private var whiteboardOverlay:WhiteboardCanvas = null; + private var delayedWhiteboardOverlayAdd:String; private var screenshareView:ScreenshareViewWindow = null; private function init():void{ @@ -200,7 +201,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. hotkeyCapture(); //Necessary now because of module loading race conditions - var t:Timer = new Timer(5000, 1); + var t:Timer = new Timer(2000, 1); t.addEventListener(TimerEvent.TIMER, requestWhiteboardCanvas); t.start(); @@ -517,7 +518,24 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. if (screenshareView) { screenshareView.removeOverlayCanvas(); } - } else LOGGER.debug("addWhiteboardCanvasToSlideView: NOT adding whiteboard canvas to Slide View."); + } else { + LOGGER.debug("addWhiteboardCanvasToSlideView: NOT adding whiteboard canvas to Slide View."); + delayedWhiteboardOverlayAdd = "slide"; + } + } + + private function addWhiteboardCanvasToScreenshareView():void { + if(whiteboardOverlay != null) { + LOGGER.debug("addWhiteboardCanvasToScreenshareView: Adding whiteboard canvas to Screenshare View"); + changeWhiteboardPageOnly("deskshare"); + slideView.removeOverlayCanvas(); + if (screenshareView) { + screenshareView.acceptOverlayCanvas(whiteboardOverlay); + } + } else { + LOGGER.debug("addWhiteboardCanvasToScreenshareView: NOT adding whiteboard canvas to Screenshare View."); + delayedWhiteboardOverlayAdd = "screenshare"; + } } override protected function resourcesChanged():void{ @@ -931,7 +949,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. btnPauseScreenshare.visible = false; if (UsersUtil.amIPresenter()) { setControlBarState("presenter"); - annotationsPermissionChanged(true); } else if(presenterTabs.getTabAt(SCREENSHARE_PUBLISH_TAB_INDEX).visible) { presenterTabs.getTabAt(SCREENSHARE_PUBLISH_TAB_INDEX).visible = false; presenterTabs.getTabAt(SCREENSHARE_PUBLISH_TAB_INDEX).includeInLayout = false; @@ -953,24 +970,13 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. presenterControls.visible = false; presenterControls.includeInLayout = false; pollStartBtn.visible = false; - annotationsPermissionChanged(false); } private function handleDesktopViewTabSelected():void { LOGGER.debug("Handling Desktop View Tab selected"); currentTabIndex = SCREENSHARE_VIEW_TAB_INDEX; - if (whiteboardOverlay != null && screenshareView != null) { - LOGGER.debug("Adding whiteboard layer to Deskshare View Canvas"); - changeWhiteboardPageOnly("deskshare"); - screenshareView.acceptOverlayCanvas(whiteboardOverlay); - slideView.removeOverlayCanvas(); - if(UsersUtil.amIPresenter()) { - annotationsPermissionChanged(true); - } - } else { - LOGGER.debug("openScreenshareViewTab: whiteboard overlay or desktop view canvas is null!"); - } + addWhiteboardCanvasToScreenshareView(); if (!pollVoteBox.visible) { btnActualSize.visible = true; @@ -1065,12 +1071,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. return presenterTabs.numElements == 3; } - private function annotationsPermissionChanged(enableAnnotations:Boolean):void { - var event:PresenterStatusEvent = new PresenterStatusEvent(PresenterStatusEvent.ANNOTATIONS_PERMISSION_CHANGE); - event.enableAnnotations = enableAnnotations; - dispatchEvent(event); - } - private function changeVideoDisplayMode():void { var e:ShareEvent = new ShareEvent(ShareEvent.CHANGE_VIDEO_DISPLAY_MODE); e.fullScreen = btnActualSize.selected; @@ -1112,6 +1112,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. public function receiveCanvas(wc:WhiteboardCanvas):void { whiteboardOverlay = wc; + + switch (delayedWhiteboardOverlayAdd) { + case "slide": + addWhiteboardCanvasToSlideView(); + break; + case "screenshare": + addWhiteboardCanvasToScreenshareView(); + break; + } } ]]> </mx:Script> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as index 29e447454a..b6ec2a207f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as @@ -29,6 +29,7 @@ package org.bigbluebutton.modules.whiteboard.managers import org.bigbluebutton.modules.present.events.PageLoadedEvent; import org.bigbluebutton.modules.whiteboard.WhiteboardCanvasDisplayModel; import org.bigbluebutton.modules.whiteboard.WhiteboardCanvasModel; + import org.bigbluebutton.modules.whiteboard.commands.GetWhiteboardAccessCommand; import org.bigbluebutton.modules.whiteboard.events.RequestNewCanvasEvent; import org.bigbluebutton.modules.whiteboard.events.WhiteboardButtonEvent; import org.bigbluebutton.modules.whiteboard.events.WhiteboardUpdateReceived; @@ -50,10 +51,8 @@ package org.bigbluebutton.modules.whiteboard.managers public function handleStartModuleEvent():void { - //Necessary now because of module loading race conditions - //var t:Timer = new Timer(1000, 1); - //t.addEventListener(TimerEvent.TIMER, addHighlighterCanvas); - //t.start(); + var dispatcher:Dispatcher = new Dispatcher(); + dispatcher.dispatchEvent(new GetWhiteboardAccessCommand()); } public function handleRequestNewCanvas(e:RequestNewCanvasEvent):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as index fa03f109d1..140ef52ada 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as @@ -154,6 +154,10 @@ package org.bigbluebutton.modules.whiteboard.models event.multiUser = multiUser; dispatchEvent(event); } + + public function get multiUser():Boolean { + return _multiUser; + } } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as index 2e16caeef5..75de21a246 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as @@ -78,6 +78,8 @@ package org.bigbluebutton.modules.whiteboard.views { textToolbar = new WhiteboardTextToolbar(); textToolbar.canvas = this; + whiteboardToolbar.whiteboardAccessModified(wbModel.multiUser); + //create the annotation display container this.addChild(graphicObjectHolder); graphicObjectHolder.x = 0; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml index 016ee5114a..6adeea26a6 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml @@ -38,7 +38,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mate:Listener type="{ShortcutEvent.UNDO_WHITEBOARD}" method="undoShortcut" /> <mate:Listener type="{ChangeMyRole.CHANGE_MY_ROLE_EVENT}" method="refreshRole" /> <mate:Listener type="{DisplaySlideEvent.DISPLAY_SLIDE_EVENT}" method="handleSlideLoaded" /> - <mate:Listener type="{PresenterStatusEvent.ANNOTATIONS_PERMISSION_CHANGE}" method="handleEnableAnnotations" /> <mx:Style> .colorPickerStyle { @@ -74,7 +73,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import org.bigbluebutton.common.Images; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.main.events.MadePresenterEvent; - import org.bigbluebutton.main.events.PresenterStatusEvent; import org.bigbluebutton.main.events.ShortcutEvent; import org.bigbluebutton.main.model.users.events.ChangeMyRole; import org.bigbluebutton.modules.present.events.DisplaySlideEvent; @@ -97,7 +95,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private var mousedOver:Boolean = false; private var slideLoaded:Boolean = false; - private var enableAnnotations:Boolean = true; public var canvas:WhiteboardCanvas; private var containerToOverlay:MDIWindow; @@ -225,7 +222,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function checkVisibility(e:MadePresenterEvent = null):void { - if (toolbarAllowed() && slideLoaded && enableAnnotations && (wbOptions.keepToolbarVisible || mousedOver) && !containerToOverlay.minimized) { + if (toolbarAllowed() && slideLoaded && (wbOptions.keepToolbarVisible || mousedOver) && !containerToOverlay.minimized) { setPositionAndDepth(); showToolbar(); } else { @@ -297,11 +294,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function get isModerator():Boolean { return UsersUtil.amIModerator(); } - - private function handleEnableAnnotations(e:PresenterStatusEvent):void { - enableAnnotations = e.enableAnnotations; - checkVisibility(); - } ]]> </mx:Script> -- GitLab