summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@src.gnome.org>2012-11-08 14:51:04 +0100
committerDebarshi Ray <debarshir@gnome.org>2012-11-09 12:01:05 +0100
commit118515887ac5f1017cddd1ce41cf2c964b3665f0 (patch)
treef814a541a6d0fbdfcae1d52da3b5097842253f54
parent547efabcc71b16044e7776d41262c0f66aaf6eb1 (diff)
downloadempathy-118515887ac5f1017cddd1ce41cf2c964b3665f0.tar.gz
empathy-call: Handle yanking out of current video input
If the current video input is yanked out, we continue the call with only audio and desensitize the camera menu. Once the call is over we sensitize it again and continue. Fixes: https://bugzilla.gnome.org/687928
-rw-r--r--src/empathy-call-window.c8
-rw-r--r--src/empathy-camera-menu.c24
-rw-r--r--src/empathy-camera-menu.h3
3 files changed, 31 insertions, 4 deletions
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
index f49901b39..f64d5f9a8 100644
--- a/src/empathy-call-window.c
+++ b/src/empathy-call-window.c
@@ -2542,6 +2542,13 @@ empathy_call_window_disconnected (EmpathyCallWindow *self,
gtk_action_set_sensitive (priv->menu_fullscreen, FALSE);
gtk_widget_set_sensitive (priv->dtmf_panel, FALSE);
+ /* Create the video input and then turn on the camera
+ * menu, so that the active camera gets marked as such.
+ */
+ if (priv->video_input == NULL)
+ create_video_input (self);
+ empathy_camera_menu_set_sensitive (priv->camera_menu, TRUE);
+
could_reset_pipeline = empathy_call_window_reset_pipeline (self);
if (priv->call_state == CONNECTING)
@@ -3569,6 +3576,7 @@ empathy_call_window_remove_video_input (EmpathyCallWindow *self)
priv->video_preview = NULL;
gtk_widget_set_sensitive (priv->camera_button, FALSE);
+ empathy_camera_menu_set_sensitive (priv->camera_menu, FALSE);
}
static void
diff --git a/src/empathy-camera-menu.c b/src/empathy-camera-menu.c
index 9633d84fa..a0e0ca6fa 100644
--- a/src/empathy-camera-menu.c
+++ b/src/empathy-camera-menu.c
@@ -132,15 +132,16 @@ empathy_camera_menu_activate_cb (GtkAction *action,
{
EmpathyGstVideoSrc *video;
const gchar *device;
- gchar *current_device;
+ gchar *current_device = NULL;
if (self->priv->in_update)
return;
video = empathy_call_window_get_video_src (self->priv->window);
+ if (video != NULL)
+ current_device = empathy_video_src_dup_device (video);
device = gtk_action_get_name (action);
- current_device = empathy_video_src_dup_device (video);
/* Don't change the device if it's the currently used one */
if (!tp_strdiff (device, current_device))
@@ -158,12 +159,13 @@ empathy_camera_menu_update (EmpathyCameraMenu *self)
GList *l;
GtkUIManager *ui_manager;
EmpathyGstVideoSrc *video;
- gchar *current_camera;
+ gchar *current_camera = NULL;
ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
video = empathy_call_window_get_video_src (self->priv->window);
- current_camera = empathy_video_src_dup_device (video);
+ if (video != NULL)
+ current_camera = empathy_video_src_dup_device (video);
empathy_camera_menu_clean (self);
self->priv->ui_id = gtk_ui_manager_new_merge_id (ui_manager);
@@ -394,3 +396,17 @@ empathy_camera_menu_new (EmpathyCallWindow *window)
"window", window,
NULL);
}
+
+void
+empathy_camera_menu_set_sensitive (EmpathyCameraMenu *self,
+ gboolean sensitive)
+{
+ GtkUIManager *ui_manager;
+
+ gtk_action_group_set_sensitive (self->priv->action_group, sensitive);
+ if (sensitive) /* Mark the active camera as such. */
+ empathy_camera_menu_update (self);
+
+ ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
+ gtk_ui_manager_ensure_update (ui_manager);
+}
diff --git a/src/empathy-camera-menu.h b/src/empathy-camera-menu.h
index f105baf22..92760f67d 100644
--- a/src/empathy-camera-menu.h
+++ b/src/empathy-camera-menu.h
@@ -51,6 +51,9 @@ GType empathy_camera_menu_get_type (void) G_GNUC_CONST;
EmpathyCameraMenu * empathy_camera_menu_new (EmpathyCallWindow *window);
+void empathy_camera_menu_set_sensitive (EmpathyCameraMenu *self,
+ gboolean sensitive);
+
G_END_DECLS
#endif /* __EMPATHY_CAMERA_MENU_H__ */