X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy-gtk%2Fempathy-individual-menu.c;h=1165397f074d6ba942178f29c50246f076a9d16a;hp=feda0012e2f1cf65756edc066a812552bf01485c;hb=8ac7209da2305762f9ef2c711c555afb19e85b62;hpb=8a91bd6aa01f46742c11b22c7d404c9f6d56b7a9 diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c index feda0012..1165397f 100644 --- a/libempathy-gtk/empathy-individual-menu.c +++ b/libempathy-gtk/empathy-individual-menu.c @@ -74,17 +74,34 @@ G_DEFINE_TYPE (EmpathyIndividualMenu, empathy_individual_menu, GTK_TYPE_MENU); static GtkWidget * chat_menu_item_new_individual (EmpathyIndividualMenu *self, FolksIndividual *individual); +static GtkWidget * chat_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact); static GtkWidget * sms_menu_item_new_individual (EmpathyIndividualMenu *self, FolksIndividual *individual); +static GtkWidget * sms_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact); +static GtkWidget * audio_call_menu_item_new_contact ( + EmpathyIndividualMenu *self, + EmpathyContact *contact); +static GtkWidget * video_call_menu_item_new_contact ( + EmpathyIndividualMenu *self, + EmpathyContact *contact); static GtkWidget * log_menu_item_new_individual (FolksIndividual *individual); +static GtkWidget * log_menu_item_new_contact (EmpathyContact *contact); static GtkWidget * info_menu_item_new_individual (FolksIndividual *individual); static GtkWidget * edit_menu_item_new_individual (FolksIndividual *individual); static GtkWidget * invite_menu_item_new (FolksIndividual *individual, EmpathyContact *contact); static GtkWidget * file_transfer_menu_item_new_individual (EmpathyIndividualMenu *self, FolksIndividual *individual); +static GtkWidget * file_transfer_menu_item_new_contact ( + EmpathyIndividualMenu *self, + EmpathyContact *contact); static GtkWidget * share_my_desktop_menu_item_new_individual (EmpathyIndividualMenu *self, FolksIndividual *individual); +static GtkWidget * share_my_desktop_menu_item_new_contact ( + EmpathyIndividualMenu *self, + EmpathyContact *contact); static GtkWidget * favourite_menu_item_new_individual (FolksIndividual *individual); static GtkWidget * add_menu_item_new_individual (EmpathyIndividualMenu *self, FolksIndividual *individual); @@ -145,8 +162,6 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, FolksPersonaStore *store; const gchar *account; GtkWidget *action; - /* Individual containing only persona */ - FolksIndividual *single_individual; if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona))) goto while_finish; @@ -156,13 +171,6 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, goto while_finish; contact = empathy_contact_dup_from_tp_contact (tp_contact); - single_individual = empathy_ensure_individual_from_tp_contact ( - tp_contact); - - /* Pretty hacky. Creating single_individual had a side effect to change - * persona.individual from individual to single_individual which is not - * what we want so we set it back. See bgo#684971 for details. */ - g_object_set (persona, "individual", individual, NULL); store = folks_persona_get_store (FOLKS_PERSONA (persona)); account = folks_persona_store_get_display_name (store); @@ -186,7 +194,7 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, /* Chat */ if (features & EMPATHY_INDIVIDUAL_FEATURE_CHAT) { - action = chat_menu_item_new_individual (self, single_individual); + action = chat_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); } @@ -194,7 +202,7 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, /* SMS */ if (features & EMPATHY_INDIVIDUAL_FEATURE_SMS) { - action = sms_menu_item_new_individual (self, single_individual); + action = sms_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); } @@ -202,14 +210,12 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL) { /* Audio Call */ - action = empathy_individual_audio_call_menu_item_new_individual ( - self, single_individual); + action = audio_call_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); /* Video Call */ - action = empathy_individual_video_call_menu_item_new_individual ( - self, single_individual); + action = video_call_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); } @@ -217,7 +223,7 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, /* Log */ if (features & EMPATHY_INDIVIDUAL_FEATURE_LOG) { - action = log_menu_item_new_individual (single_individual); + action = log_menu_item_new_contact (contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); } @@ -230,36 +236,21 @@ individual_menu_add_personas (EmpathyIndividualMenu *self, /* File transfer */ if (features & EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER) { - action = file_transfer_menu_item_new_individual (self, single_individual); + action = file_transfer_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); } /* Share my desktop */ - action = share_my_desktop_menu_item_new_individual (self, single_individual); + action = share_my_desktop_menu_item_new_contact (self, contact); gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); gtk_widget_show (action); - /* Block */ - if (features & EMPATHY_INDIVIDUAL_FEATURE_BLOCK && - (item = block_menu_item_new_individual (single_individual)) - != NULL) { - GtkWidget *sep; - - sep = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), sep); - gtk_widget_show (sep); - - gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), item); - gtk_widget_show (item); - } - gtk_menu_shell_append (GTK_MENU_SHELL (menu), contact_item); gtk_widget_show (contact_item); g_free (label); g_object_unref (contact); - g_object_unref (single_individual); while_finish: g_clear_object (&persona); @@ -1352,15 +1343,11 @@ empathy_individual_chat_menu_item_activated (GtkMenuItem *item, } static GtkWidget * -chat_menu_item_new_individual (EmpathyIndividualMenu *self, - FolksIndividual *individual) +chat_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) && - empathy_folks_individual_contains_contact (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (_("_Chat")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_MESSAGE, GTK_ICON_SIZE_MENU); @@ -1368,6 +1355,21 @@ chat_menu_item_new_individual (EmpathyIndividualMenu *self, gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); + + return item; +} + +static GtkWidget * +chat_menu_item_new_individual (EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) && + empathy_folks_individual_contains_contact (individual), NULL); + + item = chat_menu_item_new (self); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_chat_menu_item_activated), EMPATHY_ACTION_CHAT); @@ -1375,6 +1377,23 @@ chat_menu_item_new_individual (EmpathyIndividualMenu *self, return item; } +static GtkWidget * +chat_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = chat_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_chat_menu_item_activated), + EMPATHY_ACTION_CHAT); + + return item; +} + static void empathy_individual_sms_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) @@ -1391,15 +1410,11 @@ empathy_individual_sms_menu_item_activated (GtkMenuItem *item, } static GtkWidget * -sms_menu_item_new_individual (EmpathyIndividualMenu *self, - FolksIndividual *individual) +sms_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) && - empathy_folks_individual_contains_contact (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (_("_SMS")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_SMS, GTK_ICON_SIZE_MENU); @@ -1407,6 +1422,21 @@ sms_menu_item_new_individual (EmpathyIndividualMenu *self, gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); + + return item; +} + +static GtkWidget * +sms_menu_item_new_individual (EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) && + empathy_folks_individual_contains_contact (individual), NULL); + + item = sms_menu_item_new (self); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_sms_menu_item_activated), EMPATHY_ACTION_SMS); @@ -1414,6 +1444,24 @@ sms_menu_item_new_individual (EmpathyIndividualMenu *self, return item; } +static GtkWidget * +sms_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = sms_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_sms_menu_item_activated), + EMPATHY_ACTION_SMS); + + return item; +} + + static void empathy_individual_audio_call_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) @@ -1427,22 +1475,33 @@ empathy_individual_audio_call_menu_item_activated (GtkMenuItem *item, emit_menu_item_activated (item); } -GtkWidget * -empathy_individual_audio_call_menu_item_new_individual ( - EmpathyIndividualMenu *self, - FolksIndividual *individual) +static GtkWidget * +audio_call_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (C_("menu item", "_Audio Call")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VOIP, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); + + return item; +} + +GtkWidget * +empathy_individual_audio_call_menu_item_new_individual ( + EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); + + item = audio_call_menu_item_new (self); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_audio_call_menu_item_activated), EMPATHY_ACTION_AUDIO_CALL); @@ -1450,6 +1509,25 @@ empathy_individual_audio_call_menu_item_new_individual ( return item; } +static GtkWidget * +audio_call_menu_item_new_contact ( + EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = audio_call_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_audio_call_menu_item_activated), + EMPATHY_ACTION_AUDIO_CALL); + + return item; +} + + static void empathy_individual_video_call_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) @@ -1463,16 +1541,11 @@ empathy_individual_video_call_menu_item_activated (GtkMenuItem *item, emit_menu_item_activated (item); } -GtkWidget * -empathy_individual_video_call_menu_item_new_individual ( - EmpathyIndividualMenu *self, - FolksIndividual *individual) +static GtkWidget * +video_call_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - TpawCameraMonitor *monitor; - - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); item = gtk_image_menu_item_new_with_mnemonic (C_("menu item", "_Video Call")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VIDEO_CALL, @@ -1481,9 +1554,14 @@ empathy_individual_video_call_menu_item_new_individual ( gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); - menu_item_set_first_contact (item, individual, - G_CALLBACK (empathy_individual_video_call_menu_item_activated), - EMPATHY_ACTION_VIDEO_CALL); + + return item; +} + +static void +check_camera_available (GtkWidget *item) +{ + TpawCameraMonitor *monitor; /* Only follow available cameras if the contact can do Video calls */ if (gtk_widget_get_sensitive (item)) @@ -1494,6 +1572,43 @@ empathy_individual_video_call_menu_item_new_individual ( g_object_bind_property (monitor, "available", item, "sensitive", G_BINDING_SYNC_CREATE); } +} + +GtkWidget * +empathy_individual_video_call_menu_item_new_individual ( + EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); + + item = video_call_menu_item_new (self); + + menu_item_set_first_contact (item, individual, + G_CALLBACK (empathy_individual_video_call_menu_item_activated), + EMPATHY_ACTION_VIDEO_CALL); + + check_camera_available (item); + + return item; +} + +GtkWidget * +video_call_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = video_call_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_video_call_menu_item_activated), + EMPATHY_ACTION_VIDEO_CALL); + + check_camera_available (item); return item; } @@ -1509,18 +1624,28 @@ empathy_individual_log_menu_item_activated (GtkMenuItem *item, } static GtkWidget * -log_menu_item_new_individual (FolksIndividual *individual) +log_menu_item_new (void) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (_("_Previous Conversations")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_LOG, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); gtk_widget_show (image); + return item; +} + +static GtkWidget * +log_menu_item_new_individual (FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); + + item = log_menu_item_new (); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_log_menu_item_activated), EMPATHY_ACTION_VIEW_LOGS); @@ -1528,6 +1653,22 @@ log_menu_item_new_individual (FolksIndividual *individual) return item; } +static GtkWidget * +log_menu_item_new_contact (EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = log_menu_item_new (); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_log_menu_item_activated), + EMPATHY_ACTION_VIEW_LOGS); + + return item; +} + static void empathy_individual_file_transfer_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) @@ -1540,14 +1681,11 @@ empathy_individual_file_transfer_menu_item_activated (GtkMenuItem *item, } static GtkWidget * -file_transfer_menu_item_new_individual (EmpathyIndividualMenu *self, - FolksIndividual *individual) +file_transfer_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (_("Send File")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_DOCUMENT_SEND, GTK_ICON_SIZE_MENU); @@ -1555,6 +1693,20 @@ file_transfer_menu_item_new_individual (EmpathyIndividualMenu *self, gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); + + return item; +} + +static GtkWidget * +file_transfer_menu_item_new_individual (EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); + + item = file_transfer_menu_item_new (self); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_file_transfer_menu_item_activated), EMPATHY_ACTION_SEND_FILE); @@ -1562,6 +1714,23 @@ file_transfer_menu_item_new_individual (EmpathyIndividualMenu *self, return item; } +static GtkWidget * +file_transfer_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = file_transfer_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_file_transfer_menu_item_activated), + EMPATHY_ACTION_SEND_FILE); + + return item; +} + static void empathy_individual_share_my_desktop_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) @@ -1574,20 +1743,31 @@ empathy_individual_share_my_desktop_menu_item_activated (GtkMenuItem *item, } static GtkWidget * -share_my_desktop_menu_item_new_individual (EmpathyIndividualMenu *self, - FolksIndividual *individual) +share_my_desktop_menu_item_new (EmpathyIndividualMenu *self) { GtkWidget *item; GtkWidget *image; - g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); - item = gtk_image_menu_item_new_with_mnemonic (_("Share My Desktop")); image = gtk_image_new_from_icon_name (GTK_STOCK_NETWORK, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); gtk_widget_show (image); g_object_set_data (G_OBJECT (item), "individual-menu", self); + + return item; +} + +static GtkWidget * +share_my_desktop_menu_item_new_individual (EmpathyIndividualMenu *self, + FolksIndividual *individual) +{ + GtkWidget *item; + + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); + + item = share_my_desktop_menu_item_new (self); + menu_item_set_first_contact (item, individual, G_CALLBACK (empathy_individual_share_my_desktop_menu_item_activated), EMPATHY_ACTION_SHARE_MY_DESKTOP); @@ -1595,6 +1775,23 @@ share_my_desktop_menu_item_new_individual (EmpathyIndividualMenu *self, return item; } +static GtkWidget * +share_my_desktop_menu_item_new_contact (EmpathyIndividualMenu *self, + EmpathyContact *contact) +{ + GtkWidget *item; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + item = share_my_desktop_menu_item_new (self); + + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_share_my_desktop_menu_item_activated), + EMPATHY_ACTION_SHARE_MY_DESKTOP); + + return item; +} + static void favourite_menu_item_toggled_cb (GtkCheckMenuItem *item, FolksIndividual *individual)