X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy-gtk%2Fempathy-individual-menu.c;h=1165397f074d6ba942178f29c50246f076a9d16a;hp=6759cc51ab5a783fec4d6cb5def68de12a029f6e;hb=8ac7209da2305762f9ef2c711c555afb19e85b62;hpb=ad1b40b1d31b4c612a94736f27072baab4ac1364 diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c index 6759cc51..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); @@ -1386,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) @@ -1436,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) @@ -1483,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) @@ -1549,6 +1594,24 @@ empathy_individual_video_call_menu_item_new_individual ( 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; +} static void empathy_individual_log_menu_item_activated (GtkMenuItem *item, @@ -1590,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) @@ -1635,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) @@ -1679,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)