[ekiga] Call Window: Reimplemented call control functions.



commit 8d84d157f06816f0a917dc25def35ea4d76c858a
Author: Damien Sandras <dsandras beip be>
Date:   Sun Jan 29 12:26:52 2012 +0100

    Call Window: Reimplemented call control functions.
    
    This one more step toward a functional call window
    as all call control functions are now moved in that
    window.

 src/gui/call_window.cpp |  386 ++++++++++++++++++++++++++++++++---------------
 src/gui/main_window.cpp |  326 +---------------------------------------
 2 files changed, 264 insertions(+), 448 deletions(-)
---
diff --git a/src/gui/call_window.cpp b/src/gui/call_window.cpp
index 885b87a..67d7d65 100644
--- a/src/gui/call_window.cpp
+++ b/src/gui/call_window.cpp
@@ -120,8 +120,6 @@ struct _EkigaCallWindowPrivate
   boost::shared_ptr<Ekiga::Call> current_call;
   unsigned calling_state;
 
-  GtkWidget *main_menu;
-
   GtkWidget *main_video_image;
   GtkWidget *info_text;
 
@@ -130,6 +128,7 @@ struct _EkigaCallWindowPrivate
   GtkTextTag *call_duration_tag;
   GtkTextTag *bandwidth_tag;
 
+  GtkWidget *main_menu;
   GtkWidget *main_toolbar;
   GtkWidget *call_panel_toolbar;
   GtkWidget *preview_button;
@@ -269,7 +268,7 @@ static void toggle_video_stream_pause_cb (GtkWidget * /*widget*/,
                                           gpointer data);
 
 static void transfer_current_call_cb (GtkWidget *widget,
-			  gpointer data);
+                                      gpointer data);
 
 static void audio_volume_changed_cb (GtkAdjustment * /*adjustment*/,
                                      gpointer data);
@@ -367,6 +366,28 @@ static void on_cleared_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager
                                 std::string reason,
                                 gpointer self);
 
+static void on_held_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                             boost::shared_ptr<Ekiga::Call>  /*call*/,
+                             gpointer self);
+
+static void on_retrieved_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
+                                  gpointer self);
+
+
+static void on_stream_paused_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                 boost::shared_ptr<Ekiga::Call>  /*call*/,
+                                 std::string /*name*/,
+                                 Ekiga::Call::StreamType type,
+                                 gpointer self);
+
+
+static void on_stream_resumed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
+                                  std::string /*name*/,
+                                  Ekiga::Call::StreamType type,
+                                  gpointer self);
+
 static gboolean on_stats_refresh_cb (gpointer self);
 
 /**/
@@ -410,6 +431,13 @@ static void ekiga_call_window_set_bandwidth (EkigaCallWindow *cw,
                                              int tfps,
                                              int rfps);
 
+static void ekiga_call_window_set_call_hold (EkigaCallWindow *cw,
+                                             bool is_on_hold);
+
+static void ekiga_call_window_set_channel_pause (EkigaCallWindow *cw,
+                                                 gboolean pause,
+                                                 gboolean is_video);
+
 static void ekiga_call_window_set_call_url (EkigaCallWindow *cw,
                                             const char *url);
 
@@ -418,6 +446,8 @@ G_GNUC_UNUSED static void ekiga_call_window_append_call_url (EkigaCallWindow *cw
 
 static const std::string ekiga_call_window_get_call_url (EkigaCallWindow *cw);
 
+static void ekiga_call_window_init_menu (EkigaCallWindow *cw);
+
 static void ekiga_call_window_init_uri_toolbar (EkigaCallWindow *cw);
 
 static GtkWidget * gm_cw_audio_settings_window_new (EkigaCallWindow *cw);
@@ -662,7 +692,8 @@ place_call_cb (GtkWidget * /*widget*/,
 
     } else {
 
-  //FIXME    ekiga_main_window_flash_message (cw, _("Could not connect to remote host"));
+      //FIXME
+      gm_statusbar_flash_message (GM_STATUSBAR (cw->priv->statusbar), _("Could not connect to remote host"));
       ekiga_call_window_update_calling_state (cw, Standby);
     }
   }
@@ -1235,6 +1266,52 @@ on_cleared_call_cb (G_GNUC_UNUSED boost::shared_ptr<Ekiga::CallManager> manager,
   ekiga_call_window_clear_signal_levels (cw);
 }
 
