]> git.0d.be Git - empathy.git/commitdiff
empathy-call: Handle yanking out of current video input
authorDebarshi Ray <debarshir@src.gnome.org>
Thu, 8 Nov 2012 13:51:04 +0000 (14:51 +0100)
committerDebarshi Ray <debarshir@gnome.org>
Fri, 9 Nov 2012 11:01:05 +0000 (12:01 +0100)
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
src/empathy-call-window.c
src/empathy-camera-menu.c
src/empathy-camera-menu.h

index f49901b391e08b452f04aaa1c4be1d4573579cc6..f64d5f9a81fd6a32d9555dfd4a81afa6610c7cf3 100644 (file)
@@ -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
index 9633d84fa2b78eb2674c92e3c3c573f55230fde9..a0e0ca6fab72480cb917de7eede77aa58158ac54 100644 (file)
@@ -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);
+}
index f105baf22d218a0e9d26895490eafdc0046b3c3f..92760f67d06facb9a66adc6dd3a75686d96c07b7 100644 (file)
@@ -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__ */