Mercurial > pidgin.yaz
comparison src/gtkimhtmltoolbar.c @ 8324:2df8b01af581
[gaim-migrate @ 9048]
Toolbar dialog signals look to actually be fixed now. No more segfaults or
leaked memory (well, not from the dialogs, anyway).
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Mon, 23 Feb 2004 23:04:19 +0000 |
parents | ffb601c6b833 |
children | 415283e39bce |
comparison
equal
deleted
inserted
replaced
8323:4786adbe8720 | 8324:2df8b01af581 |
---|---|
75 gtk_widget_grab_focus(toolbar->imhtml); | 75 gtk_widget_grab_focus(toolbar->imhtml); |
76 } | 76 } |
77 | 77 |
78 | 78 |
79 | 79 |
80 static void toolbar_cancel_font(GtkWidget *widget, GdkEvent *event, | 80 static void |
81 GtkIMHtmlToolbar *toolbar) | 81 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, |
82 { | 82 GtkIMHtmlToolbar *toolbar) |
83 | 83 { |
84 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->font), FALSE); | 84 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->font), FALSE); |
85 | 85 |
86 if (toolbar->font_dialog) { | 86 if (toolbar->font_dialog != NULL) |
87 { | |
87 gtk_widget_destroy(toolbar->font_dialog); | 88 gtk_widget_destroy(toolbar->font_dialog); |
88 toolbar->font_dialog = NULL; | 89 toolbar->font_dialog = NULL; |
89 } | 90 } |
91 } | |
92 | |
93 static void | |
94 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | |
95 { | |
96 destroy_toolbar_font(widget, NULL, toolbar); | |
90 } | 97 } |
91 | 98 |
92 static void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) | 99 static void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) |
93 { | 100 { |
94 /* this could be expanded to include font size, weight, etc. | 101 /* this could be expanded to include font size, weight, etc. |
105 | 112 |
106 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname); | 113 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname); |
107 | 114 |
108 g_free(fontname); | 115 g_free(fontname); |
109 | 116 |
110 toolbar_cancel_font(NULL, NULL, toolbar); | 117 cancel_toolbar_font(NULL, toolbar); |
111 } | 118 } |
112 | 119 |
113 static void | 120 static void |
114 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar) | 121 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar) |
115 { | 122 { |
134 DEFAULT_FONT_FACE); | 141 DEFAULT_FONT_FACE); |
135 } | 142 } |
136 */ | 143 */ |
137 | 144 |
138 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", | 145 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
139 G_CALLBACK(toolbar_cancel_font), toolbar); | 146 G_CALLBACK(destroy_toolbar_font), toolbar); |
140 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), | 147 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", |
141 "clicked", G_CALLBACK(apply_font), toolbar->font_dialog); | 148 G_CALLBACK(apply_font), toolbar->font_dialog); |
142 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), | 149 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", |
143 "clicked", G_CALLBACK(toolbar_cancel_font), toolbar); | 150 G_CALLBACK(cancel_toolbar_font), toolbar); |
144 | |
145 | 151 |
146 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); | 152 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
147 } else { | 153 } else { |
148 toolbar_cancel_font(NULL, NULL, toolbar); | 154 cancel_toolbar_font(NULL, toolbar); |
149 } | 155 } |
150 gtk_widget_grab_focus(toolbar->imhtml); | 156 gtk_widget_grab_focus(toolbar->imhtml); |
151 } | 157 } |
152 | 158 |
153 static void cancel_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, | 159 static void |
160 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, | |
161 GtkIMHtmlToolbar *toolbar) | |
162 { | |
163 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); | |
164 | |
165 if (toolbar->fgcolor_dialog != NULL) | |
166 { | |
167 gtk_widget_destroy(toolbar->fgcolor_dialog); | |
168 toolbar->fgcolor_dialog = NULL; | |
169 } | |
170 } | |
171 | |
172 static void cancel_toolbar_fgcolor(GtkWidget *widget, | |
154 GtkIMHtmlToolbar *toolbar) | 173 GtkIMHtmlToolbar *toolbar) |
155 { | 174 { |
156 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); | 175 destroy_toolbar_fgcolor(widget, NULL, toolbar); |
157 gtk_widget_destroy(toolbar->fgcolor_dialog); | |
158 toolbar->fgcolor_dialog = NULL; | |
159 } | 176 } |
160 | 177 |
161 static void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | 178 static void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) |
162 { | 179 { |
163 GdkColor text_color; | 180 GdkColor text_color; |
171 text_color.green / 256, | 188 text_color.green / 256, |
172 text_color.blue / 256); | 189 text_color.blue / 256); |
173 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); | 190 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); |
174 | 191 |
175 g_free(open_tag); | 192 g_free(open_tag); |
176 cancel_toolbar_fgcolor(NULL, NULL, toolbar); | 193 cancel_toolbar_fgcolor(NULL, toolbar); |
177 } | 194 } |
178 | 195 |
179 static void | 196 static void |
180 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | 197 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) |
181 { | 198 { |
191 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; | 208 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; |
192 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); | 209 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
193 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | 210 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); |
194 | 211 |
195 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", | 212 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
196 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); | 213 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
197 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), | 214 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", |
198 "clicked", G_CALLBACK(do_fgcolor), colorsel); | 215 G_CALLBACK(do_fgcolor), colorsel); |
199 g_signal_connect(G_OBJECT | 216 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", |
200 (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), | 217 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
201 "clicked", G_CALLBACK(cancel_toolbar_fgcolor), toolbar); | |
202 | 218 |
203 } | 219 } |
204 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); | 220 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
205 } else if (toolbar->fgcolor_dialog != NULL) { | 221 } else if (toolbar->fgcolor_dialog != NULL) { |
206 cancel_toolbar_fgcolor(color, NULL, toolbar); | 222 cancel_toolbar_fgcolor(color, toolbar); |
207 } else { | 223 } else { |
208 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | 224 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); |
209 } | 225 } |
210 gtk_widget_grab_focus(toolbar->imhtml); | 226 gtk_widget_grab_focus(toolbar->imhtml); |
211 } | 227 } |
212 | 228 |
213 static void cancel_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, | 229 static void |
214 GtkIMHtmlToolbar *toolbar) | 230 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, |
231 GtkIMHtmlToolbar *toolbar) | |
215 { | 232 { |
216 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->bgcolor), FALSE); | 233 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->bgcolor), FALSE); |
217 gtk_widget_destroy(toolbar->bgcolor_dialog); | 234 |
218 toolbar->bgcolor_dialog = NULL; | 235 if (toolbar->bgcolor_dialog != NULL) |
236 { | |
237 gtk_widget_destroy(toolbar->bgcolor_dialog); | |
238 toolbar->bgcolor_dialog = NULL; | |
239 } | |
240 } | |
241 | |
242 static void | |
243 cancel_toolbar_bgcolor(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | |
244 { | |
245 destroy_toolbar_bgcolor(widget, NULL, toolbar); | |
219 } | 246 } |
220 | 247 |
221 static void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) | 248 static void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) |
222 { | 249 { |
223 GdkColor text_color; | 250 GdkColor text_color; |
231 text_color.green / 256, | 258 text_color.green / 256, |
232 text_color.blue / 256); | 259 text_color.blue / 256); |
233 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); | 260 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); |
234 | 261 |
235 g_free(open_tag); | 262 g_free(open_tag); |
236 cancel_toolbar_bgcolor(NULL, NULL, toolbar); | 263 cancel_toolbar_bgcolor(NULL, toolbar); |
237 } | 264 } |
238 | 265 |
239 static void | 266 static void |
240 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) | 267 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) |
241 { | 268 { |
251 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; | 278 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
252 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); | 279 //gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
253 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); | 280 g_object_set_data(G_OBJECT(colorsel), "gaim_toolbar", toolbar); |
254 | 281 |
255 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", | 282 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
256 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); | 283 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
257 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), | 284 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", |
258 "clicked", G_CALLBACK(do_bgcolor), colorsel); | 285 G_CALLBACK(do_bgcolor), colorsel); |
259 g_signal_connect(G_OBJECT | 286 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", |
260 (GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), | 287 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
261 "clicked", G_CALLBACK(cancel_toolbar_bgcolor), toolbar); | |
262 | 288 |
263 } | 289 } |
264 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); | 290 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
265 } else if (toolbar->bgcolor_dialog != NULL) { | 291 } else if (toolbar->bgcolor_dialog != NULL) { |
266 cancel_toolbar_bgcolor(color, NULL, toolbar); | 292 cancel_toolbar_bgcolor(color, toolbar); |
267 } else { | 293 } else { |
268 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); | 294 //gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); |
269 } | 295 } |
270 gtk_widget_grab_focus(toolbar->imhtml); | 296 gtk_widget_grab_focus(toolbar->imhtml); |
271 } | 297 } |
272 | 298 |
273 static void | 299 static void |
274 cancel_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) | 300 cancel_link_cb(GtkIMHtmlToolbar *toolbar, GaimRequestFields *fields) |
275 { | 301 { |
276 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); | 302 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), FALSE); |
303 | |
277 toolbar->link_dialog = NULL; | 304 toolbar->link_dialog = NULL; |
278 } | 305 } |
279 | 306 |
280 static void | 307 static void |
281 close_link_dialog(GtkIMHtmlToolbar *toolbar) | 308 close_link_dialog(GtkIMHtmlToolbar *toolbar) |
432 } | 459 } |
433 gtk_widget_grab_focus(toolbar->imhtml); | 460 gtk_widget_grab_focus(toolbar->imhtml); |
434 } | 461 } |
435 | 462 |
436 | 463 |
437 void close_smiley_dialog(GtkWidget *widget, GdkEvent *event, | 464 static void |
438 GtkIMHtmlToolbar *toolbar) | 465 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, |
466 GtkIMHtmlToolbar *toolbar) | |
439 { | 467 { |
440 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); | 468 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); |
441 | 469 |
442 if (toolbar->smiley_dialog) { | 470 if (toolbar->smiley_dialog != NULL) |
471 { | |
443 gtk_widget_destroy(toolbar->smiley_dialog); | 472 gtk_widget_destroy(toolbar->smiley_dialog); |
444 toolbar->smiley_dialog = NULL; | 473 toolbar->smiley_dialog = NULL; |
445 } | 474 } |
446 } | 475 } |
447 | 476 |
448 | 477 |
449 void insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | 478 static void |
479 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | |
450 { | 480 { |
451 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | 481 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); |
452 //GaimPlugin *proto = gaim_find_prpl(gaim_account_get_protocol_id(gaim_conversation_get_account(c))); | 482 //GaimPlugin *proto = gaim_find_prpl(gaim_account_get_protocol_id(gaim_conversation_get_account(c))); |
453 | 483 |
454 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), NULL, smiley_text); //proto->info->name, smiley_text); | 484 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), NULL, smiley_text); //proto->info->name, smiley_text); |
555 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); | 585 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
556 | 586 |
557 /* connect signals */ | 587 /* connect signals */ |
558 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | 588 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); |
559 g_signal_connect(G_OBJECT(dialog), "delete_event", | 589 g_signal_connect(G_OBJECT(dialog), "delete_event", |
560 G_CALLBACK(close_smiley_dialog), toolbar); | 590 G_CALLBACK(close_smiley_dialog), toolbar); |
561 | 591 |
562 /* show everything */ | 592 /* show everything */ |
563 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | 593 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); |
564 gtk_widget_show_all(dialog); | 594 gtk_widget_show_all(dialog); |
565 | 595 |
826 | 856 |
827 return imhtmltoolbar_type; | 857 return imhtmltoolbar_type; |
828 } | 858 } |
829 | 859 |
830 | 860 |
831 void gtk_imhtmltoolbar_attach (GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) | 861 void gtk_imhtmltoolbar_attach(GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml) |
832 { | 862 { |
833 toolbar->imhtml = imhtml; | 863 toolbar->imhtml = imhtml; |
834 } | 864 } |