Mercurial > pidgin.yaz
annotate src/gtkimhtmltoolbar.c @ 8380:4a5b36510665
[gaim-migrate @ 9108]
Just a minor WYSIWYG fix; now the grow and shrink buttons work properly.
Also, the CSS standard says that each font size should be 1.2 times the size
of the next smallest, and W3C tends to be smart about these things, so I did
that. Also, timestamps are once again size=2, which I think looks better.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Mon, 01 Mar 2004 20:52:57 +0000 |
parents | 05c174138e94 |
children | 45d1e3ed5a86 |
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 { | |
39 g_return_if_fail(toolbar); | |
40 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml)); | |
41 gtk_widget_grab_focus(toolbar->imhtml); | |
42 } | |
43 | |
44 static void | |
45 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar) | |
46 { | |
47 g_return_if_fail(toolbar); | |
48 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml)); | |
49 gtk_widget_grab_focus(toolbar->imhtml); | |
50 } | |
51 | |
52 static void | |
53 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar) | |
54 { | |
55 g_return_if_fail(toolbar); | |
56 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml)); | |
57 gtk_widget_grab_focus(toolbar->imhtml); | |
58 } | |
59 | |
60 static void | |
61 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar) | |
62 { | |
63 g_return_if_fail(toolbar); | |
8380 | 64 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size))) |
65 gtk_imhtml_font_shrink(GTK_IMHTML(toolbar->imhtml)); | |
8317 | 66 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size), FALSE); |
67 gtk_widget_grab_focus(toolbar->imhtml); | |
68 } | |
69 | |
70 static void | |
71 do_big(GtkWidget *large, GtkIMHtmlToolbar *toolbar) | |
72 { | |
73 g_return_if_fail(toolbar); | |
8380 | 74 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->larger_size))) |
75 gtk_imhtml_font_grow(GTK_IMHTML(toolbar->imhtml)); | |
8317 | 76 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->larger_size), FALSE); |
77 gtk_widget_grab_focus(toolbar->imhtml); | |
78 } | |
79 | |
80 | |
81 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
82 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
83 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
84 GtkIMHtmlToolbar *toolbar) |
8317 | 85 { |
86 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->font), FALSE); | |
87 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
88 if (toolbar->font_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
89 { |
8317 | 90 gtk_widget_destroy(toolbar->font_dialog); |
91 toolbar->font_dialog = NULL; | |
92 } | |
93 } | |
94 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
95 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
96 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
97 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
98 destroy_toolbar_font(widget, NULL, toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
99 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
100 |
8317 | 101 static void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) |
102 { | |
103 /* this could be expanded to include font size, weight, etc. | |
104 but for now only works with font face */ | |
105 char *fontname; | |
106 char *space; | |
107 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(fontsel), "gaim_toolbar"); | |
108 | |
109 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel)); | |
110 | |
111 space = strrchr(fontname, ' '); | |
112 if(space && isdigit(*(space+1))) | |
113 *space = '\0'; | |
114 | |
115 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname); | |
116 | |
117 g_free(fontname); | |
118 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
119 cancel_toolbar_font(NULL, toolbar); |
8317 | 120 } |
121 | |
122 static void | |
123 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar) | |
124 { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
125 #if 0 |
8317 | 126 char fonttif[128]; |
127 const char *fontface; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
128 #endif |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
129 |
8317 | 130 g_return_if_fail(toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
131 |
8317 | 132 if (!toolbar->font_dialog) { |
133 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); | |
134 | |
135 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
|
136 |
8317 | 137 /* if (gtkconv->fontface[0]) { |
138 g_snprintf(fonttif, sizeof(fonttif), "%s 12", gtkconv->fontface); | |
139 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font), | |
140 fonttif); | |
141 } else { | |
142 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font), | |
143 DEFAULT_FONT_FACE); | |
144 } | |
145 */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
146 |
8317 | 147 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
148 G_CALLBACK(destroy_toolbar_font), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
149 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
|
150 G_CALLBACK(apply_font), toolbar->font_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
151 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
|
152 G_CALLBACK(cancel_toolbar_font), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
153 |
8317 | 154 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
155 } else { | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
156 cancel_toolbar_font(NULL, toolbar); |
8317 | 157 } |
158 gtk_widget_grab_focus(toolbar->imhtml); | |
159 } | |
160 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
161 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
162 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
163 GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
164 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
165 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
166 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
167 if (toolbar->fgcolor_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
168 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
169 gtk_widget_destroy(toolbar->fgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
170 toolbar->fgcolor_dialog = NULL; |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
171 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
172 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
173 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
174 static void cancel_toolbar_fgcolor(GtkWidget *widget, |
8321
eb269b81fff8
[gaim-migrate @ 9045]
Christian Hammond <chipx86@chipx86.com>
parents:
8320
diff
changeset
|
175 GtkIMHtmlToolbar *toolbar) |
8317 | 176 { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
177 destroy_toolbar_fgcolor(widget, NULL, toolbar); |
8317 | 178 } |
179 | |
180 static void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
181 { | |
182 GdkColor text_color; | |
183 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
184 char *open_tag; | |
185 | |
186 open_tag = g_malloc(30); | |
187 gtk_color_selection_get_current_color(colorsel, &text_color); | |
188 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
189 text_color.red / 256, | |
190 text_color.green / 256, | |
191 text_color.blue / 256); | |
192 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
193 | |
194 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
195 cancel_toolbar_fgcolor(NULL, toolbar); |
8317 | 196 } |
197 | |
198 static void | |
199 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
200 { | |
201 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
202 GtkWidget *colorsel; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
203 /* GdkColor fgcolor; */ |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
204 |
8317 | 205 /*gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), |
206 &fgcolor);*/ | |
207 if (!toolbar->fgcolor_dialog) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
208 |
8317 | 209 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
210 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; | |
211 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | |
212 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
213 |
8317 | 214 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
215 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
216 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
|
217 G_CALLBACK(do_fgcolor), colorsel); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
218 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
|
219 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
220 |
8317 | 221 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
222 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
8317 | 223 } else if (toolbar->fgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
224 cancel_toolbar_fgcolor(color, toolbar); |
8317 | 225 } else { |
226 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
227 } | |
228 gtk_widget_grab_focus(toolbar->imhtml); | |
229 } | |
230 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
231 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
232 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
233 GtkIMHtmlToolbar *toolbar) |
8317 | 234 { |
235 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
|
236 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
237 if (toolbar->bgcolor_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
238 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
239 gtk_widget_destroy(toolbar->bgcolor_dialog); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
240 toolbar->bgcolor_dialog = NULL; |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
241 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
242 } |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
243 |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
244 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
245 cancel_toolbar_bgcolor(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
246 { |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
247 destroy_toolbar_bgcolor(widget, NULL, toolbar); |
8317 | 248 } |
249 | |
250 static void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | |
251 { | |
252 GdkColor text_color; | |
253 GtkIMHtmlToolbar *toolbar = g_object_get_data(G_OBJECT(colorsel), "gaim_toolbar"); | |
254 char *open_tag; | |
255 | |
256 open_tag = g_malloc(30); | |
257 gtk_color_selection_get_current_color(colorsel, &text_color); | |
258 g_snprintf(open_tag, 23, "#%02X%02X%02X", | |
259 text_color.red / 256, | |
260 text_color.green / 256, | |
261 text_color.blue / 256); | |
262 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); | |
263 | |
264 g_free(open_tag); | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
265 cancel_toolbar_bgcolor(NULL, toolbar); |
8317 | 266 } |
267 | |
268 static void | |
269 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | |
270 { | |
271 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) { | |
272 GtkWidget *colorsel; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
273 /* GdkColor bgcolor; */ |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
274 |
8317 | 275 /*gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), |
276 &bgcolor);*/ | |
277 if (!toolbar->bgcolor_dialog) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
278 |
8359 | 279 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
8317 | 280 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
281 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | |
282 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
283 |
8317 | 284 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
285 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
286 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
|
287 G_CALLBACK(do_bgcolor), colorsel); |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
288 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
|
289 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
290 |
8317 | 291 } |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
292 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
8317 | 293 } else if (toolbar->bgcolor_dialog != NULL) { |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
294 cancel_toolbar_bgcolor(color, toolbar); |
8317 | 295 } else { |
296 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | |
297 } | |
298 gtk_widget_grab_focus(toolbar->imhtml); | |
299 } | |
300 | |
301 static void | |
302 cancel_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
303 { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
304 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
|
305 |
8317 | 306 toolbar->link_dialog = NULL; |
307 } | |
308 | |
309 static void | |
310 close_link_dialog(GtkIMHtmlToolbar *toolbar) | |
311 { | |
312 if (toolbar->link_dialog != NULL) | |
313 { | |
314 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); | |
315 toolbar->link_dialog = NULL; | |
316 } | |
317 } | |
318 | |
319 static void | |
320 do_insert_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | |
321 { | |
322 const char *url, *description; | |
323 | |
324 url = gaim_request_fields_get_string(fields, "url"); | |
325 description = gaim_request_fields_get_string(fields, "description"); | |
326 | |
327 if (description == NULL) | |
328 description = url; | |
329 | |
330 gtk_imhtml_insert_link(GTK_IMHTML(toolbar->imhtml), url, description); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
331 |
8317 | 332 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); |
333 | |
334 toolbar->link_dialog = NULL; | |
335 } | |
336 | |
337 static void | |
338 insert_link_cb(GtkWidget *w, GtkIMHtmlToolbar *toolbar) | |
339 { | |
340 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))) { | |
341 GaimRequestFields *fields; | |
342 GaimRequestFieldGroup *group; | |
343 GaimRequestField *field; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
344 |
8317 | 345 fields = gaim_request_fields_new(); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
346 |
8317 | 347 group = gaim_request_field_group_new(NULL); |
348 gaim_request_fields_add_group(fields, group); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
349 |
8317 | 350 field = gaim_request_field_string_new("url", _("_URL"), NULL, FALSE); |
351 gaim_request_field_set_required(field, TRUE); | |
352 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
353 |
8317 | 354 field = gaim_request_field_string_new("description", _("_Description"), |
355 NULL, FALSE); | |
356 gaim_request_field_group_add_field(group, field); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
357 |
8317 | 358 toolbar->link_dialog = |
359 gaim_request_fields(toolbar, _("Insert Link"), | |
360 NULL, | |
361 _("Please enter the URL and description of the " | |
362 "link that you want to insert. The description " | |
363 "is optional."), | |
364 fields, | |
365 _("_Insert"), G_CALLBACK(do_insert_link_cb), | |
366 _("Cancel"), G_CALLBACK(cancel_link_cb), | |
367 toolbar); | |
8322
ffb601c6b833
[gaim-migrate @ 9046]
Christian Hammond <chipx86@chipx86.com>
parents:
8321
diff
changeset
|
368 } else { |
8317 | 369 close_link_dialog(toolbar); |
370 } | |
371 gtk_widget_grab_focus(toolbar->imhtml); | |
372 } | |
373 | |
374 | |
375 static void | |
376 do_insert_image_cb(GtkWidget *widget, int resp, GtkIMHtmlToolbar *toolbar) | |
377 { | |
378 char *name, *filename; | |
379 char *buf, *filedata; | |
380 size_t size; | |
381 GError *error = NULL; | |
382 int id; | |
383 | |
384 if (resp != GTK_RESPONSE_OK) { | |
385 //set_toggle(toolbar->image, FALSE); | |
386 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
387 return; | |
388 } | |
389 | |
390 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); | |
391 | |
392 if (!name) { | |
393 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
394 return; | |
395 } | |
396 | |
397 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) { | |
398 g_free(name); | |
399 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
400 return; | |
401 } | |
402 | |
403 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); | |
404 | |
405 if (!g_file_get_contents(name, &filedata, &size, &error)) { | |
406 gaim_notify_error(NULL, NULL, error->message, NULL); | |
407 | |
408 g_error_free(error); | |
409 g_free(name); | |
410 | |
411 return; | |
412 } | |
413 | |
414 filename = name; | |
415 while (strchr(filename, '/')) | |
416 filename = strchr(filename, '/') + 1; | |
417 | |
418 id = gaim_imgstore_add(filedata, size, filename); | |
419 g_free(filedata); | |
420 | |
421 if (!id) { | |
422 buf = g_strdup_printf(_("Failed to store image: %s\n"), name); | |
423 gaim_notify_error(NULL, NULL, buf, NULL); | |
424 | |
425 g_free(buf); | |
426 g_free(name); | |
427 | |
428 return; | |
429 } | |
430 | |
431 //im->images = g_slist_append(im->images, GINT_TO_POINTER(id)); | |
432 | |
433 /*buf = g_strdup_printf("<IMG ID=\"%d\" SRC=\"file://%s\">", id, filename); | |
434 gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(gtkconv->entry_buffer), buf, -1); | |
435 g_free(buf); | |
436 */ | |
437 g_free(name); | |
438 } | |
439 | |
440 | |
441 static void | |
442 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar) | |
443 { | |
444 char buf[BUF_LONG]; | |
445 GtkWidget *window; | |
446 | |
447 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { | |
448 window = gtk_file_selection_new(_("Insert Image")); | |
449 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir()); | |
450 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); | |
451 | |
452 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK); | |
453 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)), | |
454 "response", G_CALLBACK(do_insert_image_cb), toolbar); | |
455 | |
456 gtk_widget_show(window); | |
457 toolbar->image_dialog = window; | |
458 } else { | |
459 gtk_widget_destroy(toolbar->image_dialog); | |
460 toolbar->image_dialog = NULL; | |
461 } | |
462 gtk_widget_grab_focus(toolbar->imhtml); | |
463 } | |
464 | |
465 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
466 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
467 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
468 GtkIMHtmlToolbar *toolbar) |
8317 | 469 { |
470 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
|
471 |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
472 if (toolbar->smiley_dialog != NULL) |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
473 { |
8317 | 474 gtk_widget_destroy(toolbar->smiley_dialog); |
475 toolbar->smiley_dialog = NULL; | |
476 } | |
477 } | |
478 | |
479 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
480 static void |
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
481 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
8317 | 482 { |
483 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | |
484 //GaimPlugin *proto = gaim_find_prpl(gaim_account_get_protocol_id(gaim_conversation_get_account(c))); | |
485 | |
486 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), NULL, smiley_text); //proto->info->name, smiley_text); | |
487 | |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
488 close_smiley_dialog(NULL, NULL, toolbar); |
8317 | 489 } |
490 | |
491 | |
492 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *table, int row, int col, char *filename, char *face) | |
493 { | |
494 GtkWidget *image; | |
495 GtkWidget *button; | |
496 | |
497 image = gtk_image_new_from_file(filename); | |
498 button = gtk_button_new(); | |
499 gtk_container_add(GTK_CONTAINER(button), image); | |
500 g_object_set_data(G_OBJECT(button), "smiley_text", face); | |
501 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | |
502 | |
503 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | |
504 | |
505 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
506 | |
507 /* these look really weird with borders */ | |
508 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
509 | |
510 gtk_widget_show(button); | |
511 } | |
512 | |
513 | |
514 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | |
515 while(list) { | |
516 GtkIMHtmlSmiley *cur = list->data; | |
517 if(!strcmp(cur->file, smiley->file)) | |
518 return FALSE; | |
519 list = list->next; | |
520 } | |
521 return TRUE; | |
522 } | |
523 | |
524 | |
525 static void | |
526 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) | |
527 { | |
528 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley))) { | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
529 |
8317 | 530 GtkWidget *dialog; |
531 GtkWidget *smiley_table = NULL; | |
532 GSList *smileys, *unique_smileys = NULL; | |
533 int width; | |
534 int row = 0, col = 0; | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
535 |
8317 | 536 if (toolbar->smiley_dialog) { |
537 gtk_widget_grab_focus(toolbar->imhtml); | |
538 return; | |
539 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
540 |
8317 | 541 /* |
542 if(c->account) | |
543 smileys = get_proto_smileys( | |
544 gaim_account_get_protocol_id(gaim_conversation_get_account(c))); | |
545 else | |
546 */ | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
547 |
8317 | 548 smileys = get_proto_smileys(GAIM_PROTO_DEFAULT); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
549 |
8317 | 550 while(smileys) { |
551 GtkIMHtmlSmiley *smiley = smileys->data; | |
552 if(!smiley->hidden) { | |
553 if(smiley_is_unique(unique_smileys, smiley)) | |
554 unique_smileys = g_slist_append(unique_smileys, smiley); | |
555 } | |
556 smileys = smileys->next; | |
557 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
558 |
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
559 |
8317 | 560 width = floor(sqrt(g_slist_length(unique_smileys))); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
561 |
8317 | 562 GAIM_DIALOG(dialog); |
563 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); | |
564 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | |
565 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
|
566 |
8317 | 567 smiley_table = gtk_table_new(width, width, TRUE); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
568 |
8317 | 569 /* pack buttons */ |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
570 |
8317 | 571 while(unique_smileys) { |
572 GtkIMHtmlSmiley *smiley = unique_smileys->data; | |
573 if(!smiley->hidden) { | |
574 add_smiley(toolbar, smiley_table, row, col, smiley->file, smiley->smile); | |
575 if(++col >= width) { | |
576 col = 0; | |
577 row++; | |
578 } | |
579 } | |
580 unique_smileys = unique_smileys->next; | |
581 } | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
582 |
8317 | 583 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
584 |
8317 | 585 gtk_widget_show(smiley_table); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
586 |
8317 | 587 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
588 |
8317 | 589 /* connect signals */ |
590 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | |
591 g_signal_connect(G_OBJECT(dialog), "delete_event", | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
592 G_CALLBACK(close_smiley_dialog), toolbar); |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
593 |
8317 | 594 /* show everything */ |
595 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | |
596 gtk_widget_show_all(dialog); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
597 |
8317 | 598 toolbar->smiley_dialog = dialog; |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
599 |
8317 | 600 } else if (toolbar->smiley_dialog) { |
8320
5c6c8d48946f
[gaim-migrate @ 9044]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
601 close_smiley_dialog(smiley, NULL, toolbar); |
8317 | 602 } |
603 gtk_widget_grab_focus(toolbar->imhtml); | |
604 } | |
605 | |
606 enum { | |
607 LAST_SIGNAL | |
608 }; | |
609 //static guint signals [LAST_SIGNAL] = { 0 }; | |
610 | |
611 static void | |
612 gtk_imhtmltoolbar_finalize (GObject *object) | |
613 { | |
614 /*GtkIMHtml *imhtml = GTK_IMHTML(object); | |
615 GList *scalables; | |
616 | |
617 g_hash_table_destroy(imhtml->smiley_data); | |
618 gtk_smiley_tree_destroy(imhtml->default_smilies); | |
619 gdk_cursor_unref(imhtml->hand_cursor); | |
620 gdk_cursor_unref(imhtml->arrow_cursor); | |
621 gdk_cursor_unref(imhtml->text_cursor); | |
622 if(imhtml->tip_window){ | |
623 gtk_widget_destroy(imhtml->tip_window); | |
624 } | |
625 if(imhtml->tip_timer) | |
626 gtk_timeout_remove(imhtml->tip_timer); | |
627 | |
628 for(scalables = imhtml->scalables; scalables; scalables = scalables->next) { | |
629 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(scalables->data); | |
630 scale->free(scale); | |
631 } | |
632 | |
633 g_list_free(imhtml->scalables); | |
634 G_OBJECT_CLASS(parent_class)->finalize (object);*/ | |
635 } | |
636 | |
637 /* Boring GTK stuff */ | |
638 static void gtk_imhtmltoolbar_class_init (GtkIMHtmlToolbarClass *class) | |
639 { | |
640 GtkObjectClass *object_class; | |
641 GObjectClass *gobject_class; | |
642 object_class = (GtkObjectClass*) class; | |
643 gobject_class = (GObjectClass*) class; | |
644 parent_class = gtk_type_class(GTK_TYPE_VBOX); | |
645 /* signals[URL_CLICKED] = g_signal_new(url_clicked", | |
646 G_TYPE_FROM_CLASS(gobject_class), | |
647 G_SIGNAL_RUN_FIRST, | |
648 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked), | |
649 NULL, | |
650 0, | |
651 g_cclosure_marshal_VOID__POINTER, | |
652 G_TYPE_NONE, 1, | |
653 G_TYPE_POINTER);*/ | |
654 gobject_class->finalize = gtk_imhtmltoolbar_finalize; | |
655 } | |
656 | |
657 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) | |
658 { | |
659 GtkWidget *hbox; | |
660 GtkWidget *button; | |
661 GtkWidget *sep; | |
662 GtkSizeGroup *sg; | |
663 | |
664 toolbar->imhtml = NULL; | |
665 toolbar->font_dialog = NULL; | |
666 toolbar->fgcolor_dialog = NULL; | |
667 toolbar->bgcolor_dialog = NULL; | |
668 toolbar->link_dialog = NULL; | |
669 toolbar->smiley_dialog = NULL; | |
670 toolbar->image_dialog = NULL; | |
671 | |
672 toolbar->tooltips = gtk_tooltips_new(); | |
673 | |
674 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | |
675 | |
676 sep = gtk_hseparator_new(); | |
677 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
678 gtk_widget_show(sep); | |
679 | |
680 hbox = gtk_hbox_new(FALSE, 6); | |
681 gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0); | |
682 | |
683 /* Bold */ | |
684 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); | |
685 gtk_size_group_add_widget(sg, button); | |
686 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
687 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Bold"), NULL); | |
688 | |
689 g_signal_connect(G_OBJECT(button), "clicked", | |
690 G_CALLBACK(do_bold), toolbar); | |
691 | |
692 toolbar->bold = button; | |
693 | |
694 /* Italic */ | |
695 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC); | |
696 gtk_size_group_add_widget(sg, button); | |
697 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
698 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Italic"), NULL); | |
699 | |
700 g_signal_connect(G_OBJECT(button), "clicked", | |
701 G_CALLBACK(do_italic), toolbar); | |
702 | |
703 toolbar->italic = button; | |
704 | |
705 /* Underline */ | |
706 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE); | |
707 gtk_size_group_add_widget(sg, button); | |
708 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
709 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Underline"), NULL); | |
710 | |
711 g_signal_connect(G_OBJECT(button), "clicked", | |
712 G_CALLBACK(do_underline), toolbar); | |
713 | |
714 toolbar->underline = button; | |
715 | |
716 /* Sep */ | |
717 sep = gtk_vseparator_new(); | |
718 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
719 | |
720 /* Increase font size */ | |
721 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_BIGGER); | |
722 gtk_size_group_add_widget(sg, button); | |
723 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
724 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
725 _("Larger font size"), NULL); | |
726 | |
727 g_signal_connect(G_OBJECT(button), "clicked", | |
728 G_CALLBACK(do_big), toolbar); | |
729 | |
730 toolbar->larger_size = button; | |
731 | |
732 /* Decrease font size */ | |
733 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_SMALLER); | |
734 gtk_size_group_add_widget(sg, button); | |
735 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
736 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
737 _("Smaller font size"), NULL); | |
738 | |
739 g_signal_connect(G_OBJECT(button), "clicked", | |
740 G_CALLBACK(do_small), toolbar); | |
741 | |
742 toolbar->smaller_size = button; | |
743 | |
744 /* Sep */ | |
745 sep = gtk_vseparator_new(); | |
746 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
747 | |
748 /* Font Face */ | |
749 | |
750 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_SELECT_FONT); | |
751 gtk_size_group_add_widget(sg, button); | |
752 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
753 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
754 _("Font Face"), NULL); | |
755 | |
756 g_signal_connect(G_OBJECT(button), "clicked", | |
757 G_CALLBACK(toggle_font), toolbar); | |
758 | |
759 toolbar->font = button; | |
760 | |
761 /* Foreground Color */ | |
762 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_FGCOLOR); | |
763 gtk_size_group_add_widget(sg, button); | |
764 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
765 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
766 _("Foreground font color"), NULL); | |
767 | |
768 g_signal_connect(G_OBJECT(button), "clicked", | |
769 G_CALLBACK(toggle_fg_color), toolbar); | |
770 | |
771 toolbar->fgcolor = button; | |
772 | |
773 /* Background Color */ | |
774 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_BGCOLOR); | |
775 gtk_size_group_add_widget(sg, button); | |
776 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
777 gtk_tooltips_set_tip(toolbar->tooltips, button, | |
778 _("Background color"), NULL); | |
779 | |
780 g_signal_connect(G_OBJECT(button), "clicked", | |
781 G_CALLBACK(toggle_bg_color), toolbar); | |
782 | |
783 toolbar->bgcolor = button; | |
784 | |
785 /* Sep */ | |
786 sep = gtk_vseparator_new(); | |
787 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); | |
788 | |
789 /* Insert Link */ | |
790 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK); | |
791 gtk_size_group_add_widget(sg, button); | |
792 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
793 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert link"), NULL); | |
794 g_signal_connect(G_OBJECT(button), "clicked", | |
795 G_CALLBACK(insert_link_cb), toolbar); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
796 |
8317 | 797 toolbar->link = button; |
798 | |
799 /* Insert IM Image */ | |
800 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE); | |
801 gtk_size_group_add_widget(sg, button); | |
802 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
803 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert image"), NULL); | |
804 | |
805 g_signal_connect(G_OBJECT(button), "clicked", | |
806 G_CALLBACK(insert_image_cb), toolbar); | |
807 | |
808 toolbar->image = button; | |
809 | |
810 /* Insert Smiley */ | |
811 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); | |
812 gtk_size_group_add_widget(sg, button); | |
813 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
814 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); | |
815 | |
816 g_signal_connect(G_OBJECT(button), "clicked", | |
817 G_CALLBACK(insert_smiley_cb), toolbar); | |
818 | |
819 toolbar->smiley = button; | |
820 | |
821 | |
822 sep = gtk_hseparator_new(); | |
823 gtk_box_pack_start(GTK_BOX(toolbar), sep, FALSE, FALSE, 0); | |
824 gtk_widget_show(sep); | |
825 | |
826 | |
827 //if (!gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar")) | |
828 // gtk_widget_hide(vbox); | |
829 | |
830 gtk_widget_show_all(hbox); | |
831 } | |
832 | |
833 GtkWidget *gtk_imhtmltoolbar_new() | |
834 { | |
835 return GTK_WIDGET(g_object_new(gtk_imhtmltoolbar_get_type(), NULL)); | |
836 } | |
837 | |
838 GType gtk_imhtmltoolbar_get_type() | |
839 { | |
840 static GType imhtmltoolbar_type = 0; | |
841 | |
842 if (!imhtmltoolbar_type) { | |
843 static const GTypeInfo imhtmltoolbar_info = { | |
844 sizeof(GtkIMHtmlToolbarClass), | |
845 NULL, | |
846 NULL, | |
847 (GClassInitFunc) gtk_imhtmltoolbar_class_init, | |
848 NULL, | |
849 NULL, | |
850 sizeof (GtkIMHtmlToolbar), | |
851 0, | |
852 (GInstanceInitFunc) gtk_imhtmltoolbar_init | |
853 }; | |
854 | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
855 imhtmltoolbar_type = g_type_register_static(GTK_TYPE_VBOX, |
8317 | 856 "GtkIMHtmlToolbar", &imhtmltoolbar_info, 0); |
857 } | |
858 | |
859 return imhtmltoolbar_type; | |
860 } | |
861 | |
862 | |
8324
2df8b01af581
[gaim-migrate @ 9048]
Christian Hammond <chipx86@chipx86.com>
parents:
8322
diff
changeset
|
863 void gtk_imhtmltoolbar_attach(GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) |
8317 | 864 { |
8325
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
865 g_return_if_fail(toolbar != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
866 g_return_if_fail(GTK_IS_IMHTMLTOOLBAR(toolbar)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
867 g_return_if_fail(imhtml != NULL); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
868 g_return_if_fail(GTK_IS_IMHTML(imhtml)); |
415283e39bce
[gaim-migrate @ 9049]
Christian Hammond <chipx86@chipx86.com>
parents:
8324
diff
changeset
|
869 |
8317 | 870 toolbar->imhtml = imhtml; |
871 } |