Mercurial > pidgin.yaz
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, |