Mercurial > pidgin.yaz
annotate src/gtkimhtmltoolbar.c @ 9709:4d05b6e9e9cd
[gaim-migrate @ 10570]
This patch is freaking massive.
Renamed ui.h to gtkdialogs.h
Renamed dialogs.c to gtkdialogs.c
sed'ed the hell out of the .po files
These files are similar to gtkutil.c/.h. They are meant to contain
dialogs such as the "New Instant Message" window, which does not
belong in gtkblist.c or gtkconv.c, and is called from both places.
Eventually the functions in gtkdialogs.c/.h should be changed to
conform to Gaim's naming convention.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 08 Aug 2004 00:48:19 +0000 |
parents | a1029432ae4a |
children | c9ac1976ef01 |
rev | line source |
---|---|
8317 | 1 /* |
2 * GtkIMHtmlToolbar | |
3 * | |
4 * Gaim is the legal property of its developers, whose names are too numerous | |
5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
6 * source distribution. | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify | |
9 * under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 * | |
22 */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
23 #include "gtkinternal.h" |
8317 | 24 |
25 #include "gtkimhtmltoolbar.h" | |
26 #include "gtkutils.h" | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
27 |
9709 | 28 #include "gtkdialogs.h" |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
29 #include "imgstore.h" |
8317 | 30 #include "notify.h" |
31 #include "request.h" | |
32 #include "stock.h" | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
33 #include "util.h" |
8317 | 34 |
35 static GtkVBoxClass *parent_class = NULL; | |
36 | |
37 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) | |
38 { | |
8481 | 39 GObject *object; |
40 | |
8317 | 41 g_return_if_fail(toolbar); |
8481 | 42 |
43 /* block the format_function_toggle handler */ | |
44 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | |
45 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | |
46 NULL, toolbar); | |
8317 | 47 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml)); |
8481 | 48 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
49 NULL, toolbar); | |
50 g_object_unref(object); | |
51 | |
8317 | 52 gtk_widget_grab_focus(toolbar->imhtml); |
53 } | |
54 | |
55 static void | |
56 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar) | |
57 { | |
8481 | 58 GObject *object; |
59 | |
8317 | 60 g_return_if_fail(toolbar); |
8481 | 61 |
62 /* block the format_function_toggle handler */ | |
63 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | |
64 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | |
65 NULL, toolbar); | |
8317 | 66 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml)); |
8481 | 67 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
68 NULL, toolbar); | |
69 g_object_unref(object); | |
70 | |
8317 | 71 gtk_widget_grab_focus(toolbar->imhtml); |
72 } | |
73 | |
74 static void | |
75 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar) | |
76 { | |
8481 | 77 GObject *object; |
78 | |
8317 | 79 g_return_if_fail(toolbar); |
8481 | 80 |
81 /* block the format_function_toggle handler */ | |
82 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | |
83 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | |
84 NULL, toolbar); | |
8317 | 85 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml)); |
8481 | 86 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
87 NULL, toolbar); | |
88 g_object_unref(object); | |
89 | |
8317 | 90 gtk_widget_grab_focus(toolbar->imhtml); |
91 } | |
92 | |
93 static void | |
94 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar) | |
95 { | |
96 g_return_if_fail(toolbar); | |
8380 | 97 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size))) |
98 gtk_imhtml_font_shrink(GTK_IMHTML(toolbar->imhtml)); | |
8317 | 99 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size), FALSE); |
100 gtk_widget_grab_focus(toolbar->imhtml); | |
101 } | |
102 | |
103 static void | |
104 do_big(GtkWidget *large, GtkIMHtmlToolbar *toolbar) | |
105 { | |
106 g_return_if_fail(toolbar); | |
8380 | 107 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->larger_size))) |
108 gtk_imhtml_font_grow(GTK_IMHTML(toolbar->imhtml)); | |
8317 | 109 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->larger_size), FALSE); |
110 gtk_widget_grab_focus(toolbar->imhtml); | |
111 } | |
112 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
113 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
114 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
115 GtkIMHtmlToolbar *toolbar) |
8317 | 116 { |
117 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->font), FALSE); | |
118 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
119 if (toolbar->font_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
120 { |
8317 | 121 gtk_widget_destroy(toolbar->font_dialog); |
122 toolbar->font_dialog = NULL; | |
123 } | |
124 } | |
125 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
126 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
127 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
128 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
129 destroy_toolbar_font(widget, NULL, toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
130 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
131 |
8317 | 132 static void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) |
133 { | |
134 /* this could be expanded to include font size, weight, etc. | |
135 but for now only works with font face */ | |
136 char *fontname; | |
137 char *space; | |
138 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(fontsel), "gaim_toolbar"); | |
139 | |
140 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel)); | |
141 | |
142 space = strrchr(fontname, ' '); | |
143 if(space && isdigit(*(space+1))) | |
144 *space = '\0'; | |
145 | |
146 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname); | |
147 | |
148 g_free(fontname); | |
149 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
150 cancel_toolbar_font(NULL, toolbar); |
8317 | 151 } |
152 | |
153 static void | |
154 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar) | |
155 { | |
9025 | 156 const char *fontname; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
157 |
8317 | 158 g_return_if_fail(toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
159 |
9025 | 160 fontname = gtk_imhtml_get_current_fontface(GTK_IMHTML(toolbar->imhtml)); |
161 | |
8317 | 162 if (!toolbar->font_dialog) { |
163 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); | |
164 | |
165 g_object_set_data(G_OBJECT(toolbar->font_dialog), "gaim_toolbar", toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
166 |
9025 | 167 if(fontname) { |
168 char fonttif[128]; | |
169 g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontname); | |
170 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), | |
171 fonttif); | |
172 } else { | |
173 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), | |
174 DEFAULT_FONT_FACE); | |
175 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
176 |
8317 | 177 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
178 G_CALLBACK(destroy_toolbar_font), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
179 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
180 G_CALLBACK(apply_font), toolbar->font_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
181 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
182 G_CALLBACK(cancel_toolbar_font), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
183 |
8317 | 184 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
185 } else { | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
186 cancel_toolbar_font(NULL, toolbar); |
8317 | 187 } |
188 gtk_widget_grab_focus(toolbar->imhtml); | |
189 } | |
190 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
191 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
192 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
193 GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
194 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
195 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
196 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
197 if (toolbar->fgcolor_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
198 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
199 gtk_widget_destroy(toolbar->fgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
200 toolbar->fgcolor_dialog = NULL; |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
201 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
202 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
203 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
204 static void cancel_toolbar_fgcolor(GtkWidget *widget, |
8321
eb269b81fff8
[gaim-migrate @ 9045]
Christian Hammond <chipx86@chipx86.com>
parents:
8320
diff
changeset
|
205 GtkIMHtmlToolbar *toolbar) |
8317 | 206 { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
207 destroy_toolbar_fgcolor(widget, NULL, toolbar); |
8317 | 208 } |
209 | |
210 static void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
211 { | |
212 GdkColor text_color; | |
213 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
214 char *open_tag; | |
215 | |
216 open_tag = g_malloc(30); | |
217 gtk_color_selection_get_current_color(colorsel, &text_color); | |
218 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
219 text_color.red / 256, | |
220 text_color.green / 256, | |
221 text_color.blue / 256); | |
222 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
223 | |
224 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
225 cancel_toolbar_fgcolor(NULL, toolbar); |
8317 | 226 } |
227 | |
228 static void | |
229 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
230 { | |
231 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
232 GtkWidget *colorsel; | |
9025 | 233 GdkColor fgcolor; |
234 const char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
235 |
8317 | 236 if (!toolbar->fgcolor_dialog) { |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
237 |
8317 | 238 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
239 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; | |
9025 | 240 if (color) { |
241 gdk_color_parse(color, &fgcolor); | |
242 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | |
243 } | |
244 | |
8317 | 245 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
246 |
8317 | 247 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
248 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
249 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
250 G_CALLBACK(do_fgcolor), colorsel); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
251 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
252 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
253 |
8317 | 254 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
255 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
8317 | 256 } else if (toolbar->fgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
257 cancel_toolbar_fgcolor(color, toolbar); |
8317 | 258 } else { |
259 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
260 } | |
261 gtk_widget_grab_focus(toolbar->imhtml); | |
262 } | |
263 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
264 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
265 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
266 GtkIMHtmlToolbar *toolbar) |
8317 | 267 { |
268 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->bgcolor), FALSE); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
269 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
270 if (toolbar->bgcolor_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
271 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
272 gtk_widget_destroy(toolbar->bgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
273 toolbar->bgcolor_dialog = NULL; |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
274 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
275 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
276 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
277 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
278 cancel_toolbar_bgcolor(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
279 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
280 destroy_toolbar_bgcolor(widget, NULL, toolbar); |
8317 | 281 } |
282 | |
283 static void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
284 { | |
285 GdkColor text_color; | |
286 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
287 char *open_tag; | |
288 | |
289 open_tag = g_malloc(30); | |
290 gtk_color_selection_get_current_color(colorsel, &text_color); | |
291 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
292 text_color.red / 256, | |
293 text_color.green / 256, | |
294 text_color.blue / 256); | |
295 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
296 | |
297 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
298 cancel_toolbar_bgcolor(NULL, toolbar); |
8317 | 299 } |
300 | |
301 static void | |
302 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
303 { | |
304 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
305 GtkWidget *colorsel; | |
9025 | 306 GdkColor bgcolor; |
307 const char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
308 |
8317 | 309 if (!toolbar->bgcolor_dialog) { |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
310 |
8359 | 311 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
8317 | 312 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
9025 | 313 if (color) { |
314 gdk_color_parse(color, &bgcolor); | |
315 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | |
316 } | |
317 | |
8317 | 318 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
319 |
8317 | 320 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
321 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
322 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
323 G_CALLBACK(do_bgcolor), colorsel); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
324 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
325 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
326 |
8317 | 327 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
328 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
8317 | 329 } else if (toolbar->bgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
330 cancel_toolbar_bgcolor(color, toolbar); |
8317 | 331 } else { |
332 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
333 } | |
334 gtk_widget_grab_focus(toolbar->imhtml); | |
335 } | |
336 | |
337 static void | |
338 cancel_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
339 { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
340 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
341 |
8317 | 342 toolbar->link_dialog = NULL; |
343 } | |
344 | |
345 static void | |
346 close_link_dialog(GtkIMHtmlToolbar *toolbar) | |
347 { | |
348 if (toolbar->link_dialog != NULL) | |
349 { | |
350 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); | |
351 toolbar->link_dialog = NULL; | |
352 } | |
353 } | |
354 | |
355 static void | |
356 do_insert_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
357 { | |
358 const char *url, *description; | |
359 | |
360 url = gaim_request_fields_get_string(fields, "url"); | |
9041 | 361 if (GTK_IMHTML(toolbar->imhtml)->format_functions & GTK_IMHTML_LINKDESC) |
362 description = gaim_request_fields_get_string(fields, "description"); | |
363 else | |
364 description = NULL; | |
8317 | 365 |
366 if (description == NULL) | |
367 description = url; | |
368 | |
8677 | 369 gtk_imhtml_insert_link(GTK_IMHTML(toolbar->imhtml), |
370 gtk_text_buffer_get_insert(GTK_IMHTML(toolbar->imhtml)->text_buffer), | |
371 url, description); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
372 |
8317 | 373 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); |
374 | |
375 toolbar->link_dialog = NULL; | |
376 } | |
377 | |
378 static void | |
379 insert_link_cb(GtkWidget *w, GtkIMHtmlToolbar *toolbar) | |
380 { | |
381 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))) { | |
382 GaimRequestFields *fields; | |
383 GaimRequestFieldGroup *group; | |
384 GaimRequestField *field; | |
9599 | 385 GtkTextIter start, end; |
9041 | 386 char *msg; |
9599 | 387 char *desc = NULL; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
388 |
8317 | 389 fields = gaim_request_fields_new(); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
390 |
8317 | 391 group = gaim_request_field_group_new(NULL); |
392 gaim_request_fields_add_group(fields, group); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
393 |
8317 | 394 field = gaim_request_field_string_new("url", _("_URL"), NULL, FALSE); |
395 gaim_request_field_set_required(field, TRUE); | |
396 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
397 |
9041 | 398 if(GTK_IMHTML(toolbar->imhtml)->format_functions & GTK_IMHTML_LINKDESC) { |
9599 | 399 if (gtk_text_buffer_get_selection_bounds(GTK_IMHTML(toolbar->imhtml)->text_buffer, &start, &end)) { |
400 desc = gtk_imhtml_get_text(GTK_IMHTML(toolbar->imhtml), &start, &end); | |
401 } | |
9041 | 402 field = gaim_request_field_string_new("description", _("_Description"), |
9599 | 403 desc, FALSE); |
9041 | 404 gaim_request_field_group_add_field(group, field); |
405 msg = g_strdup(_("Please enter the URL and description of the " | |
406 "link that you want to insert. The description " | |
407 "is optional.")); | |
408 } else { | |
409 msg = g_strdup(_("Please enter the URL of the " | |
410 "link that you want to insert.")); | |
411 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
412 |
8317 | 413 toolbar->link_dialog = |
414 gaim_request_fields(toolbar, _("Insert Link"), | |
415 NULL, | |
9041 | 416 msg, |
8317 | 417 fields, |
418 _("_Insert"), G_CALLBACK(do_insert_link_cb), | |
419 _("Cancel"), G_CALLBACK(cancel_link_cb), | |
420 toolbar); | |
9041 | 421 g_free(msg); |
9599 | 422 g_free(desc); |
8322
ffb601c6b833
[gaim-migrate @ 9046]
Christian Hammond <chipx86@chipx86.com>
parents:
8321
diff
changeset
|
423 } else { |
8317 | 424 close_link_dialog(toolbar); |
425 } | |
426 gtk_widget_grab_focus(toolbar->imhtml); | |
427 } | |
428 | |
429 | |
430 static void | |
9522 | 431 do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar) |
8317 | 432 { |
9522 | 433 gchar *filename, *name, *buf; |
434 char *filedata; | |
8317 | 435 size_t size; |
436 GError *error = NULL; | |
437 int id; | |
8962 | 438 GtkTextIter iter; |
439 GtkTextMark *ins; | |
8317 | 440 |
9522 | 441 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
442 if (response != GTK_RESPONSE_ACCEPT) { | |
443 #else /* FILECHOOSER */ | |
444 if (response != GTK_RESPONSE_OK) { | |
445 #endif /* FILECHOOSER */ | |
8317 | 446 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
447 return; | |
448 } | |
449 | |
9522 | 450 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
451 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); | |
452 #else /* FILECHOOSER */ | |
453 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); | |
454 #endif /* FILECHOOSER */ | |
8317 | 455 |
9522 | 456 if (filename == NULL) { |
8317 | 457 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
458 return; | |
459 } | |
460 | |
9522 | 461 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
462 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(widget))) { | |
463 g_free(filename); | |
464 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
465 return; | |
466 } | |
467 #endif /* FILECHOOSER */ | |
468 | |
469 /* The following triggers a callback that closes the widget */ | |
8317 | 470 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
471 | |
9522 | 472 if (!g_file_get_contents(filename, &filedata, &size, &error)) { |
8317 | 473 gaim_notify_error(NULL, NULL, error->message, NULL); |
474 | |
475 g_error_free(error); | |
9522 | 476 g_free(filename); |
8317 | 477 |
478 return; | |
479 } | |
480 | |
9522 | 481 name = strrchr(filename, G_DIR_SEPARATOR) + 1; |
8317 | 482 |
9522 | 483 id = gaim_imgstore_add(filedata, size, name); |
8317 | 484 g_free(filedata); |
485 | |
9522 | 486 if (id == 0) { |
487 buf = g_strdup_printf(_("Failed to store image: %s\n"), filename); | |
8317 | 488 gaim_notify_error(NULL, NULL, buf, NULL); |
489 | |
490 g_free(buf); | |
9522 | 491 g_free(filename); |
8317 | 492 |
493 return; | |
494 } | |
495 | |
9522 | 496 g_free(filename); |
497 | |
8962 | 498 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); |
499 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), | |
9522 | 500 &iter, ins); |
8962 | 501 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter); |
502 gaim_imgstore_unref(id); | |
8317 | 503 } |
504 | |
505 | |
506 static void | |
507 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar) | |
508 { | |
509 GtkWidget *window; | |
510 | |
511 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { | |
9522 | 512 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
513 window = gtk_file_chooser_dialog_new(_("Insert Image"), | |
514 NULL, | |
515 GTK_FILE_CHOOSER_ACTION_OPEN, | |
516 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
517 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | |
518 NULL); | |
519 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT); | |
520 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)), | |
521 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
522 #else /* FILECHOOSER */ | |
8317 | 523 window = gtk_file_selection_new(_("Insert Image")); |
524 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK); | |
525 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)), | |
526 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
9522 | 527 #endif /* FILECHOOSER */ |
8317 | 528 |
529 gtk_widget_show(window); | |
530 toolbar->image_dialog = window; | |
531 } else { | |
532 gtk_widget_destroy(toolbar->image_dialog); | |
533 toolbar->image_dialog = NULL; | |
534 } | |
9522 | 535 |
8317 | 536 gtk_widget_grab_focus(toolbar->imhtml); |
537 } | |
538 | |
539 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
540 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
541 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
542 GtkIMHtmlToolbar *toolbar) |
8317 | 543 { |
544 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
545 |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
546 if (toolbar->smiley_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
547 { |
8317 | 548 gtk_widget_destroy(toolbar->smiley_dialog); |
549 toolbar->smiley_dialog = NULL; | |
550 } | |
551 } | |
552 | |
553 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
554 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
555 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
8317 | 556 { |
9027 | 557 char *smiley_text, *escaped_smiley; |
558 | |
559 smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | |
560 escaped_smiley = gaim_escape_html(smiley_text); | |
8317 | 561 |
8456 | 562 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), |
563 GTK_IMHTML(toolbar->imhtml)->protocol_name, | |
9027 | 564 escaped_smiley); |
8317 | 565 |
9027 | 566 g_free(escaped_smiley); |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
567 close_smiley_dialog(NULL, NULL, toolbar); |
8317 | 568 } |
569 | |
570 | |
571 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *table, int row, int col, char *filename, char *face) | |
572 { | |
573 GtkWidget *image; | |
574 GtkWidget *button; | |
575 | |
576 image = gtk_image_new_from_file(filename); | |
577 button = gtk_button_new(); | |
578 gtk_container_add(GTK_CONTAINER(button), image); | |
579 g_object_set_data(G_OBJECT(button), "smiley_text", face); | |
580 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | |
581 | |
582 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | |
583 | |
584 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
585 | |
586 /* these look really weird with borders */ | |
587 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
588 | |
589 gtk_widget_show(button); | |
590 } | |
591 | |
592 | |
593 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | |
594 while(list) { | |
595 GtkIMHtmlSmiley *cur = list->data; | |
596 if(!strcmp(cur->file, smiley->file)) | |
597 return FALSE; | |
598 list = list->next; | |
599 } | |
600 return TRUE; | |
601 } | |
602 | |
603 | |
604 static void | |
605 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) | |
606 { | |
607 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley))) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
608 |
8317 | 609 GtkWidget *dialog; |
610 GtkWidget *smiley_table = NULL; | |
611 GSList *smileys, *unique_smileys = NULL; | |
612 int width; | |
613 int row = 0, col = 0; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
614 |
8317 | 615 if (toolbar->smiley_dialog) { |
616 gtk_widget_grab_focus(toolbar->imhtml); | |
617 return; | |
618 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
619 |
8427 | 620 if (toolbar->sml) |
621 smileys = get_proto_smileys(toolbar->sml); | |
8892 | 622 else |
623 smileys = get_proto_smileys(GAIM_PROTO_DEFAULT); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
624 |
8317 | 625 while(smileys) { |
626 GtkIMHtmlSmiley *smiley = smileys->data; | |
627 if(!smiley->hidden) { | |
628 if(smiley_is_unique(unique_smileys, smiley)) | |
629 unique_smileys = g_slist_append(unique_smileys, smiley); | |
630 } | |
631 smileys = smileys->next; | |
632 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
633 |
8892 | 634 GAIM_DIALOG(dialog); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
635 |
8317 | 636 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
637 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | |
638 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
639 |
8892 | 640 if(g_slist_length(unique_smileys)) { |
641 | |
642 width = floor(sqrt(g_slist_length(unique_smileys))); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
643 |
8892 | 644 smiley_table = gtk_table_new(width, width, TRUE); |
645 | |
646 /* pack buttons */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
647 |
8892 | 648 while(unique_smileys) { |
649 GtkIMHtmlSmiley *smiley = unique_smileys->data; | |
650 if(!smiley->hidden) { | |
651 add_smiley(toolbar, smiley_table, row, col, smiley->file, smiley->smile); | |
652 if(++col >= width) { | |
653 col = 0; | |
654 row++; | |
655 } | |
8317 | 656 } |
8892 | 657 unique_smileys = unique_smileys->next; |
8317 | 658 } |
8892 | 659 } |
660 else { | |
661 smiley_table = gtk_label_new(_("This theme has no available smileys.")); | |
8317 | 662 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
663 |
8317 | 664 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
665 |
8317 | 666 gtk_widget_show(smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
667 |
8317 | 668 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
669 |
8317 | 670 /* connect signals */ |
671 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | |
672 g_signal_connect(G_OBJECT(dialog), "delete_event", | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
673 G_CALLBACK(close_smiley_dialog), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
674 |
8317 | 675 /* show everything */ |
676 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | |
677 gtk_widget_show_all(dialog); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
678 |
8317 | 679 toolbar->smiley_dialog = dialog; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
680 |
8317 | 681 } else if (toolbar->smiley_dialog) { |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
682 close_smiley_dialog(smiley, NULL, toolbar); |
8317 | 683 } |
684 gtk_widget_grab_focus(toolbar->imhtml); | |
685 } | |
686 | |
8420 | 687 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) |
688 { | |
689 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bold), buttons & GTK_IMHTML_BOLD); | |
690 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->italic), buttons & GTK_IMHTML_ITALIC); | |
691 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->underline), buttons & GTK_IMHTML_UNDERLINE); | |
692 | |
693 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->larger_size), buttons & GTK_IMHTML_GROW); | |
694 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smaller_size), buttons & GTK_IMHTML_SHRINK); | |
695 | |
696 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->font), buttons & GTK_IMHTML_FACE); | |
697 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->fgcolor), buttons & GTK_IMHTML_FORECOLOR); | |
698 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bgcolor), buttons & GTK_IMHTML_BACKCOLOR); | |
699 | |
700 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->image), buttons & GTK_IMHTML_IMAGE); | |
701 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->link), buttons & GTK_IMHTML_LINK); | |
702 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smiley), buttons & GTK_IMHTML_SMILEY); | |
8481 | 703 } |
8420 | 704 |
8481 | 705 /* we call this when we want to _set_active the toggle button, it'll |
706 * block the callback thats connected to the button so we don't have to | |
707 * do the double toggling hack | |
708 */ | |
709 static void toggle_button_set_active_block(GtkToggleButton *button, | |
710 gboolean is_active, | |
711 GtkIMHtmlToolbar *toolbar) | |
712 { | |
713 GObject *object; | |
714 g_return_if_fail(toolbar); | |
715 | |
716 object = g_object_ref(button); | |
717 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, | |
718 0, 0, NULL, NULL, toolbar); | |
719 gtk_toggle_button_set_active(button, is_active); | |
720 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, | |
721 0, 0, NULL, NULL, toolbar); | |
722 g_object_unref(object); | |
8420 | 723 } |
724 | |
725 static void toggle_button_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) | |
726 { | |
8481 | 727 if (buttons & GTK_IMHTML_BOLD) |
728 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), | |
729 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)), | |
730 toolbar); | |
8420 | 731 |
8481 | 732 if (buttons & GTK_IMHTML_ITALIC) |
733 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
734 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)), | |
735 toolbar); | |
8420 | 736 |
8481 | 737 if (buttons & GTK_IMHTML_UNDERLINE) |
738 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
739 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)), | |
740 toolbar); | |
8420 | 741 } |
742 | |
8427 | 743 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) |
744 { | |
8481 | 745 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) |
746 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, | |
747 toolbar); | |
748 | |
749 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) | |
750 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
751 FALSE, toolbar); | |
752 | |
753 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) | |
754 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
755 FALSE, toolbar); | |
756 } | |
8516 | 757 |
758 static void update_buttons(GtkIMHtmlToolbar *toolbar) { | |
8506 | 759 gboolean bold, italic, underline; |
760 | |
761 bold = italic = underline = FALSE; | |
8516 | 762 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), |
763 &bold, &italic, &underline); | |
8506 | 764 |
765 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) | |
766 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
767 toolbar); | |
8516 | 768 |
8506 | 769 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic) |
770 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
771 toolbar); | |
8516 | 772 |
8506 | 773 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline) |
774 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
8677 | 775 underline, toolbar); |
8506 | 776 } |
8481 | 777 |
8516 | 778 static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) { |
779 update_buttons(toolbar); | |
780 } | |
8481 | 781 |
8516 | 782 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *location, |
783 GtkTextMark *mark, GtkIMHtmlToolbar *toolbar) | |
784 { | |
785 if(mark != gtk_text_buffer_get_insert(buffer)) | |
786 return; | |
787 | |
788 update_buttons(toolbar); | |
8427 | 789 } |
790 | |
8317 | 791 enum { |
792 LAST_SIGNAL | |
793 }; | |
794 //static guint signals [LAST_SIGNAL] = { 0 }; | |
795 | |
796 static void | |
797 gtk_imhtmltoolbar_finalize (GObject *object) | |
798 { | |
8391 | 799 GtkIMHtmlToolbar *toolbar = GTK_IMHTMLTOOLBAR(object); |
8317 | 800 |
8685
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
801 if (toolbar->image_dialog != NULL) |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
802 { |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
803 gtk_widget_destroy(toolbar->image_dialog); |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
804 toolbar->image_dialog = NULL; |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
805 } |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
806 |
8785
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
807 if (toolbar->font_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
808 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
809 gtk_widget_destroy(toolbar->font_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
810 toolbar->font_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
811 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
812 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
813 if (toolbar->smiley_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
814 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
815 gtk_widget_destroy(toolbar->smiley_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
816 toolbar->smiley_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
817 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
818 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
819 if (toolbar->bgcolor_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
820 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
821 gtk_widget_destroy(toolbar->bgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
822 toolbar->bgcolor_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
823 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
824 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
825 if (toolbar->fgcolor_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
826 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
827 gtk_widget_destroy(toolbar->fgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
828 toolbar->fgcolor_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
829 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
830 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
831 if (toolbar->link_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
832 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
833 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
834 toolbar->link_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
835 } |
8784
48dd097eb475
[gaim-migrate @ 9546]
Christian Hammond <chipx86@chipx86.com>
parents:
8756
diff
changeset
|
836 |
8427 | 837 if (toolbar->sml) |
838 free(toolbar->sml); | |
8391 | 839 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); |
8317 | 840 |
8391 | 841 G_OBJECT_CLASS(parent_class)->finalize (object); |
8317 | 842 } |
843 | |
844 /* Boring GTK stuff */ | |
845 static void gtk_imhtmltoolbar_class_init (GtkIMHtmlToolbarClass *class) | |
846 { | |
847 GtkObjectClass *object_class; | |
848 GObjectClass *gobject_class; | |
849 object_class = (GtkObjectClass*) class; | |
850 gobject_class = (GObjectClass*) class; | |
851 parent_class = gtk_type_class(GTK_TYPE_VBOX); | |
852 /* signals[URL_CLICKED] = g_signal_new(url_clicked", | |
853 G_TYPE_FROM_CLASS(gobject_class), | |
854 G_SIGNAL_RUN_FIRST, | |
855 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked), | |
856 NULL, | |
857 0, | |
858 g_cclosure_marshal_VOID__POINTER, | |
859 G_TYPE_NONE, 1, | |
860 G_TYPE_POINTER);*/ | |
861 gobject_class->finalize = gtk_imhtmltoolbar_finalize; | |
862 } | |
863 | |
864 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) | |
865 { | |
866 GtkWidget *hbox; | |
867 GtkWidget *button; | |
868 GtkWidget *sep; | |
869 GtkSizeGroup *sg; | |
870 | |
871 toolbar->imhtml = NULL; | |
872 toolbar->font_dialog = NULL; | |
873 toolbar->fgcolor_dialog = NULL; | |
874 toolbar->bgcolor_dialog = NULL; | |
875 toolbar->link_dialog = NULL; | |
876 toolbar->smiley_dialog = NULL; | |
877 toolbar->image_dialog = NULL; | |
878 | |
879 toolbar->tooltips = gtk_tooltips_new(); | |
880 | |
881 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | |
882 | |
883 sep = gtk_hseparator_new(); | |
884 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
885 gtk_widget_show(sep); | |
886 | |
887 hbox = gtk_hbox_new(FALSE, 6); | |
888 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); | |
889 | |
890 /* Bold */ | |
891 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); | |
892 gtk_size_group_add_widget(sg, button); | |
893 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
894 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Bold"), NULL); | |
895 | |
896 g_signal_connect(G_OBJECT(button), "clicked", | |
897 G_CALLBACK(do_bold), toolbar); | |
898 | |
899 toolbar->bold = button; | |
900 | |
901 /* Italic */ | |
902 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC); | |
903 gtk_size_group_add_widget(sg, button); | |
904 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
905 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Italic"), NULL); | |
906 | |
907 g_signal_connect(G_OBJECT(button), "clicked", | |
908 G_CALLBACK(do_italic), toolbar); | |
909 | |
910 toolbar->italic = button; | |
911 | |
912 /* Underline */ | |
913 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE); | |
914 gtk_size_group_add_widget(sg, button); | |
915 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
916 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Underline"), NULL); | |
917 | |
918 g_signal_connect(G_OBJECT(button), "clicked", | |
919 G_CALLBACK(do_underline), toolbar); | |
920 | |
921 toolbar->underline = button; | |
922 | |
923 /* Sep */ | |
924 sep = gtk_vseparator_new(); | |
925 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
926 | |
927 /* Increase font size */ | |
928 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_BIGGER); | |
929 gtk_size_group_add_widget(sg, button); | |
930 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
931 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
932 _("Larger font size"), NULL); | |
933 | |
934 g_signal_connect(G_OBJECT(button), "clicked", | |
935 G_CALLBACK(do_big), toolbar); | |
936 | |
937 toolbar->larger_size = button; | |
938 | |
939 /* Decrease font size */ | |
940 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_SMALLER); | |
941 gtk_size_group_add_widget(sg, button); | |
942 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
943 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
944 _("Smaller font size"), NULL); | |
945 | |
946 g_signal_connect(G_OBJECT(button), "clicked", | |
947 G_CALLBACK(do_small), toolbar); | |
948 | |
949 toolbar->smaller_size = button; | |
950 | |
951 /* Sep */ | |
952 sep = gtk_vseparator_new(); | |
953 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
954 | |
955 /* Font Face */ | |
956 | |
957 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_SELECT_FONT); | |
958 gtk_size_group_add_widget(sg, button); | |
959 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
960 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
961 _("Font Face"), NULL); | |
962 | |
963 g_signal_connect(G_OBJECT(button), "clicked", | |
964 G_CALLBACK(toggle_font), toolbar); | |
965 | |
966 toolbar->font = button; | |
967 | |
968 /* Foreground Color */ | |
969 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_FGCOLOR); | |
970 gtk_size_group_add_widget(sg, button); | |
971 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
972 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
973 _("Foreground font color"), NULL); | |
974 | |
975 g_signal_connect(G_OBJECT(button), "clicked", | |
976 G_CALLBACK(toggle_fg_color), toolbar); | |
977 | |
978 toolbar->fgcolor = button; | |
979 | |
980 /* Background Color */ | |
981 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_BGCOLOR); | |
982 gtk_size_group_add_widget(sg, button); | |
983 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
984 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
985 _("Background color"), NULL); | |
986 | |
987 g_signal_connect(G_OBJECT(button), "clicked", | |
988 G_CALLBACK(toggle_bg_color), toolbar); | |
989 | |
990 toolbar->bgcolor = button; | |
991 | |
992 /* Sep */ | |
993 sep = gtk_vseparator_new(); | |
994 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
995 | |
996 /* Insert Link */ | |
997 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK); | |
998 gtk_size_group_add_widget(sg, button); | |
999 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1000 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert link"), NULL); | |
1001 g_signal_connect(G_OBJECT(button), "clicked", | |
1002 G_CALLBACK(insert_link_cb), toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
1003 |
8317 | 1004 toolbar->link = button; |
1005 | |
1006 /* Insert IM Image */ | |
1007 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE); | |
1008 gtk_size_group_add_widget(sg, button); | |
1009 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1010 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert image"), NULL); | |
1011 | |
1012 g_signal_connect(G_OBJECT(button), "clicked", | |
1013 G_CALLBACK(insert_image_cb), toolbar); | |
1014 | |
1015 toolbar->image = button; | |
1016 | |
1017 /* Insert Smiley */ | |
1018 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); | |
1019 gtk_size_group_add_widget(sg, button); | |
1020 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1021 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); | |
1022 | |
1023 g_signal_connect(G_OBJECT(button), "clicked", | |
1024 G_CALLBACK(insert_smiley_cb), toolbar); | |
1025 | |
1026 toolbar->smiley = button; | |
1027 | |
1028 | |
1029 sep = gtk_hseparator_new(); | |
1030 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
1031 gtk_widget_show(sep); | |
8427 | 1032 toolbar->sml = NULL; |
8317 | 1033 gtk_widget_show_all(hbox); |
1034 } | |
1035 | |
1036 GtkWidget *gtk_imhtmltoolbar_new() | |
1037 { | |
1038 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); | |
1039 } | |
1040 | |
1041 GType gtk_imhtmltoolbar_get_type() | |
1042 { | |
1043 static GType imhtmltoolbar_type = 0; | |
1044 | |
1045 if (!imhtmltoolbar_type) { | |
1046 static const GTypeInfo imhtmltoolbar_info = { | |
1047 sizeof(GtkIMHtmlToolbarClass), | |
1048 NULL, | |
1049 NULL, | |
1050 (GClassInitFunc) gtk_imhtmltoolbar_class_init, | |
1051 NULL, | |
1052 NULL, | |
1053 sizeof (GtkIMHtmlToolbar), | |
1054 0, | |
1055 (GInstanceInitFunc) gtk_imhtmltoolbar_init | |
1056 }; | |
1057 | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
1058 imhtmltoolbar_type = g_type_register_static(GTK_TYPE_VBOX, |
8317 | 1059 "GtkIMHtmlToolbar", &imhtmltoolbar_info, 0); |
1060 } | |
1061 | |
1062 return imhtmltoolbar_type; | |
1063 } | |
1064 | |
1065 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
1066 void gtk_imhtmltoolbar_attach(GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) |
8317 | 1067 { |
8788 | 1068 GtkIMHtmlButtons buttons; |
8481 | 1069 gboolean bold, italic, underline; |
1070 | |
8325
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1071 g_return_if_fail(toolbar != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1072 g_return_if_fail(GTK_IS_IMHTMLTOOLBAR(toolbar)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1073 g_return_if_fail(imhtml != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1074 g_return_if_fail(GTK_IS_IMHTML(imhtml)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1075 |
8317 | 1076 toolbar->imhtml = imhtml; |
8506 | 1077 g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar); |
8420 | 1078 g_signal_connect(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar); |
8427 | 1079 g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar); |
8506 | 1080 g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar); |
8516 | 1081 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar); |
8481 | 1082 |
8788 | 1083 buttons = gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml)); |
8807 | 1084 update_buttons_cb(GTK_IMHTML(imhtml), buttons, toolbar); |
8788 | 1085 |
8481 | 1086 bold = italic = underline = FALSE; |
1087 | |
8516 | 1088 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); |
8481 | 1089 |
1090 if(bold) | |
1091 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
1092 toolbar); | |
1093 | |
1094 if(italic) | |
1095 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
1096 toolbar); | |
1097 | |
1098 if(underline) | |
1099 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
1100 underline, toolbar); | |
8317 | 1101 } |
8427 | 1102 |
1103 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) | |
1104 { | |
1105 if (toolbar->sml) | |
1106 g_free(toolbar->sml); | |
1107 | |
1108 toolbar->sml = g_strdup(proto_id); | |
1109 } |