finch/gntrequest.c

changeset 42128
118067ca0367
parent 42127
18acb99a0fa6
child 42134
1b5ce0f4302d
equal deleted inserted replaced
42127:18acb99a0fa6 42128:118067ca0367
165 165
166 return window; 166 return window;
167 } 167 }
168 168
169 static void 169 static void
170 finch_close_request(PurpleRequestType type, gpointer ui_handle) 170 finch_close_request(G_GNUC_UNUSED PurpleRequestType type, gpointer ui_handle) {
171 {
172 GntWidget *widget = GNT_WIDGET(ui_handle); 171 GntWidget *widget = GNT_WIDGET(ui_handle);
173 if (type == PURPLE_REQUEST_FIELDS) {
174 PurpleRequestFields *fields = g_object_get_data(G_OBJECT(widget), "fields");
175 purple_request_fields_destroy(fields);
176 }
177
178 widget = gnt_widget_get_toplevel(widget); 172 widget = gnt_widget_get_toplevel(widget);
179 gnt_widget_destroy(widget); 173 gnt_widget_destroy(widget);
180 } 174 }
181 175
182 static void 176 static void
276 270
277 return window; 271 return window;
278 } 272 }
279 273
280 static void 274 static void
281 request_fields_cb(GntWidget *button, PurpleRequestFields *fields) 275 request_fields_cb(GntWidget *button, PurpleRequestPage *page) {
282 {
283 PurpleRequestFieldsCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); 276 PurpleRequestFieldsCb callback = g_object_get_data(G_OBJECT(button), "activate-callback");
284 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); 277 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata");
285 GList *list; 278 GList *list;
286 GntWidget *window; 279 GntWidget *window;
287 280
288 /* Update the data of the fields. Pidgin does this differently. Instead of 281 /* Update the data of the fields. Pidgin does this differently. Instead of
289 * updating the fields at the end like here, it updates the appropriate field 282 * updating the fields at the end like here, it updates the appropriate field
290 * instantly whenever a change is made. That allows it to make sure the 283 * instantly whenever a change is made. That allows it to make sure the
291 * 'required' fields are entered before the user can hit OK. It's not the case 284 * 'required' fields are entered before the user can hit OK. It's not the case
292 * here, although it can be done. */ 285 * here, although it can be done. */
293 for (list = purple_request_fields_get_groups(fields); list; list = list->next) 286 for(list = purple_request_page_get_groups(page); list; list = list->next) {
294 {
295 PurpleRequestGroup *group = list->data; 287 PurpleRequestGroup *group = list->data;
296 GList *fields = purple_request_group_get_fields(group); 288 GList *fields = purple_request_group_get_fields(group);
297 289
298 for (; fields ; fields = fields->next) 290 for (; fields ; fields = fields->next)
299 { 291 {
379 } 371 }
380 372
381 purple_notify_close_with_handle(button); 373 purple_notify_close_with_handle(button);
382 374
383 if (!g_object_get_data(G_OBJECT(button), "cancellation-function") && 375 if (!g_object_get_data(G_OBJECT(button), "cancellation-function") &&
384 (!purple_request_fields_all_required_filled(fields) || 376 (!purple_request_page_all_required_filled(page) ||
385 !purple_request_fields_all_valid(fields))) { 377 !purple_request_page_all_valid(page))) {
386 purple_notify_error(button, _("Error"), 378 purple_notify_error(button, _("Error"),
387 _("You must properly fill all the required fields."), 379 _("You must properly fill all the required fields."),
388 _("The required fields are underlined."), NULL); 380 _("The required fields are underlined."), NULL);
389 return; 381 return;
390 } 382 }
391 383
392 if (callback) 384 if(callback) {
393 callback(data, fields); 385 callback(data, page);
386 }
394 387
395 window = gnt_widget_get_toplevel(button); 388 window = gnt_widget_get_toplevel(button);
396 purple_request_close(PURPLE_REQUEST_FIELDS, window); 389 purple_request_close(PURPLE_REQUEST_FIELDS, window);
397 } 390 }
398 391
581 gnt_widget_set_size(combo, 20, 3); /* ew */ 574 gnt_widget_set_size(combo, 20, 3); /* ew */
582 return combo; 575 return combo;
583 } 576 }
584 577
585 static void 578 static void
586 multifield_extra_cb(GntWidget *button, PurpleRequestFields *allfields) 579 multifield_extra_cb(GntWidget *button, PurpleRequestPage *page) {
587 {
588 PurpleRequestFieldsCb cb; 580 PurpleRequestFieldsCb cb;
589 gpointer cb_data; 581 gpointer cb_data;
590 gpointer handle; 582 gpointer handle;
591 583
592 handle = g_object_get_data(G_OBJECT(button), "ui-handle"); 584 handle = g_object_get_data(G_OBJECT(button), "ui-handle");
593 cb = g_object_get_data(G_OBJECT(button), "extra-cb"); 585 cb = g_object_get_data(G_OBJECT(button), "extra-cb");
594 cb_data = g_object_get_data(G_OBJECT(button), "extra-cb-data"); 586 cb_data = g_object_get_data(G_OBJECT(button), "extra-cb-data");
595 587
596 if (cb != NULL) 588 if(cb != NULL) {
597 cb(cb_data, allfields); 589 cb(cb_data, page);
590 }
598 591
599 action_performed(button, handle); 592 action_performed(button, handle);
600 purple_request_close(PURPLE_REQUEST_FIELDS, handle); 593 purple_request_close(PURPLE_REQUEST_FIELDS, handle);
601 } 594 }
602 595
603 static void * 596 static void *
604 finch_request_fields(const char *title, const char *primary, 597 finch_request_fields(const char *title, const char *primary,
605 const char *secondary, PurpleRequestFields *allfields, 598 const char *secondary, PurpleRequestPage *page,
606 const char *ok, GCallback ok_cb, 599 const char *ok, GCallback ok_cb,
607 const char *cancel, GCallback cancel_cb, 600 const char *cancel, GCallback cancel_cb,
608 PurpleRequestCommonParameters *cpar, 601 PurpleRequestCommonParameters *cpar,
609 void *userdata) 602 void *userdata)
610 { 603 {
621 * stacked vertically one after the other. A GntLine will be separating 614 * stacked vertically one after the other. A GntLine will be separating
622 * the groups. */ 615 * the groups. */
623 box = gnt_vbox_new(FALSE); 616 box = gnt_vbox_new(FALSE);
624 gnt_box_set_pad(GNT_BOX(box), 0); 617 gnt_box_set_pad(GNT_BOX(box), 0);
625 gnt_box_set_fill(GNT_BOX(box), TRUE); 618 gnt_box_set_fill(GNT_BOX(box), TRUE);
626 for (grlist = purple_request_fields_get_groups(allfields); grlist; grlist = grlist->next) 619 for(grlist = purple_request_page_get_groups(page); grlist;
620 grlist = grlist->next)
627 { 621 {
628 PurpleRequestGroup *group = grlist->data; 622 PurpleRequestGroup *group = grlist->data;
629 GList *fields = purple_request_group_get_fields(group); 623 GList *fields = purple_request_group_get_fields(group);
630 GntWidget *hbox; 624 GntWidget *hbox;
631 const char *title = purple_request_group_get_title(group); 625 const char *title = purple_request_group_get_title(group);
682 if (grlist->next) 676 if (grlist->next)
683 gnt_box_add_widget(GNT_BOX(box), gnt_hline_new()); 677 gnt_box_add_widget(GNT_BOX(box), gnt_hline_new());
684 } 678 }
685 gnt_box_add_widget(GNT_BOX(window), box); 679 gnt_box_add_widget(GNT_BOX(window), box);
686 680
687 box = setup_button_box(window, userdata, request_fields_cb, allfields, 681 box = setup_button_box(window, userdata, request_fields_cb, page,
688 ok, ok_cb, cancel, cancel_cb, NULL); 682 ok, ok_cb, cancel, cancel_cb, NULL);
689 683
690 extra_actions = purple_request_cpar_get_extra_actions(cpar); 684 extra_actions = purple_request_cpar_get_extra_actions(cpar);
691 for (GSList *it = extra_actions; it; it = it->next) { 685 for (GSList *it = extra_actions; it; it = it->next) {
692 PurpleKeyValuePair *extra_action = it->data; 686 PurpleKeyValuePair *extra_action = it->data;
693 687
695 gnt_box_add_widget_in_front(GNT_BOX(box), button); 689 gnt_box_add_widget_in_front(GNT_BOX(box), button);
696 g_object_set_data(G_OBJECT(button), "ui-handle", window); 690 g_object_set_data(G_OBJECT(button), "ui-handle", window);
697 g_object_set_data(G_OBJECT(button), "extra-cb", extra_action->value); 691 g_object_set_data(G_OBJECT(button), "extra-cb", extra_action->value);
698 g_object_set_data(G_OBJECT(button), "extra-cb-data", userdata); 692 g_object_set_data(G_OBJECT(button), "extra-cb-data", userdata);
699 g_signal_connect(G_OBJECT(button), "activate", 693 g_signal_connect(G_OBJECT(button), "activate",
700 G_CALLBACK(multifield_extra_cb), allfields); 694 G_CALLBACK(multifield_extra_cb), page);
701 } 695 }
702 696
703 help_cb = purple_request_cpar_get_help_cb(cpar, &help_data); 697 help_cb = purple_request_cpar_get_help_cb(cpar, &help_data);
704 if (help_cb) { 698 if (help_cb) {
705 GntWidget *button = gnt_button_new(_("Help")); 699 GntWidget *button = gnt_button_new(_("Help"));
715 709
716 if (username && accountlist) { 710 if (username && accountlist) {
717 g_signal_connect(username, "completion", G_CALLBACK(update_selected_account), accountlist); 711 g_signal_connect(username, "completion", G_CALLBACK(update_selected_account), accountlist);
718 } 712 }
719 713
720 g_object_set_data(G_OBJECT(window), "fields", allfields); 714 g_object_set_data_full(G_OBJECT(window), "fields", page, g_object_unref);
721 715
722 return window; 716 return window;
723 } 717 }
724 718
725 static void 719 static void
855 { 849 {
856 } 850 }
857 851
858 void 852 void
859 finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data, 853 finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data,
860 PurpleRequestFields *allfields) 854 PurpleRequestPage *page)
861 { 855 {
862 GList *list; 856 GList *list;
863 for (list = purple_request_fields_get_groups(allfields); list; list = list->next) { 857 for(list = purple_request_page_get_groups(page); list; list = list->next) {
864 PurpleRequestGroup *group = list->data; 858 PurpleRequestGroup *group = list->data;
865 GList *fields = purple_request_group_get_fields(group); 859 GList *fields = purple_request_group_get_fields(group);
866 860
867 for (; fields ; fields = fields->next) { 861 for (; fields ; fields = fields->next) {
868 PurpleRequestField *field = fields->data; 862 PurpleRequestField *field = fields->data;

mercurial