]> git.0d.be Git - empathy.git/blobdiff - src/empathy-camera-menu.c
Merge branch 'gnome-3-8'
[empathy.git] / src / empathy-camera-menu.c
index 9633d84fa2b78eb2674c92e3c3c573f55230fde9..8dc037bdbc866f227d6f8e9875313e727825b2e9 100644 (file)
  * Thanks guys!
  */
 
-#include <config.h>
-
-#include <gtk/gtk.h>
-
-#include <libempathy/empathy-camera-monitor.h>
-#include <libempathy/empathy-gsettings.h>
-
+#include "config.h"
 #include "empathy-camera-menu.h"
 
+#include "empathy-camera-monitor.h"
+#include "empathy-gsettings.h"
+
 #define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include <libempathy/empathy-debug.h>
+#include "empathy-debug.h"
 
 struct _EmpathyCameraMenuPrivate
 {
@@ -132,15 +129,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))
@@ -156,14 +154,23 @@ static void
 empathy_camera_menu_update (EmpathyCameraMenu *self)
 {
   GList *l;
+  GtkAction *menu;
   GtkUIManager *ui_manager;
   EmpathyGstVideoSrc *video;
-  gchar *current_camera;
+  gboolean show_menu;
+  gchar *current_camera = NULL;
+  guint n_cameras;
 
   ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
 
+  menu = gtk_ui_manager_get_action (ui_manager, "/menubar1/edit/menucamera");
+  n_cameras = g_queue_get_length (self->priv->cameras);
+  show_menu = (n_cameras > 1);
+  gtk_action_set_visible (menu, show_menu);
+
   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 +401,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);
+}