Mercurial > pidgin
annotate src/gtkimhtmltoolbar.c @ 8892:ed62fb44aa30
[gaim-migrate @ 9661]
" This patch does two things:
1) Fixes a crash in themes.c if the smiley theme has no
smileys and you attempt to get a list of them elsewhere
in gaim.
2) Makes the insert smiley dialog have a little text
label that says the smiley theme has no available
smileys if it would otherwise contain nothing. This
solution was suggested as acceptable for letting the
user know there's no smileys without disabling the
button, blah blah blah. You can ask me for the gory
details if you want to know what I would have had to
code to make it work the other way." --Kevin Stange
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Thu, 06 May 2004 14:02:06 +0000 |
parents | 482fc53c969d |
children | 4ff4c34b7500 |
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 { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
156 #if 0 |
8317 | 157 char fonttif[128]; |
158 const char *fontface; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
159 #endif |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
160 |
8317 | 161 g_return_if_fail(toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
162 |
8317 | 163 if (!toolbar->font_dialog) { |
164 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); | |
165 | |
166 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
|
167 |
8317 | 168 /* if (gtkconv->fontface[0]) { |
169 g_snprintf(fonttif, sizeof(fonttif), "%s 12", gtkconv->fontface); | |
170 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font), | |
171 fonttif); | |
172 } else { | |
173 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font), | |
174 DEFAULT_FONT_FACE); | |
175 } | |
176 */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
177 |
8317 | 178 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
179 G_CALLBACK(destroy_toolbar_font), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
180 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
|
181 G_CALLBACK(apply_font), toolbar->font_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
182 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
|
183 G_CALLBACK(cancel_toolbar_font), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
184 |
8317 | 185 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
186 } else { | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
187 cancel_toolbar_font(NULL, toolbar); |
8317 | 188 } |
189 gtk_widget_grab_focus(toolbar->imhtml); | |
190 } | |
191 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
192 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
193 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
194 GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
195 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
196 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
197 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
198 if (toolbar->fgcolor_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
199 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
200 gtk_widget_destroy(toolbar->fgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
201 toolbar->fgcolor_dialog = NULL; |
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 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
205 static void cancel_toolbar_fgcolor(GtkWidget *widget, |
8321
eb269b81fff8
[gaim-migrate @ 9045]
Christian Hammond <chipx86@chipx86.com>
parents:
8320
diff
changeset
|
206 GtkIMHtmlToolbar *toolbar) |
8317 | 207 { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
208 destroy_toolbar_fgcolor(widget, NULL, toolbar); |
8317 | 209 } |
210 | |
211 static void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
212 { | |
213 GdkColor text_color; | |
214 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
215 char *open_tag; | |
216 | |
217 open_tag = g_malloc(30); | |
218 gtk_color_selection_get_current_color(colorsel, &text_color); | |
219 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
220 text_color.red / 256, | |
221 text_color.green / 256, | |
222 text_color.blue / 256); | |
223 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
224 | |
225 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
226 cancel_toolbar_fgcolor(NULL, toolbar); |
8317 | 227 } |
228 | |
229 static void | |
230 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
231 { | |
232 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
233 GtkWidget *colorsel; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
234 /* GdkColor fgcolor; */ |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
235 |
8317 | 236 /*gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), |
237 &fgcolor);*/ | |
238 if (!toolbar->fgcolor_dialog) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
239 |
8317 | 240 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
241 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; | |
242 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | |
243 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
244 |
8317 | 245 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
246 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
247 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
|
248 G_CALLBACK(do_fgcolor), colorsel); |
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)->cancel_button), "clicked", |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
250 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
251 |
8317 | 252 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
253 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
8317 | 254 } else if (toolbar->fgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
255 cancel_toolbar_fgcolor(color, toolbar); |
8317 | 256 } else { |
257 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
258 } | |
259 gtk_widget_grab_focus(toolbar->imhtml); | |
260 } | |
261 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
262 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
263 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
264 GtkIMHtmlToolbar *toolbar) |
8317 | 265 { |
266 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
|
267 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
268 if (toolbar->bgcolor_dialog != NULL) |
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 gtk_widget_destroy(toolbar->bgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
271 toolbar->bgcolor_dialog = NULL; |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
272 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
273 } |
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 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
276 cancel_toolbar_bgcolor(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
277 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
278 destroy_toolbar_bgcolor(widget, NULL, toolbar); |
8317 | 279 } |
280 | |
281 static void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
282 { | |
283 GdkColor text_color; | |
284 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
285 char *open_tag; | |
286 | |
287 open_tag = g_malloc(30); | |
288 gtk_color_selection_get_current_color(colorsel, &text_color); | |
289 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
290 text_color.red / 256, | |
291 text_color.green / 256, | |
292 text_color.blue / 256); | |
293 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
294 | |
295 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
296 cancel_toolbar_bgcolor(NULL, toolbar); |
8317 | 297 } |
298 | |
299 static void | |
300 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
301 { | |
302 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
303 GtkWidget *colorsel; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
304 /* GdkColor bgcolor; */ |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
305 |
8317 | 306 /*gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), |
307 &bgcolor);*/ | |
308 if (!toolbar->bgcolor_dialog) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
309 |
8359 | 310 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
8317 | 311 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
312 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | |
313 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
314 |
8317 | 315 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
316 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
317 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
|
318 G_CALLBACK(do_bgcolor), colorsel); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
319 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
|
320 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
321 |
8317 | 322 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
323 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
8317 | 324 } else if (toolbar->bgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
325 cancel_toolbar_bgcolor(color, toolbar); |
8317 | 326 } else { |
327 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
328 } | |
329 gtk_widget_grab_focus(toolbar->imhtml); | |
330 } | |
331 | |
332 static void | |
333 cancel_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
334 { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
335 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
|
336 |
8317 | 337 toolbar->link_dialog = NULL; |
338 } | |
339 | |
340 static void | |
341 close_link_dialog(GtkIMHtmlToolbar *toolbar) | |
342 { | |
343 if (toolbar->link_dialog != NULL) | |
344 { | |
345 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); | |
346 toolbar->link_dialog = NULL; | |
347 } | |
348 } | |
349 | |
350 static void | |
351 do_insert_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
352 { | |
353 const char *url, *description; | |
354 | |
355 url = gaim_request_fields_get_string(fields, "url"); | |
356 description = gaim_request_fields_get_string(fields, "description"); | |
357 | |
358 if (description == NULL) | |
359 description = url; | |
360 | |
8677 | 361 gtk_imhtml_insert_link(GTK_IMHTML(toolbar->imhtml), |
362 gtk_text_buffer_get_insert(GTK_IMHTML(toolbar->imhtml)->text_buffer), | |
363 url, description); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
364 |
8317 | 365 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); |
366 | |
367 toolbar->link_dialog = NULL; | |
368 } | |
369 | |
370 static void | |
371 insert_link_cb(GtkWidget *w, GtkIMHtmlToolbar *toolbar) | |
372 { | |
373 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))) { | |
374 GaimRequestFields *fields; | |
375 GaimRequestFieldGroup *group; | |
376 GaimRequestField *field; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
377 |
8317 | 378 fields = gaim_request_fields_new(); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
379 |
8317 | 380 group = gaim_request_field_group_new(NULL); |
381 gaim_request_fields_add_group(fields, group); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
382 |
8317 | 383 field = gaim_request_field_string_new("url", _("_URL"), NULL, FALSE); |
384 gaim_request_field_set_required(field, TRUE); | |
385 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
386 |
8317 | 387 field = gaim_request_field_string_new("description", _("_Description"), |
388 NULL, FALSE); | |
389 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
390 |
8317 | 391 toolbar->link_dialog = |
392 gaim_request_fields(toolbar, _("Insert Link"), | |
393 NULL, | |
394 _("Please enter the URL and description of the " | |
395 "link that you want to insert. The description " | |
396 "is optional."), | |
397 fields, | |
398 _("_Insert"), G_CALLBACK(do_insert_link_cb), | |
399 _("Cancel"), G_CALLBACK(cancel_link_cb), | |
400 toolbar); | |
8322
ffb601c6b833
[gaim-migrate @ 9046]
Christian Hammond <chipx86@chipx86.com>
parents:
8321
diff
changeset
|
401 } else { |
8317 | 402 close_link_dialog(toolbar); |
403 } | |
404 gtk_widget_grab_focus(toolbar->imhtml); | |
405 } | |
406 | |
407 | |
408 static void | |
409 do_insert_image_cb(GtkWidget *widget, int resp, GtkIMHtmlToolbar *toolbar) | |
410 { | |
411 char *name, *filename; | |
412 char *buf, *filedata; | |
413 size_t size; | |
414 GError *error = NULL; | |
415 int id; | |
416 | |
417 if (resp != GTK_RESPONSE_OK) { | |
418 //set_toggle(toolbar->image, FALSE); | |
419 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
420 return; | |
421 } | |
422 | |
423 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); | |
424 | |
425 if (!name) { | |
426 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
427 return; | |
428 } | |
429 | |
430 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) { | |
431 g_free(name); | |
432 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
433 return; | |
434 } | |
435 | |
436 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
437 | |
438 if (!g_file_get_contents(name, &filedata, &size, &error)) { | |
439 gaim_notify_error(NULL, NULL, error->message, NULL); | |
440 | |
441 g_error_free(error); | |
442 g_free(name); | |
443 | |
444 return; | |
445 } | |
446 | |
447 filename = name; | |
448 while (strchr(filename, '/')) | |
449 filename = strchr(filename, '/') + 1; | |
450 | |
451 id = gaim_imgstore_add(filedata, size, filename); | |
452 g_free(filedata); | |
453 | |
454 if (!id) { | |
455 buf = g_strdup_printf(_("Failed to store image: %s\n"), name); | |
456 gaim_notify_error(NULL, NULL, buf, NULL); | |
457 | |
458 g_free(buf); | |
459 g_free(name); | |
460 | |
461 return; | |
462 } | |
463 | |
464 //im->images = g_slist_append(im->images, GINT_TO_POINTER(id)); | |
465 | |
466 /*buf = g_strdup_printf("<IMG ID=\"%d\" SRC=\"file://%s\">", id, filename); | |
467 gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(gtkconv->entry_buffer), buf, -1); | |
468 g_free(buf); | |
469 */ | |
470 g_free(name); | |
471 } | |
472 | |
473 | |
474 static void | |
475 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar) | |
476 { | |
477 char buf[BUF_LONG]; | |
478 GtkWidget *window; | |
479 | |
480 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { | |
481 window = gtk_file_selection_new(_("Insert Image")); | |
482 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir()); | |
483 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); | |
484 | |
485 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK); | |
486 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)), | |
487 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
488 | |
489 gtk_widget_show(window); | |
490 toolbar->image_dialog = window; | |
491 } else { | |
492 gtk_widget_destroy(toolbar->image_dialog); | |
493 toolbar->image_dialog = NULL; | |
494 } | |
495 gtk_widget_grab_focus(toolbar->imhtml); | |
496 } | |
497 | |
498 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
499 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
500 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
501 GtkIMHtmlToolbar *toolbar) |
8317 | 502 { |
503 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
|
504 |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
505 if (toolbar->smiley_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
506 { |
8317 | 507 gtk_widget_destroy(toolbar->smiley_dialog); |
508 toolbar->smiley_dialog = NULL; | |
509 } | |
510 } | |
511 | |
512 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
513 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
514 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
8317 | 515 { |
516 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | |
517 | |
8456 | 518 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), |
519 GTK_IMHTML(toolbar->imhtml)->protocol_name, | |
520 smiley_text); | |
8317 | 521 |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
522 close_smiley_dialog(NULL, NULL, toolbar); |
8317 | 523 } |
524 | |
525 | |
526 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *table, int row, int col, char *filename, char *face) | |
527 { | |
528 GtkWidget *image; | |
529 GtkWidget *button; | |
530 | |
531 image = gtk_image_new_from_file(filename); | |
532 button = gtk_button_new(); | |
533 gtk_container_add(GTK_CONTAINER(button), image); | |
534 g_object_set_data(G_OBJECT(button), "smiley_text", face); | |
535 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | |
536 | |
537 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | |
538 | |
539 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
540 | |
541 /* these look really weird with borders */ | |
542 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
543 | |
544 gtk_widget_show(button); | |
545 } | |
546 | |
547 | |
548 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | |
549 while(list) { | |
550 GtkIMHtmlSmiley *cur = list->data; | |
551 if(!strcmp(cur->file, smiley->file)) | |
552 return FALSE; | |
553 list = list->next; | |
554 } | |
555 return TRUE; | |
556 } | |
557 | |
558 | |
559 static void | |
560 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) | |
561 { | |
562 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley))) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
563 |
8317 | 564 GtkWidget *dialog; |
565 GtkWidget *smiley_table = NULL; | |
566 GSList *smileys, *unique_smileys = NULL; | |
567 int width; | |
568 int row = 0, col = 0; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
569 |
8317 | 570 if (toolbar->smiley_dialog) { |
571 gtk_widget_grab_focus(toolbar->imhtml); | |
572 return; | |
573 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
574 |
8427 | 575 if (toolbar->sml) |
576 smileys = get_proto_smileys(toolbar->sml); | |
8892 | 577 else |
578 smileys = get_proto_smileys(GAIM_PROTO_DEFAULT); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
579 |
8317 | 580 while(smileys) { |
581 GtkIMHtmlSmiley *smiley = smileys->data; | |
582 if(!smiley->hidden) { | |
583 if(smiley_is_unique(unique_smileys, smiley)) | |
584 unique_smileys = g_slist_append(unique_smileys, smiley); | |
585 } | |
586 smileys = smileys->next; | |
587 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
588 |
8892 | 589 GAIM_DIALOG(dialog); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
590 |
8317 | 591 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
592 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | |
593 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
|
594 |
8892 | 595 if(g_slist_length(unique_smileys)) { |
596 | |
597 width = floor(sqrt(g_slist_length(unique_smileys))); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
598 |
8892 | 599 smiley_table = gtk_table_new(width, width, TRUE); |
600 | |
601 /* pack buttons */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
602 |
8892 | 603 while(unique_smileys) { |
604 GtkIMHtmlSmiley *smiley = unique_smileys->data; | |
605 if(!smiley->hidden) { | |
606 add_smiley(toolbar, smiley_table, row, col, smiley->file, smiley->smile); | |
607 if(++col >= width) { | |
608 col = 0; | |
609 row++; | |
610 } | |
8317 | 611 } |
8892 | 612 unique_smileys = unique_smileys->next; |
8317 | 613 } |
8892 | 614 } |
615 else { | |
616 smiley_table = gtk_label_new(_("This theme has no available smileys.")); | |
8317 | 617 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
618 |
8317 | 619 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
620 |
8317 | 621 gtk_widget_show(smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
622 |
8317 | 623 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
624 |
8317 | 625 /* connect signals */ |
626 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | |
627 g_signal_connect(G_OBJECT(dialog), "delete_event", | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
628 G_CALLBACK(close_smiley_dialog), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
629 |
8317 | 630 /* show everything */ |
631 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | |
632 gtk_widget_show_all(dialog); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
633 |
8317 | 634 toolbar->smiley_dialog = dialog; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
635 |
8317 | 636 } else if (toolbar->smiley_dialog) { |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
637 close_smiley_dialog(smiley, NULL, toolbar); |
8317 | 638 } |
639 gtk_widget_grab_focus(toolbar->imhtml); | |
640 } | |
641 | |
8420 | 642 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) |
643 { | |
644 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bold), buttons & GTK_IMHTML_BOLD); | |
645 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->italic), buttons & GTK_IMHTML_ITALIC); | |
646 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->underline), buttons & GTK_IMHTML_UNDERLINE); | |
647 | |
648 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->larger_size), buttons & GTK_IMHTML_GROW); | |
649 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smaller_size), buttons & GTK_IMHTML_SHRINK); | |
650 | |
651 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->font), buttons & GTK_IMHTML_FACE); | |
652 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->fgcolor), buttons & GTK_IMHTML_FORECOLOR); | |
653 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bgcolor), buttons & GTK_IMHTML_BACKCOLOR); | |
654 | |
655 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->image), buttons & GTK_IMHTML_IMAGE); | |
656 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->link), buttons & GTK_IMHTML_LINK); | |
657 gtk_widget_set_sensitive(GTK_WIDGET(toolbar->smiley), buttons & GTK_IMHTML_SMILEY); | |
8481 | 658 } |
8420 | 659 |
8481 | 660 /* we call this when we want to _set_active the toggle button, it'll |
661 * block the callback thats connected to the button so we don't have to | |
662 * do the double toggling hack | |
663 */ | |
664 static void toggle_button_set_active_block(GtkToggleButton *button, | |
665 gboolean is_active, | |
666 GtkIMHtmlToolbar *toolbar) | |
667 { | |
668 GObject *object; | |
669 g_return_if_fail(toolbar); | |
670 | |
671 object = g_object_ref(button); | |
672 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, | |
673 0, 0, NULL, NULL, toolbar); | |
674 gtk_toggle_button_set_active(button, is_active); | |
675 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, | |
676 0, 0, NULL, NULL, toolbar); | |
677 g_object_unref(object); | |
8420 | 678 } |
679 | |
680 static void toggle_button_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) | |
681 { | |
8481 | 682 if (buttons & GTK_IMHTML_BOLD) |
683 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), | |
684 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)), | |
685 toolbar); | |
8420 | 686 |
8481 | 687 if (buttons & GTK_IMHTML_ITALIC) |
688 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
689 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)), | |
690 toolbar); | |
8420 | 691 |
8481 | 692 if (buttons & GTK_IMHTML_UNDERLINE) |
693 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
694 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)), | |
695 toolbar); | |
8420 | 696 } |
697 | |
8427 | 698 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) |
699 { | |
8481 | 700 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) |
701 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, | |
702 toolbar); | |
703 | |
704 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) | |
705 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | |
706 FALSE, toolbar); | |
707 | |
708 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) | |
709 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
710 FALSE, toolbar); | |
711 } | |
8516 | 712 |
713 static void update_buttons(GtkIMHtmlToolbar *toolbar) { | |
8506 | 714 gboolean bold, italic, underline; |
715 | |
716 bold = italic = underline = FALSE; | |
8516 | 717 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), |
718 &bold, &italic, &underline); | |
8506 | 719 |
720 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) | |
721 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
722 toolbar); | |
8516 | 723 |
8506 | 724 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic) |
725 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
726 toolbar); | |
8516 | 727 |
8506 | 728 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline) |
729 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
8677 | 730 underline, toolbar); |
8506 | 731 } |
8481 | 732 |
8516 | 733 static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) { |
734 update_buttons(toolbar); | |
735 } | |
8481 | 736 |
8516 | 737 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *location, |
738 GtkTextMark *mark, GtkIMHtmlToolbar *toolbar) | |
739 { | |
740 if(mark != gtk_text_buffer_get_insert(buffer)) | |
741 return; | |
742 | |
743 update_buttons(toolbar); | |
8427 | 744 } |
745 | |
8317 | 746 enum { |
747 LAST_SIGNAL | |
748 }; | |
749 //static guint signals [LAST_SIGNAL] = { 0 }; | |
750 | |
751 static void | |
752 gtk_imhtmltoolbar_finalize (GObject *object) | |
753 { | |
8391 | 754 GtkIMHtmlToolbar *toolbar = GTK_IMHTMLTOOLBAR(object); |
8317 | 755 |
8685
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
756 if (toolbar->image_dialog != NULL) |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
757 { |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
758 gtk_widget_destroy(toolbar->image_dialog); |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
759 toolbar->image_dialog = NULL; |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
760 } |
2ac2f4cf1de5
[gaim-migrate @ 9438]
Christian Hammond <chipx86@chipx86.com>
parents:
8677
diff
changeset
|
761 |
8785
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
762 if (toolbar->font_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
763 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
764 gtk_widget_destroy(toolbar->font_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
765 toolbar->font_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
766 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
767 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
768 if (toolbar->smiley_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
769 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
770 gtk_widget_destroy(toolbar->smiley_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
771 toolbar->smiley_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
772 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
773 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
774 if (toolbar->bgcolor_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
775 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
776 gtk_widget_destroy(toolbar->bgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
777 toolbar->bgcolor_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
778 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
779 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
780 if (toolbar->fgcolor_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
781 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
782 gtk_widget_destroy(toolbar->fgcolor_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
783 toolbar->fgcolor_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
784 } |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
785 |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
786 if (toolbar->link_dialog != NULL) |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
787 { |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
788 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
789 toolbar->link_dialog = NULL; |
a871dec1c9d6
[gaim-migrate @ 9547]
Christian Hammond <chipx86@chipx86.com>
parents:
8784
diff
changeset
|
790 } |
8784
48dd097eb475
[gaim-migrate @ 9546]
Christian Hammond <chipx86@chipx86.com>
parents:
8756
diff
changeset
|
791 |
8427 | 792 if (toolbar->sml) |
793 free(toolbar->sml); | |
8391 | 794 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); |
8317 | 795 |
8391 | 796 G_OBJECT_CLASS(parent_class)->finalize (object); |
8317 | 797 } |
798 | |
799 /* Boring GTK stuff */ | |
800 static void gtk_imhtmltoolbar_class_init (GtkIMHtmlToolbarClass *class) | |
801 { | |
802 GtkObjectClass *object_class; | |
803 GObjectClass *gobject_class; | |
804 object_class = (GtkObjectClass*) class; | |
805 gobject_class = (GObjectClass*) class; | |
806 parent_class = gtk_type_class(GTK_TYPE_VBOX); | |
807 /* signals[URL_CLICKED] = g_signal_new(url_clicked", | |
808 G_TYPE_FROM_CLASS(gobject_class), | |
809 G_SIGNAL_RUN_FIRST, | |
810 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked), | |
811 NULL, | |
812 0, | |
813 g_cclosure_marshal_VOID__POINTER, | |
814 G_TYPE_NONE, 1, | |
815 G_TYPE_POINTER);*/ | |
816 gobject_class->finalize = gtk_imhtmltoolbar_finalize; | |
817 } | |
818 | |
819 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) | |
820 { | |
821 GtkWidget *hbox; | |
822 GtkWidget *button; | |
823 GtkWidget *sep; | |
824 GtkSizeGroup *sg; | |
825 | |
826 toolbar->imhtml = NULL; | |
827 toolbar->font_dialog = NULL; | |
828 toolbar->fgcolor_dialog = NULL; | |
829 toolbar->bgcolor_dialog = NULL; | |
830 toolbar->link_dialog = NULL; | |
831 toolbar->smiley_dialog = NULL; | |
832 toolbar->image_dialog = NULL; | |
833 | |
834 toolbar->tooltips = gtk_tooltips_new(); | |
835 | |
836 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | |
837 | |
838 sep = gtk_hseparator_new(); | |
839 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
840 gtk_widget_show(sep); | |
841 | |
842 hbox = gtk_hbox_new(FALSE, 6); | |
843 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); | |
844 | |
845 /* Bold */ | |
846 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); | |
847 gtk_size_group_add_widget(sg, button); | |
848 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
849 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Bold"), NULL); | |
850 | |
851 g_signal_connect(G_OBJECT(button), "clicked", | |
852 G_CALLBACK(do_bold), toolbar); | |
853 | |
854 toolbar->bold = button; | |
855 | |
856 /* Italic */ | |
857 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC); | |
858 gtk_size_group_add_widget(sg, button); | |
859 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
860 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Italic"), NULL); | |
861 | |
862 g_signal_connect(G_OBJECT(button), "clicked", | |
863 G_CALLBACK(do_italic), toolbar); | |
864 | |
865 toolbar->italic = button; | |
866 | |
867 /* Underline */ | |
868 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE); | |
869 gtk_size_group_add_widget(sg, button); | |
870 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
871 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Underline"), NULL); | |
872 | |
873 g_signal_connect(G_OBJECT(button), "clicked", | |
874 G_CALLBACK(do_underline), toolbar); | |
875 | |
876 toolbar->underline = button; | |
877 | |
878 /* Sep */ | |
879 sep = gtk_vseparator_new(); | |
880 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
881 | |
882 /* Increase font size */ | |
883 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_BIGGER); | |
884 gtk_size_group_add_widget(sg, button); | |
885 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
886 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
887 _("Larger font size"), NULL); | |
888 | |
889 g_signal_connect(G_OBJECT(button), "clicked", | |
890 G_CALLBACK(do_big), toolbar); | |
891 | |
892 toolbar->larger_size = button; | |
893 | |
894 /* Decrease font size */ | |
895 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_SMALLER); | |
896 gtk_size_group_add_widget(sg, button); | |
897 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
898 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
899 _("Smaller font size"), NULL); | |
900 | |
901 g_signal_connect(G_OBJECT(button), "clicked", | |
902 G_CALLBACK(do_small), toolbar); | |
903 | |
904 toolbar->smaller_size = button; | |
905 | |
906 /* Sep */ | |
907 sep = gtk_vseparator_new(); | |
908 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
909 | |
910 /* Font Face */ | |
911 | |
912 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_SELECT_FONT); | |
913 gtk_size_group_add_widget(sg, button); | |
914 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
915 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
916 _("Font Face"), NULL); | |
917 | |
918 g_signal_connect(G_OBJECT(button), "clicked", | |
919 G_CALLBACK(toggle_font), toolbar); | |
920 | |
921 toolbar->font = button; | |
922 | |
923 /* Foreground Color */ | |
924 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_FGCOLOR); | |
925 gtk_size_group_add_widget(sg, button); | |
926 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
927 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
928 _("Foreground font color"), NULL); | |
929 | |
930 g_signal_connect(G_OBJECT(button), "clicked", | |
931 G_CALLBACK(toggle_fg_color), toolbar); | |
932 | |
933 toolbar->fgcolor = button; | |
934 | |
935 /* Background Color */ | |
936 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_BGCOLOR); | |
937 gtk_size_group_add_widget(sg, button); | |
938 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
939 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
940 _("Background color"), NULL); | |
941 | |
942 g_signal_connect(G_OBJECT(button), "clicked", | |
943 G_CALLBACK(toggle_bg_color), toolbar); | |
944 | |
945 toolbar->bgcolor = button; | |
946 | |
947 /* Sep */ | |
948 sep = gtk_vseparator_new(); | |
949 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
950 | |
951 /* Insert Link */ | |
952 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK); | |
953 gtk_size_group_add_widget(sg, button); | |
954 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
955 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert link"), NULL); | |
956 g_signal_connect(G_OBJECT(button), "clicked", | |
957 G_CALLBACK(insert_link_cb), toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
958 |
8317 | 959 toolbar->link = button; |
960 | |
961 /* Insert IM Image */ | |
962 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE); | |
963 gtk_size_group_add_widget(sg, button); | |
964 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
965 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert image"), NULL); | |
966 | |
967 g_signal_connect(G_OBJECT(button), "clicked", | |
968 G_CALLBACK(insert_image_cb), toolbar); | |
969 | |
970 toolbar->image = button; | |
971 | |
972 /* Insert Smiley */ | |
973 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); | |
974 gtk_size_group_add_widget(sg, button); | |
975 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
976 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); | |
977 | |
978 g_signal_connect(G_OBJECT(button), "clicked", | |
979 G_CALLBACK(insert_smiley_cb), toolbar); | |
980 | |
981 toolbar->smiley = button; | |
982 | |
983 | |
984 sep = gtk_hseparator_new(); | |
985 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
986 gtk_widget_show(sep); | |
8427 | 987 toolbar->sml = NULL; |
8317 | 988 gtk_widget_show_all(hbox); |
8756 | 989 |
990 /* XXX - IMIMAGE - Fix IM images then remove the following line */ | |
991 gtk_widget_hide(toolbar->image); | |
8317 | 992 } |
993 | |
994 GtkWidget *gtk_imhtmltoolbar_new() | |
995 { | |
996 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); | |
997 } | |
998 | |
999 GType gtk_imhtmltoolbar_get_type() | |
1000 { | |
1001 static GType imhtmltoolbar_type = 0; | |
1002 | |
1003 if (!imhtmltoolbar_type) { | |
1004 static const GTypeInfo imhtmltoolbar_info = { | |
1005 sizeof(GtkIMHtmlToolbarClass), | |
1006 NULL, | |
1007 NULL, | |
1008 (GClassInitFunc) gtk_imhtmltoolbar_class_init, | |
1009 NULL, | |
1010 NULL, | |
1011 sizeof (GtkIMHtmlToolbar), | |
1012 0, | |
1013 (GInstanceInitFunc) gtk_imhtmltoolbar_init | |
1014 }; | |
1015 | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
1016 imhtmltoolbar_type = g_type_register_static(GTK_TYPE_VBOX, |
8317 | 1017 "GtkIMHtmlToolbar", &imhtmltoolbar_info, 0); |
1018 } | |
1019 | |
1020 return imhtmltoolbar_type; | |
1021 } | |
1022 | |
1023 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
1024 void gtk_imhtmltoolbar_attach(GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) |
8317 | 1025 { |
8788 | 1026 GtkIMHtmlButtons buttons; |
8481 | 1027 gboolean bold, italic, underline; |
1028 | |
8325
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1029 g_return_if_fail(toolbar != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1030 g_return_if_fail(GTK_IS_IMHTMLTOOLBAR(toolbar)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1031 g_return_if_fail(imhtml != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1032 g_return_if_fail(GTK_IS_IMHTML(imhtml)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
1033 |
8317 | 1034 toolbar->imhtml = imhtml; |
8506 | 1035 g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar); |
8420 | 1036 g_signal_connect(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar); |
8427 | 1037 g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar); |
8506 | 1038 g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar); |
8516 | 1039 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar); |
8481 | 1040 |
8788 | 1041 buttons = gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml)); |
8807 | 1042 update_buttons_cb(GTK_IMHTML(imhtml), buttons, toolbar); |
8788 | 1043 |
8481 | 1044 bold = italic = underline = FALSE; |
1045 | |
8516 | 1046 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); |
8481 | 1047 |
1048 if(bold) | |
1049 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | |
1050 toolbar); | |
1051 | |
1052 if(italic) | |
1053 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | |
1054 toolbar); | |
1055 | |
1056 if(underline) | |
1057 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | |
1058 underline, toolbar); | |
8317 | 1059 } |
8427 | 1060 |
1061 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) | |
1062 { | |
1063 if (toolbar->sml) | |
1064 g_free(toolbar->sml); | |
1065 | |
1066 toolbar->sml = g_strdup(proto_id); | |
1067 } |