Mercurial > pidgin.yaz
annotate src/gtkimhtmltoolbar.c @ 9550:de83d2cb87a4
[gaim-migrate @ 10379]
" When unqueuing messages and "sounds while away" is set,
Gaim will play a message receieved for every message
unqueued. If there are a large number of messages, my
SB Audigy tries playing them all and ends up creating a
crackly ugly sound. Friends of mine have complained
about this as well.
This patch fixes that by making sure sounds are
disabled when unqueuing messages. Sounds will be
re-enabled afterwards if necessary.
Something to note is that playing the sounds when
unqueuing messages crashes Gaim on occasion, with about
50% success. After applying this patch, the crashes
stopped. The backtrace isn't particularly
helpful...it's all question marks and valgrind doesn't
say much either. Crash or no crash though, this
eliminates annoying behavior so that is probably more
important.
I originally fixed this for my plugin AutoProfile, but
since they use similar code for queuing messages, it
would be nice if Gaim has it as well :)" --Casey Ho
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Fri, 16 Jul 2004 14:56:47 +0000 |
parents | 4399fc6e667a |
children | a1029432ae4a |
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 |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
28 #include "imgstore.h" |
8317 | 29 #include "notify.h" |
30 #include "request.h" | |
31 #include "stock.h" | |
32 #include "ui.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; | |
9041 | 385 char *msg; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
386 |
8317 | 387 fields = gaim_request_fields_new(); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
388 |
8317 | 389 group = gaim_request_field_group_new(NULL); |
390 gaim_request_fields_add_group(fields, group); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
391 |
8317 | 392 field = gaim_request_field_string_new("url", _("_URL"), NULL, FALSE); |
393 gaim_request_field_set_required(field, TRUE); | |
394 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
395 |
9041 | 396 if(GTK_IMHTML(toolbar->imhtml)->format_functions & GTK_IMHTML_LINKDESC) { |
397 field = gaim_request_field_string_new("description", _("_Description"), | |
398 NULL, FALSE); | |
399 gaim_request_field_group_add_field(group, field); | |
400 msg = g_strdup(_("Please enter the URL and description of the " | |
401 "link that you want to insert. The description " | |
402 "is optional.")); | |
403 } else { | |
404 msg = g_strdup(_("Please enter the URL of the " | |
405 "link that you want to insert.")); | |
406 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
407 |
8317 | 408 toolbar->link_dialog = |
409 gaim_request_fields(toolbar, _("Insert Link"), | |
410 NULL, | |
9041 | 411 msg, |
8317 | 412 fields, |
413 _("_Insert"), G_CALLBACK(do_insert_link_cb), | |
414 _("Cancel"), G_CALLBACK(cancel_link_cb), | |
415 toolbar); | |
9041 | 416 g_free(msg); |
8322
ffb601c6b833
[gaim-migrate @ 9046]
Christian Hammond <chipx86@chipx86.com>
parents:
8321
diff
changeset
|
417 } else { |
8317 | 418 close_link_dialog(toolbar); |
419 } | |
420 gtk_widget_grab_focus(toolbar->imhtml); | |
421 } | |
422 | |
423 | |
424 static void | |
9522 | 425 do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar) |
8317 | 426 { |
9522 | 427 gchar *filename, *name, *buf; |
428 char *filedata; | |
8317 | 429 size_t size; |
430 GError *error = NULL; | |
431 int id; | |
8962 | 432 GtkTextIter iter; |
433 GtkTextMark *ins; | |
8317 | 434 |
9522 | 435 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
436 if (response != GTK_RESPONSE_ACCEPT) { | |
437 #else /* FILECHOOSER */ | |
438 if (response != GTK_RESPONSE_OK) { | |
439 #endif /* FILECHOOSER */ | |
8317 | 440 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
441 return; | |
442 } | |
443 | |
9522 | 444 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
445 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); | |
446 #else /* FILECHOOSER */ | |
447 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); | |
448 #endif /* FILECHOOSER */ | |
8317 | 449 |
9522 | 450 if (filename == NULL) { |
8317 | 451 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
452 return; | |
453 } | |
454 | |
9522 | 455 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
456 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(widget))) { | |
457 g_free(filename); | |
458 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
459 return; | |
460 } | |
461 #endif /* FILECHOOSER */ | |
462 | |
463 /* The following triggers a callback that closes the widget */ | |
8317 | 464 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); |
465 | |
9522 | 466 if (!g_file_get_contents(filename, &filedata, &size, &error)) { |
8317 | 467 gaim_notify_error(NULL, NULL, error->message, NULL); |
468 | |
469 g_error_free(error); | |
9522 | 470 g_free(filename); |
8317 | 471 |
472 return; | |
473 } | |
474 | |
9522 | 475 name = strrchr(filename, G_DIR_SEPARATOR) + 1; |
8317 | 476 |
9522 | 477 id = gaim_imgstore_add(filedata, size, name); |
8317 | 478 g_free(filedata); |
479 | |
9522 | 480 if (id == 0) { |
481 buf = g_strdup_printf(_("Failed to store image: %s\n"), filename); | |
8317 | 482 gaim_notify_error(NULL, NULL, buf, NULL); |
483 | |
484 g_free(buf); | |
9522 | 485 g_free(filename); |
8317 | 486 |
487 return; | |
488 } | |
489 | |
9522 | 490 g_free(filename); |
491 | |
8962 | 492 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); |
493 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), | |
9522 | 494 &iter, ins); |
8962 | 495 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter); |
496 gaim_imgstore_unref(id); | |
8317 | 497 } |
498 | |
499 | |
500 static void | |
501 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar) | |
502 { | |
503 GtkWidget *window; | |
504 | |
505 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { | |
9522 | 506 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
507 window = gtk_file_chooser_dialog_new(_("Insert Image"), | |
508 NULL, | |
509 GTK_FILE_CHOOSER_ACTION_OPEN, | |
510 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
511 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | |
512 NULL); | |
513 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT); | |
514 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)), | |
515 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
516 #else /* FILECHOOSER */ | |
8317 | 517 window = gtk_file_selection_new(_("Insert Image")); |
518 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK); | |
519 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)), | |
520 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
9522 | 521 #endif /* FILECHOOSER */ |
8317 | 522 |
523 gtk_widget_show(window); | |
524 toolbar->image_dialog = window; | |
525 } else { | |
526 gtk_widget_destroy(toolbar->image_dialog); | |
527 toolbar->image_dialog = NULL; | |
528 } | |
9522 | 529 |
8317 | 530 gtk_widget_grab_focus(toolbar->imhtml); |
531 } | |
532 | |
533 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
534 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
535 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
536 GtkIMHtmlToolbar *toolbar) |
8317 | 537 { |
538 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
|
539 |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
540 if (toolbar->smiley_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
541 { |
8317 | 542 gtk_widget_destroy(toolbar->smiley_dialog); |
543 toolbar->smiley_dialog = NULL; | |
544 } | |
545 } | |
546 | |
547 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
548 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
549 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
8317 | 550 { |
9027 | 551 char *smiley_text, *escaped_smiley; |
552 | |
553 smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | |
554 escaped_smiley = gaim_escape_html(smiley_text); | |
8317 | 555 |
8456 | 556 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), |
557 GTK_IMHTML(toolbar->imhtml)->protocol_name, | |
9027 | 558 escaped_smiley); |
8317 | 559 |
9027 | 560 g_free(escaped_smiley); |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
561 close_smiley_dialog(NULL, NULL, toolbar); |
8317 | 562 } |
563 | |
564 | |
565 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *table, int row, int col, char *filename, char *face) | |
566 { | |
567 GtkWidget *image; | |
568 GtkWidget *button; | |
569 | |
570 image = gtk_image_new_from_file(filename); | |
571 button = gtk_button_new(); | |
572 gtk_container_add(GTK_CONTAINER(button), image); | |
573 g_object_set_data(G_OBJECT(button), "smiley_text", face); | |
574 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | |
575 | |
576 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | |
577 | |
578 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
579 | |
580 /* these look really weird with borders */ | |
581 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
582 | |
583 gtk_widget_show(button); | |
584 } | |
585 | |
586 | |
587 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | |
588 while(list) { | |
589 GtkIMHtmlSmiley *cur = list->data; | |
590 if(!strcmp(cur->file, smiley->file)) | |
591 return FALSE; | |
592 list = list->next; | |
593 } | |
594 return TRUE; | |
595 } | |
596 | |
597 | |
598 static void | |
599 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) | |
600 { | |
601 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley))) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
602 |
8317 | 603 GtkWidget *dialog; |
604 GtkWidget *smiley_table = NULL; | |
605 GSList *smileys, *unique_smileys = NULL; | |
606 int width; | |
607 int row = 0, col = 0; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
608 |
8317 | 609 if (toolbar->smiley_dialog) { |
610 gtk_widget_grab_focus(toolbar->imhtml); | |
611 return; | |
612 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
613 |
8427 | 614 if (toolbar->sml) |
615 smileys = get_proto_smileys(toolbar->sml); | |
8892 | 616 else |
617 smileys = get_proto_smileys(GAIM_PROTO_DEFAULT); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
618 |
8317 | 619 while(smileys) { |
620 GtkIMHtmlSmiley *smiley = smileys->data; | |
621 if(!smiley->hidden) { | |
622 if(smiley_is_unique(unique_smileys, smiley)) | |
623 unique_smileys = g_slist_append(unique_smileys, smiley); | |
624 } | |
625 smileys = smileys->next; | |
626 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
627 |
8892 | 628 GAIM_DIALOG(dialog); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
629 |
8317 | 630 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
631 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | |
632 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
|
633 |
8892 | 634 if(g_slist_length(unique_smileys)) { |
635 | |
636 width = floor(sqrt(g_slist_length(unique_smileys))); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
637 |
8892 | 638 smiley_table = gtk_table_new(width, width, TRUE); |
639 | |
640 /* pack buttons */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
641 |
8892 | 642 while(unique_smileys) { |
643 GtkIMHtmlSmiley *smiley = unique_smileys->data; | |
644 if(!smiley->hidden) { | |
645 add_smiley(toolbar, smiley_table, row, col, smiley->file, smiley->smile); | |
646 if(++col >= width) { | |
647 col = 0; | |
648 row++; | |
649 } | |
8317 | 650 } |
8892 | 651 unique_smileys = unique_smileys->next; |
8317 | 652 } |
8892 | 653 } |
654 else { | |
655 smiley_table = gtk_label_new(_("This theme has no available smileys.")); | |
8317 | 656 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
657 |
8317 | 658 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
659 |
8317 | 660 gtk_widget_show(smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
661 |
8317 | 662 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
663 |
8317 | 664 /* connect signals */ |
665 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | |
666 g_signal_connect(G_OBJECT(dialog), "delete_event", | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
667 G_CALLBACK(close_smiley_dialog), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
668 |
8317 | 669 /* show everything */ |
670 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | |
671 gtk_widget_show_all(dialog); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
672 |
8317 | 673 toolbar->smiley_dialog = dialog; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
674 |
8317 | 675 } else if (toolbar->smiley_dialog) { |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
676 close_smiley_dialog(smiley, NULL, toolbar); |
8317 | 677 } |
678 gtk_widget_grab_focus(toolbar->imhtml); | |
679 } | |
680 | |
8420 | 681 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) |
682 { | |
683 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bold), buttons & GTK_IMHTML_BOLD); | |
684 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->italic), buttons & GTK_IMHTML_ITALIC); | |
685 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->underline), buttons & GTK_IMHTML_UNDERLINE); | |
686 | |
687 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->larger_size), buttons & GTK_IMHTML_GROW); | |
688 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smaller_size), buttons & GTK_IMHTML_SHRINK); | |
689 | |
690 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->font), buttons & GTK_IMHTML_FACE); | |
691 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->fgcolor), buttons & GTK_IMHTML_FORECOLOR); | |
692 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bgcolor), buttons & GTK_IMHTML_BACKCOLOR); | |
693 | |
694 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->image), buttons & GTK_IMHTML_IMAGE); | |
695 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->link), buttons & GTK_IMHTML_LINK); | |
696 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smiley), buttons & GTK_IMHTML_SMILEY); | |
8481 | 697 } |
8420 | 698 |
8481 | 699 /* we call this when we want to _set_active the toggle button, it'll |
700 * block the callback thats connected to the button so we don't have to | |
701 * do the double toggling hack | |
702 */ | |
703 static void toggle_button_set_active_block(GtkToggleButton *button, | |
704 gboolean is_active, | |
705 GtkIMHtmlToolbar *toolbar) | |
706 { | |
707 GObject *object; | |
708 g_return_if_fail(toolbar); | |
709 | |
710 object = g_object_ref(button); | |
711 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, | |
712 0, 0, NULL, NULL, toolbar); | |
713 gtk_toggle_button_set_active(button, is_active); | |
714 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, | |
715 0, 0, NULL, NULL, toolbar); | |
716 g_object_unref(object); | |
8420 | 717 } |
718 | |
719 static void toggle_button_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) | |
720 { | |
8481 | 721 if (buttons & GTK_IMHTML_BOLD) |
722 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), | |
723 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)), | |
724 toolbar); | |
8420 | 725 |
8481 | 726 if (buttons & GTK_IMHTML_ITALIC) |
727 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
728 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)), | |
729 toolbar); | |
8420 | 730 |
8481 | 731 if (buttons & GTK_IMHTML_UNDERLINE) |
732 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
733 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)), | |
734 toolbar); | |
8420 | 735 } |
736 | |
8427 | 737 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) |
738 { | |
8481 | 739 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) |
740 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, | |
741 toolbar); | |
742 | |
743 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) | |
744 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
745 FALSE, toolbar); | |
746 | |
747 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) | |
748 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
749 FALSE, toolbar); | |
750 } | |
8516 | 751 |
752 static void update_buttons(GtkIMHtmlToolbar *toolbar) { | |
8506 | 753 gboolean bold, italic, underline; |
754 | |
755 bold = italic = underline = FALSE; | |
8516 | 756 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), |
757 &bold, &italic, &underline); | |
8506 | 758 |
759 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) | |
760 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
761 toolbar); | |
8516 | 762 |
8506 | 763 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic) |
764 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
765 toolbar); | |
8516 | 766 |
8506 | 767 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline) |
768 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
8677 | 769 underline, toolbar); |
8506 | 770 } |
8481 | 771 |
8516 | 772 static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) { |
773 update_buttons(toolbar); | |
774 } | |
8481 | 775 |
8516 | 776 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *location, |
777 GtkTextMark *mark, GtkIMHtmlToolbar *toolbar) | |
778 { | |
779 if(mark != gtk_text_buffer_get_insert(buffer)) | |
780 return; | |
781 | |
782 update_buttons(toolbar); | |
8427 | 783 } |
784 | |
8317 | 785 enum { |
786 LAST_SIGNAL | |
787 }; | |
788 //static guint signals [LAST_SIGNAL] = { 0 }; | |
789 | |
790 static void | |
791 gtk_imhtmltoolbar_finalize (GObject *object) | |
792 { | |
8391 | 793 GtkIMHtmlToolbar *toolbar = GTK_IMHTMLTOOLBAR(object); |
8317 | 794 |
8685
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
795 if (toolbar->image_dialog != NULL) |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
796 { |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
797 gtk_widget_destroy(toolbar->image_dialog); |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
798 toolbar->image_dialog = NULL; |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
799 } |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
800 |
8785
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
801 if (toolbar->font_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
802 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
803 gtk_widget_destroy(toolbar->font_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
804 toolbar->font_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
805 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
806 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
807 if (toolbar->smiley_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->smiley_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
810 toolbar->smiley_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->bgcolor_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->bgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
816 toolbar->bgcolor_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->fgcolor_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->fgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
822 toolbar->fgcolor_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->link_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 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
828 toolbar->link_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
829 } |
8784
48dd097eb475
[gaim-migrate @ 9546]
Christian Hammond <chipx86@chipx86.com>
parents:
8756
diff
changeset
|
830 |
8427 | 831 if (toolbar->sml) |
832 free(toolbar->sml); | |
8391 | 833 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); |
8317 | 834 |
8391 | 835 G_OBJECT_CLASS(parent_class)->finalize (object); |
8317 | 836 } |
837 | |
838 /* Boring GTK stuff */ | |
839 static void gtk_imhtmltoolbar_class_init (GtkIMHtmlToolbarClass *class) | |
840 { | |
841 GtkObjectClass *object_class; | |
842 GObjectClass *gobject_class; | |
843 object_class = (GtkObjectClass*) class; | |
844 gobject_class = (GObjectClass*) class; | |
845 parent_class = gtk_type_class(GTK_TYPE_VBOX); | |
846 /* signals[URL_CLICKED] = g_signal_new(url_clicked", | |
847 G_TYPE_FROM_CLASS(gobject_class), | |
848 G_SIGNAL_RUN_FIRST, | |
849 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked), | |
850 NULL, | |
851 0, | |
852 g_cclosure_marshal_VOID__POINTER, | |
853 G_TYPE_NONE, 1, | |
854 G_TYPE_POINTER);*/ | |
855 gobject_class->finalize = gtk_imhtmltoolbar_finalize; | |
856 } | |
857 | |
858 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) | |
859 { | |
860 GtkWidget *hbox; | |
861 GtkWidget *button; | |
862 GtkWidget *sep; | |
863 GtkSizeGroup *sg; | |
864 | |
865 toolbar->imhtml = NULL; | |
866 toolbar->font_dialog = NULL; | |
867 toolbar->fgcolor_dialog = NULL; | |
868 toolbar->bgcolor_dialog = NULL; | |
869 toolbar->link_dialog = NULL; | |
870 toolbar->smiley_dialog = NULL; | |
871 toolbar->image_dialog = NULL; | |
872 | |
873 toolbar->tooltips = gtk_tooltips_new(); | |
874 | |
875 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | |
876 | |
877 sep = gtk_hseparator_new(); | |
878 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
879 gtk_widget_show(sep); | |
880 | |
881 hbox = gtk_hbox_new(FALSE, 6); | |
882 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); | |
883 | |
884 /* Bold */ | |
885 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); | |
886 gtk_size_group_add_widget(sg, button); | |
887 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
888 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Bold"), NULL); | |
889 | |
890 g_signal_connect(G_OBJECT(button), "clicked", | |
891 G_CALLBACK(do_bold), toolbar); | |
892 | |
893 toolbar->bold = button; | |
894 | |
895 /* Italic */ | |
896 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC); | |
897 gtk_size_group_add_widget(sg, button); | |
898 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
899 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Italic"), NULL); | |
900 | |
901 g_signal_connect(G_OBJECT(button), "clicked", | |
902 G_CALLBACK(do_italic), toolbar); | |
903 | |
904 toolbar->italic = button; | |
905 | |
906 /* Underline */ | |
907 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE); | |
908 gtk_size_group_add_widget(sg, button); | |
909 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
910 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Underline"), NULL); | |
911 | |
912 g_signal_connect(G_OBJECT(button), "clicked", | |
913 G_CALLBACK(do_underline), toolbar); | |
914 | |
915 toolbar->underline = button; | |
916 | |
917 /* Sep */ | |
918 sep = gtk_vseparator_new(); | |
919 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
920 | |
921 /* Increase font size */ | |
922 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_BIGGER); | |
923 gtk_size_group_add_widget(sg, button); | |
924 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
925 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
926 _("Larger font size"), NULL); | |
927 | |
928 g_signal_connect(G_OBJECT(button), "clicked", | |
929 G_CALLBACK(do_big), toolbar); | |
930 | |
931 toolbar->larger_size = button; | |
932 | |
933 /* Decrease font size */ | |
934 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_SMALLER); | |
935 gtk_size_group_add_widget(sg, button); | |
936 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
937 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
938 _("Smaller font size"), NULL); | |
939 | |
940 g_signal_connect(G_OBJECT(button), "clicked", | |
941 G_CALLBACK(do_small), toolbar); | |
942 | |
943 toolbar->smaller_size = button; | |
944 | |
945 /* Sep */ | |
946 sep = gtk_vseparator_new(); | |
947 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
948 | |
949 /* Font Face */ | |
950 | |
951 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_SELECT_FONT); | |
952 gtk_size_group_add_widget(sg, button); | |
953 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
954 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
955 _("Font Face"), NULL); | |
956 | |
957 g_signal_connect(G_OBJECT(button), "clicked", | |
958 G_CALLBACK(toggle_font), toolbar); | |
959 | |
960 toolbar->font = button; | |
961 | |
962 /* Foreground Color */ | |
963 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_FGCOLOR); | |
964 gtk_size_group_add_widget(sg, button); | |
965 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
966 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
967 _("Foreground font color"), NULL); | |
968 | |
969 g_signal_connect(G_OBJECT(button), "clicked", | |
970 G_CALLBACK(toggle_fg_color), toolbar); | |
971 | |
972 toolbar->fgcolor = button; | |
973 | |
974 /* Background Color */ | |
975 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_BGCOLOR); | |
976 gtk_size_group_add_widget(sg, button); | |
977 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
978 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
979 _("Background color"), NULL); | |
980 | |
981 g_signal_connect(G_OBJECT(button), "clicked", | |
982 G_CALLBACK(toggle_bg_color), toolbar); | |
983 | |
984 toolbar->bgcolor = button; | |
985 | |
986 /* Sep */ | |
987 sep = gtk_vseparator_new(); | |
988 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
989 | |
990 /* Insert Link */ | |
991 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK); | |
992 gtk_size_group_add_widget(sg, button); | |
993 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
994 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert link"), NULL); | |
995 g_signal_connect(G_OBJECT(button), "clicked", | |
996 G_CALLBACK(insert_link_cb), toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
997 |
8317 | 998 toolbar->link = button; |
999 | |
1000 /* Insert IM Image */ | |
1001 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE); | |
1002 gtk_size_group_add_widget(sg, button); | |
1003 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1004 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert image"), NULL); | |
1005 | |
1006 g_signal_connect(G_OBJECT(button), "clicked", | |
1007 G_CALLBACK(insert_image_cb), toolbar); | |
1008 | |
1009 toolbar->image = button; | |
1010 | |
1011 /* Insert Smiley */ | |
1012 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); | |
1013 gtk_size_group_add_widget(sg, button); | |
1014 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
1015 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); | |
1016 | |
1017 g_signal_connect(G_OBJECT(button), "clicked", | |
1018 G_CALLBACK(insert_smiley_cb), toolbar); | |
1019 | |
1020 toolbar->smiley = button; | |
1021 | |
1022 | |
1023 sep = gtk_hseparator_new(); | |
1024 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
1025 gtk_widget_show(sep); | |
8427 | 1026 toolbar->sml = NULL; |
8317 | 1027 gtk_widget_show_all(hbox); |
1028 } | |
1029 | |
1030 GtkWidget *gtk_imhtmltoolbar_new() | |
1031 { | |
1032 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); | |
1033 } | |
1034 | |
1035 GType gtk_imhtmltoolbar_get_type() | |
1036 { | |
1037 static GType imhtmltoolbar_type = 0; | |
1038 | |
1039 if (!imhtmltoolbar_type) { | |
1040 static const GTypeInfo imhtmltoolbar_info = { | |
1041 sizeof(GtkIMHtmlToolbarClass), | |
1042 NULL, | |
1043 NULL, | |
1044 (GClassInitFunc) gtk_imhtmltoolbar_class_init, | |
1045 NULL, | |
1046 NULL, | |
1047 sizeof (GtkIMHtmlToolbar), | |
1048 0, | |
1049 (GInstanceInitFunc) gtk_imhtmltoolbar_init | |
1050 }; | |
1051 | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
1052 imhtmltoolbar_type = g_type_register_static(GTK_TYPE_VBOX, |
8317 | 1053 "GtkIMHtmlToolbar", &imhtmltoolbar_info, 0); |
1054 } | |
1055 | |
1056 return imhtmltoolbar_type; | |
1057 } | |
1058 | |
1059 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
1060 void gtk_imhtmltoolbar_attach(GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) |
8317 | 1061 { |
8788 | 1062 GtkIMHtmlButtons buttons; |
8481 | 1063 gboolean bold, italic, underline; |
1064 | |
8325
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1065 g_return_if_fail(toolbar != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1066 g_return_if_fail(GTK_IS_IMHTMLTOOLBAR(toolbar)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1067 g_return_if_fail(imhtml != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1068 g_return_if_fail(GTK_IS_IMHTML(imhtml)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1069 |
8317 | 1070 toolbar->imhtml = imhtml; |
8506 | 1071 g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar); |
8420 | 1072 g_signal_connect(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar); |
8427 | 1073 g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar); |
8506 | 1074 g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar); |
8516 | 1075 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar); |
8481 | 1076 |
8788 | 1077 buttons = gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml)); |
8807 | 1078 update_buttons_cb(GTK_IMHTML(imhtml), buttons, toolbar); |
8788 | 1079 |
8481 | 1080 bold = italic = underline = FALSE; |
1081 | |
8516 | 1082 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); |
8481 | 1083 |
1084 if(bold) | |
1085 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
1086 toolbar); | |
1087 | |
1088 if(italic) | |
1089 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
1090 toolbar); | |
1091 | |
1092 if(underline) | |
1093 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
1094 underline, toolbar); | |
8317 | 1095 } |
8427 | 1096 |
1097 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) | |
1098 { | |
1099 if (toolbar->sml) | |
1100 g_free(toolbar->sml); | |
1101 | |
1102 toolbar->sml = g_strdup(proto_id); | |
1103 } |