Commit 3e856e19 authored by Alexandre Savard's avatar Alexandre Savard
Browse files

#8762: Add button in uimanager to mute call

parent cbc0c6f7
......@@ -8,6 +8,7 @@
<menuitem name="OnHoldMenu" action="OnHold"/>
<menuitem action="InstantMessaging"/>
<menuitem action="Record"/>
<menuitem action="MuteCall"/>
<separator/>
<menuitem action="AccountAssistant"/>
<separator/>
......@@ -49,6 +50,7 @@
<toolitem name="TransferToolbar" action="Transfer"/>
<toolitem name="InstantMessagingToolbar" action="InstantMessaging"/>
<toolitem name="RecordToolbar" action="Record"/>
<toolitem name="MuteCallToolbar" action="MuteCall"/>
<!-- FIXME: commented out because it is responsible for #7495 -->
<!-- separator/-->
<toolitem name="VoicemailToolbar" action="Voicemail"/>
......
......@@ -65,6 +65,7 @@ static GtkWidget *toolbar_;
static guint transferButtonConnId_; //The button toggled signal connection ID
static guint recordButtonConnId_; //The button toggled signal connection ID
static guint muteCallButtonId_; //The button toggled signal connection ID
static GtkAction * pickUpAction_;
static GtkWidget * pickUpWidget_;
......@@ -79,7 +80,9 @@ static GtkWidget * transferToolbar_;
static GtkAction * copyAction_;
static GtkAction * pasteAction_;
static GtkAction * recordAction_;
static GtkAction * muteCallAction_;
static GtkWidget * recordWidget_;
static GtkWidget * muteCallWidget_;
static GtkAction * voicemailAction_;
static GtkWidget * voicemailToolbar_;
static GtkWidget * imToolbar_;
......@@ -127,6 +130,7 @@ update_actions()
g_object_ref(hangUpWidget_);
g_object_ref(recordWidget_);
g_object_ref(muteCallWidget_);
g_object_ref(holdToolbar_);
g_object_ref(offHoldToolbar_);
......@@ -140,6 +144,7 @@ update_actions()
remove_from_toolbar(hangUpWidget_);
remove_from_toolbar(recordWidget_);
remove_from_toolbar(muteCallWidget_);
remove_from_toolbar(transferToolbar_);
remove_from_toolbar(historyButton_);
......@@ -153,7 +158,9 @@ update_actions()
gtk_widget_set_sensitive(holdToolbar_, FALSE);
gtk_widget_set_sensitive(offHoldToolbar_, FALSE);
gtk_action_set_sensitive(recordAction_, FALSE);
gtk_action_set_sensitive(muteCallAction_, FALSE);
gtk_widget_set_sensitive(recordWidget_, FALSE);
gtk_widget_set_sensitive(muteCallWidget_, FALSE);
gtk_action_set_sensitive(copyAction_, FALSE);
if (addrbook)
......@@ -285,15 +292,20 @@ update_actions()
gtk_widget_set_sensitive(holdToolbar_, TRUE);
gtk_widget_set_sensitive(transferToolbar_, TRUE);
gtk_action_set_sensitive(recordAction_, TRUE);
gtk_action_set_sensitive(muteCallAction_, TRUE);
add_to_toolbar(toolbar_, holdToolbar_, pos++);
add_to_toolbar(toolbar_, transferToolbar_, pos++);
add_to_toolbar(toolbar_, recordWidget_, pos++);
add_to_toolbar(toolbar_, muteCallWidget_, pos++);
g_signal_handler_block(transferToolbar_, transferButtonConnId_);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transferToolbar_), FALSE);
g_signal_handler_unblock(transferToolbar_, transferButtonConnId_);
g_signal_handler_block(recordWidget_, recordButtonConnId_);
g_signal_handler_block(muteCallWidget_, muteCallButtonId_);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(recordWidget_), FALSE);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(muteCallWidget_), FALSE);
g_signal_handler_unblock(recordWidget_, recordButtonConnId_);
g_signal_handler_unblock(muteCallWidget_, muteCallButtonId_);
if (instant_messaging_enabled) {
gtk_action_set_sensitive(imAction_, TRUE);
......@@ -313,15 +325,20 @@ update_actions()
gtk_widget_set_sensitive(holdToolbar_, TRUE);
gtk_widget_set_sensitive(transferToolbar_, TRUE);
gtk_action_set_sensitive(recordAction_, TRUE);
gtk_action_set_sensitive(muteCallAction_, TRUE);
add_to_toolbar(toolbar_, holdToolbar_, pos++);
add_to_toolbar(toolbar_, transferToolbar_, pos++);
add_to_toolbar(toolbar_, recordWidget_, pos++);
add_to_toolbar(toolbar_, muteCallWidget_, pos++);
g_signal_handler_block(transferToolbar_, transferButtonConnId_);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transferToolbar_), FALSE);
g_signal_handler_unblock(transferToolbar_, transferButtonConnId_);
g_signal_handler_block(recordWidget_, recordButtonConnId_);
g_signal_handler_block(muteCallWidget_, muteCallButtonId_);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(recordWidget_), TRUE);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(muteCallWidget_), TRUE);
g_signal_handler_unblock(recordWidget_, recordButtonConnId_);
g_signal_handler_unblock(muteCallWidget_, muteCallButtonId_);
if (instant_messaging_enabled) {
gtk_action_set_sensitive(imAction_, TRUE);
......@@ -374,10 +391,12 @@ update_actions()
gtk_action_set_sensitive(hangUpAction_, TRUE);
gtk_widget_set_sensitive(holdToolbar_, TRUE);
gtk_action_set_sensitive(recordAction_, TRUE);
gtk_action_set_sensitive(muteCallAction_, TRUE);
int pos = 1;
add_to_toolbar(toolbar_, hangUpWidget_, pos++);
add_to_toolbar(toolbar_, holdToolbar_, pos++);
add_to_toolbar(toolbar_, recordWidget_, pos++);
add_to_toolbar(toolbar_, muteCallWidget_, pos++);
if (instant_messaging_enabled) {
gtk_action_set_sensitive(imAction_, TRUE);
......@@ -401,9 +420,11 @@ update_actions()
gtk_action_set_sensitive(hangUpAction_, TRUE);
gtk_widget_set_sensitive(holdToolbar_, TRUE);
gtk_action_set_sensitive(recordAction_, TRUE);
gtk_action_set_sensitive(muteCallAction_, TRUE);
add_to_toolbar(toolbar_, hangUpWidget_, pos++);
add_to_toolbar(toolbar_, holdToolbar_, pos++);
add_to_toolbar(toolbar_, recordWidget_, pos++);
add_to_toolbar(toolbar_, muteCallWidget_, pos++);
if (instant_messaging_enabled) {
gtk_action_set_sensitive(imAction_, TRUE);
......@@ -419,9 +440,11 @@ update_actions()
gtk_action_set_sensitive(hangUpAction_, TRUE);
gtk_widget_set_sensitive(offHoldToolbar_, TRUE);
gtk_action_set_sensitive(recordAction_, TRUE);
gtk_action_set_sensitive(muteCallAction_, TRUE);
add_to_toolbar(toolbar_, hangUpWidget_, pos++);
add_to_toolbar(toolbar_, offHoldToolbar_, pos++);
add_to_toolbar(toolbar_, recordWidget_, pos++);
add_to_toolbar(toolbar_, muteCallWidget_, pos++);
if (instant_messaging_enabled) {
gtk_action_set_sensitive(imAction_, TRUE);
......@@ -722,6 +745,13 @@ call_record(void)
sflphone_rec_call();
}
static void
call_mute(void)
{
DEBUG("UIManager: Mute call button pressed");
// sflphone_mute_call();
}
static void
start_playback_record_cb(void)
{
......@@ -1068,6 +1098,7 @@ static const GtkActionEntry menu_entries[] = {
static const GtkToggleActionEntry toggle_menu_entries[] = {
{ "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T", N_("Transfer the call"), NULL, TRUE },
{ "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R", N_("Record the current conversation"), NULL, TRUE },
{ "MuteCall", GTK_STOCK_MEDIA_RECORD, N_("_MuteCall"), "<control>M", N_("Mute microphone for this call"), NULL, TRUE },
{ "Toolbar", NULL, N_("_Show toolbar"), "<control>T", N_("Show the toolbar"), NULL, TRUE },
{ "Dialpad", NULL, N_("_Dialpad"), "<control>D", N_("Show the dialpad"), G_CALLBACK(dialpad_bar_cb), TRUE },
{ "VolumeControls", NULL, N_("_Volume controls"), "<control>V", N_("Show the volume controls"), G_CALLBACK(volume_bar_cb), TRUE },
......@@ -1077,7 +1108,7 @@ static const GtkToggleActionEntry toggle_menu_entries[] = {
GtkUIManager *uimanager_new(void)
{
gint nb_entries = addrbook ? 7 : 6;
gint nb_entries = addrbook ? 8 : 7;
GtkWidget *window = get_main_window();
GtkUIManager *ui_manager = gtk_ui_manager_new();
......@@ -1193,7 +1224,7 @@ void
show_popup_menu(GtkWidget *my_widget, GdkEventButton *event)
{
// TODO update the selection to make sure the call under the mouse is the call selected
gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record = FALSE, im = FALSE;
gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record = FALSE, im = FALSE, mute = FALSE;
gboolean accounts = FALSE;
// conference type boolean
......@@ -1232,6 +1263,7 @@ show_popup_menu(GtkWidget *my_widget, GdkEventButton *event)
hold = TRUE;
record = TRUE;
im = TRUE;
mute = TRUE;
break;
case CALL_STATE_BUSY:
case CALL_STATE_FAILURE:
......@@ -1340,6 +1372,20 @@ show_popup_menu(GtkWidget *my_widget, GdkEventButton *event)
gtk_widget_show(menu_items);
}
if (mute) {
GtkWidget *menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Mute"));
GtkWidget *image = gtk_image_new_from_stock(GTK_STOCK_MEDIA_RECORD,
GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
g_signal_connect(G_OBJECT(menu_items), "activate",
G_CALLBACK(call_mute),
NULL);
gtk_widget_show(menu_items);
}
if (im) {
// do not display message if instant messaging is disabled
gboolean instant_messaging_enabled = TRUE;
......@@ -1564,15 +1610,59 @@ GtkWidget *
create_menus(GtkUIManager *ui_manager)
{
GtkWidget *menu_bar = gtk_ui_manager_get_widget(ui_manager, "/MenuBar");
if(menu_bar == NULL) {
ERROR("Could not create menu bar");
}
pickUpAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/PickUp");
if(pickUpAction_ == NULL) {
ERROR("Could not create pick up action");
}
newCallAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/NewCall");
if(newCallAction_ == NULL) {
ERROR("Could not create new call action");
}
hangUpAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/HangUp");
if(hangUpAction_ == NULL) {
ERROR("Could not create hangup action");
}
holdMenu_ = gtk_ui_manager_get_widget(ui_manager, "/MenuBar/CallMenu/OnHoldMenu");
if(holdMenu_ == NULL) {
ERROR("Could not create hold menu widget");
}
recordAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/Record");
if(recordAction_ == NULL) {
ERROR("Could not create record action");
}
muteCallAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/MuteCall");
if(muteCallAction_ == NULL) {
ERROR("Could not create mute call action");
}
imAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/CallMenu/InstantMessaging");
if(imAction_ == NULL) {
ERROR("Could not create instant messaging action");
}
copyAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Copy");
if(copyAction_ == NULL) {
ERROR("Could not create copy action");
}
pasteAction_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Paste");
if(pasteAction_ == NULL) {
ERROR("Could not create paste action");
}
volumeToggle_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/VolumeControls");
if(volumeToggle_ == NULL) {
ERROR("Could not create volume toggle action");
}
// Set the toggle buttons
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/Dialpad")), eel_gconf_get_boolean(CONF_SHOW_DIALPAD));
......@@ -1592,32 +1682,75 @@ create_toolbar_actions(GtkUIManager *ui_manager)
{
toolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions");
holdToolbar_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/OnHoldToolbar");
offHoldToolbar_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/OffHoldToolbar");
transferToolbar_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/TransferToolbar");
voicemailAction_ = gtk_ui_manager_get_action(ui_manager,
"/ToolbarActions/Voicemail");
voicemailToolbar_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/VoicemailToolbar");
newCallWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/NewCallToolbar");
pickUpWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/PickUpToolbar");
hangUpWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/HangUpToolbar");
recordWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/RecordToolbar");
imToolbar_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/InstantMessagingToolbar");
historyButton_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/HistoryToolbar");
playRecordWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/StartPlaybackRecordToolbar");
stopRecordWidget_ = gtk_ui_manager_get_widget(ui_manager,
"/ToolbarActions/StopPlaybackRecordToolbar");
holdToolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/OnHoldToolbar");
if(holdToolbar_ == NULL) {
ERROR("Could not create on hold toolbar widget");
}
offHoldToolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/OffHoldToolbar");
if(offHoldToolbar_ == NULL) {
ERROR("Could not create off hold toolbar widget");
}
transferToolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/TransferToolbar");
if(transferToolbar_ == NULL) {
ERROR("Could not create transfer toolbar widget");
}
voicemailAction_ = gtk_ui_manager_get_action(ui_manager, "/ToolbarActions/Voicemail");
if(voicemailAction_ == NULL) {
ERROR("Could not create voicemail action");
}
voicemailToolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/VoicemailToolbar");
if(voicemailToolbar_ == NULL) {
ERROR("Could not create voicemail toolbar widget");
}
newCallWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/NewCallToolbar");
if(newCallWidget_ == NULL) {
ERROR("Could not create new call widget");
}
pickUpWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/PickUpToolbar");
if(pickUpWidget_ == NULL) {
ERROR("Could not create pick up toolbar widget");
}
hangUpWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/HangUpToolbar");
if(hangUpWidget_ == NULL) {
ERROR("Could not create hang up toolbar widget");
}
recordWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/RecordToolbar");
if(recordWidget_ == NULL) {
ERROR("Could not create record toolbar widget");
}
muteCallWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/MuteCallToolbar");
if(muteCallWidget_ == NULL) {
ERROR("Could not create mute call widget");
}
imToolbar_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/InstantMessagingToolbar");
if(imToolbar_ == NULL) {
ERROR("Could not create instant messaging widget");
}
historyButton_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/HistoryToolbar");
if(historyButton_ == NULL) {
ERROR("Could not create history button widget");
}
playRecordWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/StartPlaybackRecordToolbar");
if(playRecordWidget_ == NULL) {
ERROR("Could not create play record widget");
}
stopRecordWidget_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/StopPlaybackRecordToolbar");
if(stopRecordWidget_ == NULL) {
ERROR("Could not create stop record widget");
}
if (addrbook)
contactButton_ = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions/AddressbookToolbar");
......@@ -1625,6 +1758,7 @@ create_toolbar_actions(GtkUIManager *ui_manager)
// Set the handler ID for the transfer
transferButtonConnId_ = g_signal_connect(G_OBJECT(transferToolbar_), "toggled", G_CALLBACK(call_transfer_cb), NULL);
recordButtonConnId_ = g_signal_connect(G_OBJECT(recordWidget_), "toggled", G_CALLBACK(call_record), NULL);
muteCallButtonId_ = g_signal_connect(G_OBJECT(muteCallWidget_), "toggled", G_CALLBACK(call_mute), NULL);
active_calltree_tab = current_calls_tab;
return toolbar_;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment