src/gtkrequest.c

Mon, 22 Nov 2004 02:57:34 +0000

author
Alceste Scalas <alceste.scalas@gmx.net>
date
Mon, 22 Nov 2004 02:57:34 +0000
changeset 10229
39ffee70c286
parent 10225
0dfea1bc8695
child 10233
7b542749ccb6
permissions
-rw-r--r--

[gaim-migrate @ 11364]
This is a heavily warmenhoved patch from Alceste Scalas. Here's what it
changes:

If the user drags an image file into the buddy list or conversation, it
presents three options (when applicable):
Set as buddy icon - sets this image to be the buddy icon for this buddy
Send image file - Initiates a file transfer to send this image.
Insert in message - Inserts in the gtkimhtml for use as an IM image.

If the user drags a .desktop web link, it will insert a hyperlink in the
conversation. All other types of .desktop files fail with an error dialog.
If anyone can think of better ways to handle any of them, let me know.

This also happens to implement gaim_request_choice, which had previously
been unimplemented.

committer: Sean Egan <seanegan@pidgin.im>

5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file gtkrequest.c GTK+ Request API
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 * @ingroup gtkui
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 *
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * gaim
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7964
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7964
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7964
diff changeset
9 * source distribution.
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
10 *
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * (at your option) any later version.
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * GNU General Public License for more details.
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 *
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 */
9791
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9730
diff changeset
25 #include "internal.h"
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9730
diff changeset
26 #include "gtkgaim.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5846
diff changeset
27
7066
2d8321bf0491 [gaim-migrate @ 7630]
Christian Hammond <chipx86@chipx86.com>
parents: 7048
diff changeset
28 #include "prefs.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5846
diff changeset
29
9709
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
30 #include "gtkimhtml.h"
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
31 #include "gtkimhtmltoolbar.h"
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32 #include "gtkrequest.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5846
diff changeset
33 #include "gtkutils.h"
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #include "stock.h"
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35
8294
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
36 #include <gdk/gdkkeysyms.h>
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
37
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
38 #if GTK_CHECK_VERSION(2,3,0)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
39 # define NEW_STYLE_COMPLETION
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
40 #endif
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
41
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 typedef struct
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 {
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 GaimRequestType type;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 void *user_data;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
47 GtkWidget *dialog;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
49 GtkWidget *ok_button;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
50
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 size_t cb_count;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 GCallback *cbs;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
54 union
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
55 {
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
56 struct
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
57 {
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
58 GtkWidget *entry;
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
59
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
60 gboolean multiline;
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
61 gchar *hint;
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
62
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
63 } input;
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
64
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
65 struct
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
66 {
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
67 GaimRequestFields *fields;
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
68
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
69 } multifield;
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
70
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
71 struct
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
72 {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
73 gboolean savedialog;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
74 gchar *name;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
75
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
76 } file;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
77
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
78 } u;
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
79
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
80 } GaimGtkRequestData;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81
8294
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
82 #ifndef NEW_STYLE_COMPLETION
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
83 typedef struct
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
84 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
85 GCompletion *completion;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
86
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
87 gboolean completion_started;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
88
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
89 } GaimGtkCompletionData;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
90 #endif
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
91
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 static void
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
93 input_response_cb(GtkDialog *dialog, gint id, GaimGtkRequestData *data)
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 {
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
95 const char *value;
7174
2f3cab1045d6 [gaim-migrate @ 7742]
Nathan Walp <nwalp@pidgin.im>
parents: 7172
diff changeset
96 char *multiline_value = NULL;
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
97
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
98 if (data->u.input.multiline) {
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
99 GtkTextIter start_iter, end_iter;
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
100 GtkTextBuffer *buffer =
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
101 gtk_text_view_get_buffer(GTK_TEXT_VIEW(data->u.input.entry));
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
102
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
103 gtk_text_buffer_get_start_iter(buffer, &start_iter);
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
104 gtk_text_buffer_get_end_iter(buffer, &end_iter);
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
105
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
106 if ((data->u.input.hint != NULL) && (!strcmp(data->u.input.hint, "html")))
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
107 multiline_value = gtk_imhtml_get_markup(GTK_IMHTML(data->u.input.entry));
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
108 else
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
109 multiline_value = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter,
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
110 FALSE);
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
111
7172
cf6ed52de3c7 [gaim-migrate @ 7740]
Mark Doliner <markdoliner@pidgin.im>
parents: 7142
diff changeset
112 value = multiline_value;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 }
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
114 else
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
115 value = gtk_entry_get_text(GTK_ENTRY(data->u.input.entry));
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
116
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
117 if (id < data->cb_count && data->cbs[id] != NULL)
5498
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5496
diff changeset
118 ((GaimRequestInputCb)data->cbs[id])(data->user_data, value);
6110
8c703c3453c7 [gaim-migrate @ 6572]
Mark Doliner <markdoliner@pidgin.im>
parents: 6109
diff changeset
119 else if (data->cbs[1] != NULL)
6109
44e5eb92b617 [gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents: 6035
diff changeset
120 ((GaimRequestInputCb)data->cbs[1])(data->user_data, value);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121
7172
cf6ed52de3c7 [gaim-migrate @ 7740]
Mark Doliner <markdoliner@pidgin.im>
parents: 7142
diff changeset
122 if (data->u.input.multiline)
cf6ed52de3c7 [gaim-migrate @ 7740]
Mark Doliner <markdoliner@pidgin.im>
parents: 7142
diff changeset
123 g_free(multiline_value);
cf6ed52de3c7 [gaim-migrate @ 7740]
Mark Doliner <markdoliner@pidgin.im>
parents: 7142
diff changeset
124
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125 gaim_request_close(GAIM_REQUEST_INPUT, data);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
126 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
128 static void
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
129 action_response_cb(GtkDialog *dialog, gint id, GaimGtkRequestData *data)
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
130 {
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
131 if (id < data->cb_count && data->cbs[id] != NULL)
5498
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5496
diff changeset
132 ((GaimRequestActionCb)data->cbs[id])(data->user_data, id);
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
133
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
134 gaim_request_close(GAIM_REQUEST_INPUT, data);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
135 }
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
136
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
137
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
138 static void
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
139 choice_response_cb(GtkDialog *dialog, gint id, GaimGtkRequestData *data)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
140 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
141 GtkWidget *radio = g_object_get_data(G_OBJECT(dialog), "radio");
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
142 GSList *group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
143 if (id < data->cb_count)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
144 while (group) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
145 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(group->data))) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
146 ((GaimRequestChoiceCb)data->cbs[id])(data->user_data, GPOINTER_TO_INT(g_object_get_data(G_OBJECT(group->data), "choice_id")));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
147 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
148 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
149 group = group->next;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
150 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
151 gaim_request_close(GAIM_REQUEST_INPUT, data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
152 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
153
5835
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
154 static gboolean
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
155 field_string_focus_out_cb(GtkWidget *entry, GdkEventFocus *event,
5846
d2c9503ad8a8 [gaim-migrate @ 6277]
Christian Hammond <chipx86@chipx86.com>
parents: 5845
diff changeset
156 GaimRequestField *field)
5832
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
157 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
158 const char *value;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
159
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
160 if (gaim_request_field_string_is_multiline(field))
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
161 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
162 GtkTextBuffer *buffer;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
163 GtkTextIter start_iter, end_iter;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
164
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
165 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry));
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
166
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
167 gtk_text_buffer_get_start_iter(buffer, &start_iter);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
168 gtk_text_buffer_get_end_iter(buffer, &end_iter);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
169
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
170 value = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter, FALSE);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
171 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
172 else
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
173 value = gtk_entry_get_text(GTK_ENTRY(entry));
5834
c7945c10cff3 [gaim-migrate @ 6265]
Christian Hammond <chipx86@chipx86.com>
parents: 5832
diff changeset
174
5832
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
175 gaim_request_field_string_set_value(field,
5834
c7945c10cff3 [gaim-migrate @ 6265]
Christian Hammond <chipx86@chipx86.com>
parents: 5832
diff changeset
176 (*value == '\0' ? NULL : value));
5835
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
177
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
178 return FALSE;
5832
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
179 }
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
180
5835
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
181 static gboolean
5846
d2c9503ad8a8 [gaim-migrate @ 6277]
Christian Hammond <chipx86@chipx86.com>
parents: 5845
diff changeset
182 field_int_focus_out_cb(GtkEntry *entry, GdkEventFocus *event,
d2c9503ad8a8 [gaim-migrate @ 6277]
Christian Hammond <chipx86@chipx86.com>
parents: 5845
diff changeset
183 GaimRequestField *field)
5832
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
184 {
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
185 gaim_request_field_int_set_value(field,
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
186 atoi(gtk_entry_get_text(entry)));
5835
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
187
2d496d6d967d [gaim-migrate @ 6266]
Christian Hammond <chipx86@chipx86.com>
parents: 5834
diff changeset
188 return FALSE;
5832
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
189 }
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
190
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
191 static void
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
192 field_bool_cb(GtkToggleButton *button, GaimRequestField *field)
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
193 {
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
194 gaim_request_field_bool_set_value(field,
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
195 gtk_toggle_button_get_active(button));
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
196 }
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
197
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
198 static void
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
199 field_choice_menu_cb(GtkOptionMenu *menu, GaimRequestField *field)
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
200 {
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
201 gaim_request_field_choice_set_value(field,
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
202 gtk_option_menu_get_history(menu));
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
203 }
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
204
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
205 static void
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
206 field_choice_option_cb(GtkRadioButton *button, GaimRequestField *field)
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
207 {
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
208 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
209 gaim_request_field_choice_set_value(field,
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
210 g_slist_index(gtk_radio_button_get_group(button), button));
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
211 }
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
212
f81c9ce730fa [gaim-migrate @ 6263]
Christian Hammond <chipx86@chipx86.com>
parents: 5817
diff changeset
213 static void
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
214 field_account_cb(GObject *w, GaimAccount *account, GaimRequestField *field)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
215 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
216 gaim_request_field_account_set_value(field, account);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
217 }
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
218
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
219 static void
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
220 multifield_ok_cb(GtkWidget *button, GaimGtkRequestData *data)
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
221 {
8521
0f0e26a59d47 [gaim-migrate @ 9260]
Gary Kramlich <grim@pidgin.im>
parents: 8332
diff changeset
222 if (!GTK_WIDGET_HAS_FOCUS(button))
0f0e26a59d47 [gaim-migrate @ 9260]
Gary Kramlich <grim@pidgin.im>
parents: 8332
diff changeset
223 gtk_widget_grab_focus(button);
0f0e26a59d47 [gaim-migrate @ 9260]
Gary Kramlich <grim@pidgin.im>
parents: 8332
diff changeset
224
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
225 if (data->cbs[0] != NULL)
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
226 ((GaimRequestFieldsCb)data->cbs[0])(data->user_data,
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
227 data->u.multifield.fields);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
228
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
229 gaim_request_close(GAIM_REQUEST_FIELDS, data);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
230 }
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
231
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
232 static void
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
233 multifield_cancel_cb(GtkWidget *button, GaimGtkRequestData *data)
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
234 {
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
235 if (data->cbs[1] != NULL)
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
236 ((GaimRequestFieldsCb)data->cbs[1])(data->user_data,
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
237 data->u.multifield.fields);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
238
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
239 gaim_request_close(GAIM_REQUEST_FIELDS, data);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
240 }
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
241
8323
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
242 static void
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
243 destroy_multifield_cb(GtkWidget *dialog, GdkEvent *event,
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
244 GaimGtkRequestData *data)
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
245 {
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
246 multifield_cancel_cb(NULL, data);
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
247 }
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
248
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
249
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
250 #define STOCK_ITEMIZE(r, l) \
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
251 if (!strcmp((r), text)) \
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
252 return (l);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
253
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
254 static const char *
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
255 text_to_stock(const char *text)
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
256 {
6334
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
257 STOCK_ITEMIZE(_("Yes"), GTK_STOCK_YES);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
258 STOCK_ITEMIZE(_("No"), GTK_STOCK_NO);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
259 STOCK_ITEMIZE(_("OK"), GTK_STOCK_OK);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
260 STOCK_ITEMIZE(_("Cancel"), GTK_STOCK_CANCEL);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
261 STOCK_ITEMIZE(_("Apply"), GTK_STOCK_APPLY);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
262 STOCK_ITEMIZE(_("Close"), GTK_STOCK_CLOSE);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
263 STOCK_ITEMIZE(_("Delete"), GTK_STOCK_DELETE);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
264 STOCK_ITEMIZE(_("Add"), GTK_STOCK_ADD);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
265 STOCK_ITEMIZE(_("Remove"), GTK_STOCK_REMOVE);
47a748d6fb0f [gaim-migrate @ 6833]
Christian Hammond <chipx86@chipx86.com>
parents: 6326
diff changeset
266 STOCK_ITEMIZE(_("Save"), GTK_STOCK_SAVE);
8302
e23e9c8f05f7 [gaim-migrate @ 9026]
Christian Hammond <chipx86@chipx86.com>
parents: 8294
diff changeset
267 STOCK_ITEMIZE(_("Alias"), GAIM_STOCK_ALIAS);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
268
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
269 return text;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
270 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271
6363
6e0fa4b64fe6 [gaim-migrate @ 6868]
Christian Hammond <chipx86@chipx86.com>
parents: 6338
diff changeset
272 static void *
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273 gaim_gtk_request_input(const char *title, const char *primary,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
274 const char *secondary, const char *default_value,
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
275 gboolean multiline, gboolean masked, gchar *hint,
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
276 const char *ok_text, GCallback ok_cb,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
277 const char *cancel_text, GCallback cancel_cb,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
278 void *user_data)
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
279 {
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
280 GaimGtkRequestData *data;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
281 GtkWidget *dialog;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
282 GtkWidget *vbox;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
283 GtkWidget *hbox;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
284 GtkWidget *label;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
285 GtkWidget *entry;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
286 GtkWidget *img;
8782
eb3f9bf7d69c [gaim-migrate @ 9544]
Ignacio J. Elia
parents: 8697
diff changeset
287 GtkWidget *toolbar;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
288 char *label_text;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
289
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
290 data = g_new0(GaimGtkRequestData, 1);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
291 data->type = GAIM_REQUEST_INPUT;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
292 data->user_data = user_data;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
293
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
294 data->cb_count = 2;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
295 data->cbs = g_new0(GCallback, 2);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
296
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
297 data->cbs[0] = ok_cb;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
298 data->cbs[1] = cancel_cb;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
299
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
300 /* Create the dialog. */
7678
e71492542f69 [gaim-migrate @ 8322]
Sean Egan <seanegan@pidgin.im>
parents: 7538
diff changeset
301 dialog = gtk_dialog_new_with_buttons(title ? title : GAIM_ALERT_TITLE,
e71492542f69 [gaim-migrate @ 8322]
Sean Egan <seanegan@pidgin.im>
parents: 7538
diff changeset
302 NULL, 0,
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
303 text_to_stock(cancel_text), 1,
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
304 text_to_stock(ok_text), 0,
5485
a0e3152b4bbb [gaim-migrate @ 5881]
Sean Egan <seanegan@pidgin.im>
parents: 5480
diff changeset
305 NULL);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
306 data->dialog = dialog;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
307
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
308 g_signal_connect(G_OBJECT(dialog), "response",
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
309 G_CALLBACK(input_response_cb), data);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
310
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
311 /* Setup the dialog */
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
312 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
5510
15d2eca03c1d [gaim-migrate @ 5909]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
313 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 6);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
314 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
315 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
5510
15d2eca03c1d [gaim-migrate @ 5909]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
316 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0);
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
317 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 12);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
318
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
319 /* Setup the main horizontal box */
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
320 hbox = gtk_hbox_new(FALSE, 12);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
321 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
322
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
323 /* Dialog icon. */
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
324 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
325 GTK_ICON_SIZE_DIALOG);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
326 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
327 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
328
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
329 /* Vertical box */
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
330 vbox = gtk_vbox_new(FALSE, 12);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
331
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
332 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
333
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
334 /* Descriptive label */
7843
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
335 label_text = g_strdup_printf((primary ? "<span weight=\"bold\" size=\"larger\">"
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
336 "%s</span>%s%s" : "%s%s%s"),
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
337 (primary ? primary : ""),
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
338 ((primary && secondary) ? "\n\n" : ""),
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
339 (secondary ? secondary : ""));
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
340
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341 label = gtk_label_new(NULL);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
342
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343 gtk_label_set_markup(GTK_LABEL(label), label_text);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
344 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
345 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
346 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
347
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
348 g_free(label_text);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
349
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
350 /* Entry field. */
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
351 data->u.input.multiline = multiline;
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
352 data->u.input.hint = (hint == NULL ? NULL : g_strdup(hint));
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
353
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
354 if ((data->u.input.hint != NULL) && (!strcmp(data->u.input.hint, "html"))) {
10146
cd4abe598b61 [gaim-migrate @ 11222]
Mark Doliner <markdoliner@pidgin.im>
parents: 10116
diff changeset
355 GtkWidget *frame;
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
356
10181
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
357 /* imhtml */
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
358 frame = gaim_gtk_create_imhtml(TRUE, &entry, &toolbar);
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
359 gtk_widget_set_size_request(entry, 320, 130);
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
360 gtk_widget_set_name(entry, "gaim_gtkrequest_imhtml");
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
361 if (default_value != NULL)
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10164
diff changeset
362 gtk_imhtml_append_text(GTK_IMHTML(entry), default_value, GTK_IMHTML_NO_SCROLL);
10146
cd4abe598b61 [gaim-migrate @ 11222]
Mark Doliner <markdoliner@pidgin.im>
parents: 10116
diff changeset
363 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
cd4abe598b61 [gaim-migrate @ 11222]
Mark Doliner <markdoliner@pidgin.im>
parents: 10116
diff changeset
364 gtk_widget_show(frame);
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
365 }
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
366 else {
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
367 if (multiline) {
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
368 GtkWidget *sw;
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
369
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
370 sw = gtk_scrolled_window_new(NULL, NULL);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
371 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
372 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
373 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
374 GTK_SHADOW_IN);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
375
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
376 gtk_widget_set_size_request(sw, 320, 130);
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
377
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
378 /* GtkTextView */
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
379 entry = gtk_text_view_new();
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
380 gtk_text_view_set_editable(GTK_TEXT_VIEW(entry), TRUE);
5510
15d2eca03c1d [gaim-migrate @ 5909]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
381
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
382 if (default_value != NULL) {
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
383 GtkTextBuffer *buffer;
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
384
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
385 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry));
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
386 gtk_text_buffer_set_text(buffer, default_value, -1);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
387 }
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
388
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
389 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(entry), GTK_WRAP_WORD_CHAR);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
390
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
391 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
392
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
393 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
394 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(entry));
6035
b245be9cbe3b [gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
395
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
396 gtk_container_add(GTK_CONTAINER(sw), entry);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
397 }
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
398 else {
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
399 entry = gtk_entry_new();
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
400
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
401 gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
402
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
403 gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
404
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
405 if (default_value != NULL)
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
406 gtk_entry_set_text(GTK_ENTRY(entry), default_value);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
407
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
408 if (masked)
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
409 gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8524
diff changeset
410 }
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
411 }
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
412
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8046
diff changeset
413 gaim_set_accessible_label (entry, label);
5490
1ecf84cb6fc4 [gaim-migrate @ 5886]
Christian Hammond <chipx86@chipx86.com>
parents: 5485
diff changeset
414 data->u.input.entry = entry;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
415
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
416 /* Show everything. */
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 gtk_widget_show_all(dialog);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
418
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
419 return data;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
420 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
421
6363
6e0fa4b64fe6 [gaim-migrate @ 6868]
Christian Hammond <chipx86@chipx86.com>
parents: 6338
diff changeset
422 static void *
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
423 gaim_gtk_request_choice(const char *title, const char *primary,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
424 const char *secondary, unsigned int default_value,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
425 const char *ok_text, GCallback ok_cb,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
426 const char *cancel_text, GCallback cancel_cb,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
427 void *user_data, va_list args)
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
428 {
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
429 GaimGtkRequestData *data;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
430 GtkWidget *dialog;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
431 GtkWidget *vbox, *vbox2;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
432 GtkWidget *hbox;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
433 GtkWidget *label;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
434 GtkWidget *img;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
435 GtkWidget *radio = NULL;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
436 char *label_text;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
437 char *radio_text;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
438
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
439 data = g_new0(GaimGtkRequestData, 1);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
440 data->type = GAIM_REQUEST_ACTION;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
441 data->user_data = user_data;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
442
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
443 data->cb_count = 2;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
444 data->cbs = g_new0(GCallback, 2);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
445 data->cbs[0] = cancel_cb;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
446 data->cbs[1] = ok_cb;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
447
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
448 /* Create the dialog. */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
449 data->dialog = dialog = gtk_dialog_new();
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
450
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
451 if (title != NULL)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
452 gtk_window_set_title(GTK_WINDOW(dialog), title);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
453
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
454
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
455 gtk_dialog_add_button(GTK_DIALOG(dialog),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
456 text_to_stock(cancel_text), 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
457
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
458 gtk_dialog_add_button(GTK_DIALOG(dialog),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
459 text_to_stock(ok_text), 1);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
460
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
461 g_signal_connect(G_OBJECT(dialog), "response",
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
462 G_CALLBACK(choice_response_cb), data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
463
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
464 /* Setup the dialog */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
465 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
466 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
467 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
468 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 12);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
469 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 6);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
470
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
471 /* Setup the main horizontal box */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
472 hbox = gtk_hbox_new(FALSE, 12);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
473 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
474
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
475 /* Dialog icon. */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
476 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
477 GTK_ICON_SIZE_DIALOG);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
478 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
479 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
480
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
481 /* Vertical box */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
482 vbox = gtk_vbox_new(FALSE, 12);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
483 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
484
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
485 /* Descriptive label */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
486 label_text = g_strdup_printf((primary ? "<span weight=\"bold\" size=\"larger\">"
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
487 "%s</span>%s%s" : "%s%s%s"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
488 (primary ? primary : ""),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
489 ((primary && secondary) ? "\n\n" : ""),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
490 (secondary ? secondary : ""));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
491
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
492 label = gtk_label_new(NULL);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
493
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
494 gtk_label_set_markup(GTK_LABEL(label), label_text);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
495 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
496 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
497 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
498
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
499 g_free(label_text);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
500
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
501 vbox2 = gtk_vbox_new(FALSE, 6);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
502 gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
503 while ((radio_text = va_arg(args, char*))) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
504 int resp = va_arg(args, int);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
505 radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), radio_text);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
506 gtk_box_pack_start(GTK_BOX(vbox2), radio, FALSE, FALSE, 0);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
507 g_object_set_data(G_OBJECT(radio), "choice_id", GINT_TO_POINTER(resp));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
508 if (resp == default_value)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
509 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), TRUE);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
510 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
511
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
512 g_object_set_data(G_OBJECT(dialog), "radio", radio);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
513
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
514 /* Show everything. */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
515 gtk_widget_show_all(dialog);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
516
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10225
diff changeset
517 return data;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
518 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
519
6363
6e0fa4b64fe6 [gaim-migrate @ 6868]
Christian Hammond <chipx86@chipx86.com>
parents: 6338
diff changeset
520 static void *
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
521 gaim_gtk_request_action(const char *title, const char *primary,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
522 const char *secondary, unsigned int default_action,
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
523 void *user_data, size_t action_count, va_list actions)
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
524 {
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
525 GaimGtkRequestData *data;
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
526 GtkWidget *dialog;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
527 GtkWidget *vbox;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
528 GtkWidget *hbox;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
529 GtkWidget *label;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
530 GtkWidget *img;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
531 void **buttons;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
532 char *label_text;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
533 int i;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
534
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
535 data = g_new0(GaimGtkRequestData, 1);
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
536 data->type = GAIM_REQUEST_ACTION;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
537 data->user_data = user_data;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
538
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
539 data->cb_count = action_count;
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
540 data->cbs = g_new0(GCallback, action_count);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
541
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
542 /* Reverse the buttons */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
543 buttons = g_new0(void *, action_count * 2);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
544
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
545 for (i = 0; i < action_count * 2; i += 2) {
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
546 buttons[(action_count * 2) - i - 2] = va_arg(actions, char *);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
547 buttons[(action_count * 2) - i - 1] = va_arg(actions, GCallback);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
548 }
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
549
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
550 /* Create the dialog. */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
551 data->dialog = dialog = gtk_dialog_new();
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6363
diff changeset
552
6109
44e5eb92b617 [gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents: 6035
diff changeset
553 if (title != NULL)
44e5eb92b617 [gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents: 6035
diff changeset
554 gtk_window_set_title(GTK_WINDOW(dialog), title);
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
555
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
556 for (i = 0; i < action_count; i++) {
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
557 gtk_dialog_add_button(GTK_DIALOG(dialog),
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
558 text_to_stock(buttons[2 * i]), i);
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
559
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
560 data->cbs[i] = buttons[2 * i + 1];
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
561 }
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
562
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
563 g_free(buttons);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
564
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
565 g_signal_connect(G_OBJECT(dialog), "response",
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5510
diff changeset
566 G_CALLBACK(action_response_cb), data);
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
567
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
568 /* Setup the dialog */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
569 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
570 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
571 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
572 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 12);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
573 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 6);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
574
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
575 /* Setup the main horizontal box */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
576 hbox = gtk_hbox_new(FALSE, 12);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
577 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
578
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
579 /* Dialog icon. */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
580 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
581 GTK_ICON_SIZE_DIALOG);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
582 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
583 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
584
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
585 /* Vertical box */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
586 vbox = gtk_vbox_new(FALSE, 12);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
587 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
588
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
589 /* Descriptive label */
7843
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
590 label_text = g_strdup_printf((primary ? "<span weight=\"bold\" size=\"larger\">"
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
591 "%s</span>%s%s" : "%s%s%s"),
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
592 (primary ? primary : ""),
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
593 ((primary && secondary) ? "\n\n" : ""),
d771eecc9717 [gaim-migrate @ 8497]
Nathan Fredrickson <nathan@silverorange.com>
parents: 7678
diff changeset
594 (secondary ? secondary : ""));
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
595
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
596 label = gtk_label_new(NULL);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
597
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
598 gtk_label_set_markup(GTK_LABEL(label), label_text);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
599 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
600 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
601 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
602
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
603 g_free(label_text);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
604
9948
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
605
9976
5fceb5de48b8 [gaim-migrate @ 10887]
Dave West <kat@users.sourceforge.net>
parents: 9948
diff changeset
606 if (default_action == GAIM_DEFAULT_ACTION_NONE) {
9948
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
607 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT);
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
608 GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS);
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
609 gtk_widget_grab_focus(img);
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
610 gtk_widget_grab_default(img);
2642975ffb85 [gaim-migrate @ 10844]
Dave West <kat@users.sourceforge.net>
parents: 9791
diff changeset
611 } else
5510
15d2eca03c1d [gaim-migrate @ 5909]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
612 gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_action);
15d2eca03c1d [gaim-migrate @ 5909]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
613
5496
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
614 /* Show everything. */
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
615 gtk_widget_show_all(dialog);
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
616
ed995be89052 [gaim-migrate @ 5892]
Christian Hammond <chipx86@chipx86.com>
parents: 5490
diff changeset
617 return data;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
618 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
619
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
620 static void
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
621 req_entry_field_changed_cb(GtkWidget *entry, GaimRequestField *field)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
622 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
623 GaimGtkRequestData *req_data;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
624 const char *text = gtk_entry_get_text(GTK_ENTRY(entry));
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
625
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
626 gaim_request_field_string_set_value(field, (*text == '\0' ? NULL : text));
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
627
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
628 req_data = (GaimGtkRequestData *)field->group->fields_list->ui_data;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
629
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
630 gtk_widget_set_sensitive(req_data->ok_button,
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
631 gaim_request_fields_all_required_filled(field->group->fields_list));
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
632 }
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
633
8294
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
634 GList *
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
635 get_online_screennames(void)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
636 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
637 GList *screennames = NULL;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
638 GaimBlistNode *gnode, *cnode, *bnode;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
639
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
640 for (gnode = gaim_get_blist()->root; gnode != NULL; gnode = gnode->next)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
641 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
642 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
643 continue;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
644
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
645 for (cnode = gnode->child; cnode != NULL; cnode = cnode->next)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
646 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
647 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
648 continue;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
649
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
650 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
651 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
652 GaimBuddy *buddy = (GaimBuddy *)bnode;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
653
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
654 if (!gaim_account_is_connected(buddy->account))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
655 continue;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
656
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
657 screennames = g_list_append(screennames, g_strdup(buddy->name));
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
658 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
659 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
660 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
661
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
662 return screennames;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
663 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
664
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
665 #ifndef NEW_STYLE_COMPLETION
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
666 static gboolean
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
667 completion_entry_event(GtkEditable *entry, GdkEventKey *event,
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
668 GaimGtkCompletionData *data)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
669 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
670 int pos, end_pos;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
671
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
672 if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Tab)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
673 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
674 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
675
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
676 if (data->completion_started &&
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
677 pos != end_pos && pos > 1 &&
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
678 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
679 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
680 gtk_editable_select_region(entry, 0, 0);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
681 gtk_editable_set_position(entry, -1);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
682
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
683 return TRUE;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
684 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
685 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
686 else if (event->type == GDK_KEY_PRESS && event->length > 0)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
687 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
688 char *prefix, *nprefix;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
689
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
690 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
691
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
692 if (data->completion_started &&
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
693 pos != end_pos && pos > 1 &&
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
694 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
695 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
696 char *temp;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
697
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
698 temp = gtk_editable_get_chars(entry, 0, pos);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
699 prefix = g_strconcat(temp, event->string, NULL);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
700 g_free(temp);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
701 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
702 else if (pos == end_pos && pos > 1 &&
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
703 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
704 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
705 prefix = g_strconcat(gtk_entry_get_text(GTK_ENTRY(entry)),
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
706 event->string, NULL);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
707 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
708 else
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
709 return FALSE;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
710
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
711 pos = strlen(prefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
712 nprefix = NULL;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
713
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
714 g_completion_complete(data->completion, prefix, &nprefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
715
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
716 if (nprefix != NULL)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
717 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
718 gtk_entry_set_text(GTK_ENTRY(entry), nprefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
719 gtk_editable_set_position(entry, pos);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
720 gtk_editable_select_region(entry, pos, -1);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
721
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
722 data->completion_started = TRUE;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
723
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
724 g_free(nprefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
725 g_free(prefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
726
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
727 return TRUE;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
728 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
729
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
730 g_free(prefix);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
731 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
732
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
733 return FALSE;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
734 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
735
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
736 static void
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
737 destroy_completion_data(GtkWidget *w, GaimGtkCompletionData *data)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
738 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
739 g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
740 g_completion_free(data->completion);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
741
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
742 g_free(data);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
743 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
744 #endif /* !NEW_STYLE_COMPLETION */
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
745
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
746 static void
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
747 setup_screenname_autocomplete(GtkWidget *entry, GaimRequestField *field)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
748 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
749 #ifdef NEW_STYLE_COMPLETION
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
750 GtkListStore *store;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
751 GtkTreeIter iter;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
752 GtkEntryCompletion *completion;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
753 GList *screennames, *l;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
754
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
755 store = gtk_list_store_new(1, G_TYPE_STRING);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
756
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
757 screennames = get_online_screennames();
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
758
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
759 for (l = screennames; l != NULL; l = l->next)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
760 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
761 gtk_list_store_append(store, &iter);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
762 gtk_list_store_set(store, &iter, 0, l->data, -1);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
763 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
764
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
765 g_list_foreach(screennames, (GFunc)g_free, NULL);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
766 g_list_free(screennames);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
767
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
768 completion = gtk_entry_completion_new();
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
769 gtk_entry_set_completion(GTK_ENTRY(entry), completion);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
770 g_object_unref(completion);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
771
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
772 gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store));
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
773 g_object_unref(store);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
774
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
775 gtk_entry_completion_set_text_column(completion, 0);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
776
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
777 #else /* !NEW_STYLE_COMPLETION */
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
778 GaimGtkCompletionData *data;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
779 GList *screennames;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
780
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
781 data = g_new0(GaimGtkCompletionData, 1);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
782
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
783 data->completion = g_completion_new(NULL);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
784
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
785 g_completion_set_compare(data->completion, g_ascii_strncasecmp);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
786
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
787 screennames = get_online_screennames();
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
788
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
789 g_completion_add_items(data->completion, screennames);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
790
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
791 g_list_free(screennames);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
792
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
793 g_signal_connect(G_OBJECT(entry), "event",
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
794 G_CALLBACK(completion_entry_event), data);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
795 g_signal_connect(G_OBJECT(entry), "destroy",
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
796 G_CALLBACK(destroy_completion_data), data);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
797
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
798 #endif /* !NEW_STYLE_COMPLETION */
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
799 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
800
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
801 static void
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
802 setup_entry_field(GtkWidget *entry, GaimRequestField *field)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
803 {
8294
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
804 const char *type_hint;
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
805
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
806 gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
807
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
808 if (gaim_request_field_is_required(field))
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
809 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
810 g_signal_connect(G_OBJECT(entry), "changed",
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
811 G_CALLBACK(req_entry_field_changed_cb), field);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
812 }
8294
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
813
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
814 if ((type_hint = gaim_request_field_get_type_hint(field)) != NULL)
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
815 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
816 if (!strcmp(type_hint, "screenname"))
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
817 {
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
818 setup_screenname_autocomplete(entry, field);
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
819 }
cffb4d4660f0 [gaim-migrate @ 9018]
Christian Hammond <chipx86@chipx86.com>
parents: 8289
diff changeset
820 }
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
821 }
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
822
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
823 static GtkWidget *
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
824 create_string_field(GaimRequestField *field)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
825 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
826 const char *value;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
827 GtkWidget *widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
828
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
829 value = gaim_request_field_string_get_default_value(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
830
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
831 if (gaim_request_field_string_is_multiline(field))
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
832 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
833 GtkWidget *textview;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
834
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
835 widget = gtk_scrolled_window_new(NULL, NULL);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
836 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
837 GTK_SHADOW_IN);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
838 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
8916
8a8ce5bb293a [gaim-migrate @ 9686]
Nathan Walp <nwalp@pidgin.im>
parents: 8848
diff changeset
839 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
840
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
841 textview = gtk_text_view_new();
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
842 gtk_text_view_set_editable(GTK_TEXT_VIEW(textview),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
843 TRUE);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
844 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
845 GTK_WRAP_WORD_CHAR);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
846
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
847 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
848 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(textview));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
849
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
850 gtk_container_add(GTK_CONTAINER(widget), textview);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
851 gtk_widget_show(textview);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
852
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
853 gtk_widget_set_size_request(widget, -1, 75);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
854
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
855 if (value != NULL)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
856 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
857 GtkTextBuffer *buffer;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
858
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
859 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
860
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
861 gtk_text_buffer_set_text(buffer, value, -1);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
862 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
863
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
864 gtk_text_view_set_editable(GTK_TEXT_VIEW(textview),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
865 gaim_request_field_string_is_editable(field));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
866
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
867 g_signal_connect(G_OBJECT(textview), "focus-out-event",
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
868 G_CALLBACK(field_string_focus_out_cb), field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
869 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
870 else
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
871 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
872 widget = gtk_entry_new();
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
873
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
874 setup_entry_field(widget, field);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
875
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
876 if (value != NULL)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
877 gtk_entry_set_text(GTK_ENTRY(widget), value);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
878
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
879 gtk_entry_set_visibility(GTK_ENTRY(widget),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
880 !gaim_request_field_string_is_masked(field));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
881
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
882 gtk_editable_set_editable(GTK_EDITABLE(widget),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
883 gaim_request_field_string_is_editable(field));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
884
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
885 g_signal_connect(G_OBJECT(widget), "focus-out-event",
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
886 G_CALLBACK(field_string_focus_out_cb), field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
887 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
888
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
889 return widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
890 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
891
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
892 static GtkWidget *
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
893 create_int_field(GaimRequestField *field)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
894 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
895 int value;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
896 GtkWidget *widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
897
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
898 widget = gtk_entry_new();
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
899
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
900 setup_entry_field(widget, field);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
901
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
902 value = gaim_request_field_int_get_default_value(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
903
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
904 if (value != 0)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
905 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
906 char buf[32];
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
907
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
908 g_snprintf(buf, sizeof(buf), "%d", value);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
909
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
910 gtk_entry_set_text(GTK_ENTRY(widget), buf);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
911 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
912
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
913 g_signal_connect(G_OBJECT(widget), "focus-out-event",
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
914 G_CALLBACK(field_int_focus_out_cb), field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
915
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
916 return widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
917 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
918
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
919 static GtkWidget *
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
920 create_bool_field(GaimRequestField *field)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
921 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
922 GtkWidget *widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
923
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
924 widget = gtk_check_button_new_with_label(
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
925 gaim_request_field_get_label(field));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
926
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
927 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
928 gaim_request_field_bool_get_default_value(field));
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
929
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
930 g_signal_connect(G_OBJECT(widget), "toggled",
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
931 G_CALLBACK(field_bool_cb), field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
932
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
933 return widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
934 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
935
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
936 static GtkWidget *
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
937 create_choice_field(GaimRequestField *field)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
938 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
939 GtkWidget *widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
940 GList *labels;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
941 GList *l;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
942
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
943 labels = gaim_request_field_choice_get_labels(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
944
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
945 if (g_list_length(labels) > 5)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
946 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
947 GtkWidget *menu;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
948 GtkWidget *item;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
949
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
950 widget = gtk_option_menu_new();
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
951
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
952 menu = gtk_menu_new();
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
953
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
954 gtk_option_menu_set_menu(GTK_OPTION_MENU(widget), menu);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
955
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
956 for (l = labels; l != NULL; l = l->next)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
957 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
958 const char *text = l->data;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
959
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
960 item = gtk_menu_item_new_with_label(text);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
961
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
962 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
963 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
964
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
965 g_signal_connect(G_OBJECT(widget), "changed",
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
966 G_CALLBACK(field_choice_menu_cb), field);
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
967 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
968 else
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
969 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
970 GtkWidget *box;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
971 GtkWidget *first_radio = NULL;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
972 GtkWidget *radio;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
973
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
974 if (g_list_length(labels) == 2)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
975 box = gtk_hbox_new(FALSE, 6);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
976 else
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
977 box = gtk_vbox_new(FALSE, 0);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
978
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
979 widget = box;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
980
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
981 for (l = labels; l != NULL; l = l->next)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
982 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
983 const char *text = l->data;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
984
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
985 radio = gtk_radio_button_new_with_label_from_widget(
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
986 GTK_RADIO_BUTTON(first_radio), text);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
987
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
988 if (first_radio == NULL)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
989 first_radio = radio;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
990
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
991 gtk_box_pack_start(GTK_BOX(box), radio, TRUE, TRUE, 0);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
992 gtk_widget_show(radio);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
993
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
994 g_signal_connect(G_OBJECT(radio), "toggled",
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
995 G_CALLBACK(field_choice_option_cb), field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
996 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
997 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
998
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
999 return widget;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1000 }
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1001
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1002 static GtkWidget *
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1003 create_account_field(GaimRequestField *field)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1004 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1005 GtkWidget *widget;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1006
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1007 widget = gaim_gtk_account_option_menu_new(
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1008 gaim_request_field_account_get_default_value(field),
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1009 gaim_request_field_account_get_show_all(field),
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8286
diff changeset
1010 G_CALLBACK(field_account_cb),
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8286
diff changeset
1011 gaim_request_field_account_get_filter(field),
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8286
diff changeset
1012 field);
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1013
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1014 return widget;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1015 }
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1016
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1017 static void
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1018 select_field_list_item(GtkTreeModel *model, GtkTreePath *path,
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1019 GtkTreeIter *iter, gpointer data)
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1020 {
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1021 GaimRequestField *field = (GaimRequestField *)data;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1022 const char *text;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1023
7909
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1024 gtk_tree_model_get(model, iter, 1, &text, -1);
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1025
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1026 gaim_request_field_list_add_selected(field, text);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1027 }
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1028
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1029 static void
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1030 list_field_select_changed_cb(GtkTreeSelection *sel, GaimRequestField *field)
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1031 {
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1032 gaim_request_field_list_clear_selected(field);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1033
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1034 gtk_tree_selection_selected_foreach(sel, select_field_list_item, field);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1035 }
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1036
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1037 static GtkWidget *
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1038 create_list_field(GaimRequestField *field)
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1039 {
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1040 GtkWidget *sw;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1041 GtkWidget *treeview;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1042 GtkListStore *store;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1043 GtkCellRenderer *renderer;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1044 GtkTreeSelection *sel;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1045 GtkTreeViewColumn *column;
7909
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1046 GtkTreeIter iter;
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1047 const GList *l;
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1048
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1049 /* Create the scrolled window */
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1050 sw = gtk_scrolled_window_new(NULL, NULL);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1051 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
8332
b708d3d428a4 [gaim-migrate @ 9056]
Pekka Riikonen <priikone@silcnet.org>
parents: 8323
diff changeset
1052 GTK_POLICY_AUTOMATIC,
b708d3d428a4 [gaim-migrate @ 9056]
Pekka Riikonen <priikone@silcnet.org>
parents: 8323
diff changeset
1053 GTK_POLICY_AUTOMATIC);
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1054 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1055 GTK_SHADOW_IN);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1056 gtk_widget_show(sw);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1057
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1058 /* Create the list store */
7909
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1059 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING);
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1060
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1061 /* Create the tree view */
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1062 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1063 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1064 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1065
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1066 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1067
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1068 if (gaim_request_field_list_get_multi_select(field))
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1069 gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1070
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1071 g_signal_connect(G_OBJECT(sel), "changed",
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1072 G_CALLBACK(list_field_select_changed_cb), field);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1073
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1074 column = gtk_tree_view_column_new();
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1075 gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1076
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1077 renderer = gtk_cell_renderer_text_new();
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1078 gtk_tree_view_column_pack_start(column, renderer, TRUE);
7909
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1079 gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1080
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1081 for (l = gaim_request_field_list_get_items(field); l != NULL; l = l->next)
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1082 {
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1083 const char *text = (const char *)l->data;
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1084
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1085 gtk_list_store_append(store, &iter);
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1086
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1087 gtk_list_store_set(store, &iter,
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1088 0, gaim_request_field_list_get_data(field, text),
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1089 1, text,
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1090 -1);
7964
10d58eb8a16a [gaim-migrate @ 8641]
Christian Hammond <chipx86@chipx86.com>
parents: 7951
diff changeset
1091
10d58eb8a16a [gaim-migrate @ 8641]
Christian Hammond <chipx86@chipx86.com>
parents: 7951
diff changeset
1092 if (gaim_request_field_list_is_selected(field, text))
10d58eb8a16a [gaim-migrate @ 8641]
Christian Hammond <chipx86@chipx86.com>
parents: 7951
diff changeset
1093 gtk_tree_selection_select_iter(sel, &iter);
7909
f2b88b6b97a7 [gaim-migrate @ 8569]
Christian Hammond <chipx86@chipx86.com>
parents: 7905
diff changeset
1094 }
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1095
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1096 gtk_container_add(GTK_CONTAINER(sw), treeview);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1097 gtk_widget_show(treeview);
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1098
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1099 return sw;
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1100 }
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1101
6363
6e0fa4b64fe6 [gaim-migrate @ 6868]
Christian Hammond <chipx86@chipx86.com>
parents: 6338
diff changeset
1102 static void *
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1103 gaim_gtk_request_fields(const char *title, const char *primary,
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1104 const char *secondary, GaimRequestFields *fields,
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1105 const char *ok_text, GCallback ok_cb,
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1106 const char *cancel_text, GCallback cancel_cb,
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1107 void *user_data)
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1108 {
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1109 GaimGtkRequestData *data;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1110 GtkWidget *win;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1111 GtkWidget *vbox;
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1112 GtkWidget *vbox2;
6326
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1113 GtkWidget *hbox;
5815
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1114 GtkWidget *bbox;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1115 GtkWidget *frame;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1116 GtkWidget *label;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1117 GtkWidget *table;
5815
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1118 GtkWidget *button;
6326
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1119 GtkWidget *img;
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1120 GtkWidget *sw;
5813
ba2693e8db07 [gaim-migrate @ 6243]
Christian Hammond <chipx86@chipx86.com>
parents: 5811
diff changeset
1121 GtkSizeGroup *sg;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1122 GList *gl, *fl;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1123 GaimRequestFieldGroup *group;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1124 GaimRequestField *field;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1125 char *label_text;
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1126 int total_fields = 0;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1127
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1128 data = g_new0(GaimGtkRequestData, 1);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1129 data->type = GAIM_REQUEST_FIELDS;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1130 data->user_data = user_data;
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1131 data->u.multifield.fields = fields;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1132
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1133 fields->ui_data = data;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1134
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1135 data->cb_count = 2;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1136 data->cbs = g_new0(GCallback, 2);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1137
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1138 data->cbs[0] = ok_cb;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1139 data->cbs[1] = cancel_cb;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1140
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1141 data->dialog = win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
6325
35357b64dbb2 [gaim-migrate @ 6824]
Christian Hammond <chipx86@chipx86.com>
parents: 6324
diff changeset
1142
6109
44e5eb92b617 [gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents: 6035
diff changeset
1143 if (title != NULL)
44e5eb92b617 [gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents: 6035
diff changeset
1144 gtk_window_set_title(GTK_WINDOW(win), title);
6325
35357b64dbb2 [gaim-migrate @ 6824]
Christian Hammond <chipx86@chipx86.com>
parents: 6324
diff changeset
1145
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1146 gtk_window_set_role(GTK_WINDOW(win), "multifield");
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1147 gtk_container_set_border_width(GTK_CONTAINER(win), 12);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1148 gtk_window_set_resizable(GTK_WINDOW(win), FALSE);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1149
8323
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
1150 g_signal_connect(G_OBJECT(win), "delete_event",
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
1151 G_CALLBACK(destroy_multifield_cb), data);
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
1152
6326
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1153 /* Setup the main horizontal box */
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1154 hbox = gtk_hbox_new(FALSE, 12);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1155 gtk_container_add(GTK_CONTAINER(win), hbox);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1156 gtk_widget_show(hbox);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1157
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1158 /* Dialog icon. */
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1159 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1160 GTK_ICON_SIZE_DIALOG);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1161 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1162 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1163 gtk_widget_show(img);
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1164
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1165 /* Setup the vbox */
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1166 vbox = gtk_vbox_new(FALSE, 12);
6326
62b5476c87f9 [gaim-migrate @ 6825]
Christian Hammond <chipx86@chipx86.com>
parents: 6325
diff changeset
1167 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1168 gtk_widget_show(vbox);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1169
5813
ba2693e8db07 [gaim-migrate @ 6243]
Christian Hammond <chipx86@chipx86.com>
parents: 5811
diff changeset
1170 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
ba2693e8db07 [gaim-migrate @ 6243]
Christian Hammond <chipx86@chipx86.com>
parents: 5811
diff changeset
1171
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1172 if(primary) {
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1173 label_text = g_strdup_printf(
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1174 "<span weight=\"bold\" size=\"larger\">%s</span>", primary);
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1175 label = gtk_label_new(NULL);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1176
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1177 gtk_label_set_markup(GTK_LABEL(label), label_text);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1178 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1179 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1180 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
6325
35357b64dbb2 [gaim-migrate @ 6824]
Christian Hammond <chipx86@chipx86.com>
parents: 6324
diff changeset
1181 gtk_widget_show(label);
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1182 g_free(label_text);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1183 }
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1184
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1185 for (gl = gaim_request_fields_get_groups(fields); gl != NULL;
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1186 gl = gl->next)
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1187 total_fields += g_list_length(gaim_request_field_group_get_fields(gl->data));
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1188
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1189 if(total_fields > 9) {
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1190 sw = gtk_scrolled_window_new(NULL, NULL);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1191 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1192 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1193 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1194 GTK_SHADOW_NONE);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1195 gtk_widget_set_size_request(sw, -1, 200);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1196 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1197 gtk_widget_show(sw);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1198
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1199 vbox2 = gtk_vbox_new(FALSE, 12);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1200 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox2);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1201 gtk_widget_show(vbox2);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1202 } else {
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1203 vbox2 = vbox;
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1204 }
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1205
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1206 if (secondary) {
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1207 label = gtk_label_new(NULL);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1208
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1209 gtk_label_set_markup(GTK_LABEL(label), secondary);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1210 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1211 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1212 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0);
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1213 gtk_widget_show(label);
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1214 }
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1215
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1216 for (gl = gaim_request_fields_get_groups(fields);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1217 gl != NULL;
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1218 gl = gl->next)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1219 {
5816
44bbfb7f8904 [gaim-migrate @ 6246]
Christian Hammond <chipx86@chipx86.com>
parents: 5815
diff changeset
1220 GList *field_list;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1221 size_t field_count = 0;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1222 size_t cols = 1;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1223 size_t rows;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1224 size_t col_num;
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1225 size_t row_num = 0;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1226
5816
44bbfb7f8904 [gaim-migrate @ 6246]
Christian Hammond <chipx86@chipx86.com>
parents: 5815
diff changeset
1227 group = gl->data;
44bbfb7f8904 [gaim-migrate @ 6246]
Christian Hammond <chipx86@chipx86.com>
parents: 5815
diff changeset
1228 field_list = gaim_request_field_group_get_fields(group);
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1229
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1230 if (gaim_request_field_group_get_title(group) != NULL)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1231 {
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1232 frame = gaim_gtk_make_frame(vbox2,
6324
dddc1f8fe8e0 [gaim-migrate @ 6823]
Christian Hammond <chipx86@chipx86.com>
parents: 6110
diff changeset
1233 gaim_request_field_group_get_title(group));
dddc1f8fe8e0 [gaim-migrate @ 6823]
Christian Hammond <chipx86@chipx86.com>
parents: 6110
diff changeset
1234 }
6325
35357b64dbb2 [gaim-migrate @ 6824]
Christian Hammond <chipx86@chipx86.com>
parents: 6324
diff changeset
1235 else
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1236 frame = vbox2;
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1237
5816
44bbfb7f8904 [gaim-migrate @ 6246]
Christian Hammond <chipx86@chipx86.com>
parents: 5815
diff changeset
1238 field_count = g_list_length(field_list);
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1239 /*
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1240 if (field_count > 9)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1241 {
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1242 rows = field_count / 2;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1243 cols++;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1244 }
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1245 else
8524
4ae9175a3999 [gaim-migrate @ 9263]
Nathan Walp <nwalp@pidgin.im>
parents: 8521
diff changeset
1246 */
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1247 rows = field_count;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1248
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1249 col_num = 0;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1250
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1251 for (fl = field_list; fl != NULL; fl = fl->next)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1252 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1253 GaimRequestFieldType type;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1254
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1255 field = (GaimRequestField *)fl->data;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1256
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1257 type = gaim_request_field_get_type(field);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1258
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1259 if (type == GAIM_REQUEST_FIELD_LABEL)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1260 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1261 if (col_num > 0)
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1262 rows++;
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1263
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1264 rows++;
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1265 }
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1266 else if (type == GAIM_REQUEST_FIELD_STRING &&
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1267 gaim_request_field_string_is_multiline(field))
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1268 {
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1269 if (col_num > 0)
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1270 rows++;
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1271
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1272 rows += 2;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1273 }
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1274
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1275 col_num++;
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1276
8323
d962d280c523 [gaim-migrate @ 9047]
Christian Hammond <chipx86@chipx86.com>
parents: 8302
diff changeset
1277 if (col_num >= cols)
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1278 col_num = 0;
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1279 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1280
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1281 table = gtk_table_new(rows, 2 * cols, FALSE);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1282 gtk_table_set_row_spacings(GTK_TABLE(table), 6);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1283 gtk_table_set_col_spacings(GTK_TABLE(table), 6);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1284
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1285 gtk_container_add(GTK_CONTAINER(frame), table);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1286 gtk_widget_show(table);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1287
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1288 for (row_num = 0, fl = field_list;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1289 row_num < rows && fl != NULL;
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1290 row_num++)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1291 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1292 for (col_num = 0;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1293 col_num < cols && fl != NULL;
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1294 col_num++, fl = fl->next)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1295 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1296 size_t col_offset = col_num * 2;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1297 GaimRequestFieldType type;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1298 GtkWidget *widget = NULL;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1299
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1300 field = fl->data;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1301
7922
160207a9feee [gaim-migrate @ 8591]
Nathan Walp <nwalp@pidgin.im>
parents: 7921
diff changeset
1302 if (!gaim_request_field_is_visible(field)) {
160207a9feee [gaim-migrate @ 8591]
Nathan Walp <nwalp@pidgin.im>
parents: 7921
diff changeset
1303 col_num--;
7904
266d6d5c68ac [gaim-migrate @ 8564]
Christian Hammond <chipx86@chipx86.com>
parents: 7903
diff changeset
1304 continue;
7922
160207a9feee [gaim-migrate @ 8591]
Nathan Walp <nwalp@pidgin.im>
parents: 7921
diff changeset
1305 }
7904
266d6d5c68ac [gaim-migrate @ 8564]
Christian Hammond <chipx86@chipx86.com>
parents: 7903
diff changeset
1306
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1307 type = gaim_request_field_get_type(field);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1308
8332
b708d3d428a4 [gaim-migrate @ 9056]
Pekka Riikonen <priikone@silcnet.org>
parents: 8323
diff changeset
1309 if (type != GAIM_REQUEST_FIELD_BOOLEAN &&
b708d3d428a4 [gaim-migrate @ 9056]
Pekka Riikonen <priikone@silcnet.org>
parents: 8323
diff changeset
1310 gaim_request_field_get_label(field))
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1311 {
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1312 char *text;
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1313
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1314 text = g_strdup_printf("%s:",
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1315 gaim_request_field_get_label(field));
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1316
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1317 label = gtk_label_new(NULL);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1318 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), text);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1319 g_free(text);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1320
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1321 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1322
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1323 gtk_size_group_add_widget(sg, label);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1324
7905
03db29949e5d [gaim-migrate @ 8565]
Christian Hammond <chipx86@chipx86.com>
parents: 7904
diff changeset
1325 if (type == GAIM_REQUEST_FIELD_LABEL ||
03db29949e5d [gaim-migrate @ 8565]
Christian Hammond <chipx86@chipx86.com>
parents: 7904
diff changeset
1326 (type == GAIM_REQUEST_FIELD_STRING &&
03db29949e5d [gaim-migrate @ 8565]
Christian Hammond <chipx86@chipx86.com>
parents: 7904
diff changeset
1327 gaim_request_field_string_is_multiline(field)))
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1328 {
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1329 if(col_num > 0)
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1330 row_num++;
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1331
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1332 gtk_table_attach_defaults(GTK_TABLE(table), label,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1333 0, 2 * cols,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1334 row_num, row_num + 1);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1335
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1336 row_num++;
7921
cd7f211c784c [gaim-migrate @ 8589]
Nathan Walp <nwalp@pidgin.im>
parents: 7909
diff changeset
1337 col_num=cols;
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1338 }
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1339 else
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1340 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1341 gtk_table_attach_defaults(GTK_TABLE(table), label,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1342 col_offset, col_offset + 1,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1343 row_num, row_num + 1);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1344 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1345
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1346 gtk_widget_show(label);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1347 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1348
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1349 if (type == GAIM_REQUEST_FIELD_STRING)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1350 widget = create_string_field(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1351 else if (type == GAIM_REQUEST_FIELD_INTEGER)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1352 widget = create_int_field(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1353 else if (type == GAIM_REQUEST_FIELD_BOOLEAN)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1354 widget = create_bool_field(field);
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1355 else if (type == GAIM_REQUEST_FIELD_CHOICE)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1356 widget = create_choice_field(field);
7903
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1357 else if (type == GAIM_REQUEST_FIELD_LIST)
03fc5f87c49c [gaim-migrate @ 8563]
Christian Hammond <chipx86@chipx86.com>
parents: 7900
diff changeset
1358 widget = create_list_field(field);
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1359 else if (type == GAIM_REQUEST_FIELD_ACCOUNT)
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1360 widget = create_account_field(field);
7904
266d6d5c68ac [gaim-migrate @ 8564]
Christian Hammond <chipx86@chipx86.com>
parents: 7903
diff changeset
1361 else
266d6d5c68ac [gaim-migrate @ 8564]
Christian Hammond <chipx86@chipx86.com>
parents: 7903
diff changeset
1362 continue;
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1363
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1364 if (type == GAIM_REQUEST_FIELD_STRING &&
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1365 gaim_request_field_string_is_multiline(field))
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1366 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1367 gtk_table_attach(GTK_TABLE(table), widget,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1368 0, 2 * cols,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1369 row_num, row_num + 1,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1370 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1371 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1372 5, 0);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1373 }
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1374 else if (type != GAIM_REQUEST_FIELD_BOOLEAN)
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1375 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1376 gtk_table_attach(GTK_TABLE(table), widget,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1377 col_offset + 1, col_offset + 2,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1378 row_num, row_num + 1,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1379 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1380 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1381 5, 0);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1382 }
7900
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1383 else
468bd591cabe [gaim-migrate @ 8560]
Christian Hammond <chipx86@chipx86.com>
parents: 7844
diff changeset
1384 {
6337
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1385 gtk_table_attach(GTK_TABLE(table), widget,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1386 col_offset, col_offset + 1,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1387 row_num, row_num + 1,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1388 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1389 GTK_FILL | GTK_EXPAND,
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1390 5, 0);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1391 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1392
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1393 gtk_widget_show(widget);
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1394
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1395 field->ui_data = widget;
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1396 }
3399ae066dc1 [gaim-migrate @ 6836]
Christian Hammond <chipx86@chipx86.com>
parents: 6335
diff changeset
1397 }
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1398 }
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1399
5813
ba2693e8db07 [gaim-migrate @ 6243]
Christian Hammond <chipx86@chipx86.com>
parents: 5811
diff changeset
1400 g_object_unref(sg);
ba2693e8db07 [gaim-migrate @ 6243]
Christian Hammond <chipx86@chipx86.com>
parents: 5811
diff changeset
1401
5815
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1402 /* Button box. */
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1403 bbox = gtk_hbutton_box_new();
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1404 gtk_box_set_spacing(GTK_BOX(bbox), 6);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1405 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1406 gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1407 gtk_widget_show(bbox);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1408
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1409 /* Cancel button */
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1410 button = gtk_button_new_from_stock(text_to_stock(cancel_text));
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1411 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1412 gtk_widget_show(button);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1413
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1414 g_signal_connect(G_OBJECT(button), "clicked",
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1415 G_CALLBACK(multifield_cancel_cb), data);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1416
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1417 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1418
5815
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1419 /* OK button */
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1420 button = gtk_button_new_from_stock(text_to_stock(ok_text));
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1421 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1422 gtk_widget_show(button);
cdd5b8d9caca [gaim-migrate @ 6245]
Christian Hammond <chipx86@chipx86.com>
parents: 5813
diff changeset
1423
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1424 data->ok_button = button;
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1425
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1426 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1427 gtk_window_set_default(GTK_WINDOW(win), button);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1428
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1429 g_signal_connect(G_OBJECT(button), "clicked",
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1430 G_CALLBACK(multifield_ok_cb), data);
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1431
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1432 if (!gaim_request_fields_all_required_filled(fields))
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1433 gtk_widget_set_sensitive(button, FALSE);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1434
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1435 gtk_widget_show(win);
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1436
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1437 return data;
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1438 }
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1439
6363
6e0fa4b64fe6 [gaim-migrate @ 6868]
Christian Hammond <chipx86@chipx86.com>
parents: 6338
diff changeset
1440 static void
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1441 file_yes_no_cb(GaimGtkRequestData *data, gint id)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1442 {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1443 if (data->cbs[id] != NULL)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1444 ((GaimRequestFileCb)data->cbs[id])(data->user_data, data->u.file.name);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1445
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1446 if (id == 1)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1447 gaim_request_close(GAIM_REQUEST_FILE, data);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1448 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1449
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9513
diff changeset
1450 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1451 static void
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1452 file_ok_check_if_exists_cb(GtkWidget *widget, gint response, GaimGtkRequestData *data)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1453 {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1454 if (response != GTK_RESPONSE_ACCEPT) {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1455 if (data->cbs[0] != NULL)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1456 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1457 gaim_request_close(GAIM_REQUEST_FILE, data);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1458 return;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1459 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1460
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1461 data->u.file.name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data->dialog));
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1462 #else /* FILECHOOSER */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9513
diff changeset
1463 static void
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1464 file_ok_check_if_exists_cb(GtkWidget *button, GaimGtkRequestData *data)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1465 {
9503
8593c276aed3 [gaim-migrate @ 10330]
Mark Doliner <markdoliner@pidgin.im>
parents: 9502
diff changeset
1466 const gchar *name;
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1467
9503
8593c276aed3 [gaim-migrate @ 10330]
Mark Doliner <markdoliner@pidgin.im>
parents: 9502
diff changeset
1468 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->dialog));
9513
ec57f8faed31 [gaim-migrate @ 10340]
Mark Doliner <markdoliner@pidgin.im>
parents: 9506
diff changeset
1469
ec57f8faed31 [gaim-migrate @ 10340]
Mark Doliner <markdoliner@pidgin.im>
parents: 9506
diff changeset
1470 /* If name is a directory then change directories */
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1471 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->dialog)))
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1472 return;
9513
ec57f8faed31 [gaim-migrate @ 10340]
Mark Doliner <markdoliner@pidgin.im>
parents: 9506
diff changeset
1473
9503
8593c276aed3 [gaim-migrate @ 10330]
Mark Doliner <markdoliner@pidgin.im>
parents: 9502
diff changeset
1474 data->u.file.name = g_strdup(name);
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1475 #endif /* FILECHOOSER */
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1476
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1477 if ((data->u.file.savedialog == TRUE) &&
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1478 (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1479 gaim_request_yes_no(data, NULL, _("That file already exists"),
10116
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9976
diff changeset
1480 _("Would you like to overwrite it?"), 0, data,
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1481 G_CALLBACK(file_yes_no_cb),
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1482 G_CALLBACK(file_yes_no_cb));
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1483 } else
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1484 file_yes_no_cb(data, 1);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1485 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1486
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1487 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1488 static void
9506
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1489 file_cancel_cb(GaimGtkRequestData *data)
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1490 {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1491 if (data->cbs[0] != NULL)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1492 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1493
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1494 gaim_request_close(GAIM_REQUEST_FILE, data);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1495 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1496 #endif /* FILECHOOSER */
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1497
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1498 static void *
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1499 gaim_gtk_request_file(const char *title, const char *filename,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1500 gboolean savedialog,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1501 GCallback ok_cb, GCallback cancel_cb,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1502 void *user_data)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1503 {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1504 GaimGtkRequestData *data;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1505 GtkWidget *filesel;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1506
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1507 data = g_new0(GaimGtkRequestData, 1);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1508 data->type = GAIM_REQUEST_FILE;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1509 data->user_data = user_data;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1510 data->cb_count = 2;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1511 data->cbs = g_new0(GCallback, 2);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1512 data->cbs[0] = cancel_cb;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1513 data->cbs[1] = ok_cb;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1514 data->u.file.savedialog = savedialog;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1515
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1516 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1517 filesel = gtk_file_chooser_dialog_new(
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1518 title ? title : (savedialog ? _("Save File...")
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1519 : _("Open File...")),
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1520 NULL,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1521 savedialog ? GTK_FILE_CHOOSER_ACTION_SAVE
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1522 : GTK_FILE_CHOOSER_ACTION_OPEN,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1523 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1524 savedialog ? GTK_STOCK_SAVE
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1525 : GTK_STOCK_OPEN,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1526 GTK_RESPONSE_ACCEPT,
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1527 NULL);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1528 gtk_dialog_set_default_response(GTK_DIALOG(filesel), GTK_RESPONSE_ACCEPT);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1529 if (filename != NULL) {
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1530 if (savedialog)
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1531 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(filesel), filename);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1532 else
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1533 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(filesel), filename);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1534 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1535 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(filesel)), "response",
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1536 G_CALLBACK(file_ok_check_if_exists_cb), data);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1537 #else /* FILECHOOSER */
9506
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1538 filesel = gtk_file_selection_new(title ? title
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1539 : (savedialog ? _("Save File...")
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1540 : _("Open File...")));
10225
0dfea1bc8695 [gaim-migrate @ 11357]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10181
diff changeset
1541 if (filename != NULL)
0dfea1bc8695 [gaim-migrate @ 11357]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10181
diff changeset
1542 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), filename);
9506
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1543 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)), "delete_event",
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1544 G_CALLBACK(file_cancel_cb), data);
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1545 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1546 "clicked", G_CALLBACK(file_cancel_cb), data);
9506
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1547 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked",
11e355d544fa [gaim-migrate @ 10333]
Mark Doliner <markdoliner@pidgin.im>
parents: 9503
diff changeset
1548 G_CALLBACK(file_ok_check_if_exists_cb), data);
9502
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1549 #endif /* FILECHOOSER */
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1550
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1551 data->dialog = filesel;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1552 gtk_widget_show(filesel);
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1553
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1554 return (void *)data;
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1555 }
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1556
d43f69354213 [gaim-migrate @ 10329]
Mark Doliner <markdoliner@pidgin.im>
parents: 9005
diff changeset
1557 static void
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1558 gaim_gtk_close_request(GaimRequestType type, void *ui_handle)
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1559 {
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1560 GaimGtkRequestData *data = (GaimGtkRequestData *)ui_handle;
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1561
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1562 if (data->cbs != NULL)
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1563 g_free(data->cbs);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1564
8286
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1565 gtk_widget_destroy(data->dialog);
7a4c038d1ecd [gaim-migrate @ 9010]
Christian Hammond <chipx86@chipx86.com>
parents: 8137
diff changeset
1566
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1567 if (type == GAIM_REQUEST_FIELDS)
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1568 gaim_request_fields_destroy(data->u.multifield.fields);
9513
ec57f8faed31 [gaim-migrate @ 10340]
Mark Doliner <markdoliner@pidgin.im>
parents: 9506
diff changeset
1569 else if (type == GAIM_REQUEST_FILE)
ec57f8faed31 [gaim-migrate @ 10340]
Mark Doliner <markdoliner@pidgin.im>
parents: 9506
diff changeset
1570 g_free(data->u.file.name);
5817
d085bb1af93c [gaim-migrate @ 6247]
Christian Hammond <chipx86@chipx86.com>
parents: 5816
diff changeset
1571
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1572 g_free(data);
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1573 }
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1574
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1575 static GaimRequestUiOps ops =
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1576 {
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1577 gaim_gtk_request_input,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1578 gaim_gtk_request_choice,
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1579 gaim_gtk_request_action,
5811
f9b61b4eda57 [gaim-migrate @ 6241]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1580 gaim_gtk_request_fields,
8843
944c71cc01af [gaim-migrate @ 9610]
Pekka Riikonen <priikone@silcnet.org>
parents: 8782
diff changeset
1581 gaim_gtk_request_file,
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1582 gaim_gtk_close_request
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1583 };
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1584
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1585 GaimRequestUiOps *
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
1586 gaim_gtk_request_get_ui_ops(void)
5480
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1587 {
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1588 return &ops;
bd0befec6d55 [gaim-migrate @ 5876]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1589 }

mercurial