From 69ad01b84bee64f5e7551657f76e24a50d681596 Mon Sep 17 00:00:00 2001 From: Dmitry Adzhiev Date: Mon, 8 Oct 2018 15:09:59 +0300 Subject: [PATCH] Fixed issue when remote control doesn't work when user enabled it during connection state --- ...DesktopSharingMouseAndKeyboardListener.java | 7 ++++--- ...ationSetDesktopSharingClientJabberImpl.java | 4 ++++ ...stractOperationSetDesktopSharingClient.java | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/call/DesktopSharingMouseAndKeyboardListener.java b/src/net/java/sip/communicator/impl/gui/main/call/DesktopSharingMouseAndKeyboardListener.java index feafb8ec71..5fe28e6972 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/DesktopSharingMouseAndKeyboardListener.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/DesktopSharingMouseAndKeyboardListener.java @@ -312,7 +312,10 @@ public void setVideoComponent(Component videoComponent) synchronized(videoComponentMutex) { - if(this.videoComponent == null) + boolean oldVideoComponentIsNull = this.videoComponent == null; + this.videoComponent = videoComponent; + + if(oldVideoComponentIsNull) { // If there was no old video component and a new one is set, // registers to the operation set. @@ -330,8 +333,6 @@ public void setVideoComponent(Component videoComponent) desktopSharingClient.removeRemoteControlListener(this); } } - - this.videoComponent = videoComponent; } } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetDesktopSharingClientJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetDesktopSharingClientJabberImpl.java index a03851a03b..0826f5fc40 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetDesktopSharingClientJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetDesktopSharingClientJabberImpl.java @@ -180,6 +180,10 @@ else if(inputIQ.getAction() == InputEvtAction.STOP) fireRemoteControlRevoked(callPeer); } } + else + { + addAddDeferredRemoteControlPeer(callPeerID); + } } } } diff --git a/src/net/java/sip/communicator/service/protocol/AbstractOperationSetDesktopSharingClient.java b/src/net/java/sip/communicator/service/protocol/AbstractOperationSetDesktopSharingClient.java index e3e0346612..83cde01092 100644 --- a/src/net/java/sip/communicator/service/protocol/AbstractOperationSetDesktopSharingClient.java +++ b/src/net/java/sip/communicator/service/protocol/AbstractOperationSetDesktopSharingClient.java @@ -80,6 +80,11 @@ public void peerStateChanged(CallPeerChangeEvent evt) private final List> listeners = new ArrayList>(); + /** + * Peers who granted/revoked remote control before it's listeners was + * added + */ + private List deferredRemoteControlPeers = new ArrayList<>(); /** * The ProtocolProviderService implementation which created this * instance and for which telephony conferencing services are being provided @@ -148,6 +153,12 @@ else if (l.equals(listener)) // function for this listener. if(this.removesNullAndRevokedControlPeer(peer.getPeerID()) != -1) listener.remoteControlGranted(new RemoteControlGrantedEvent(peer)); + + if (deferredRemoteControlPeers.contains(peer.getAddress())) + { + fireRemoteControlGranted(peer); + deferredRemoteControlPeers.remove(peer.getAddress()); + } } /** @@ -195,6 +206,13 @@ public void fireRemoteControlRevoked(CallPeer peer) this.removesNullAndRevokedControlPeer(peer.getPeerID()); } + public void addAddDeferredRemoteControlPeer(String address) + { + if (!deferredRemoteControlPeers.contains(address)) + { + deferredRemoteControlPeers.add(address); + } + } /** * Gets a list of RemoteControlListeners to be notified of remote * control access changes.