| 103 tips = gtk_tooltips_new(); |
103 tips = gtk_tooltips_new(); |
| 104 gtk_tooltips_set_tip(tips, image, purple_account_get_username(account), NULL); |
104 gtk_tooltips_set_tip(tips, image, purple_account_get_username(account), NULL); |
| 105 #endif |
105 #endif |
| 106 |
106 |
| 107 if (GTK_IS_DIALOG(cont)) { |
107 if (GTK_IS_DIALOG(cont)) { |
| 108 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(cont)->action_area), image, FALSE, TRUE, 0); |
108 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(cont))), |
| 109 gtk_box_reorder_child(GTK_BOX(GTK_DIALOG(cont)->action_area), image, 0); |
109 image, FALSE, TRUE, 0); |
| |
110 gtk_box_reorder_child(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(cont))), |
| |
111 image, 0); |
| 110 } else if (GTK_IS_HBOX(cont)) { |
112 } else if (GTK_IS_HBOX(cont)) { |
| 111 gtk_misc_set_alignment(GTK_MISC(image), 0, 0); |
113 gtk_misc_set_alignment(GTK_MISC(image), 0, 0); |
| 112 gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); |
114 gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); |
| 113 } |
115 } |
| 114 gtk_widget_show(image); |
116 gtk_widget_show(image); |
| 261 static void |
263 static void |
| 262 multifield_ok_cb(GtkWidget *button, PidginRequestData *data) |
264 multifield_ok_cb(GtkWidget *button, PidginRequestData *data) |
| 263 { |
265 { |
| 264 generic_response_start(data); |
266 generic_response_start(data); |
| 265 |
267 |
| 266 if (!GTK_WIDGET_HAS_FOCUS(button)) |
268 if (!gtk_widget_has_focus(button)) |
| 267 gtk_widget_grab_focus(button); |
269 gtk_widget_grab_focus(button); |
| 268 |
270 |
| 269 if (data->cbs[0] != NULL) |
271 if (data->cbs[0] != NULL) |
| 270 ((PurpleRequestFieldsCb)data->cbs[0])(data->user_data, |
272 ((PurpleRequestFieldsCb)data->cbs[0])(data->user_data, |
| 271 data->u.multifield.fields); |
273 data->u.multifield.fields); |
| 357 g_signal_connect(G_OBJECT(dialog), "response", |
359 g_signal_connect(G_OBJECT(dialog), "response", |
| 358 G_CALLBACK(input_response_cb), data); |
360 G_CALLBACK(input_response_cb), data); |
| 359 |
361 |
| 360 /* Setup the dialog */ |
362 /* Setup the dialog */ |
| 361 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
363 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
| 362 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); |
364 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
365 PIDGIN_HIG_BORDER / 2); |
| 363 if (!multiline) |
366 if (!multiline) |
| 364 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
367 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| |
368 /* TODO: not sure how to do this with GTK+ 3 |
| 365 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
369 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| |
370 */ |
| 366 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); |
371 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); |
| 367 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
372 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
373 PIDGIN_HIG_BORDER); |
| 368 |
374 |
| 369 /* Setup the main horizontal box */ |
375 /* Setup the main horizontal box */ |
| 370 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
376 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 371 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
377 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
378 hbox); |
| 372 |
379 |
| 373 /* Dialog icon. */ |
380 /* Dialog icon. */ |
| 374 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
381 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| 375 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
382 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| 376 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
383 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 534 g_signal_connect(G_OBJECT(dialog), "response", |
541 g_signal_connect(G_OBJECT(dialog), "response", |
| 535 G_CALLBACK(choice_response_cb), data); |
542 G_CALLBACK(choice_response_cb), data); |
| 536 |
543 |
| 537 /* Setup the dialog */ |
544 /* Setup the dialog */ |
| 538 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
545 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
| 539 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); |
546 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
547 PIDGIN_HIG_BORDER / 2); |
| 540 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
548 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| 541 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
549 /* TODO: don't know if this is possible with GTK+ 3 |
| 542 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
550 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| |
551 */ |
| |
552 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
553 PIDGIN_HIG_BORDER); |
| 543 |
554 |
| 544 /* Setup the main horizontal box */ |
555 /* Setup the main horizontal box */ |
| 545 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
556 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 546 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
557 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
558 hbox); |
| 547 |
559 |
| 548 /* Dialog icon. */ |
560 /* Dialog icon. */ |
| 549 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
561 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| 550 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
562 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| 551 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
563 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 656 g_signal_connect(G_OBJECT(dialog), "response", |
668 g_signal_connect(G_OBJECT(dialog), "response", |
| 657 G_CALLBACK(action_response_cb), data); |
669 G_CALLBACK(action_response_cb), data); |
| 658 |
670 |
| 659 /* Setup the dialog */ |
671 /* Setup the dialog */ |
| 660 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
672 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
| 661 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); |
673 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
674 PIDGIN_HIG_BORDER / 2); |
| 662 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
675 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| 663 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
676 /* TODO: this is probably not supported by GTK+ 3 |
| 664 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
677 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| |
678 */ |
| |
679 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
680 PIDGIN_HIG_BORDER); |
| 665 |
681 |
| 666 /* Setup the main horizontal box */ |
682 /* Setup the main horizontal box */ |
| 667 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
683 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 668 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
684 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
685 hbox); |
| 669 |
686 |
| 670 /* Dialog icon. */ |
687 /* Dialog icon. */ |
| 671 if (icon_data) { |
688 if (icon_data) { |
| 672 GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); |
689 GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); |
| 673 GdkPixbuf *pixbuf = NULL; |
690 GdkPixbuf *pixbuf = NULL; |
| 734 |
751 |
| 735 g_free(label_text); |
752 g_free(label_text); |
| 736 |
753 |
| 737 |
754 |
| 738 if (default_action == PURPLE_DEFAULT_ACTION_NONE) { |
755 if (default_action == PURPLE_DEFAULT_ACTION_NONE) { |
| 739 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT); |
756 gtk_widget_set_can_default(img, TRUE); |
| 740 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS); |
757 gtk_widget_set_can_focus(img, TRUE); |
| 741 gtk_widget_grab_focus(img); |
758 gtk_widget_grab_focus(img); |
| 742 gtk_widget_grab_default(img); |
759 gtk_widget_grab_default(img); |
| 743 } else |
760 } else |
| 744 /* |
761 /* |
| 745 * Need to invert the default_action number because the |
762 * Need to invert the default_action number because the |
| 980 int num_labels = g_list_length(labels); |
997 int num_labels = g_list_length(labels); |
| 981 GList *l; |
998 GList *l; |
| 982 |
999 |
| 983 if (num_labels > 5) |
1000 if (num_labels > 5) |
| 984 { |
1001 { |
| 985 widget = gtk_combo_box_new_text(); |
1002 widget = gtk_combo_box_text_new(); |
| 986 |
1003 |
| 987 for (l = labels; l != NULL; l = l->next) |
1004 for (l = labels; l != NULL; l = l->next) |
| 988 { |
1005 { |
| 989 const char *text = l->data; |
1006 const char *text = l->data; |
| 990 gtk_combo_box_append_text(GTK_COMBO_BOX(widget), text); |
1007 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widget), text); |
| 991 } |
1008 } |
| 992 |
1009 |
| 993 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), |
1010 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), |
| 994 purple_request_field_choice_get_default_value(field)); |
1011 purple_request_field_choice_get_default_value(field)); |
| 995 |
1012 |
| 1262 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
1279 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 1263 gtk_widget_show(img); |
1280 gtk_widget_show(img); |
| 1264 |
1281 |
| 1265 /* Cancel button */ |
1282 /* Cancel button */ |
| 1266 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
1283 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
| 1267 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); |
1284 gtk_widget_set_can_default(button, TRUE); |
| 1268 |
1285 |
| 1269 /* OK button */ |
1286 /* OK button */ |
| 1270 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(ok_text), G_CALLBACK(multifield_ok_cb), data); |
1287 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(ok_text), G_CALLBACK(multifield_ok_cb), data); |
| 1271 data->ok_button = button; |
1288 data->ok_button = button; |
| 1272 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); |
1289 gtk_widget_set_can_default(button, TRUE); |
| 1273 gtk_window_set_default(GTK_WINDOW(win), button); |
1290 gtk_window_set_default(GTK_WINDOW(win), button); |
| 1274 |
1291 |
| 1275 pidgin_widget_decorate_account(hbox, account); |
1292 pidgin_widget_decorate_account(hbox, account); |
| 1276 |
1293 |
| 1277 /* Setup the vbox */ |
1294 /* Setup the vbox */ |