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 }