| 122 gtk_widget_set_sensitive(dialog->browse_button, account != NULL); |
117 gtk_widget_set_sensitive(dialog->browse_button, account != NULL); |
| 123 } |
118 } |
| 124 |
119 |
| 125 static void register_button_cb(GtkButton *button, PidginDiscoDialog *dialog) |
120 static void register_button_cb(GtkButton *button, PidginDiscoDialog *dialog) |
| 126 { |
121 { |
| 127 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "disco-info"); |
122 XmppDiscoService *service = g_object_get_data(G_OBJECT(button), "service"); |
| 128 |
123 xmpp_disco_service_register(service); |
| 129 xmpp_disco_service_register(info->service); |
|
| 130 } |
124 } |
| 131 |
125 |
| 132 static void discolist_cancel_cb(PidginDiscoList *pdl, const char *server) |
126 static void discolist_cancel_cb(PidginDiscoList *pdl, const char *server) |
| 133 { |
127 { |
| 134 pidgin_disco_list_set_in_progress(pdl, FALSE); |
128 pidgin_disco_list_set_in_progress(pdl, FALSE); |
| 211 purple_connection_get_account(pc), NULL, NULL, pdl); |
205 purple_connection_get_account(pc), NULL, NULL, pdl); |
| 212 |
206 |
| 213 g_free(server); |
207 g_free(server); |
| 214 } |
208 } |
| 215 |
209 |
| 216 static void add_room_to_blist_cb(GtkButton *button, PidginDiscoDialog *dialog) |
210 static void add_to_blist_cb(GtkButton *button, PidginDiscoDialog *dialog) |
| 217 { |
211 { |
| 218 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "disco-info"); |
212 XmppDiscoService *service = g_object_get_data(G_OBJECT(button), "service"); |
| 219 PurpleAccount *account; |
213 PurpleAccount *account; |
| 220 const char *jid; |
214 const char *jid; |
| 221 |
215 |
| 222 g_return_if_fail(info != NULL); |
216 g_return_if_fail(service != NULL); |
| 223 |
217 |
| 224 account = purple_connection_get_account(info->list->pc); |
218 account = purple_connection_get_account(service->list->pc); |
| 225 jid = info->service->jid; |
219 jid = service->jid; |
| 226 |
220 |
| 227 if (info->service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) |
221 if (service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) |
| 228 purple_blist_request_add_chat(account, NULL, NULL, jid); |
222 purple_blist_request_add_chat(account, NULL, NULL, jid); |
| 229 else |
223 else |
| 230 purple_blist_request_add_buddy(account, jid, NULL, NULL); |
224 purple_blist_request_add_buddy(account, jid, NULL, NULL); |
| 231 } |
225 } |
| 232 |
226 |
| 234 selection_changed_cb(GtkTreeSelection *selection, PidginDiscoList *pdl) |
228 selection_changed_cb(GtkTreeSelection *selection, PidginDiscoList *pdl) |
| 235 { |
229 { |
| 236 XmppDiscoService *service; |
230 XmppDiscoService *service; |
| 237 GtkTreeIter iter; |
231 GtkTreeIter iter; |
| 238 GValue val; |
232 GValue val; |
| 239 static struct _menu_cb_info *info; |
|
| 240 PidginDiscoDialog *dialog = pdl->dialog; |
233 PidginDiscoDialog *dialog = pdl->dialog; |
| 241 |
234 |
| 242 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) { |
235 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) { |
| 243 val.g_type = 0; |
236 val.g_type = 0; |
| 244 gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, &val); |
237 gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, &val); |
| 247 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
240 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
| 248 gtk_widget_set_sensitive(dialog->register_button, FALSE); |
241 gtk_widget_set_sensitive(dialog->register_button, FALSE); |
| 249 return; |
242 return; |
| 250 } |
243 } |
| 251 |
244 |
| 252 info = g_new0(struct _menu_cb_info, 1); |
245 g_object_set_data(G_OBJECT(dialog->add_button), "service", service); |
| 253 info->list = dialog->discolist; |
246 g_object_set_data(G_OBJECT(dialog->register_button), "service", service); |
| 254 info->service = service; |
|
| 255 |
|
| 256 g_object_set_data_full(G_OBJECT(dialog->add_button), "disco-info", |
|
| 257 info, g_free); |
|
| 258 g_object_set_data(G_OBJECT(dialog->register_button), "disco-info", info); |
|
| 259 |
247 |
| 260 gtk_widget_set_sensitive(dialog->add_button, service->flags & XMPP_DISCO_ADD); |
248 gtk_widget_set_sensitive(dialog->add_button, service->flags & XMPP_DISCO_ADD); |
| 261 gtk_widget_set_sensitive(dialog->register_button, service->flags & XMPP_DISCO_REGISTER); |
249 gtk_widget_set_sensitive(dialog->register_button, service->flags & XMPP_DISCO_REGISTER); |
| 262 } else { |
250 } else { |
| 263 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
251 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
| 613 dialog->add_button = |
601 dialog->add_button = |
| 614 pidgin_pixbuf_button_from_stock(_("_Add"), GTK_STOCK_ADD, |
602 pidgin_pixbuf_button_from_stock(_("_Add"), GTK_STOCK_ADD, |
| 615 PIDGIN_BUTTON_HORIZONTAL); |
603 PIDGIN_BUTTON_HORIZONTAL); |
| 616 gtk_box_pack_start(GTK_BOX(bbox), dialog->add_button, FALSE, FALSE, 0); |
604 gtk_box_pack_start(GTK_BOX(bbox), dialog->add_button, FALSE, FALSE, 0); |
| 617 g_signal_connect(G_OBJECT(dialog->add_button), "clicked", |
605 g_signal_connect(G_OBJECT(dialog->add_button), "clicked", |
| 618 G_CALLBACK(add_room_to_blist_cb), dialog); |
606 G_CALLBACK(add_to_blist_cb), dialog); |
| 619 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
607 gtk_widget_set_sensitive(dialog->add_button, FALSE); |
| 620 gtk_widget_show(dialog->add_button); |
608 gtk_widget_show(dialog->add_button); |
| 621 |
609 |
| 622 /* close button */ |
610 /* close button */ |
| 623 dialog->close_button = |
611 dialog->close_button = |