+static void
+on_held_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                 boost::shared_ptr<Ekiga::Call>  /*call*/,
+                 gpointer self)
+{
+  EkigaCallWindow *cw = EKIGA_CALL_WINDOW (self);
+
+  ekiga_call_window_set_call_hold (cw, true);
+  gm_statusbar_flash_message (GM_STATUSBAR (cw->priv->statusbar), _("Call on hold"));
+}
+
+static void
+on_retrieved_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                      boost::shared_ptr<Ekiga::Call>  /*call*/,
+                      gpointer self)
+{
+  EkigaCallWindow *cw = EKIGA_CALL_WINDOW (self);
+
+  ekiga_call_window_set_call_hold (cw, false);
+  gm_statusbar_flash_message (GM_STATUSBAR (cw->priv->statusbar), _("Call retrieved"));
+}
+
+static void
+on_stream_paused_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                     boost::shared_ptr<Ekiga::Call>  /*call*/,
+                     std::string /*name*/,
+                     Ekiga::Call::StreamType type,
+                     gpointer self)
+{
+  EkigaCallWindow *cw = EKIGA_CALL_WINDOW (self);
+
+  ekiga_call_window_set_channel_pause (cw, true, (type == Ekiga::Call::Video));
+}
+
+static void
+on_stream_resumed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
+                      boost::shared_ptr<Ekiga::Call>  /*call*/,
+                      std::string /*name*/,
+                      Ekiga::Call::StreamType type,
+                      gpointer self)
+{
+  EkigaCallWindow *cw = EKIGA_CALL_WINDOW (self);
+
+  ekiga_call_window_set_channel_pause (cw, false, (type == Ekiga::Call::Video));
+}
+
 static gboolean
 on_stats_refresh_cb (gpointer self)
 {
@@ -1281,14 +1358,13 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
     case Standby:
 
       /* Update the hold state */
-//      ekiga_call_window_set_call_hold (cw, FALSE);
+      ekiga_call_window_set_call_hold (cw, FALSE);
 
       /* Update the sensitivity, all channels are closed */
       ekiga_call_window_channels_menu_update_sensitivity (cw, TRUE, FALSE, FALSE);
       ekiga_call_window_channels_menu_update_sensitivity (cw, FALSE, FALSE, FALSE);
 
       /* Update the menus and toolbar items */
-      gtk_menu_set_sensitive (cw->priv->main_menu, "connect", TRUE);
       gtk_menu_set_sensitive (cw->priv->main_menu, "disconnect", FALSE);
       gtk_menu_section_set_sensitive (cw->priv->main_menu, "hold_call", FALSE);
       gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->hold_button), FALSE);
@@ -1307,7 +1383,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
     case Calling:
 
       /* Update the menus and toolbar items */
-      gtk_menu_set_sensitive (cw->priv->main_menu, "connect", FALSE);
       gtk_menu_set_sensitive (cw->priv->main_menu, "disconnect", TRUE);
       gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->preview_button), FALSE);
 
@@ -1319,7 +1394,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
     case Connected:
 
       /* Update the menus and toolbar items */
-      gtk_menu_set_sensitive (cw->priv->main_menu, "connect", FALSE);
       gtk_menu_set_sensitive (cw->priv->main_menu, "disconnect", TRUE);
       gtk_menu_section_set_sensitive (cw->priv->main_menu, "hold_call", TRUE);
       gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->hold_button), TRUE);
@@ -1585,6 +1659,80 @@ ekiga_call_window_set_bandwidth (EkigaCallWindow *cw,
 }
 
 static void
+ekiga_call_window_set_call_hold (EkigaCallWindow *cw,
+                                 bool is_on_hold)
+{
+  GtkWidget *child = NULL;
+
+  g_return_if_fail (EKIGA_IS_CALL_WINDOW (cw));
+
+  child = GTK_BIN (gtk_menu_get_widget (cw->priv->main_menu, "hold_call"))->child;
+
+  if (is_on_hold) {
+
+    if (GTK_IS_LABEL (child))
+      gtk_label_set_text_with_mnemonic (GTK_LABEL (child),
+					_("_Retrieve Call"));
+
+    /* Set the audio and video menu to unsensitive */
+    gtk_menu_set_sensitive (cw->priv->main_menu, "suspend_audio", FALSE);
+    gtk_menu_set_sensitive (cw->priv->main_menu, "suspend_video", FALSE);
+
+    ekiga_call_window_set_channel_pause (cw, TRUE, FALSE);
+    ekiga_call_window_set_channel_pause (cw, TRUE, TRUE);
+  }
+  else {
+
+    if (GTK_IS_LABEL (child))
+      gtk_label_set_text_with_mnemonic (GTK_LABEL (child),
+					_("H_old Call"));
+
+    gtk_menu_set_sensitive (cw->priv->main_menu, "suspend_audio", TRUE);
+    gtk_menu_set_sensitive (cw->priv->main_menu, "suspend_video", TRUE);
+
+    ekiga_call_window_set_channel_pause (cw, FALSE, FALSE);
+    ekiga_call_window_set_channel_pause (cw, FALSE, TRUE);
+  }
+
+  g_signal_handlers_block_by_func (cw->priv->hold_button,
+                                   (gpointer) hold_current_call_cb,
+                                   cw);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw->priv->hold_button),
+                                is_on_hold);
+  g_signal_handlers_unblock_by_func (cw->priv->hold_button,
+                                     (gpointer) hold_current_call_cb,
+                                     cw);
+}
+
+static void
+ekiga_call_window_set_channel_pause (EkigaCallWindow *cw,
+				     gboolean pause,
+				     gboolean is_video)
+{
+  GtkWidget *widget = NULL;
+  GtkWidget *child = NULL;
+  gchar *msg = NULL;
+
+  g_return_if_fail (EKIGA_IS_CALL_WINDOW (cw));
+
+  if (!pause && !is_video)
+    msg = _("Suspend _Audio");
+  else if (!pause && is_video)
+    msg = _("Suspend _Video");
+  else if (pause && !is_video)
+    msg = _("Resume _Audio");
+  else if (pause && is_video)
+    msg = _("Resume _Video");
+
+  widget = gtk_menu_get_widget (cw->priv->main_menu,
+			        is_video ? "suspend_video" : "suspend_audio");
+  child = GTK_BIN (widget)->child;
+
+  if (GTK_IS_LABEL (child))
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (child), msg);
+}
+
+static void
 ekiga_call_window_set_call_url (EkigaCallWindow *cw,
 				const char *url)
 {
@@ -1874,6 +2022,105 @@ gm_cw_audio_settings_window_new (EkigaCallWindow *cw)
 }
 
 static void
