aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-contact-dialogs.c11
-rw-r--r--libempathy-gtk/empathy-contact-widget.c23
-rw-r--r--libempathy-gtk/empathy-contact-widget.h2
3 files changed, 33 insertions, 3 deletions
diff --git a/libempathy-gtk/empathy-contact-dialogs.c b/libempathy-gtk/empathy-contact-dialogs.c
index 390caa2fb..52e43e163 100644
--- a/libempathy-gtk/empathy-contact-dialogs.c
+++ b/libempathy-gtk/empathy-contact-dialogs.c
@@ -31,6 +31,7 @@
#include <libempathy/empathy-contact-manager.h>
#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-utils.h>
#include "empathy-contact-dialogs.h"
@@ -72,8 +73,17 @@ subscription_dialog_response_cb (GtkDialog *dialog,
contact = empathy_contact_widget_get_contact (contact_widget);
if (response == GTK_RESPONSE_YES) {
+ EmpathyTpContactFactory *factory;
+
+ factory = empathy_tp_contact_factory_dup_singleton (
+ empathy_contact_get_connection (contact));
+
empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
contact, "");
+ empathy_tp_contact_factory_set_alias (factory, contact,
+ empathy_contact_widget_get_alias (contact_widget));
+
+ g_object_unref (factory);
}
else if (response == GTK_RESPONSE_NO) {
empathy_contact_list_remove (EMPATHY_CONTACT_LIST (manager),
@@ -117,6 +127,7 @@ empathy_subscription_dialog_show (EmpathyContact *contact,
/* Contact info widget */
contact_widget = empathy_contact_widget_new (contact,
+ EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS |
EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
gtk_box_pack_end (GTK_BOX (hbox_subscription),
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 773aa6130..3e8ed8430 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -1271,9 +1271,12 @@ contact_widget_contact_setup (EmpathyContactWidget *information)
if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ALIAS)
{
information->widget_alias = gtk_entry_new ();
- g_signal_connect (information->widget_alias, "focus-out-event",
- G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
- information);
+
+ if (!(information->flags & EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS))
+ g_signal_connect (information->widget_alias, "focus-out-event",
+ G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
+ information);
+
/* Make return activate the window default (the Close button) */
gtk_entry_set_activates_default (GTK_ENTRY (information->widget_alias),
TRUE);
@@ -1414,6 +1417,20 @@ empathy_contact_widget_get_contact (GtkWidget *widget)
return information->contact;
}
+const gchar *
+empathy_contact_widget_get_alias (GtkWidget *widget)
+{
+ EmpathyContactWidget *information;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+ information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
+ if (!information)
+ return NULL;
+
+ return gtk_entry_get_text (GTK_ENTRY (information->widget_alias));
+}
+
/**
* empathy_contact_widget_set_contact:
* @widget: an #EmpathyContactWidget
diff --git a/libempathy-gtk/empathy-contact-widget.h b/libempathy-gtk/empathy-contact-widget.h
index b010578ad..04b567f4d 100644
--- a/libempathy-gtk/empathy-contact-widget.h
+++ b/libempathy-gtk/empathy-contact-widget.h
@@ -60,6 +60,7 @@ typedef enum
EMPATHY_CONTACT_WIDGET_EDIT_GROUPS = 1 << 4,
EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP = 1 << 5,
EMPATHY_CONTACT_WIDGET_SHOW_LOCATION = 1 << 6,
+ EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS = 1 << 7,
} EmpathyContactWidgetFlags;
GtkWidget * empathy_contact_widget_new (EmpathyContact *contact,
@@ -69,6 +70,7 @@ void empathy_contact_widget_set_contact (GtkWidget *widget,
EmpathyContact *contact);
void empathy_contact_widget_set_account_filter (GtkWidget *widget,
EmpathyAccountChooserFilterFunc filter, gpointer user_data);
+const gchar *empathy_contact_widget_get_alias (GtkWidget *widget);
G_END_DECLS