pidgin/gtkrequest.c

changeset 34444
4fe0e2422d82
parent 34443
b7926ff76ed6
child 34445
43e91cccb4da
equal deleted inserted replaced
34443:b7926ff76ed6 34444:4fe0e2422d82
294 data->u.multifield.fields); 294 data->u.multifield.fields);
295 295
296 purple_request_close(PURPLE_REQUEST_FIELDS, data); 296 purple_request_close(PURPLE_REQUEST_FIELDS, data);
297 } 297 }
298 298
299 static void
300 multifield_extra_cb(GtkWidget *button, PidginRequestData *data)
301 {
302 PurpleRequestFieldsCb cb;
303
304 generic_response_start(data);
305
306 cb = g_object_get_data(G_OBJECT(button), "extra-cb");
307
308 if (cb != NULL)
309 cb(data->user_data, data->u.multifield.fields);
310
311 purple_request_close(PURPLE_REQUEST_FIELDS, data);
312 }
313
299 static gboolean 314 static gboolean
300 destroy_multifield_cb(GtkWidget *dialog, GdkEvent *event, 315 destroy_multifield_cb(GtkWidget *dialog, GdkEvent *event,
301 PidginRequestData *data) 316 PidginRequestData *data)
302 { 317 {
303 multifield_cancel_cb(NULL, data); 318 multifield_cancel_cb(NULL, data);
1399 PurpleRequestField *field; 1414 PurpleRequestField *field;
1400 char *label_text; 1415 char *label_text;
1401 char *primary_esc, *secondary_esc; 1416 char *primary_esc, *secondary_esc;
1402 int total_fields = 0; 1417 int total_fields = 0;
1403 const gboolean compact = purple_request_cpar_is_compact(cpar); 1418 const gboolean compact = purple_request_cpar_is_compact(cpar);
1419 GSList *extra_actions, *it;
1420 size_t extra_actions_count, i;
1404 1421
1405 data = g_new0(PidginRequestData, 1); 1422 data = g_new0(PidginRequestData, 1);
1406 data->type = PURPLE_REQUEST_FIELDS; 1423 data->type = PURPLE_REQUEST_FIELDS;
1407 data->user_data = user_data; 1424 data->user_data = user_data;
1408 data->u.multifield.fields = fields; 1425 data->u.multifield.fields = fields;
1409 1426
1410 purple_request_fields_set_ui_data(fields, data); 1427 purple_request_fields_set_ui_data(fields, data);
1428
1429 extra_actions = purple_request_cpar_get_extra_actions(cpar);
1430 extra_actions_count = g_slist_length(extra_actions) / 2;
1411 1431
1412 data->cb_count = 2; 1432 data->cb_count = 2;
1413 data->cbs = g_new0(GCallback, 2); 1433 data->cbs = g_new0(GCallback, 2);
1414 1434
1415 data->cbs[0] = ok_cb; 1435 data->cbs[0] = ok_cb;
1435 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); 1455 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
1436 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); 1456 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
1437 gtk_widget_show(img); 1457 gtk_widget_show(img);
1438 1458
1439 pidgin_request_add_help(GTK_DIALOG(win), cpar); 1459 pidgin_request_add_help(GTK_DIALOG(win), cpar);
1460
1461 it = extra_actions;
1462 for (i = 0; i < extra_actions_count; i++, it = it->next->next) {
1463 const gchar *label = it->data;
1464 PurpleRequestFieldsCb *cb = it->next->data;
1465
1466 button = pidgin_dialog_add_button(GTK_DIALOG(win),
1467 text_to_stock(label), G_CALLBACK(multifield_extra_cb),
1468 data);
1469 g_object_set_data(G_OBJECT(button), "extra-cb", cb);
1470 }
1440 1471
1441 /* Cancel button */ 1472 /* Cancel button */
1442 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); 1473 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data);
1443 gtk_widget_set_can_default(button, TRUE); 1474 gtk_widget_set_can_default(button, TRUE);
1444 1475

mercurial