Mercurial > pidgin.yaz
comparison pidgin/gtkrequest.c @ 21560:665e04562de0
This merge has the effect of reverting the hinting code from trunk.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sat, 17 Nov 2007 00:12:30 +0000 |
parents | 283f8bf540b3 fcb848b2d669 |
children | 1b174854bb80 |
comparison
equal
deleted
inserted
replaced
21544:9b4d1af17ced | 21560:665e04562de0 |
---|---|
78 | 78 |
79 } u; | 79 } u; |
80 | 80 |
81 } PidginRequestData; | 81 } PidginRequestData; |
82 | 82 |
83 static GtkWindow * | |
84 find_toplevel(GList *ll_toplevels, const char *role) | |
85 { | |
86 const char *window_role = NULL; | |
87 GList *ll_itr = NULL; | |
88 | |
89 for (ll_itr = ll_toplevels ; ll_itr ; ll_itr = ll_itr->next) { | |
90 if ((window_role = gtk_window_get_role(GTK_WINDOW(ll_itr->data))) != NULL) { | |
91 if (!strcmp(window_role, role)) | |
92 return GTK_WINDOW(ll_itr->data); | |
93 } | |
94 } | |
95 | |
96 return NULL; | |
97 } | |
98 | |
99 static GtkWindow * | |
100 get_request_parent(const char *ui_hint, PidginConversation *convo) | |
101 { | |
102 GtkWindow *toplevel = NULL; | |
103 PidginBuddyList *blist = NULL; | |
104 | |
105 if (convo) | |
106 return GTK_WINDOW(convo->win->window); | |
107 | |
108 if (strcmp(ui_hint, PURPLE_REQUEST_UI_HINT_BLIST)) { | |
109 GList *ll_toplevels = NULL; | |
110 | |
111 ll_toplevels = gtk_window_list_toplevels(); | |
112 | |
113 if (!(toplevel = find_toplevel(ll_toplevels, ui_hint))) { | |
114 if (!strcmp(ui_hint, PURPLE_REQUEST_UI_HINT_REGISTER)) | |
115 toplevel = find_toplevel(ll_toplevels, "account"); | |
116 else | |
117 if (!strcmp(ui_hint, PURPLE_REQUEST_UI_HINT_XFER)) | |
118 toplevel = find_toplevel(ll_toplevels, "file transfer"); | |
119 } | |
120 | |
121 g_list_free(ll_toplevels); | |
122 } | |
123 | |
124 /* Takes care of "pidgin-statusbox" as well */ | |
125 if (!toplevel) | |
126 if ((blist = pidgin_blist_get_default_gtk_blist()) != NULL) | |
127 return GTK_WINDOW(blist->window); | |
128 | |
129 return toplevel; | |
130 } | |
131 | |
132 static void | 83 static void |
133 generic_response_start(PidginRequestData *data) | 84 generic_response_start(PidginRequestData *data) |
134 { | 85 { |
135 g_return_if_fail(data != NULL); | 86 g_return_if_fail(data != NULL); |
136 | 87 |
335 const char *secondary, const char *default_value, | 286 const char *secondary, const char *default_value, |
336 gboolean multiline, gboolean masked, gchar *hint, | 287 gboolean multiline, gboolean masked, gchar *hint, |
337 const char *ok_text, GCallback ok_cb, | 288 const char *ok_text, GCallback ok_cb, |
338 const char *cancel_text, GCallback cancel_cb, | 289 const char *cancel_text, GCallback cancel_cb, |
339 PurpleAccount *account, const char *who, PurpleConversation *conv, | 290 PurpleAccount *account, const char *who, PurpleConversation *conv, |
340 const char *ui_hint, void *user_data) | 291 void *user_data) |
341 { | 292 { |
342 PidginRequestData *data; | 293 PidginRequestData *data; |
343 GtkWidget *dialog; | 294 GtkWidget *dialog; |
344 GtkWidget *vbox; | 295 GtkWidget *vbox; |
345 GtkWidget *hbox; | 296 GtkWidget *hbox; |
360 data->cbs[0] = ok_cb; | 311 data->cbs[0] = ok_cb; |
361 data->cbs[1] = cancel_cb; | 312 data->cbs[1] = cancel_cb; |
362 | 313 |
363 /* Create the dialog. */ | 314 /* Create the dialog. */ |
364 dialog = gtk_dialog_new_with_buttons(title ? title : PIDGIN_ALERT_TITLE, | 315 dialog = gtk_dialog_new_with_buttons(title ? title : PIDGIN_ALERT_TITLE, |
365 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL), 0, | 316 NULL, 0, |
366 text_to_stock(cancel_text), 1, | 317 text_to_stock(cancel_text), 1, |
367 text_to_stock(ok_text), 0, | 318 text_to_stock(ok_text), 0, |
368 NULL); | 319 NULL); |
369 data->dialog = dialog; | 320 data->dialog = dialog; |
370 | 321 |
498 pidgin_request_choice(const char *title, const char *primary, | 449 pidgin_request_choice(const char *title, const char *primary, |
499 const char *secondary, int default_value, | 450 const char *secondary, int default_value, |
500 const char *ok_text, GCallback ok_cb, | 451 const char *ok_text, GCallback ok_cb, |
501 const char *cancel_text, GCallback cancel_cb, | 452 const char *cancel_text, GCallback cancel_cb, |
502 PurpleAccount *account, const char *who, PurpleConversation *conv, | 453 PurpleAccount *account, const char *who, PurpleConversation *conv, |
503 const char *ui_hint, void *user_data, va_list args) | 454 void *user_data, va_list args) |
504 { | 455 { |
505 PidginRequestData *data; | 456 PidginRequestData *data; |
506 GtkWidget *dialog; | 457 GtkWidget *dialog; |
507 GtkWidget *vbox, *vbox2; | 458 GtkWidget *vbox, *vbox2; |
508 GtkWidget *hbox; | 459 GtkWidget *hbox; |
522 data->cbs[0] = cancel_cb; | 473 data->cbs[0] = cancel_cb; |
523 data->cbs[1] = ok_cb; | 474 data->cbs[1] = ok_cb; |
524 | 475 |
525 /* Create the dialog. */ | 476 /* Create the dialog. */ |
526 data->dialog = dialog = gtk_dialog_new(); | 477 data->dialog = dialog = gtk_dialog_new(); |
527 gtk_window_set_transient_for(GTK_WINDOW(dialog), | |
528 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL)); | |
529 | 478 |
530 if (title != NULL) | 479 if (title != NULL) |
531 gtk_window_set_title(GTK_WINDOW(dialog), title); | 480 gtk_window_set_title(GTK_WINDOW(dialog), title); |
532 #ifdef _WIN32 | 481 #ifdef _WIN32 |
533 gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE); | 482 gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE); |
604 | 553 |
605 static void * | 554 static void * |
606 pidgin_request_action(const char *title, const char *primary, | 555 pidgin_request_action(const char *title, const char *primary, |
607 const char *secondary, int default_action, | 556 const char *secondary, int default_action, |
608 PurpleAccount *account, const char *who, PurpleConversation *conv, | 557 PurpleAccount *account, const char *who, PurpleConversation *conv, |
609 const char *ui_hint, void *user_data, size_t action_count, va_list actions) | 558 void *user_data, size_t action_count, va_list actions) |
610 { | 559 { |
611 PidginRequestData *data; | 560 PidginRequestData *data; |
612 GtkWidget *dialog; | 561 GtkWidget *dialog; |
613 GtkWidget *vbox; | 562 GtkWidget *vbox; |
614 GtkWidget *hbox; | 563 GtkWidget *hbox; |
634 buttons[(action_count * 2) - i - 1] = va_arg(actions, GCallback); | 583 buttons[(action_count * 2) - i - 1] = va_arg(actions, GCallback); |
635 } | 584 } |
636 | 585 |
637 /* Create the dialog. */ | 586 /* Create the dialog. */ |
638 data->dialog = dialog = gtk_dialog_new(); | 587 data->dialog = dialog = gtk_dialog_new(); |
639 gtk_window_set_transient_for(GTK_WINDOW(dialog), | |
640 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL)); | |
641 | 588 |
642 #if GTK_CHECK_VERSION(2,10,0) | 589 #if GTK_CHECK_VERSION(2,10,0) |
643 gtk_window_set_deletable(GTK_WINDOW(data->dialog), FALSE); | 590 gtk_window_set_deletable(GTK_WINDOW(data->dialog), FALSE); |
644 #endif | 591 #endif |
645 | 592 |
1189 pidgin_request_fields(const char *title, const char *primary, | 1136 pidgin_request_fields(const char *title, const char *primary, |
1190 const char *secondary, PurpleRequestFields *fields, | 1137 const char *secondary, PurpleRequestFields *fields, |
1191 const char *ok_text, GCallback ok_cb, | 1138 const char *ok_text, GCallback ok_cb, |
1192 const char *cancel_text, GCallback cancel_cb, | 1139 const char *cancel_text, GCallback cancel_cb, |
1193 PurpleAccount *account, const char *who, PurpleConversation *conv, | 1140 PurpleAccount *account, const char *who, PurpleConversation *conv, |
1194 const char *ui_hint, void *user_data) | 1141 void *user_data) |
1195 { | 1142 { |
1196 PidginRequestData *data; | 1143 PidginRequestData *data; |
1197 GtkWidget *win; | 1144 GtkWidget *win; |
1198 GtkWidget *vbox; | 1145 GtkWidget *vbox; |
1199 GtkWidget *vbox2; | 1146 GtkWidget *vbox2; |
1230 #ifdef _WIN32 | 1177 #ifdef _WIN32 |
1231 data->dialog = win = pidgin_create_window(PIDGIN_ALERT_TITLE, PIDGIN_HIG_BORDER, "multifield", TRUE) ; | 1178 data->dialog = win = pidgin_create_window(PIDGIN_ALERT_TITLE, PIDGIN_HIG_BORDER, "multifield", TRUE) ; |
1232 #else /* !_WIN32 */ | 1179 #else /* !_WIN32 */ |
1233 data->dialog = win = pidgin_create_window(title, PIDGIN_HIG_BORDER, "multifield", TRUE) ; | 1180 data->dialog = win = pidgin_create_window(title, PIDGIN_HIG_BORDER, "multifield", TRUE) ; |
1234 #endif /* _WIN32 */ | 1181 #endif /* _WIN32 */ |
1235 gtk_window_set_transient_for(GTK_WINDOW(win), | |
1236 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL)); | |
1237 | 1182 |
1238 g_signal_connect(G_OBJECT(win), "delete_event", | 1183 g_signal_connect(G_OBJECT(win), "delete_event", |
1239 G_CALLBACK(destroy_multifield_cb), data); | 1184 G_CALLBACK(destroy_multifield_cb), data); |
1240 | 1185 |
1241 /* Setup the main horizontal box */ | 1186 /* Setup the main horizontal box */ |
1646 | 1591 |
1647 #endif /* FILECHOOSER */ | 1592 #endif /* FILECHOOSER */ |
1648 | 1593 |
1649 if ((data->u.file.savedialog == TRUE) && | 1594 if ((data->u.file.savedialog == TRUE) && |
1650 (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) { | 1595 (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) { |
1651 purple_request_action_with_hint(data, NULL, _("That file already exists"), | 1596 purple_request_action(data, NULL, _("That file already exists"), |
1652 _("Would you like to overwrite it?"), 0, | 1597 _("Would you like to overwrite it?"), 0, |
1653 NULL, NULL, NULL, | 1598 NULL, NULL, NULL, |
1654 "pidgin-request-file", data, 2, | 1599 data, 2, |
1655 _("Overwrite"), G_CALLBACK(file_yes_no_cb), | 1600 _("Overwrite"), G_CALLBACK(file_yes_no_cb), |
1656 _("Choose New Name"), G_CALLBACK(file_yes_no_cb)); | 1601 _("Choose New Name"), G_CALLBACK(file_yes_no_cb)); |
1657 } else | 1602 } else |
1658 file_yes_no_cb(data, 1); | 1603 file_yes_no_cb(data, 1); |
1659 } | 1604 } |
1674 static void * | 1619 static void * |
1675 pidgin_request_file(const char *title, const char *filename, | 1620 pidgin_request_file(const char *title, const char *filename, |
1676 gboolean savedialog, | 1621 gboolean savedialog, |
1677 GCallback ok_cb, GCallback cancel_cb, | 1622 GCallback ok_cb, GCallback cancel_cb, |
1678 PurpleAccount *account, const char *who, PurpleConversation *conv, | 1623 PurpleAccount *account, const char *who, PurpleConversation *conv, |
1679 const char *ui_hint, void *user_data) | 1624 void *user_data) |
1680 { | 1625 { |
1681 PidginRequestData *data; | 1626 PidginRequestData *data; |
1682 GtkWidget *filesel; | 1627 GtkWidget *filesel; |
1683 const gchar *current_folder; | 1628 const gchar *current_folder; |
1684 #if GTK_CHECK_VERSION(2,4,0) | 1629 #if GTK_CHECK_VERSION(2,4,0) |
1762 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), | 1707 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), |
1763 "clicked", G_CALLBACK(file_cancel_cb), data); | 1708 "clicked", G_CALLBACK(file_cancel_cb), data); |
1764 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked", | 1709 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked", |
1765 G_CALLBACK(file_ok_check_if_exists_cb), data); | 1710 G_CALLBACK(file_ok_check_if_exists_cb), data); |
1766 #endif /* FILECHOOSER */ | 1711 #endif /* FILECHOOSER */ |
1767 gtk_window_set_role(GTK_WINDOW(filesel), "pidgin-request-file"); | |
1768 gtk_window_set_transient_for(GTK_WINDOW(filesel), | |
1769 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL)); | |
1770 | 1712 |
1771 data->dialog = filesel; | 1713 data->dialog = filesel; |
1772 gtk_widget_show(filesel); | 1714 gtk_widget_show(filesel); |
1773 | 1715 |
1774 return (void *)data; | 1716 return (void *)data; |
1776 | 1718 |
1777 static void * | 1719 static void * |
1778 pidgin_request_folder(const char *title, const char *dirname, | 1720 pidgin_request_folder(const char *title, const char *dirname, |
1779 GCallback ok_cb, GCallback cancel_cb, | 1721 GCallback ok_cb, GCallback cancel_cb, |
1780 PurpleAccount *account, const char *who, PurpleConversation *conv, | 1722 PurpleAccount *account, const char *who, PurpleConversation *conv, |
1781 const char *ui_hint, void *user_data) | 1723 void *user_data) |
1782 { | 1724 { |
1783 PidginRequestData *data; | 1725 PidginRequestData *data; |
1784 GtkWidget *dirsel; | 1726 GtkWidget *dirsel; |
1785 | 1727 |
1786 data = g_new0(PidginRequestData, 1); | 1728 data = g_new0(PidginRequestData, 1); |
1815 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(dirsel)->cancel_button), | 1757 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(dirsel)->cancel_button), |
1816 "clicked", G_CALLBACK(file_cancel_cb), data); | 1758 "clicked", G_CALLBACK(file_cancel_cb), data); |
1817 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dirsel)->ok_button), "clicked", | 1759 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dirsel)->ok_button), "clicked", |
1818 G_CALLBACK(file_ok_check_if_exists_cb), data); | 1760 G_CALLBACK(file_ok_check_if_exists_cb), data); |
1819 #endif | 1761 #endif |
1820 gtk_window_set_role(GTK_WINDOW(dirsel), "pidgin-request-dir"); | |
1821 gtk_window_set_transient_for(GTK_WINDOW(dirsel), | |
1822 get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL)); | |
1823 | 1762 |
1824 data->dialog = dirsel; | 1763 data->dialog = dirsel; |
1825 gtk_widget_show(dirsel); | 1764 gtk_widget_show(dirsel); |
1826 | 1765 |
1827 return (void *)data; | 1766 return (void *)data; |