pidgin/gtkrequest.c

branch
cpw.qulogic.gtk3-required
changeset 33120
f6f1a27ade72
parent 32274
8695d161ad46
parent 32433
f539a2c083b2
child 33128
88ee8f3bfff3
equal deleted inserted replaced
32771:681ca041d42b 33120:f6f1a27ade72
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 */

mercurial