comparison pidgin/gtkblist.c @ 32663:79a8ed88de20

propagate from branch 'im.pidgin.pidgin' (head bfb757dfe6b2549ab37a9b19f78f5f1f2f9df0cd) to branch 'im.pidgin.cpw.qulogic.gtk3' (head 73a08f798ab6ede72ea1c28a63c2dc0cc23db620)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Mon, 21 Mar 2011 01:53:46 +0000
parents ea07a6230b57 c0a122c22475
children d1315b4e1e4a
comparison
equal deleted inserted replaced
32662:1b4988e242fc 32663:79a8ed88de20
83 { 83 {
84 PidginBlistRequestData rq_data; 84 PidginBlistRequestData rq_data;
85 GtkWidget *combo; 85 GtkWidget *combo;
86 GtkWidget *entry; 86 GtkWidget *entry;
87 GtkWidget *entry_for_alias; 87 GtkWidget *entry_for_alias;
88 GtkWidget *entry_for_invite;
88 89
89 } PidginAddBuddyData; 90 } PidginAddBuddyData;
90 91
91 typedef struct 92 typedef struct
92 { 93 {
7149 7150
7150 static void 7151 static void
7151 add_buddy_select_account_cb(GObject *w, PurpleAccount *account, 7152 add_buddy_select_account_cb(GObject *w, PurpleAccount *account,
7152 PidginAddBuddyData *data) 7153 PidginAddBuddyData *data)
7153 { 7154 {
7155 PurpleConnection *pc = NULL;
7156 PurplePlugin *prpl = NULL;
7157 PurplePluginProtocolInfo *prpl_info = NULL;
7158 gboolean invite_enabled = TRUE;
7159
7154 /* Save our account */ 7160 /* Save our account */
7155 data->rq_data.account = account; 7161 data->rq_data.account = account;
7162
7163 if (account)
7164 pc = purple_account_get_connection(account);
7165 if (pc)
7166 prpl = purple_connection_get_prpl(pc);
7167 if (prpl)
7168 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
7169 if (prpl_info && !(prpl_info->options & OPT_PROTO_INVITE_MESSAGE))
7170 invite_enabled = FALSE;
7171
7172 gtk_widget_set_sensitive(data->entry_for_invite, invite_enabled);
7156 } 7173 }
7157 7174
7158 static void 7175 static void
7159 destroy_add_buddy_dialog_cb(GtkWidget *win, PidginAddBuddyData *data) 7176 destroy_add_buddy_dialog_cb(GtkWidget *win, PidginAddBuddyData *data)
7160 { 7177 {
7162 } 7179 }
7163 7180
7164 static void 7181 static void
7165 add_buddy_cb(GtkWidget *w, int resp, PidginAddBuddyData *data) 7182 add_buddy_cb(GtkWidget *w, int resp, PidginAddBuddyData *data)
7166 { 7183 {
7167 const char *grp, *who, *whoalias; 7184 const char *grp, *who, *whoalias, *invite;
7168 PurpleAccount *account; 7185 PurpleAccount *account;
7169 PurpleGroup *g; 7186 PurpleGroup *g;
7170 PurpleBuddy *b; 7187 PurpleBuddy *b;
7171 PurpleConversation *c; 7188 PurpleConversation *c;
7172 PurpleBuddyIcon *icon; 7189 PurpleBuddyIcon *icon;
7176 who = gtk_entry_get_text(GTK_ENTRY(data->entry)); 7193 who = gtk_entry_get_text(GTK_ENTRY(data->entry));
7177 grp = pidgin_text_combo_box_entry_get_text(data->combo); 7194 grp = pidgin_text_combo_box_entry_get_text(data->combo);
7178 whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias)); 7195 whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias));
7179 if (*whoalias == '\0') 7196 if (*whoalias == '\0')
7180 whoalias = NULL; 7197 whoalias = NULL;
7198 invite = gtk_entry_get_text(GTK_ENTRY(data->entry_for_invite));
7199 if (*invite == '\0')
7200 invite = NULL;
7181 7201
7182 account = data->rq_data.account; 7202 account = data->rq_data.account;
7183 7203
7184 g = NULL; 7204 g = NULL;
7185 if ((grp != NULL) && (*grp != '\0')) 7205 if ((grp != NULL) && (*grp != '\0'))
7201 { 7221 {
7202 b = purple_buddy_new(account, who, whoalias); 7222 b = purple_buddy_new(account, who, whoalias);
7203 purple_blist_add_buddy(b, NULL, g, NULL); 7223 purple_blist_add_buddy(b, NULL, g, NULL);
7204 } 7224 }
7205 7225
7206 purple_account_add_buddy(account, b); 7226 purple_account_add_buddy_with_invite(account, b, invite);
7207 7227
7208 /* Offer to merge people with the same alias. */ 7228 /* Offer to merge people with the same alias. */
7209 if (whoalias != NULL && g != NULL) 7229 if (whoalias != NULL && g != NULL)
7210 gtk_blist_auto_personize((PurpleBlistNode *)g, whoalias); 7230 gtk_blist_auto_personize((PurpleBlistNode *)g, whoalias);
7211 7231
7239 pidgin_blist_request_add_buddy(PurpleAccount *account, const char *username, 7259 pidgin_blist_request_add_buddy(PurpleAccount *account, const char *username,
7240 const char *group, const char *alias) 7260 const char *group, const char *alias)
7241 { 7261 {
7242 PidginAddBuddyData *data = g_new0(PidginAddBuddyData, 1); 7262 PidginAddBuddyData *data = g_new0(PidginAddBuddyData, 1);
7243 7263
7264 if (account == NULL)
7265 account = purple_connection_get_account(purple_connections_get_all()->data);
7266
7244 make_blist_request_dialog((PidginBlistRequestData *)data, 7267 make_blist_request_dialog((PidginBlistRequestData *)data,
7245 (account != NULL 7268 account,
7246 ? account : purple_connection_get_account(purple_connections_get_all()->data)),
7247 _("Add Buddy"), "add_buddy", 7269 _("Add Buddy"), "add_buddy",
7248 _("Add a buddy.\n"), 7270 _("Add a buddy.\n"),
7249 G_CALLBACK(add_buddy_select_account_cb), NULL, 7271 G_CALLBACK(add_buddy_select_account_cb), NULL,
7250 G_CALLBACK(add_buddy_cb)); 7272 G_CALLBACK(add_buddy_cb));
7251 gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window), 7273 gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window),
7285 gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); 7307 gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias);
7286 7308
7287 if (username != NULL) 7309 if (username != NULL)
7288 gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias)); 7310 gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias));
7289 7311
7312 data->entry_for_invite = gtk_entry_new();
7313 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("(Optional) _Invite message:"),
7314 data->rq_data.sg, data->entry_for_invite, TRUE,
7315 NULL);
7316
7290 data->combo = pidgin_text_combo_box_entry_new(group, groups_tree()); 7317 data->combo = pidgin_text_combo_box_entry_new(group, groups_tree());
7291 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Add buddy to _group:"), 7318 pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Add buddy to _group:"),
7292 data->rq_data.sg, data->combo, TRUE, NULL); 7319 data->rq_data.sg, data->combo, TRUE, NULL);
7293 7320
7294 gtk_widget_show_all(data->rq_data.window); 7321 gtk_widget_show_all(data->rq_data.window);
7322
7323 /* Force update of invite message entry sensitivity */
7324 add_buddy_select_account_cb(NULL, account, data);
7295 } 7325 }
7296 7326
7297 static void 7327 static void
7298 add_chat_cb(GtkWidget *w, PidginAddChatData *data) 7328 add_chat_cb(GtkWidget *w, PidginAddChatData *data)
7299 { 7329 {