From: Guillaume Desmottes Date: Mon, 23 Jun 2014 13:10:17 +0000 (+0200) Subject: individual-menu: use the proper persona in submenus X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=1f9230409b3e8bdba369a994102b53a9e591ba6e individual-menu: use the proper persona in submenus 'single_individual' uses to be a FolksIndivudal containing a single persona (the one from the submenu) ensuring that operations (chat, call, etc) were performed on this very persona. But we broke this in 0909d1f884c4542553d98b18e7622664d2a02169 by replacing the empathy_create_individual_from_tp_contact() call by empathy_ensure_individual_from_tp_contact() as the same individuals (the one will all the personas) was now used in all the sub menus. Fixing this by introducing 'contact' variant of the menu_item_new methods which is always cleaner. https://bugzilla.gnome.org/show_bug.cgi?id=732100 --- diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c index 6759cc51..ae489a77 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); @@ -186,7 +203,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 +211,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 +219,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 +232,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,13 +245,13 @@ 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); @@ -1386,6 +1401,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 +1468,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 +1533,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 +1618,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 +1677,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 +1738,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 +1799,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)