161
155
// Make the button toolbar clickable
162
156
gtk_action_set_sensitive(pickUpAction_, TRUE);
163
157
gtk_action_set_sensitive(hangUpAction_, TRUE);
164
gtk_action_set_sensitive(muteAction_, TRUE);
165
158
// Replace the dial button with the hangup button
166
159
g_object_ref(newCallWidget_);
167
160
remove_from_toolbar(toolbar, newCallWidget_);
169
162
add_to_toolbar(toolbar, pickUpWidget_, pos++);
170
163
add_to_toolbar(toolbar, hangUpWidget_, pos++);
171
add_to_toolbar(toolbar, muteWidget_, pos++);
174
166
case CALL_STATE_HOLD:
237
228
gtk_action_set_sensitive(hangUpAction_, TRUE);
238
229
gtk_action_set_sensitive(recordAction_, TRUE);
239
gtk_action_set_sensitive(muteAction_, TRUE);
240
230
gtk_widget_set_sensitive(holdMenu_, TRUE);
241
231
gtk_widget_set_sensitive(holdToolbar_, TRUE);
242
232
gtk_widget_set_sensitive(transferToolbar_, TRUE);
243
gtk_widget_set_sensitive(muteWidget_, TRUE);
244
233
if (instant_messaging_enabled)
245
234
gtk_action_set_sensitive(imAction_, TRUE);
276
264
gtk_action_set_sensitive(hangUpAction_, TRUE);
277
gtk_action_set_sensitive(muteAction_, TRUE);
278
265
gtk_widget_set_sensitive(holdMenu_, TRUE);
279
266
gtk_widget_set_sensitive(holdToolbar_, TRUE);
280
267
gtk_widget_set_sensitive(transferToolbar_, TRUE);
281
268
gtk_widget_set_sensitive(transferToolbar_, TRUE);
282
gtk_widget_set_sensitive(muteWidget_, TRUE);
284
270
add_to_toolbar(toolbar, hangUpWidget_, pos++);
285
271
add_to_toolbar(toolbar, transferToolbar_, pos++);
286
272
g_signal_handler_block(transferToolbar_, transferButtonConnId_);
287
273
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transferToolbar_), TRUE);
288
274
g_signal_handler_unblock(transferToolbar_, transferButtonConnId_);
289
add_to_toolbar(toolbar, muteWidget_, pos++);
397
381
gtk_widget_set_sensitive(holdToolbar_, FALSE);
398
382
gtk_widget_set_sensitive(offHoldToolbar_, FALSE);
399
383
gtk_widget_set_sensitive(recordWidget_, FALSE);
400
gtk_widget_set_sensitive(muteWidget_, FALSE);
401
384
gtk_widget_set_sensitive(historyButton_, FALSE);
403
386
// Increment the reference counter
404
387
g_object_ref(hangUpWidget_);
405
388
g_object_ref(recordWidget_);
406
g_object_ref(muteWidget_);
407
389
g_object_ref(holdToolbar_);
408
390
g_object_ref(offHoldToolbar_);
409
391
g_object_ref(historyButton_);
1057
1060
N_("About this application"), G_CALLBACK(help_about) }
1060
static void register_custom_stock_icon(void) {
1062
static gboolean registered = FALSE;
1066
GtkIconFactory *factory;
1068
static GtkStockItem items[] = {
1069
{ "SFLPHONE_MUTE_CALL",
1076
/* Register our stock items */
1077
gtk_stock_add (items, G_N_ELEMENTS (items));
1079
/* Add our custom icon factory to the list of defaults */
1080
factory = gtk_icon_factory_new ();
1081
gtk_icon_factory_add_default (factory);
1083
/* demo_find_file() looks in the current directory first,
1084
* so you can run gtk-demo without installing GTK, then looks
1085
* in the location where the file is installed.
1088
pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/mic.svg", NULL);
1089
if (pixbuf == NULL) {
1090
g_debug("Error could not create mic.svg pixbuf");
1093
/* Register icon to accompany stock item */
1094
if (pixbuf != NULL) {
1095
GtkIconSet *icon_set;
1096
GdkPixbuf *transparent;
1098
/* The gtk-logo-rgb icon has a white background, make it transparent */
1099
transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
1101
icon_set = gtk_icon_set_new_from_pixbuf (transparent);
1102
gtk_icon_factory_add (factory, "SFLPHONE_MUTE_CALL", icon_set);
1103
gtk_icon_set_unref (icon_set);
1104
g_object_unref (pixbuf);
1105
g_object_unref (transparent);
1108
g_warning ("failed to load GTK logo for toolbar");
1110
/* Drop our reference to the factory, GTK will hold a reference. */
1111
g_object_unref (factory);
1115
1063
static const GtkToggleActionEntry toggle_menu_entries[] = {
1116
1064
{ "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T", N_("Transfer the call"), NULL, TRUE },
1117
1065
{ "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R", N_("Record the current conversation"), NULL, TRUE },
1118
{ "Mute", "SFLPHONE_MUTE_CALL", N_("_Mute"), "<control>M", N_("Mute microphone for this call"), G_CALLBACK(call_mute), FALSE },
1119
1066
{ "Toolbar", NULL, N_("_Show toolbar"), "<control>T", N_("Show the toolbar"), NULL, TRUE },
1120
1067
{ "Dialpad", NULL, N_("_Dialpad"), "<control>D", N_("Show the dialpad"), G_CALLBACK(dialpad_bar_cb), TRUE },
1121
1068
{ "VolumeControls", NULL, N_("_Volume controls"), "<control>V", N_("Show the volume controls"), G_CALLBACK(volume_bar_cb), TRUE },
1122
1069
{ "History", "appointment-soon", N_("_History"), NULL, N_("Calls history"), G_CALLBACK(toggle_history_cb), FALSE },
1123
1070
{ "Addressbook", GTK_STOCK_ADDRESSBOOK, N_("_Address book"), NULL, N_("Address book"), G_CALLBACK(toggle_addressbook_cb), FALSE },
1072
{ "Buddies", NULL, N_("_Buddy list"), NULL, N_("Display the buddy list"), G_CALLBACK(toggle_presence_window_cb), FALSE},
1126
1076
GtkUIManager *uimanager_new(SFLPhoneClient *client)
1128
const gint nb_entries = addrbook ? 8 : 7;
1078
const gint nb_entries = sizeof(toggle_menu_entries) / sizeof(toggle_menu_entries[0]);
1130
1080
GtkUIManager *ui = gtk_ui_manager_new();
1132
/* Register new icons as GTK_STOCK_ITEMS */
1133
register_custom_stock_icon();
1135
1082
/* Create an accel group for window's shortcuts */
1136
1083
gchar *path = g_build_filename(SFLPHONE_UIDIR_UNINSTALLED, "./ui.xml", NULL);
1137
1084
guint manager_id;
1486
1435
gtk_widget_show(menu_items);
1440
GtkWidget *menu_items = gtk_image_menu_item_new_with_mnemonic(_("Follow status"));
1441
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
1442
if(!presence_buddy_list_get())
1443
gtk_widget_set_sensitive(menu_items, FALSE);
1444
g_signal_connect(G_OBJECT(menu_items), "activate", G_CALLBACK(add_presence_subscription_cb), history_tab);
1445
gtk_widget_show(menu_items);
1489
1449
GtkWidget *separator = gtk_separator_menu_item_new();
1490
1450
gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
1491
1451
gtk_widget_show(separator);
1535
1495
g_signal_connect(new_call, "activate", G_CALLBACK(call_back), client);
1536
1496
gtk_widget_show(new_call);
1499
GtkWidget *presence = gtk_image_menu_item_new_with_mnemonic(_("Follow status"));
1500
gtk_menu_shell_append(GTK_MENU_SHELL(menu), presence);
1502
if(!presence_buddy_list_get())
1503
gtk_widget_set_sensitive(presence, FALSE);
1505
g_signal_connect(G_OBJECT(presence), "activate", G_CALLBACK(add_presence_subscription_cb), contacts_tab);
1506
gtk_widget_show(presence);
1538
1509
GtkWidget *edit = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT,
1539
1510
get_accel_group());
1540
1511
gtk_menu_shell_append(GTK_MENU_SHELL(menu), edit);
1675
1645
// Set the toggle buttons
1676
1646
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(get_action(ui, "/MenuBar/ViewMenu/Dialpad")), g_settings_get_boolean(client->settings, "show-dialpad"));
1677
1647
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(volumeToggle_), must_show_volume(client));
1678
gtk_action_set_sensitive(volumeToggle_, must_show_alsa_conf());
1648
gtk_action_set_sensitive(volumeToggle_, TRUE);
1679
1649
gtk_action_set_sensitive(get_action(ui, "/MenuBar/ViewMenu/Toolbar"), FALSE);
1652
gtk_action_set_sensitive(get_action(ui, "/MenuBar/ViewMenu/Buddies"), TRUE);
1681
1655
/* Add the loading icon at the right of the toolbar. It is used for addressbook searches. */
1682
1656
waitingLayer = create_waiting_icon();
1683
1657
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), waitingLayer);