diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
index a5d58bca8..e7b8e7f42 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
@@ -731,12 +731,11 @@ private void handleVideoEvent(final VideoEvent event)
{
if (event != null && logger.isTraceEnabled())
logger.trace("UI video event received originated in: "
- + event.getOrigin() + " and of type: " + event.getType());
+ + event.getOrigin() + " and is of type: " + event.getType());
synchronized (videoContainers)
{
- if ((event != null)
- && !event.isConsumed())
+ if ((event != null) && !event.isConsumed())
{
Component video = event.getVisualComponent();
diff --git a/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java b/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java
index c885b4e4d..a3eb47b77 100644
--- a/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java
+++ b/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java
@@ -416,14 +416,17 @@ public void videoUpdate(VideoEvent e)
/**
* Disposes of the visual Component of the local peer.
+ *
+ * @param component the visual Component of the local peer to
+ * dispose of
*/
- public void disposeLocalVisualComponent()
+ public void disposeLocalVisualComponent(Component component)
{
MediaDeviceSession deviceSession = getDeviceSession();
if(deviceSession instanceof VideoMediaDeviceSession)
((VideoMediaDeviceSession) deviceSession)
- .disposeLocalVisualComponent();
+ .disposeLocalVisualComponent(component);
}
/**
diff --git a/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java b/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java
index bf4c8f9ec..3b0f8a22f 100644
--- a/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java
+++ b/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java
@@ -594,16 +594,39 @@ public void paint(Graphics g)
canvas.setMaximumSize(iconSize);
canvas.setPreferredSize(iconSize);
- fireVideoEvent(VideoEvent.LOCAL, canvas, VideoEvent.LOCAL);
+ /*
+ * Set a clue so that we can recognize it if it gets received as an
+ * argument to #disposeLocalVisualComponent().
+ */
+ canvas.setName(DESKTOP_STREAMING_ICON);
+
+ fireVideoEvent(VideoEvent.VIDEO_ADDED, canvas, VideoEvent.LOCAL);
}
return canvas;
}
/**
* Disposes the local visual Component of the local peer.
+ *
+ * @param component the local visual Component of the local peer to
+ * dispose of
*/
- public void disposeLocalVisualComponent()
+ public void disposeLocalVisualComponent(Component component)
{
+ /*
+ * Desktop streaming does not use a Player but a Canvas with its name
+ * equals to the value of DESKTOP_STREAMING_ICON.
+ */
+ if ((component != null)
+ && DESKTOP_STREAMING_ICON.equals(component.getName()))
+ {
+ fireVideoEvent(
+ VideoEvent.VIDEO_REMOVED,
+ component,
+ VideoEvent.LOCAL);
+ return;
+ }
+
Player localPlayer = this.localPlayer;
if (localPlayer != null)
diff --git a/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java b/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java
index b76ec1c79..3e6a320e4 100644
--- a/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java
+++ b/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java
@@ -28,9 +28,12 @@ public interface VideoMediaStream
public Component createLocalVisualComponent();
/**
- * Dispose local visual Component of the local peer.
+ * Disposes of a specific local visual Component of the local peer.
+ *
+ * @param component the local visual Component of the local peer to
+ * dispose of
*/
- public void disposeLocalVisualComponent();
+ public void disposeLocalVisualComponent(Component component);
/**
* Returns a reference to the visual Component where video from the
diff --git a/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java b/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java
index 5a9fc9072..69f51e2e4 100644
--- a/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java
+++ b/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java
@@ -118,7 +118,7 @@ public Component createLocalVisualComponent(
@SuppressWarnings("unchecked") // work with MediaAware* in media package
public void disposeLocalVisualComponent(CallPeer peer, Component component)
{
- ((W)peer).getMediaHandler().disposeLocalVisualComponent();
+ ((W)peer).getMediaHandler().disposeLocalVisualComponent(component);
}
/**
diff --git a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java
index 3d0550dd5..3c15ffa1f 100644
--- a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java
+++ b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java
@@ -979,19 +979,22 @@ public void fireVideoEvent(VideoEvent event)
*/
public Component createLocalVisualComponent()
{
- return (videoStream == null || !isLocalVideoTransmissionEnabled())
- ? null : videoStream.createLocalVisualComponent();
+ return
+ ((videoStream == null) || !isLocalVideoTransmissionEnabled())
+ ? null
+ : videoStream.createLocalVisualComponent();
}
/**
- * Dispose local visual Component of the local peer.
+ * Disposes of a specific local visual Component of the local peer.
+ *
+ * @param component the local visual Component of the local peer to
+ * dispose of
*/
- public void disposeLocalVisualComponent()
+ public void disposeLocalVisualComponent(Component component)
{
- if(videoStream != null)
- {
- videoStream.disposeLocalVisualComponent();
- }
+ if (videoStream != null)
+ videoStream.disposeLocalVisualComponent(component);
}
/**