+ekiga_call_window_init_menu (EkigaCallWindow *cw)
+{
+  g_return_if_fail (cw != NULL);
+
+  cw->priv->main_menu = gtk_menu_bar_new ();
+
+  static MenuEntry gnomemeeting_menu [] =
+    {
+      GTK_MENU_NEW (_("_Call")),
+
+      GTK_MENU_ENTRY("disconnect", _("_Hangup"), _("Hangup the current call"),
+		     GM_STOCK_PHONE_HANG_UP_16, 'd',
+		     G_CALLBACK (show_window_cb), NULL, FALSE), // FIXME
+
+      GTK_MENU_SEPARATOR,
+
+      GTK_MENU_ENTRY("hold_call", _("H_old Call"), _("Hold the current call"),
+		     NULL, GDK_h,
+		     G_CALLBACK (hold_current_call_cb), cw,
+		     FALSE),
+      GTK_MENU_ENTRY("transfer_call", _("_Transfer Call"),
+		     _("Transfer the current call"),
+ 		     NULL, GDK_t,
+		     G_CALLBACK (transfer_current_call_cb), cw,
+		     FALSE),
+
+      GTK_MENU_SEPARATOR,
+
+      GTK_MENU_ENTRY("suspend_audio", _("Suspend _Audio"),
+		     _("Suspend or resume the audio transmission"),
+		     NULL, GDK_m,
+		     G_CALLBACK (toggle_audio_stream_pause_cb),
+		     cw, FALSE),
+      GTK_MENU_ENTRY("suspend_video", _("Suspend _Video"),
+		     _("Suspend or resume the video transmission"),
+		     NULL, GDK_p,
+		     G_CALLBACK (toggle_video_stream_pause_cb),
+		     cw, FALSE),
+
+      GTK_MENU_SEPARATOR,
+
+      GTK_MENU_NEW(_("_View")),
+
+      GTK_MENU_RADIO_ENTRY("local_video", _("_Local Video"),
+			   _("Local video image"),
+			   NULL, '1',
+			   G_CALLBACK (display_changed_cb),
+			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
+			   TRUE, FALSE),
+      GTK_MENU_RADIO_ENTRY("remote_video", _("_Remote Video"),
+			   _("Remote video image"),
+			   NULL, '2',
+			   G_CALLBACK (display_changed_cb),
+			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
+			   FALSE, FALSE),
+      GTK_MENU_RADIO_ENTRY("both_incrusted", _("_Picture-in-Picture"),
+			   _("Both video images"),
+			   NULL, '3',
+			   G_CALLBACK (display_changed_cb),
+			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
+			   FALSE, FALSE),
+      GTK_MENU_RADIO_ENTRY("both_incrusted_window", _("Picture-in-Picture in Separate _Window"),
+			   _("Both video images"),
+			   NULL, '4',
+			   G_CALLBACK (display_changed_cb),
+			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
+			   FALSE, FALSE),
+      GTK_MENU_SEPARATOR,
+
+      GTK_MENU_ENTRY("zoom_in", NULL, _("Zoom in"),
+		     GTK_STOCK_ZOOM_IN, '+',
+		     G_CALLBACK (zoom_in_changed_cb),
+		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+      GTK_MENU_ENTRY("zoom_out", NULL, _("Zoom out"),
+		     GTK_STOCK_ZOOM_OUT, '-',
+		     G_CALLBACK (zoom_out_changed_cb),
+		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+      GTK_MENU_ENTRY("normal_size", NULL, _("Normal size"),
+		     GTK_STOCK_ZOOM_100, '0',
+		     G_CALLBACK (zoom_normal_changed_cb),
+		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+      GTK_MENU_ENTRY("fullscreen", _("_Fullscreen"), _("Switch to fullscreen"),
+		     GTK_STOCK_ZOOM_IN, GDK_F11,
+		     G_CALLBACK (fullscreen_changed_cb),
+		     (gpointer) cw, FALSE),
+
+      GTK_MENU_END
+    };
+
+
+  gtk_build_menu (cw->priv->main_menu,
+		  gnomemeeting_menu,
+		  cw->priv->accel,
+		  cw->priv->statusbar);
+
+  gtk_widget_show_all (GTK_WIDGET (cw->priv->main_menu));
+}
+
+static void
 ekiga_call_window_init_uri_toolbar (EkigaCallWindow *cw)
 {
   GtkToolItem *item = NULL;
@@ -2047,7 +2294,8 @@ ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
 
   cw->priv->ekiga_call_window_call_button_connected = state;
   image = gtk_button_get_image (GTK_BUTTON (cw->priv->call_button));
-  gtk_image_set_from_stock (GTK_IMAGE (image), state ? GM_STOCK_PHONE_HANG_UP_24 : GM_STOCK_PHONE_PICK_UP_24, GTK_ICON_SIZE_LARGE_TOOLBAR);
+  gtk_image_set_from_stock (GTK_IMAGE (image), state ? GM_STOCK_PHONE_HANG_UP_24 : GM_STOCK_PHONE_PICK_UP_24,
+                            GTK_ICON_SIZE_LARGE_TOOLBAR);
 }
 
 static gboolean
@@ -2179,13 +2427,13 @@ ekiga_call_window_connect_engine_signals (EkigaCallWindow *cw)
 
   conn = call_core->cleared_call.connect (boost::bind (&on_cleared_call_cb, _1, _2, _3, (gpointer) cw));
   cw->priv->connections.push_back (conn);
-/*
+
   conn = call_core->held_call.connect (boost::bind (&on_held_call_cb, _1, _2, (gpointer) cw));
   cw->priv->connections.push_back (conn);
-  
+
   conn = call_core->retrieved_call.connect (boost::bind (&on_retrieved_call_cb, _1, _2, (gpointer) cw));
   cw->priv->connections.push_back (conn);
-  
+/*
   conn = call_core->missed_call.connect (boost::bind (&on_missed_call_cb, _1, _2, (gpointer) cw));
   cw->priv->connections.push_back (conn);
 
@@ -2194,124 +2442,12 @@ ekiga_call_window_connect_engine_signals (EkigaCallWindow *cw)
   
   conn = call_core->stream_closed.connect (boost::bind (&on_stream_closed_cb, _1, _2, _3, _4, _5, (gpointer) cw));
   cw->priv->connections.push_back (conn);
-
+*/
   conn = call_core->stream_paused.connect (boost::bind (&on_stream_paused_cb, _1, _2, _3, _4, (gpointer) cw));
   cw->priv->connections.push_back (conn);
 
   conn = call_core->stream_resumed.connect (boost::bind (&on_stream_resumed_cb, _1, _2, _3, _4, (gpointer) cw));
   cw->priv->connections.push_back (conn);
-
-  conn = call_core->errors.connect (boost::bind (&on_handle_errors, _1, (gpointer) cw));
-  cw->priv->connections.push_back (conn);
-*/
-}
-
-static void
-ekiga_call_window_init_menu (EkigaCallWindow *cw)
-{
-  g_return_if_fail (cw != NULL);
-
-  cw->priv->main_menu = gtk_menu_bar_new ();
-
-  static MenuEntry gnomemeeting_menu [] =
-    {
-      GTK_MENU_NEW (_("_Chat")),
-
-      GTK_MENU_ENTRY("connect", _("Ca_ll"), _("Place a new call"),
-		     GM_STOCK_PHONE_PICK_UP_16, 'o',
-		     G_CALLBACK (show_window_cb), NULL, TRUE),
-
-      GTK_MENU_ENTRY("disconnect", _("_Hangup"), _("Hangup the current call"),
-		     GM_STOCK_PHONE_HANG_UP_16, 'd',
-		     G_CALLBACK (show_window_cb), NULL, FALSE),
-
-      GTK_MENU_SEPARATOR,
-
-      GTK_MENU_ENTRY("hold_call", _("H_old Call"), _("Hold the current call"),
-		     NULL, GDK_h,
-		     G_CALLBACK (hold_current_call_cb), cw,
-		     FALSE),
-      GTK_MENU_ENTRY("transfer_call", _("_Transfer Call"),
-		     _("Transfer the current call"),
- 		     NULL, GDK_t,
-		     G_CALLBACK (transfer_current_call_cb), cw,
-		     FALSE),
-
-      GTK_MENU_SEPARATOR,
-
-      GTK_MENU_ENTRY("suspend_audio", _("Suspend _Audio"),
-		     _("Suspend or resume the audio transmission"),
-		     NULL, GDK_m,
-		     G_CALLBACK (toggle_audio_stream_pause_cb),
-		     cw, FALSE),
-      GTK_MENU_ENTRY("suspend_video", _("Suspend _Video"),
-		     _("Suspend or resume the video transmission"),
-		     NULL, GDK_p,
-		     G_CALLBACK (toggle_video_stream_pause_cb),
-		     cw, FALSE),
-
-      GTK_MENU_SEPARATOR,
-
-      GTK_MENU_ENTRY("close", NULL, _("Close the call window"),
-		     GTK_STOCK_CLOSE, 'W',
-		     G_CALLBACK (window_closed_from_menu_cb),
-		     (gpointer) cw, TRUE),
-
-      GTK_MENU_NEW(_("_View")),
-
-      GTK_MENU_RADIO_ENTRY("local_video", _("_Local Video"),
-			   _("Local video image"),
-			   NULL, '1',
-			   G_CALLBACK (display_changed_cb),
-			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
-			   TRUE, FALSE),
-      GTK_MENU_RADIO_ENTRY("remote_video", _("_Remote Video"),
-			   _("Remote video image"),
-			   NULL, '2',
-			   G_CALLBACK (display_changed_cb),
-			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
-			   FALSE, FALSE),
-      GTK_MENU_RADIO_ENTRY("both_incrusted", _("_Picture-in-Picture"),
-			   _("Both video images"),
-			   NULL, '3',
-			   G_CALLBACK (display_changed_cb),
-			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
-			   FALSE, FALSE),
-      GTK_MENU_RADIO_ENTRY("both_incrusted_window", _("Picture-in-Picture in Separate _Window"),
-			   _("Both video images"),
-			   NULL, '4',
-			   G_CALLBACK (display_changed_cb),
-			   (gpointer) VIDEO_DISPLAY_KEY "video_view",
-			   FALSE, FALSE),
-      GTK_MENU_SEPARATOR,
-
-      GTK_MENU_ENTRY("zoom_in", NULL, _("Zoom in"),
-		     GTK_STOCK_ZOOM_IN, '+',
-		     G_CALLBACK (zoom_in_changed_cb),
-		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
-      GTK_MENU_ENTRY("zoom_out", NULL, _("Zoom out"),
-		     GTK_STOCK_ZOOM_OUT, '-',
-		     G_CALLBACK (zoom_out_changed_cb),
-		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
-      GTK_MENU_ENTRY("normal_size", NULL, _("Normal size"),
-		     GTK_STOCK_ZOOM_100, '0',
-		     G_CALLBACK (zoom_normal_changed_cb),
-		     (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
-      GTK_MENU_ENTRY("fullscreen", _("_Fullscreen"), _("Switch to fullscreen"),
-		     GTK_STOCK_ZOOM_IN, GDK_F11,
-		     G_CALLBACK (fullscreen_changed_cb),
-		     (gpointer) cw, FALSE),
-
-      GTK_MENU_END
-    };
-
-
-  gtk_build_menu (cw->priv->main_menu,
-		  gnomemeeting_menu,
-		  cw->priv->accel,
-		  cw->priv->statusbar);
-
-  gtk_widget_show_all (GTK_WIDGET (cw->priv->main_menu));
 }
 
 static void
diff --git a/src/gui/main_window.cpp b/src/gui/main_window.cpp
index 560a584..984bbe8 100644
--- a/src/gui/main_window.cpp
+++ b/src/gui/main_window.cpp
@@ -139,9 +139,6 @@ struct _EkigaMainWindowPrivate
   GtkWidget *statusbar;
   GtkWidget *statusbar_ebox;
 
-  /* Misc Dialogs */
-  GtkWidget *transfer_call_popup;
-
   /* Calls */
   boost::shared_ptr<Ekiga::Call> current_call;
   unsigned calling_state;
@@ -174,6 +171,7 @@ enum {
 
 /* Non-GUI functions */
 
+//FIXME Does not seem to be used anymore
 struct name_from_uri_helper
 {
   name_from_uri_helper (boost::shared_ptr<Ekiga::PresenceCore> presence_core_,
@@ -271,39 +269,6 @@ static void  show_widget_cb (GtkWidget * /*widget*/,
                              gpointer data);
 
 
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Set the current active call on hold.
- * PRE          :  /
- */
-static void hold_current_call_cb (GtkWidget *,
-				  gpointer);
-
-
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Set the current active call audio channel on pause or not
- * PRE          :  a pointer to the main window
- */
-static void toggle_audio_stream_pause_cb (GtkWidget *,
-                                          gpointer);
-
-
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Set the current active call video channel on pause or not
- * PRE          :  a pointer to the main window
- */
-static void toggle_video_stream_pause_cb (GtkWidget *,
-                                          gpointer);
-
-
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Creates a dialog to transfer the current call and transfer
- * 		   it if required.
- * PRE          :  The parent window.
- */
-static void transfer_current_call_cb (GtkWidget *,
-				      gpointer);
-
-
 /* DESCRIPTION  :  This callback is called when the user changes the
  *                 page in the main notebook.
  * BEHAVIOR     :  Update the config key accordingly.
@@ -369,27 +334,6 @@ static void ekiga_main_window_add_device_dialog_show (EkigaMainWindow *main_wind
 
 
 /* DESCRIPTION  :  /
- * BEHAVIOR     :  Update the main window hold call menu and toolbar items
- * 		   following the call is on hold (TRUE) or not (FALSE).
- * PRE          :  The main window GMObject.
- */
-static void ekiga_main_window_set_call_hold (EkigaMainWindow *main_window,
-                                             bool is_on_hold);
-
-
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Update the main window pause channel menu and toolbar items
- * 		   following the channel is paused (TRUE) or not (FALSE). The
- * 		   last argument is true if we are modifying a video channel
- * 		   item.
- * PRE          :  The main window GMObject.
- */
-static void ekiga_main_window_set_channel_pause (EkigaMainWindow *main_window,
-					  gboolean pause,
-					  gboolean is_video);
-
-
-/* DESCRIPTION  :  /
  * BEHAVIOR     :  Update the main window sensitivity following the opened
  *                 and closed audio and video channels. It also updates
  *                 the state of the video preview button.
@@ -406,17 +350,6 @@ static void ekiga_main_window_update_sensitivity (EkigaMainWindow *main_window,
 					   bool is_transmitting);
 
 
-/* DESCRIPTION  :  /
- * BEHAVIOR     :  Runs a dialog to transfer a call.
- * 		   Returns TRUE if the user chose to transfer.
- * PRE          :  The main window GMObject, the parent window, the URL
- * 		   to put in the dialog as default.
- */
-static gboolean ekiga_main_window_transfer_dialog_run (EkigaMainWindow *main_window,
-					        GtkWidget *parent_window,
-					        const char *u);
-
-
 /* DESCRIPTION   :  /
  * BEHAVIOR      : Flashes a message on the statusbar during a few seconds.
  *                 Removes the previous message.
@@ -731,28 +664,6 @@ static void on_incoming_call_gone_cb (gpointer self)
 }
 
 
-static void on_held_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
-                             boost::shared_ptr<Ekiga::Call>  /*call*/,
-                             gpointer self)
-{
-  EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
-
-  ekiga_main_window_set_call_hold (mw, true);
-  ekiga_main_window_flash_message (mw, "%s", _("Call on hold"));
-}
-
-
-static void on_retrieved_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
-                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
-                                  gpointer self)
-{
-  EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (self);
-
-  ekiga_main_window_set_call_hold (mw, false);
-  ekiga_main_window_flash_message (mw, "%s", _("Call retrieved"));
-}
-
-
 static void on_missed_call_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
                                boost::shared_ptr<Ekiga::Call>  call,
                                gpointer self)
@@ -858,27 +769,6 @@ static void on_stream_closed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manage
                                         is_video ? mw->priv->video_transmission_active : mw->priv->audio_transmission_active);
 }
 
-
-static void on_stream_paused_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
-                                 boost::shared_ptr<Ekiga::Call>  /*call*/,
-                                 std::string /*name*/,
-                                 Ekiga::Call::StreamType type,
-                                 gpointer self)
-{
-  ekiga_main_window_set_channel_pause (EKIGA_MAIN_WINDOW (self), true, (type == Ekiga::Call::Video));
-}
-
-
-static void on_stream_resumed_cb (boost::shared_ptr<Ekiga::CallManager>  /*manager*/,
-                                  boost::shared_ptr<Ekiga::Call>  /*call*/,
-                                  std::string /*name*/,
-                                  Ekiga::Call::StreamType type,
-                                  gpointer self)
-{
-  ekiga_main_window_set_channel_pause (EKIGA_MAIN_WINDOW (self), false, (type == Ekiga::Call::Video));
-}
-
-
 static bool on_handle_errors (std::string error,
                               gpointer data)
 {
@@ -1204,7 +1094,7 @@ panel_section_changed_nt (G_GNUC_UNUSED gpointer id,
 }
 
 
-static void 
+static void
 pull_trigger_cb (GtkWidget * /*widget*/,
                  gpointer data)
 {
@@ -1216,7 +1106,7 @@ pull_trigger_cb (GtkWidget * /*widget*/,
 }
 
 
-static void 
+static void
 show_widget_cb (GtkWidget * /*widget*/,
                 gpointer data)
 {
@@ -1226,52 +1116,6 @@ show_widget_cb (GtkWidget * /*widget*/,
 }
 
 
-static void 
-hold_current_call_cb (G_GNUC_UNUSED GtkWidget *widget,
-		      gpointer data)
-{
-  EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
-
-  if (mw->priv->current_call)
-    mw->priv->current_call->toggle_hold ();
-}
-
-
-static void
-toggle_audio_stream_pause_cb (GtkWidget * /*widget*/,
-                              gpointer data)
-{
-  EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
-
-  if (mw->priv->current_call)
-    mw->priv->current_call->toggle_stream_pause (Ekiga::Call::Audio);
-}
-
-
-static void
-toggle_video_stream_pause_cb (GtkWidget * /*widget*/,
-                              gpointer data)
-{
-  EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
-
-  if (mw->priv->current_call)
-    mw->priv->current_call->toggle_stream_pause (Ekiga::Call::Video);
-}
-
-
-static void 
-transfer_current_call_cb (G_GNUC_UNUSED GtkWidget *widget,
-			  gpointer data)
-{
-  GtkWidget *mw = NULL;
-
-  g_return_if_fail (data != NULL);
-
-  mw = GnomeMeeting::Process ()->GetMainWindow ();
-
-  ekiga_main_window_transfer_dialog_run (EKIGA_MAIN_WINDOW (mw), GTK_WIDGET (data), NULL);  
-}
-
 static void
 panel_section_changed_cb (G_GNUC_UNUSED GtkNotebook *notebook,
                           G_GNUC_UNUSED gpointer page,
@@ -1351,82 +1195,6 @@ statusbar_clicked_cb (G_GNUC_UNUSED GtkWidget *widget,
   return FALSE;
 }
 
-static void
-ekiga_main_window_set_call_hold (EkigaMainWindow *mw,
-                                 bool is_on_hold)
-{
-  GtkWidget *child = NULL;
-
-  g_return_if_fail (EKIGA_IS_MAIN_WINDOW (mw));
-
-  child = GTK_BIN (gtk_menu_get_widget (mw->priv->main_menu, "hold_call"))->child;
-
-  if (is_on_hold) {
-
-    if (GTK_IS_LABEL (child))
-      gtk_label_set_text_with_mnemonic (GTK_LABEL (child),
-					_("_Retrieve Call"));
-
-    /* Set the audio and video menu to unsensitive */
-    gtk_menu_set_sensitive (mw->priv->main_menu, "suspend_audio", FALSE);
-    gtk_menu_set_sensitive (mw->priv->main_menu, "suspend_video", FALSE);
-
-    ekiga_main_window_set_channel_pause (mw, TRUE, FALSE);
-    ekiga_main_window_set_channel_pause (mw, TRUE, TRUE);
-  }
-  else {
-
-    if (GTK_IS_LABEL (child))
-      gtk_label_set_text_with_mnemonic (GTK_LABEL (child),
-					_("H_old Call"));
-
-    gtk_menu_set_sensitive (mw->priv->main_menu, "suspend_audio", TRUE);
-    gtk_menu_set_sensitive (mw->priv->main_menu, "suspend_video", TRUE);
-
-    ekiga_main_window_set_channel_pause (mw, FALSE, FALSE);
-    ekiga_main_window_set_channel_pause (mw, FALSE, TRUE);
-  }
-
-/*  g_signal_handlers_block_by_func (mw->priv->hold_button,
-                                   (gpointer) hold_current_call_cb,
-                                   mw);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mw->priv->hold_button),
-                                is_on_hold);
-  g_signal_handlers_unblock_by_func (mw->priv->hold_button,
-                                     (gpointer) hold_current_call_cb,
-                                     mw);
-                                     */ //FIXME
-}
-
-
-static void
-ekiga_main_window_set_channel_pause (EkigaMainWindow *mw,
-				     gboolean pause,
-				     gboolean is_video)
-{
-  GtkWidget *widget = NULL;
-  GtkWidget *child = NULL;
-  gchar *msg = NULL;
-
-  g_return_if_fail (EKIGA_IS_MAIN_WINDOW (mw));
-
-  if (!pause && !is_video)
-    msg = _("Suspend _Audio");
-  else if (!pause && is_video)
-    msg = _("Suspend _Video");
-  else if (pause && !is_video)
-    msg = _("Resume _Audio");
-  else if (pause && is_video)
-    msg = _("Resume _Video");
-
-  widget = gtk_menu_get_widget (mw->priv->main_menu,
-			        is_video ? "suspend_video" : "suspend_audio");
-  child = GTK_BIN (widget)->child;
-
-  if (GTK_IS_LABEL (child))
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (child), msg);
-}
-
 
 static void
 ekiga_main_window_update_sensitivity (EkigaMainWindow *mw,
@@ -1650,56 +1418,6 @@ ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
 }
 #endif
 
-static gboolean
-ekiga_main_window_transfer_dialog_run (EkigaMainWindow *mw,
-				       GtkWidget *parent_window,
-				       const char *u)
-{
-  gint answer = 0;
-
-  const char *forward_url = NULL;
-
-  g_return_val_if_fail (EKIGA_IS_MAIN_WINDOW (mw), FALSE);
-  g_return_val_if_fail (GTK_IS_WINDOW (parent_window), FALSE);
-
-  mw->priv->transfer_call_popup =
-    gm_entry_dialog_new (_("Transfer call to:"),
-			 _("Transfer"));
-
-  gtk_window_set_transient_for (GTK_WINDOW (mw->priv->transfer_call_popup),
-				GTK_WINDOW (parent_window));
-
-  gtk_dialog_set_default_response (GTK_DIALOG (mw->priv->transfer_call_popup),
-				   GTK_RESPONSE_ACCEPT);
-
-  if (u && !strcmp (u, ""))
-    gm_entry_dialog_set_text (GM_ENTRY_DIALOG (mw->priv->transfer_call_popup), u);
-  else
-    gm_entry_dialog_set_text (GM_ENTRY_DIALOG (mw->priv->transfer_call_popup), "sip:");
-
-  gm_window_show (mw->priv->transfer_call_popup);
-
-  answer = gtk_dialog_run (GTK_DIALOG (mw->priv->transfer_call_popup));
-  switch (answer) {
-
-  case GTK_RESPONSE_ACCEPT:
-
-    forward_url = gm_entry_dialog_get_text (GM_ENTRY_DIALOG (mw->priv->transfer_call_popup));
-    if (strcmp (forward_url, "") && mw->priv->current_call)
-      mw->priv->current_call->transfer (forward_url);
-    break;
-
-  default:
-    break;
-  }
-
-  gtk_widget_destroy (mw->priv->transfer_call_popup);
-  mw->priv->transfer_call_popup = NULL;
-
-  return (answer == GTK_RESPONSE_ACCEPT);
-}
-
-
 static void
 ekiga_main_window_add_device_dialog_show (EkigaMainWindow *mw,
                                           const Ekiga::Device & device,
@@ -1851,31 +1569,6 @@ ekiga_main_window_init_menu (EkigaMainWindow *mw)
 
       GTK_MENU_SEPARATOR,
 
-      GTK_MENU_ENTRY("hold_call", _("H_old Call"), _("Hold the current call"),
-		     NULL, GDK_h,
-		     G_CALLBACK (hold_current_call_cb), mw,
-		     FALSE),
-      GTK_MENU_ENTRY("transfer_call", _("_Transfer Call"),
-		     _("Transfer the current call"),
- 		     NULL, GDK_t,
-		     G_CALLBACK (transfer_current_call_cb), mw,
-		     FALSE),
-
-      GTK_MENU_SEPARATOR,
-
-      GTK_MENU_ENTRY("suspend_audio", _("Suspend _Audio"),
-		     _("Suspend or resume the audio transmission"),
-		     NULL, GDK_m,
-		     G_CALLBACK (toggle_audio_stream_pause_cb),
-		     mw, FALSE),
-      GTK_MENU_ENTRY("suspend_video", _("Suspend _Video"),
-		     _("Suspend or resume the video transmission"),
-		     NULL, GDK_p,
-		     G_CALLBACK (toggle_video_stream_pause_cb),
-		     mw, FALSE),
-
-      GTK_MENU_SEPARATOR,
-
 #ifdef CORE_ACTIONS_MENU
       // FIXME: that isn't a very good way to do things
       GTK_MENU_ENTRY ("core-actions", _("Other"),
@@ -2122,7 +1815,6 @@ ekiga_main_window_init (EkigaMainWindow *mw)
   gtk_window_add_accel_group (GTK_WINDOW (mw), mw->priv->accel);
   g_object_unref (mw->priv->accel);
 
-  mw->priv->transfer_call_popup = NULL;
   mw->priv->current_call = boost::shared_ptr<Ekiga::Call>();
   mw->priv->calling_state = Standby;
   mw->priv->audio_transmission_active = false;
@@ -2325,12 +2017,6 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   conn = call_core->cleared_call.connect (boost::bind (&on_cleared_call_cb, _1, _2, _3, (gpointer) mw));
   mw->priv->connections.push_back (conn);
   
-  conn = call_core->held_call.connect (boost::bind (&on_held_call_cb, _1, _2, (gpointer) mw));
-  mw->priv->connections.push_back (conn);
-  
-  conn = call_core->retrieved_call.connect (boost::bind (&on_retrieved_call_cb, _1, _2, (gpointer) mw));
-  mw->priv->connections.push_back (conn);
-  
   conn = call_core->missed_call.connect (boost::bind (&on_missed_call_cb, _1, _2, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
@@ -2340,12 +2026,6 @@ ekiga_main_window_connect_engine_signals (EkigaMainWindow *mw)
   conn = call_core->stream_closed.connect (boost::bind (&on_stream_closed_cb, _1, _2, _3, _4, _5, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 
-  conn = call_core->stream_paused.connect (boost::bind (&on_stream_paused_cb, _1, _2, _3, _4, (gpointer) mw));
-  mw->priv->connections.push_back (conn);
-
-  conn = call_core->stream_resumed.connect (boost::bind (&on_stream_resumed_cb, _1, _2, _3, _4, (gpointer) mw));
-  mw->priv->connections.push_back (conn);
-
   conn = call_core->errors.connect (boost::bind (&on_handle_errors, _1, (gpointer) mw));
   mw->priv->connections.push_back (conn);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]