| 84 static void |
84 static void |
| 85 pidgin_widget_decorate_account(GtkWidget *cont, PurpleAccount *account) |
85 pidgin_widget_decorate_account(GtkWidget *cont, PurpleAccount *account) |
| 86 { |
86 { |
| 87 GtkWidget *image; |
87 GtkWidget *image; |
| 88 GdkPixbuf *pixbuf; |
88 GdkPixbuf *pixbuf; |
| |
89 #if !GTK_CHECK_VERSION(2,12,0) |
| 89 GtkTooltips *tips; |
90 GtkTooltips *tips; |
| |
91 #endif |
| 90 |
92 |
| 91 if (!account) |
93 if (!account) |
| 92 return; |
94 return; |
| 93 |
95 |
| 94 pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); |
96 pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); |
| 95 image = gtk_image_new_from_pixbuf(pixbuf); |
97 image = gtk_image_new_from_pixbuf(pixbuf); |
| 96 g_object_unref(G_OBJECT(pixbuf)); |
98 g_object_unref(G_OBJECT(pixbuf)); |
| 97 |
99 |
| |
100 #if GTK_CHECK_VERSION(2,12,0) |
| |
101 gtk_widget_set_tooltip_text(image, purple_account_get_username(account)); |
| |
102 #else |
| 98 tips = gtk_tooltips_new(); |
103 tips = gtk_tooltips_new(); |
| 99 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 |
| 100 |
106 |
| 101 if (GTK_IS_DIALOG(cont)) { |
107 if (GTK_IS_DIALOG(cont)) { |
| 102 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))), |
| 103 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); |
| 104 } else if (GTK_IS_HBOX(cont)) { |
112 } else if (GTK_IS_HBOX(cont)) { |
| 105 gtk_misc_set_alignment(GTK_MISC(image), 0, 0); |
113 gtk_misc_set_alignment(GTK_MISC(image), 0, 0); |
| 106 gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); |
114 gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); |
| 107 } |
115 } |
| 108 gtk_widget_show(image); |
116 gtk_widget_show(image); |
| 255 static void |
263 static void |
| 256 multifield_ok_cb(GtkWidget *button, PidginRequestData *data) |
264 multifield_ok_cb(GtkWidget *button, PidginRequestData *data) |
| 257 { |
265 { |
| 258 generic_response_start(data); |
266 generic_response_start(data); |
| 259 |
267 |
| 260 if (!GTK_WIDGET_HAS_FOCUS(button)) |
268 if (!gtk_widget_has_focus(button)) |
| 261 gtk_widget_grab_focus(button); |
269 gtk_widget_grab_focus(button); |
| 262 |
270 |
| 263 if (data->cbs[0] != NULL) |
271 if (data->cbs[0] != NULL) |
| 264 ((PurpleRequestFieldsCb)data->cbs[0])(data->user_data, |
272 ((PurpleRequestFieldsCb)data->cbs[0])(data->user_data, |
| 265 data->u.multifield.fields); |
273 data->u.multifield.fields); |
| 351 g_signal_connect(G_OBJECT(dialog), "response", |
359 g_signal_connect(G_OBJECT(dialog), "response", |
| 352 G_CALLBACK(input_response_cb), data); |
360 G_CALLBACK(input_response_cb), data); |
| 353 |
361 |
| 354 /* Setup the dialog */ |
362 /* Setup the dialog */ |
| 355 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); |
| 356 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); |
| 357 if (!multiline) |
366 if (!multiline) |
| 358 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 */ |
| |
369 #if 0 |
| 359 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
370 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| |
371 #endif |
| 360 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); |
372 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); |
| 361 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
373 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
374 PIDGIN_HIG_BORDER); |
| 362 |
375 |
| 363 /* Setup the main horizontal box */ |
376 /* Setup the main horizontal box */ |
| 364 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
377 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 365 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
378 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
379 hbox); |
| 366 |
380 |
| 367 /* Dialog icon. */ |
381 /* Dialog icon. */ |
| 368 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
382 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| 369 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
383 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| 370 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
384 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 518 g_signal_connect(G_OBJECT(dialog), "response", |
532 g_signal_connect(G_OBJECT(dialog), "response", |
| 519 G_CALLBACK(choice_response_cb), data); |
533 G_CALLBACK(choice_response_cb), data); |
| 520 |
534 |
| 521 /* Setup the dialog */ |
535 /* Setup the dialog */ |
| 522 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
536 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
| 523 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); |
537 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
538 PIDGIN_HIG_BORDER / 2); |
| 524 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
539 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| |
540 /* TODO: don't know if this is possible with GTK+ 3 */ |
| |
541 #if 0 |
| 525 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
542 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| 526 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
543 #endif |
| |
544 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
545 PIDGIN_HIG_BORDER); |
| 527 |
546 |
| 528 /* Setup the main horizontal box */ |
547 /* Setup the main horizontal box */ |
| 529 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
548 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 530 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
549 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
550 hbox); |
| 531 |
551 |
| 532 /* Dialog icon. */ |
552 /* Dialog icon. */ |
| 533 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
553 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| 534 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
554 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| 535 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
555 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 640 g_signal_connect(G_OBJECT(dialog), "response", |
660 g_signal_connect(G_OBJECT(dialog), "response", |
| 641 G_CALLBACK(action_response_cb), data); |
661 G_CALLBACK(action_response_cb), data); |
| 642 |
662 |
| 643 /* Setup the dialog */ |
663 /* Setup the dialog */ |
| 644 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
664 gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); |
| 645 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); |
665 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
666 PIDGIN_HIG_BORDER / 2); |
| 646 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
667 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| |
668 /* TODO: this is probably not supported by GTK+ 3 */ |
| |
669 #if 0 |
| 647 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
670 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
| 648 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); |
671 #endif |
| |
672 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
673 PIDGIN_HIG_BORDER); |
| 649 |
674 |
| 650 /* Setup the main horizontal box */ |
675 /* Setup the main horizontal box */ |
| 651 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
676 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 652 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
677 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
678 hbox); |
| 653 |
679 |
| 654 /* Dialog icon. */ |
680 /* Dialog icon. */ |
| 655 if (icon_data) { |
681 if (icon_data) { |
| 656 GdkPixbuf *pixbuf = pidgin_pixbuf_from_data(icon_data, icon_size); |
682 GdkPixbuf *pixbuf = pidgin_pixbuf_from_data(icon_data, icon_size); |
| 657 if (pixbuf) { |
683 if (pixbuf) { |
| 713 |
739 |
| 714 g_free(label_text); |
740 g_free(label_text); |
| 715 |
741 |
| 716 |
742 |
| 717 if (default_action == PURPLE_DEFAULT_ACTION_NONE) { |
743 if (default_action == PURPLE_DEFAULT_ACTION_NONE) { |
| 718 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT); |
744 gtk_widget_set_can_default(img, TRUE); |
| 719 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS); |
745 gtk_widget_set_can_focus(img, TRUE); |
| 720 gtk_widget_grab_focus(img); |
746 gtk_widget_grab_focus(img); |
| 721 gtk_widget_grab_default(img); |
747 gtk_widget_grab_default(img); |
| 722 } else |
748 } else |
| 723 /* |
749 /* |
| 724 * Need to invert the default_action number because the |
750 * Need to invert the default_action number because the |
| 970 int num_labels = g_list_length(labels); |
996 int num_labels = g_list_length(labels); |
| 971 GList *l; |
997 GList *l; |
| 972 |
998 |
| 973 if (num_labels > 5) |
999 if (num_labels > 5) |
| 974 { |
1000 { |
| 975 widget = gtk_combo_box_new_text(); |
1001 widget = gtk_combo_box_text_new(); |
| 976 |
1002 |
| 977 for (l = labels; l != NULL; l = l->next) |
1003 for (l = labels; l != NULL; l = l->next) |
| 978 { |
1004 { |
| 979 const char *text = l->data; |
1005 const char *text = l->data; |
| 980 gtk_combo_box_append_text(GTK_COMBO_BOX(widget), text); |
1006 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widget), text); |
| 981 } |
1007 } |
| 982 |
1008 |
| 983 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), |
1009 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), |
| 984 purple_request_field_choice_get_default_value(field)); |
1010 purple_request_field_choice_get_default_value(field)); |
| 985 |
1011 |
| 1252 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
1278 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 1253 gtk_widget_show(img); |
1279 gtk_widget_show(img); |
| 1254 |
1280 |
| 1255 /* Cancel button */ |
1281 /* Cancel button */ |
| 1256 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
1282 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); |
| 1257 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); |
1283 gtk_widget_set_can_default(button, TRUE); |
| 1258 |
1284 |
| 1259 /* OK button */ |
1285 /* OK button */ |
| 1260 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(ok_text), G_CALLBACK(multifield_ok_cb), data); |
1286 button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(ok_text), G_CALLBACK(multifield_ok_cb), data); |
| 1261 data->ok_button = button; |
1287 data->ok_button = button; |
| 1262 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); |
1288 gtk_widget_set_can_default(button, TRUE); |
| 1263 gtk_window_set_default(GTK_WINDOW(win), button); |
1289 gtk_window_set_default(GTK_WINDOW(win), button); |
| 1264 |
1290 |
| 1265 pidgin_widget_decorate_account(hbox, account); |
1291 pidgin_widget_decorate_account(hbox, account); |
| 1266 |
1292 |
| 1267 /* Setup the vbox */ |
1293 /* Setup the vbox */ |