comparison src/gtkconv.c @ 8317:6f549c1d0829

[gaim-migrate @ 9041] Because I won't be able to work on this until late this week at the earliest, here's GtkIMHtmlToolbar. It's a composite widget that attaches to an editable gtkimhtml and controls all the formatting with ease. All one has to do to get a formattable, editable, gtkimhtml now is to replace a gtktextview with a gtkimhtml (you can even leave all the other calls that control it as gtkimhtml descends from gtktextview) throw one of these toolbars in there and gtk_imhtml_toolbar_attach it to the gtkimhtml. That's what I did in the New Away Message dialog. This would also be nice in gtkrequest.c and gtkpounce.c. Of course, this isn't done and there's a ton of hacky commented out old code in there. Things like keyboard shortcut preferences don't currently work and there's a lot of things I want to move around yet. However, if anyone feels inspired to work on it before I get back to it feel free. Maybe you can IM me beforehand or something. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Mon, 23 Feb 2004 21:18:27 +0000
parents 84ec38c3efcc
children a2c5537a814b
comparison
equal deleted inserted replaced
8316:cf84056fed27 8317:6f549c1d0829
50 50
51 #include "dnd-hints.h" 51 #include "dnd-hints.h"
52 #include "gtkblist.h" 52 #include "gtkblist.h"
53 #include "gtkconv.h" 53 #include "gtkconv.h"
54 #include "gtkimhtml.h" 54 #include "gtkimhtml.h"
55 #include "gtkimhtmltoolbar.h"
55 #include "gtklog.h" 56 #include "gtklog.h"
56 #include "gtkpounce.h" 57 #include "gtkpounce.h"
57 #include "gtkprivacy.h" 58 #include "gtkprivacy.h"
58 #include "gtkutils.h" 59 #include "gtkutils.h"
59 #include "stock.h" 60 #include "stock.h"
121 } InviteBuddyInfo; 122 } InviteBuddyInfo;
122 123
123 static GtkWidget *invite_dialog = NULL; 124 static GtkWidget *invite_dialog = NULL;
124 125
125 /* Prototypes. <-- because Paco-Paco hates this comment. */ 126 /* Prototypes. <-- because Paco-Paco hates this comment. */
126 static void set_toggle(GtkWidget *tb, gboolean active);
127 static void do_bold(GtkWidget *bold, GaimGtkConversation *gtkconv);
128 static void do_italic(GtkWidget *italic, GaimGtkConversation *gtkconv);
129 static void do_underline(GtkWidget *underline, GaimGtkConversation *gtkconv);
130 static void do_small(GtkWidget *smalltb, GaimGtkConversation *gtkconv);
131 static void do_big(GtkWidget *large, GaimGtkConversation *gtkconv);
132 static void toggle_font(GtkWidget *font, GaimConversation *conv);
133 static void toggle_fg_color(GtkWidget *color, GaimConversation *conv);
134 static void toggle_bg_color(GtkWidget *color, GaimConversation *conv);
135 static void got_typing_keypress(GaimConversation *conv, gboolean first); 127 static void got_typing_keypress(GaimConversation *conv, gboolean first);
136 static GList *generate_invite_user_names(GaimConnection *gc); 128 static GList *generate_invite_user_names(GaimConnection *gc);
137 static void add_chat_buddy_common(GaimConversation *conv, 129 static void add_chat_buddy_common(GaimConversation *conv,
138 const char *name, int pos); 130 const char *name, int pos);
139 static void tab_complete(GaimConversation *conv); 131 static void tab_complete(GaimConversation *conv);
189 } 181 }
190 else 182 else
191 do_save_convo(wid); 183 do_save_convo(wid);
192 } 184 }
193 185
194 static void
195 do_insert_image_cb(GtkWidget *widget, int resp, gpointer data)
196 {
197 GaimConversation *conv = data;
198 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
199 GaimConvIm *im = GAIM_CONV_IM(conv);
200 char *name, *filename;
201 char *buf, *filedata;
202 size_t size;
203 GError *error = NULL;
204 int id;
205
206 if (resp != GTK_RESPONSE_OK) {
207 set_toggle(gtkconv->toolbar.image, FALSE);
208 return;
209 }
210
211 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
212
213 if (!name) {
214 set_toggle(gtkconv->toolbar.image, FALSE);
215 return;
216 }
217
218 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) {
219 g_free(name);
220 set_toggle(gtkconv->toolbar.image, FALSE);
221 return;
222 }
223
224 set_toggle(gtkconv->toolbar.image, FALSE);
225
226 if (!g_file_get_contents(name, &filedata, &size, &error)) {
227 gaim_notify_error(NULL, NULL, error->message, NULL);
228
229 g_error_free(error);
230 g_free(name);
231
232 return;
233 }
234
235 filename = name;
236 while (strchr(filename, '/'))
237 filename = strchr(filename, '/') + 1;
238
239 id = gaim_imgstore_add(filedata, size, filename);
240 g_free(filedata);
241
242 if (!id) {
243 buf = g_strdup_printf(_("Failed to store image: %s\n"), name);
244 gaim_notify_error(NULL, NULL, buf, NULL);
245
246 g_free(buf);
247 g_free(name);
248
249 return;
250 }
251
252 im->images = g_slist_append(im->images, GINT_TO_POINTER(id));
253
254 buf = g_strdup_printf("<IMG ID=\"%d\" SRC=\"file://%s\">", id, filename);
255 gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(gtkconv->entry_buffer), buf, -1);
256 g_free(buf);
257
258 g_free(name);
259 }
260 186
261 static gint 187 static gint
262 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d) 188 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d)
263 { 189 {
264 GaimConvWindow *win = (GaimConvWindow *)d; 190 GaimConvWindow *win = (GaimConvWindow *)d;
282 static void 208 static void
283 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state) 209 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state)
284 { 210 {
285 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) 211 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
286 gtk_widget_set_state(widget, GTK_STATE_NORMAL); 212 gtk_widget_set_state(widget, GTK_STATE_NORMAL);
287 }
288
289 static void
290 insert_image_cb(GtkWidget *save, GaimConversation *conv)
291 {
292 GaimGtkConversation *gtkconv;
293 char buf[BUF_LONG];
294 GtkWidget *window;
295
296 gtkconv = GAIM_GTK_CONVERSATION(conv);
297
298 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))) {
299 window = gtk_file_selection_new(_("Insert Image"));
300 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir());
301 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
302
303 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK);
304 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)),
305 "response", G_CALLBACK(do_insert_image_cb), conv);
306
307 gtk_widget_show(window);
308 gtkconv->dialogs.image = window;
309 } else {
310 gtk_widget_destroy(gtkconv->dialogs.image);
311 gtkconv->dialogs.image = NULL;
312 }
313 }
314
315 static void
316 do_insert_link_cb(GaimConversation *conv, GaimRequestFields *fields)
317 {
318 GaimGtkConversation *gtkconv;
319 const char *url, *description;
320
321 gtkconv = GAIM_GTK_CONVERSATION(conv);
322
323 url = gaim_request_fields_get_string(fields, "url");
324 description = gaim_request_fields_get_string(fields, "description");
325
326 if (description == NULL)
327 description = url;
328
329 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry), url, description);
330 gaim_gtk_advance_past(gtkconv, "<A HREF>", "</A>");
331
332 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link),
333 FALSE);
334
335 gtkconv->dialogs.link = NULL;
336 }
337
338 static void
339 cancel_link_cb(GaimConversation *conv, GaimRequestFields *fields)
340 {
341 GAIM_GTK_CONVERSATION(conv)->dialogs.link = NULL;
342 }
343
344 static void
345 show_link_dialog(GaimConversation *conv)
346 {
347 GaimGtkConversation *gtkconv;
348 GaimRequestFields *fields;
349 GaimRequestFieldGroup *group;
350 GaimRequestField *field;
351
352 gtkconv = GAIM_GTK_CONVERSATION(conv);
353
354 fields = gaim_request_fields_new();
355
356 group = gaim_request_field_group_new(NULL);
357 gaim_request_fields_add_group(fields, group);
358
359 field = gaim_request_field_string_new("url", _("_URL"), NULL, FALSE);
360 gaim_request_field_set_required(field, TRUE);
361 gaim_request_field_group_add_field(group, field);
362
363 field = gaim_request_field_string_new("description", _("_Description"),
364 NULL, FALSE);
365 gaim_request_field_group_add_field(group, field);
366
367 gtkconv->dialogs.link =
368 gaim_request_fields(conv, _("Insert Link"),
369 NULL,
370 _("Please enter the URL and description of the "
371 "link that you want to insert. The description "
372 "is optional."),
373 fields,
374 _("_Insert"), G_CALLBACK(do_insert_link_cb),
375 _("Cancel"), G_CALLBACK(cancel_link_cb),
376 conv);
377 }
378
379 static void
380 close_link_dialog(GaimConversation *conv)
381 {
382 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
383
384 if (gtkconv->dialogs.link != NULL)
385 {
386 gaim_request_close(GAIM_REQUEST_FIELDS, gtkconv->dialogs.link);
387
388 gtkconv->dialogs.link = NULL;
389 }
390 }
391
392 static void
393 insert_link_cb(GtkWidget *w, GaimConversation *conv)
394 {
395 GaimGtkConversation *gtkconv;
396
397 gtkconv = GAIM_GTK_CONVERSATION(conv);
398
399 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link)))
400 show_link_dialog(conv);
401 else
402 close_link_dialog(conv);
403
404 gtk_widget_grab_focus(gtkconv->entry);
405 }
406
407 static void
408 insert_smiley_cb(GtkWidget *smiley, GaimConversation *conv)
409 {
410 GaimGtkConversation *gtkconv;
411
412 gtkconv = GAIM_GTK_CONVERSATION(conv);
413
414 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley)))
415 show_smiley_dialog(conv, smiley);
416 else if (gtkconv->dialogs.smiley)
417 close_smiley_dialog(smiley, conv);
418
419 gtk_widget_grab_focus(gtkconv->entry);
420 } 213 }
421 214
422 static void default_formatize(GaimConversation *conv) { 215 static void default_formatize(GaimConversation *conv) {
423 GaimGtkConversation *c = GAIM_GTK_CONVERSATION(conv); 216 GaimGtkConversation *c = GAIM_GTK_CONVERSATION(conv);
424 GaimConnection *gc = gaim_conversation_get_gc(conv); 217 GaimConnection *gc = gaim_conversation_get_gc(conv);
883 conv = gaim_conv_window_get_active_conversation(win); 676 conv = gaim_conv_window_get_active_conversation(win);
884 677
885 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv), 678 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv),
886 gaim_conversation_get_name(conv), NULL); 679 gaim_conversation_get_name(conv), NULL);
887 } 680 }
888 681 /*
889 static void 682 static void
890 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) 683 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget)
891 { 684 {
892 GaimConvWindow *win = (GaimConvWindow *)data; 685 GaimConvWindow *win = (GaimConvWindow *)data;
893 GaimConversation *conv; 686 GaimConversation *conv;
909 gtkconv = GAIM_GTK_CONVERSATION(gaim_conv_window_get_active_conversation(win)); 702 gtkconv = GAIM_GTK_CONVERSATION(gaim_conv_window_get_active_conversation(win));
910 703
911 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image), 704 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image),
912 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))); 705 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image)));
913 } 706 }
914 707 */
915 static void 708 static void
916 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) 709 menu_alias_cb(gpointer data, guint action, GtkWidget *widget)
917 { 710 {
918 GaimConvWindow *win = (GaimConvWindow *)data; 711 GaimConvWindow *win = (GaimConvWindow *)data;
919 GaimConversation *conv; 712 GaimConversation *conv;
1033 826
1034 gtkconv->show_formatting_toolbar = 827 gtkconv->show_formatting_toolbar =
1035 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); 828 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
1036 829
1037 if (gtkconv->show_formatting_toolbar) 830 if (gtkconv->show_formatting_toolbar)
1038 gtk_widget_show(gtkconv->toolbar.toolbar); 831 gtk_widget_show(gtkconv->toolbar);
1039 else 832 else
1040 gtk_widget_hide(gtkconv->toolbar.toolbar); 833 gtk_widget_hide(gtkconv->toolbar);
1041 } 834 }
1042 835
1043 static void 836 static void
1044 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) 837 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget)
1045 { 838 {
1530 return TRUE; 1323 return TRUE;
1531 break; 1324 break;
1532 1325
1533 } /* End of switch */ 1326 } /* End of switch */
1534 1327
1535 if (gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")) { 1328 /* if (gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")) {
1536 switch (event->keyval) { 1329 switch (event->keyval) {
1537 case 'b': /* ctrl-b is GDK_Left, which moves backwards. */ 1330
1538 case 'B': 1331
1539 set_toggle(gtkconv->toolbar.bold,
1540 !gtk_toggle_button_get_active(
1541 GTK_TOGGLE_BUTTON(gtkconv->toolbar.bold)));
1542
1543 return TRUE;
1544 break;
1545
1546 case 'f':
1547 case 'F':
1548 set_toggle(gtkconv->toolbar.font,
1549 !gtk_toggle_button_get_active(
1550 GTK_TOGGLE_BUTTON(gtkconv->toolbar.font)));
1551
1552 return TRUE;
1553 break;
1554
1555 case 'i':
1556 case 'I':
1557 set_toggle(gtkconv->toolbar.italic,
1558 !gtk_toggle_button_get_active(
1559 GTK_TOGGLE_BUTTON(gtkconv->toolbar.italic)));
1560
1561 return TRUE;
1562 break;
1563
1564 case 'u': /* ctrl-u is GDK_Clear, which clears the line. */
1565 case 'U':
1566 set_toggle(gtkconv->toolbar.underline,
1567 !gtk_toggle_button_get_active(
1568 GTK_TOGGLE_BUTTON(gtkconv->toolbar.underline)));
1569
1570 return TRUE;
1571 break;
1572
1573 case '-':
1574 set_toggle(gtkconv->toolbar.smaller_size,
1575 !gtk_toggle_button_get_active(
1576 GTK_TOGGLE_BUTTON(gtkconv->toolbar.smaller_size)));
1577
1578 return TRUE;
1579 break;
1580
1581 case '=':
1582 case '+':
1583 set_toggle(gtkconv->toolbar.larger_size,
1584 !gtk_toggle_button_get_active(
1585 GTK_TOGGLE_BUTTON(gtkconv->toolbar.larger_size)));
1586
1587 return TRUE;
1588 break;
1589
1590 #if 0
1591 case '0':
1592 set_toggle(gtkconv->toolbar.normal_size,
1593 !gtk_toggle_button_get_active(
1594 GTK_TOGGLE_BUTTON(gtkconv->toolbar.normal_size)));
1595
1596 return TRUE;
1597 break;
1598 #endif
1599 } 1332 }
1600 } /* End of switch */ 1333 } */ /* End of switch */
1601 1334
1602 if (gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")) { 1335 /* if (gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")) {
1603 char buf[7]; 1336 char buf[7];
1604 1337
1605 *buf = '\0'; 1338 *buf = '\0';
1606 1339
1607 switch (event->keyval) { 1340 switch (event->keyval) {
1608 case '1': strcpy(buf, ":-)"); break; 1341
1609 case '2': strcpy(buf, ":-("); break;
1610 case '3': strcpy(buf, ";-)"); break;
1611 case '4': strcpy(buf, ":-P"); break;
1612 case '5': strcpy(buf, "=-O"); break;
1613 case '6': strcpy(buf, ":-*"); break;
1614 case '7': strcpy(buf, ">:o"); break;
1615 case '8': strcpy(buf, "8-)"); break;
1616 case '!': strcpy(buf, ":-$"); break;
1617 case '@': strcpy(buf, ":-!"); break;
1618 case '#': strcpy(buf, ":-["); break;
1619 case '$': strcpy(buf, "O:-)"); break;
1620 case '%': strcpy(buf, ":-/"); break;
1621 case '^': strcpy(buf, ":'("); break;
1622 case '&': strcpy(buf, ":-X"); break;
1623 case '*': strcpy(buf, ":-D"); break;
1624 } 1342 }
1625 1343
1626 if (*buf) { 1344
1627 gtk_imhtml_insert_smiley(GTK_IMHTML(gtkconv->entry), conv->account->protocol_id, buf); 1345 }*/
1628 return TRUE;
1629 }
1630 }
1631 1346
1632 } else 1347 } else
1633 1348
1634 /* If ALT (or whatever) was held down... */ 1349 /* If ALT (or whatever) was held down... */
1635 if (event->state & GDK_MOD1_MASK) { 1350 if (event->state & GDK_MOD1_MASK) {
2474 gtk_widget_show(gtkconv->send); 2189 gtk_widget_show(gtkconv->send);
2475 gtk_widget_show(gtkconv->u.im->warn); 2190 gtk_widget_show(gtkconv->u.im->warn);
2476 gtk_widget_show(gtkconv->u.im->block); 2191 gtk_widget_show(gtkconv->u.im->block);
2477 2192
2478 /* Deal with the toolbar */ 2193 /* Deal with the toolbar */
2479 gtk_widget_show(gtkconv->toolbar.image); 2194 //gtk_widget_show(gtkconv->toolbar.image);
2480 2195
2481 /* Deal with menu items */ 2196 /* Deal with menu items */
2482 gtk_widget_show(gtkwin->menu.view_log); 2197 gtk_widget_show(gtkwin->menu.view_log);
2483 gtk_widget_show(gtkwin->menu.add_pounce); 2198 gtk_widget_show(gtkwin->menu.add_pounce);
2484 gtk_widget_show(gtkwin->menu.get_info); 2199 gtk_widget_show(gtkwin->menu.get_info);
2509 gtk_widget_show(gtkconv->info); 2224 gtk_widget_show(gtkconv->info);
2510 gtk_widget_show(gtkconv->send); 2225 gtk_widget_show(gtkconv->send);
2511 gtk_widget_show(gtkconv->u.chat->invite); 2226 gtk_widget_show(gtkconv->u.chat->invite);
2512 2227
2513 /* Deal with the toolbar */ 2228 /* Deal with the toolbar */
2514 gtk_widget_hide(gtkconv->toolbar.image); 2229 // gtk_widget_hide(gtkconv->toolbar.image);
2515 2230
2516 /* Deal with menu items */ 2231 /* Deal with menu items */
2517 gtk_widget_hide(gtkwin->menu.view_log); 2232 gtk_widget_hide(gtkwin->menu.view_log);
2518 gtk_widget_hide(gtkwin->menu.add_pounce); 2233 gtk_widget_hide(gtkwin->menu.add_pounce);
2519 gtk_widget_hide(gtkwin->menu.get_info); 2234 gtk_widget_hide(gtkwin->menu.get_info);
2564 gtk_widget_set_sensitive(gtkconv->u.chat->invite, 2279 gtk_widget_set_sensitive(gtkconv->u.chat->invite,
2565 (prpl_info->chat_invite != NULL)); 2280 (prpl_info->chat_invite != NULL));
2566 } 2281 }
2567 2282
2568 /* Deal with the toolbar */ 2283 /* Deal with the toolbar */
2569 gtk_widget_set_sensitive(gtkconv->toolbar.link, TRUE); 2284 /*gtk_widget_set_sensitive(gtkconv->toolbar.link, TRUE);
2570 gtk_widget_set_sensitive(gtkconv->toolbar.image, 2285 gtk_widget_set_sensitive(gtkconv->toolbar.image,
2571 (prpl_info->options & OPT_PROTO_IM_IMAGE)); 2286 (prpl_info->options & OPT_PROTO_IM_IMAGE));
2572 gtk_widget_set_sensitive(gtkconv->toolbar.bgcolor, 2287 gtk_widget_set_sensitive(gtkconv->toolbar.bgcolor,
2573 !(gc->flags & GAIM_CONNECTION_NO_BGCOLOR)); 2288 !(gc->flags & GAIM_CONNECTION_NO_BGCOLOR));
2574 2289
2575 /* Deal with menu items */ 2290 /* Deal with menu items
2576 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); 2291 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE);
2577 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); 2292 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE);
2578 gtk_widget_set_sensitive(gtkwin->menu.get_info, (prpl_info->get_info != NULL)); 2293 gtk_widget_set_sensitive(gtkwin->menu.get_info, (prpl_info->get_info != NULL));
2579 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL)); 2294 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL));
2580 gtk_widget_set_sensitive(gtkwin->menu.invite, 2295 gtk_widget_set_sensitive(gtkwin->menu.invite,
2581 (prpl_info->chat_invite != NULL)); 2296 (prpl_info->chat_invite != NULL));
2582 2297 */
2583 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2298 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
2584 if (gaim_find_buddy(gaim_conversation_get_account(conv), 2299 if (gaim_find_buddy(gaim_conversation_get_account(conv),
2585 gaim_conversation_get_name(conv)) == NULL) 2300 gaim_conversation_get_name(conv)) == NULL)
2586 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); 2301 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE);
2587 else 2302 else
2615 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { 2330 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) {
2616 gtk_widget_set_sensitive(gtkconv->u.chat->invite, FALSE); 2331 gtk_widget_set_sensitive(gtkconv->u.chat->invite, FALSE);
2617 } 2332 }
2618 2333
2619 /* Deal with the toolbar */ 2334 /* Deal with the toolbar */
2620 gtk_widget_set_sensitive(gtkconv->toolbar.link, TRUE); 2335 //gtk_widget_set_sensitive(gtkconv->toolbar.link, TRUE);
2621 gtk_widget_set_sensitive(gtkconv->toolbar.image, FALSE); 2336 //gtk_widget_set_sensitive(gtkconv->toolbar.image, FALSE);
2622 2337
2623 /* Then deal with menu items */ 2338 /* Then deal with menu items */
2624 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); 2339 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE);
2625 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); 2340 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE);
2626 gtk_widget_set_sensitive(gtkwin->menu.get_info, FALSE); 2341 gtk_widget_set_sensitive(gtkwin->menu.get_info, FALSE);
2717 } 2432 }
2718 2433
2719 /************************************************************************** 2434 /**************************************************************************
2720 * Utility functions 2435 * Utility functions
2721 **************************************************************************/ 2436 **************************************************************************/
2722 static void
2723 do_bold(GtkWidget *bold, GaimGtkConversation *gtkconv)
2724 {
2725 gtk_imhtml_toggle_bold(GTK_IMHTML(gtkconv->entry));
2726 gtk_widget_grab_focus(gtkconv->entry);
2727 }
2728
2729 static void
2730 do_italic(GtkWidget *italic, GaimGtkConversation *gtkconv)
2731 {
2732 gtk_imhtml_toggle_italic(GTK_IMHTML(gtkconv->entry));
2733 gtk_widget_grab_focus(gtkconv->entry);
2734 }
2735
2736 static void
2737 do_underline(GtkWidget *underline, GaimGtkConversation *gtkconv)
2738 {
2739 gtk_imhtml_toggle_underline(GTK_IMHTML(gtkconv->entry));
2740 gtk_widget_grab_focus(gtkconv->entry);
2741 }
2742
2743 static void
2744 do_small(GtkWidget *smalltb, GaimGtkConversation *gtkconv)
2745 {
2746 gtk_imhtml_font_shrink(GTK_IMHTML(gtkconv->entry));
2747 gtk_widget_grab_focus(gtkconv->entry);
2748 }
2749
2750 static void
2751 do_big(GtkWidget *large, GaimGtkConversation *gtkconv)
2752 {
2753 gtk_imhtml_font_grow(GTK_IMHTML(gtkconv->entry));
2754 gtk_widget_grab_focus(gtkconv->entry);
2755 }
2756
2757 static void
2758 toggle_font(GtkWidget *font, GaimConversation *conv)
2759 {
2760 GaimGtkConversation *gtkconv;
2761
2762 gtkconv = GAIM_GTK_CONVERSATION(conv);
2763
2764 show_font_dialog(conv, font);
2765 }
2766
2767 static void
2768 toggle_fg_color(GtkWidget *color, GaimConversation *conv)
2769 {
2770 GaimGtkConversation *gtkconv;
2771
2772 gtkconv = GAIM_GTK_CONVERSATION(conv);
2773
2774 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color)))
2775 show_fgcolor_dialog(conv, color);
2776 else if (gtkconv->dialogs.fg_color != NULL)
2777 cancel_fgcolor(color, conv);
2778 else
2779 gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>");
2780 }
2781
2782 static void
2783 toggle_bg_color(GtkWidget *color, GaimConversation *conv)
2784 {
2785 GaimGtkConversation *gtkconv;
2786
2787 gtkconv = GAIM_GTK_CONVERSATION(conv);
2788
2789 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color)))
2790 show_bgcolor_dialog(conv, color);
2791 else if (gtkconv->dialogs.bg_color != NULL)
2792 cancel_bgcolor(color, conv);
2793 else
2794 gaim_gtk_advance_past(gtkconv, "<BODY BGCOLOR>", "</BODY>");
2795 }
2796
2797 static void
2798 set_toggle(GtkWidget *tb, gboolean active)
2799 {
2800 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tb), active);
2801 }
2802 2437
2803 static void 2438 static void
2804 got_typing_keypress(GaimConversation *conv, gboolean first) 2439 got_typing_keypress(GaimConversation *conv, gboolean first)
2805 { 2440 {
2806 GaimConvIm *im; 2441 GaimConvIm *im;
3436 { N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0, 3071 { N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0,
3437 "<StockItem>", GTK_STOCK_REMOVE }, 3072 "<StockItem>", GTK_STOCK_REMOVE },
3438 3073
3439 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>" }, 3074 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>" },
3440 3075
3441 { N_("/Conversation/Insert Lin_k..."), NULL, menu_insert_link_cb, 0, 3076 { N_("/Conversation/Insert Lin_k..."), NULL, NULL, 0, //menu_insert_link_cb, 0,
3442 "<StockItem>", GAIM_STOCK_LINK }, 3077 "<StockItem>", GAIM_STOCK_LINK },
3443 { N_("/Conversation/Insert Imag_e..."), NULL, menu_insert_image_cb, 0, 3078 { N_("/Conversation/Insert Imag_e..."), NULL, NULL, 0, //menu_insert_image_cb, 0,
3444 "<StockItem>", GAIM_STOCK_IMAGE }, 3079 "<StockItem>", GAIM_STOCK_IMAGE },
3445 3080
3446 { "/Conversation/sep4", NULL, NULL, 0, "<Separator>" }, 3081 { "/Conversation/sep4", NULL, NULL, 0, "<Separator>" },
3447 3082
3448 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0, 3083 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0,
3736 G_CALLBACK(add_remove_cb), conv); 3371 G_CALLBACK(add_remove_cb), conv);
3737 g_signal_connect(G_OBJECT(gtkconv->send), "clicked", 3372 g_signal_connect(G_OBJECT(gtkconv->send), "clicked",
3738 G_CALLBACK(send_cb), conv); 3373 G_CALLBACK(send_cb), conv);
3739 } 3374 }
3740 3375
3741 static GtkWidget *
3742 build_conv_toolbar(GaimConversation *conv)
3743 {
3744 GaimGtkConversation *gtkconv;
3745 GtkWidget *vbox;
3746 GtkWidget *hbox;
3747 GtkWidget *button;
3748 GtkWidget *sep;
3749 GtkSizeGroup *sg;
3750
3751 gtkconv = GAIM_GTK_CONVERSATION(conv);
3752
3753 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
3754
3755 vbox = gtk_vbox_new(FALSE, 0);
3756 sep = gtk_hseparator_new();
3757 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
3758
3759 hbox = gtk_hbox_new(FALSE, 6);
3760 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
3761
3762 /* Bold */
3763 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD);
3764 gtk_size_group_add_widget(sg, button);
3765 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3766 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Bold"), NULL);
3767
3768 g_signal_connect(G_OBJECT(button), "clicked",
3769 G_CALLBACK(do_bold), gtkconv);
3770
3771 gtkconv->toolbar.bold = button;
3772
3773 /* Italic */
3774 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_ITALIC);
3775 gtk_size_group_add_widget(sg, button);
3776 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3777 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Italic"), NULL);
3778
3779 g_signal_connect(G_OBJECT(button), "clicked",
3780 G_CALLBACK(do_italic), gtkconv);
3781
3782 gtkconv->toolbar.italic = button;
3783
3784 /* Underline */
3785 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_UNDERLINE);
3786 gtk_size_group_add_widget(sg, button);
3787 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3788 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Underline"), NULL);
3789
3790 g_signal_connect(G_OBJECT(button), "clicked",
3791 G_CALLBACK(do_underline), gtkconv);
3792
3793 gtkconv->toolbar.underline = button;
3794
3795 /* Sep */
3796 sep = gtk_vseparator_new();
3797 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0);
3798
3799 /* Increase font size */
3800 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_BIGGER);
3801 gtk_size_group_add_widget(sg, button);
3802 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3803 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3804 _("Larger font size"), NULL);
3805
3806 g_signal_connect(G_OBJECT(button), "clicked",
3807 G_CALLBACK(do_big), gtkconv);
3808
3809 gtkconv->toolbar.larger_size = button;
3810
3811 /* Normal font size
3812 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_NORMAL);
3813 gtk_size_group_add_widget(sg, button);
3814 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3815 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3816 _("Normal font size"), NULL);
3817
3818 g_signal_connect(G_OBJECT(button), "clicked",
3819 G_CALLBACK(do_normal), gtkconv);
3820
3821 gtkconv->toolbar.normal_size = button;
3822 */
3823
3824 /* Decrease font size */
3825 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_TEXT_SMALLER);
3826 gtk_size_group_add_widget(sg, button);
3827 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3828 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3829 _("Smaller font size"), NULL);
3830
3831 g_signal_connect(G_OBJECT(button), "clicked",
3832 G_CALLBACK(do_small), gtkconv);
3833
3834 gtkconv->toolbar.smaller_size = button;
3835
3836 /* Sep */
3837 sep = gtk_vseparator_new();
3838 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0);
3839
3840 /* Font Face */
3841
3842 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_SELECT_FONT);
3843 gtk_size_group_add_widget(sg, button);
3844 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3845 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3846 _("Font Face"), NULL);
3847
3848 g_signal_connect(G_OBJECT(button), "clicked",
3849 G_CALLBACK(toggle_font), conv);
3850
3851 gtkconv->toolbar.font = button;
3852
3853 /* Foreground Color */
3854 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_FGCOLOR);
3855 gtk_size_group_add_widget(sg, button);
3856 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3857 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3858 _("Foreground font color"), NULL);
3859
3860 g_signal_connect(G_OBJECT(button), "clicked",
3861 G_CALLBACK(toggle_fg_color), conv);
3862
3863 gtkconv->toolbar.fgcolor = button;
3864
3865 /* Background Color */
3866 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_BGCOLOR);
3867 gtk_size_group_add_widget(sg, button);
3868 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3869 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3870 _("Background color"), NULL);
3871
3872 g_signal_connect(G_OBJECT(button), "clicked",
3873 G_CALLBACK(toggle_bg_color), conv);
3874
3875 gtkconv->toolbar.bgcolor = button;
3876
3877 /* Sep */
3878 sep = gtk_vseparator_new();
3879 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0);
3880
3881 /* Insert Link */
3882 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK);
3883 gtk_size_group_add_widget(sg, button);
3884 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3885 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert link"), NULL);
3886
3887 g_signal_connect(G_OBJECT(button), "clicked",
3888 G_CALLBACK(insert_link_cb), conv);
3889
3890 gtkconv->toolbar.link = button;
3891
3892 /* Insert IM Image */
3893 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE);
3894 gtk_size_group_add_widget(sg, button);
3895 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3896 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert image"), NULL);
3897
3898 g_signal_connect(G_OBJECT(button), "clicked",
3899 G_CALLBACK(insert_image_cb), conv);
3900
3901 gtkconv->toolbar.image = button;
3902
3903 /* Insert Smiley */
3904 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY);
3905 gtk_size_group_add_widget(sg, button);
3906 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3907 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert smiley"), NULL);
3908
3909 g_signal_connect(G_OBJECT(button), "clicked",
3910 G_CALLBACK(insert_smiley_cb), conv);
3911
3912 gtkconv->toolbar.smiley = button;
3913
3914
3915 sep = gtk_hseparator_new();
3916 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
3917
3918 gtk_widget_show_all(vbox);
3919
3920 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar"))
3921 gtk_widget_hide(vbox);
3922
3923 return vbox;
3924 }
3925 3376
3926 static void topic_callback(GtkWidget *w, GaimConversation *conv) 3377 static void topic_callback(GtkWidget *w, GaimConversation *conv)
3927 { 3378 {
3928 GaimPluginProtocolInfo *prpl_info = NULL; 3379 GaimPluginProtocolInfo *prpl_info = NULL;
3929 GaimConnection *gc; 3380 GaimConnection *gc;
4139 /* Build the toolbar. */ 3590 /* Build the toolbar. */
4140 vbox = gtk_vbox_new(FALSE, 6); 3591 vbox = gtk_vbox_new(FALSE, 6);
4141 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, FALSE); 3592 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, FALSE);
4142 gtk_widget_show(vbox); 3593 gtk_widget_show(vbox);
4143 3594
4144 gtkconv->toolbar.toolbar = build_conv_toolbar(conv); 3595 gtkconv->toolbar = gtk_imhtmltoolbar_new();
4145 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->toolbar.toolbar, 3596 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->toolbar, FALSE, FALSE, 0);
4146 FALSE, FALSE, 0);
4147 3597
4148 /* Setup the entry widget. 3598 /* Setup the entry widget.
4149 * We never show the horizontal scrollbar because it was causing weird 3599 * We never show the horizontal scrollbar because it was causing weird
4150 * lockups when typing text just as you type the character that would 3600 * lockups when typing text just as you type the character that would
4151 * cause both scrollbars to appear. Definitely seems like a gtk bug. 3601 * cause both scrollbars to appear. Definitely seems like a gtk bug.
4173 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", 3623 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event",
4174 G_CALLBACK(entry_stop_rclick_cb), NULL); 3624 G_CALLBACK(entry_stop_rclick_cb), NULL);
4175 3625
4176 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) 3626 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
4177 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry)); 3627 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry));
3628 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gtkconv->entry);
4178 3629
4179 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry)); 3630 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry));
4180 gtk_widget_show(gtkconv->entry); 3631 gtk_widget_show(gtkconv->entry);
4181 3632
4182 /* Setup the bottom button box. */ 3633 /* Setup the bottom button box. */
4246 vbox2 = gtk_vbox_new(FALSE, 6); 3697 vbox2 = gtk_vbox_new(FALSE, 6);
4247 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, FALSE); 3698 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, FALSE);
4248 gtk_widget_show(vbox2); 3699 gtk_widget_show(vbox2);
4249 3700
4250 /* Build the toolbar. */ 3701 /* Build the toolbar. */
4251 gtkconv->toolbar.toolbar = build_conv_toolbar(conv); 3702 gtkconv->toolbar = gtk_imhtmltoolbar_new();
4252 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->toolbar.toolbar, 3703 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->toolbar, FALSE, FALSE, 0);
4253 FALSE, FALSE, 0);
4254 3704
4255 /* Setup the entry widget. 3705 /* Setup the entry widget.
4256 * We never show the horizontal scrollbar because it was causing weird 3706 * We never show the horizontal scrollbar because it was causing weird
4257 * lockups when typing text just as you type the character that would 3707 * lockups when typing text just as you type the character that would
4258 * cause both scrollbars to appear. Definitely seems like a gtk bug. 3708 * cause both scrollbars to appear. Definitely seems like a gtk bug.
4288 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) 3738 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
4289 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry)); 3739 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry));
4290 3740
4291 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry)); 3741 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry));
4292 gtk_widget_show(gtkconv->entry); 3742 gtk_widget_show(gtkconv->entry);
3743 gtk_imhtmltoolbar_attach(gtkconv->toolbar, gtkconv->entry);
4293 3744
4294 gtkconv->bbox = gtk_hbox_new(FALSE, 6); 3745 gtkconv->bbox = gtk_hbox_new(FALSE, 6);
4295 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->bbox, FALSE, FALSE, 0); 3746 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->bbox, FALSE, FALSE, 0);
4296 gtk_widget_show(gtkconv->bbox); 3747 gtk_widget_show(gtkconv->bbox);
4297 3748
4801 static void 4252 static void
4802 gaim_gtkconv_destroy(GaimConversation *conv) 4253 gaim_gtkconv_destroy(GaimConversation *conv)
4803 { 4254 {
4804 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); 4255 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
4805 4256
4806 if (gtkconv->dialogs.fg_color != NULL) 4257 /* if (gtkconv->dialogs.fg_color != NULL)
4807 gtk_widget_destroy(gtkconv->dialogs.fg_color); 4258 gtk_widget_destroy(gtkconv->dialogs.fg_color);
4808 4259
4809 if (gtkconv->dialogs.bg_color != NULL) 4260 if (gtkconv->dialogs.bg_color != NULL)
4810 gtk_widget_destroy(gtkconv->dialogs.bg_color); 4261 gtk_widget_destroy(gtkconv->dialogs.bg_color);
4811 4262
4815 if (gtkconv->dialogs.image != NULL) 4266 if (gtkconv->dialogs.image != NULL)
4816 gtk_widget_destroy(gtkconv->dialogs.image); 4267 gtk_widget_destroy(gtkconv->dialogs.image);
4817 4268
4818 if (gtkconv->dialogs.smiley != NULL) 4269 if (gtkconv->dialogs.smiley != NULL)
4819 gtk_widget_destroy(gtkconv->dialogs.smiley); 4270 gtk_widget_destroy(gtkconv->dialogs.smiley);
4820 4271 */
4821 if (gtkconv->dialogs.link != NULL) 4272 //if (gtkconv->dialogs.link != NULL)
4822 close_link_dialog(conv); 4273 // close_link_dialog(conv);
4823 4274
4824 if (gtkconv->dialogs.log != NULL) 4275 if (gtkconv->dialogs.log != NULL)
4825 gtk_widget_destroy(gtkconv->dialogs.log); 4276 gtk_widget_destroy(gtkconv->dialogs.log);
4826 4277
4827 gtk_widget_destroy(gtkconv->tab_cont); 4278 gtk_widget_destroy(gtkconv->tab_cont);
6045 gtk_check_menu_item_set_active( 5496 gtk_check_menu_item_set_active(
6046 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar), 5497 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar),
6047 gtkconv->show_formatting_toolbar); 5498 gtkconv->show_formatting_toolbar);
6048 5499
6049 if (gtkconv->show_formatting_toolbar) 5500 if (gtkconv->show_formatting_toolbar)
6050 gtk_widget_show(gtkconv->toolbar.toolbar); 5501 gtk_widget_show(gtkconv->toolbar);
6051 else 5502 else
6052 gtk_widget_hide(gtkconv->toolbar.toolbar); 5503 gtk_widget_hide(gtkconv->toolbar);
6053 } 5504 }
6054 } 5505 }
6055 5506
6056 static void 5507 static void
6057 im_button_type_pref_cb(const char *name, GaimPrefType type, 5508 im_button_type_pref_cb(const char *name, GaimPrefType type,