comparison src/gtkconv.c @ 8407:15614a7cdc13

[gaim-migrate @ 9137] Some general cleanups I wanted to make to gtkconv.c before I begin my conv rewrite tree. There will be much more of them, I assure you, but they'll probably happen with the conv rewrite patch. I want to standardize on a coding style in there. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Mon, 08 Mar 2004 06:16:46 +0000
parents 4a5b36510665
children 13a65fd6a932
comparison
equal deleted inserted replaced
8406:f8b8ee06f26c 8407:15614a7cdc13
138 * Callbacks 138 * Callbacks
139 **************************************************************************/ 139 **************************************************************************/
140 static void 140 static void
141 do_save_convo(GtkWidget *wid) 141 do_save_convo(GtkWidget *wid)
142 { 142 {
143 GaimConversation *c = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button), 143 GaimConversation *conv;
144 "gaim_conversation");
145 const char *filename; 144 const char *filename;
146 FILE *fp; 145 FILE *fp;
147 146
147 conv = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button),
148 "gaim_conversation");
149
148 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); 150 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
149 151
150 if (!((gaim_conversation_get_type(c) != GAIM_CONV_CHAT && 152 if (!((gaim_conversation_get_type(conv) != GAIM_CONV_CHAT &&
151 g_list_find(gaim_get_ims(), c)) || 153 g_list_find(gaim_get_ims(), conv)) ||
152 (gaim_conversation_get_type(c) == GAIM_CONV_CHAT && 154 (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT &&
153 g_list_find(gaim_get_chats(), c)))) 155 g_list_find(gaim_get_chats(), conv))))
154 filename = NULL; 156 filename = NULL;
155 157
156 gtk_widget_destroy(wid); 158 gtk_widget_destroy(wid);
157 159
158 if (filename == NULL) 160 if (filename == NULL)
159 return; 161 return;
160 162
161 if ((fp = fopen(filename, "w+")) == NULL) 163 if ((fp = fopen(filename, "w+")) == NULL)
162 return; 164 return;
163 165
164 fprintf(fp, "%s", c->history->str); 166 fprintf(fp, "%s", conv->history->str);
165 167
166 fclose(fp); 168 fclose(fp);
167 } 169 }
168 170
169 static void 171 static void
170 do_check_save_convo(GObject *obj, GtkWidget *wid) 172 do_check_save_convo(GObject *obj, GtkWidget *wid)
171 { 173 {
172 const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); 174 const char *filename;
175
176 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
173 177
174 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid))) 178 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid)))
175 return; 179 return;
176 180
177 if(g_file_test(filename, G_FILE_TEST_EXISTS)){ 181 if (g_file_test(filename, G_FILE_TEST_EXISTS))
182 {
178 gaim_request_yes_no(NULL, NULL, _("That file already exists"), 183 gaim_request_yes_no(NULL, NULL, _("That file already exists"),
179 _("Would you like to overwrite it?"), 1, wid, 184 _("Would you like to overwrite it?"), 1, wid,
180 G_CALLBACK(do_save_convo), NULL); 185 G_CALLBACK(do_save_convo), NULL);
181 } 186 }
182 else 187 else
210 { 215 {
211 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) 216 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
212 gtk_widget_set_state(widget, GTK_STATE_NORMAL); 217 gtk_widget_set_state(widget, GTK_STATE_NORMAL);
213 } 218 }
214 219
215 static void default_formatize(GaimConversation *conv) { 220 static void
221 default_formatize(GaimConversation *conv)
222 {
216 GaimGtkConversation *c = GAIM_GTK_CONVERSATION(conv); 223 GaimGtkConversation *c = GAIM_GTK_CONVERSATION(conv);
217 GaimConnection *gc = gaim_conversation_get_gc(conv); 224 GaimConnection *gc = gaim_conversation_get_gc(conv);
218 225
219 if (gc && gc->flags & GAIM_CONNECTION_HTML) { 226 if (gc && gc->flags & GAIM_CONNECTION_HTML)
220 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold")) { 227 {
228 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold"))
221 gtk_imhtml_toggle_bold(GTK_IMHTML(c->entry)); 229 gtk_imhtml_toggle_bold(GTK_IMHTML(c->entry));
222 } 230
223 231 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic"))
224 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic")) {
225 gtk_imhtml_toggle_italic(GTK_IMHTML(c->entry)); 232 gtk_imhtml_toggle_italic(GTK_IMHTML(c->entry));
226 } 233
227 234 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline"))
228 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline")) {
229 gtk_imhtml_toggle_underline(GTK_IMHTML(c->entry)); 235 gtk_imhtml_toggle_underline(GTK_IMHTML(c->entry));
230 } 236
231 237 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_strikethrough"))
232 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_strikethrough")) { 238 {
233 /* Tell me noone uses <s> by default ... maybe I won't do 239 /* Tell me noone uses <s> by default ... maybe I won't do
234 _toggle_strikethrough and not let them */ 240 _toggle_strikethrough and not let them */
235 /* g_snprintf(buf2, limit, "<STRIKE>%s</STRIKE>", buf); 241 /* g_snprintf(buf2, limit, "<STRIKE>%s</STRIKE>", buf);
236 strcpy(buf, buf2); */ 242 strcpy(buf, buf2); */
237 } 243 }
238 244
239 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_font") || c->has_font) { 245 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_font") ||
246 c->has_font)
247 {
240 gtk_imhtml_toggle_fontface(GTK_IMHTML(c->entry), c->fontface); 248 gtk_imhtml_toggle_fontface(GTK_IMHTML(c->entry), c->fontface);
241 } 249 }
242 250
243 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_size")) { 251 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_size"))
244 gtk_imhtml_font_set_size(GTK_IMHTML(c->entry), gaim_prefs_get_int("/gaim/gtk/conversations/font_size")); 252 {
245 } 253 gtk_imhtml_font_set_size(GTK_IMHTML(c->entry),
246 254 gaim_prefs_get_int("/gaim/gtk/conversations/font_size"));
247 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_fgcolor")) { 255 }
248 char *color = g_strdup_printf("#%02x%02x%02x", 256
249 c->fg_color.red / 256, 257 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_fgcolor"))
250 c->fg_color.green / 256, 258 {
251 c->fg_color.blue / 256); 259 char *color = g_strdup_printf("#%02x%02x%02x",
260 c->fg_color.red / 256,
261 c->fg_color.green / 256,
262 c->fg_color.blue / 256);
252 gtk_imhtml_toggle_forecolor(GTK_IMHTML(c->entry), color); 263 gtk_imhtml_toggle_forecolor(GTK_IMHTML(c->entry), color);
253 g_free(color); 264 g_free(color);
254 } 265 }
255 266
256 if (!(gc->flags & GAIM_CONNECTION_NO_BGCOLOR) && gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_bgcolor")) { 267 if (!(gc->flags & GAIM_CONNECTION_NO_BGCOLOR) &&
257 char *color = g_strdup_printf("#%02x%02x%02x", 268 gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_bgcolor"))
258 c->bg_color.red / 256, 269 {
259 c->bg_color.green / 256, 270 char *color = g_strdup_printf("#%02x%02x%02x",
260 c->bg_color.blue / 256); 271 c->bg_color.red / 256,
272 c->bg_color.green / 256,
273 c->bg_color.blue / 256);
261 gtk_imhtml_toggle_backcolor(GTK_IMHTML(c->entry), color); 274 gtk_imhtml_toggle_backcolor(GTK_IMHTML(c->entry), color);
262 g_free(color); 275 g_free(color);
263 } 276 }
264 } 277 }
265 } 278 }
266 279
267 static void 280 static void
352 /* 365 /*
353 * If there are special needs for getting info on users in 366 * If there are special needs for getting info on users in
354 * buddy chat "rooms"... 367 * buddy chat "rooms"...
355 */ 368 */
356 if (prpl_info->get_cb_info != NULL) 369 if (prpl_info->get_cb_info != NULL)
357 prpl_info->get_cb_info(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); 370 {
371 prpl_info->get_cb_info(gc,
372 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who);
373 }
358 else 374 else
359 prpl_info->get_info(gc, who); 375 prpl_info->get_info(gc, who);
360 } 376 }
361 } 377 }
362 378
458 GtkWidget *label; 474 GtkWidget *label;
459 GtkWidget *vbox, *hbox; 475 GtkWidget *vbox, *hbox;
460 GtkWidget *table; 476 GtkWidget *table;
461 GtkWidget *img; 477 GtkWidget *img;
462 478
463 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); 479 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
480 GTK_ICON_SIZE_DIALOG);
464 481
465 info = g_new0(InviteBuddyInfo, 1); 482 info = g_new0(InviteBuddyInfo, 1);
466 info->conv = conv; 483 info->conv = conv;
467 484
468 gc = gaim_conversation_get_gc(conv); 485 gc = gaim_conversation_get_gc(conv);
583 GaimConvWindow *win = (GaimConvWindow *)data; 600 GaimConvWindow *win = (GaimConvWindow *)data;
584 GaimConversation *conv; 601 GaimConversation *conv;
585 602
586 conv = gaim_conv_window_get_active_conversation(win); 603 conv = gaim_conv_window_get_active_conversation(win);
587 604
588 gaim_gtk_log_show((char *)gaim_conversation_get_name(conv), gaim_conversation_get_account(conv)); 605 gaim_gtk_log_show((char *)gaim_conversation_get_name(conv),
606 gaim_conversation_get_account(conv));
589 } 607 }
590 608
591 struct _search { 609 struct _search {
592 GaimGtkConversation *gtkconv; 610 GaimGtkConversation *gtkconv;
593 GtkWidget *entry; 611 GtkWidget *entry;
595 613
596 static void do_search_cb(GtkWidget *widget, gint resp, struct _search *s) 614 static void do_search_cb(GtkWidget *widget, gint resp, struct _search *s)
597 { 615 {
598 switch (resp) { 616 switch (resp) {
599 case GTK_RESPONSE_OK: 617 case GTK_RESPONSE_OK:
600 gtk_imhtml_search_find(GTK_IMHTML(s->gtkconv->imhtml), gtk_entry_get_text(GTK_ENTRY(s->entry))); 618 gtk_imhtml_search_find(GTK_IMHTML(s->gtkconv->imhtml),
619 gtk_entry_get_text(GTK_ENTRY(s->entry)));
601 break; 620 break;
602 621
603 case GTK_RESPONSE_DELETE_EVENT: 622 case GTK_RESPONSE_DELETE_EVENT:
604 case GTK_RESPONSE_CLOSE: 623 case GTK_RESPONSE_CLOSE:
605 gtk_imhtml_search_clear(GTK_IMHTML(s->gtkconv->imhtml)); 624 gtk_imhtml_search_clear(GTK_IMHTML(s->gtkconv->imhtml));
616 GaimConvWindow *win = (GaimConvWindow *)data; 635 GaimConvWindow *win = (GaimConvWindow *)data;
617 GaimConversation *conv = gaim_conv_window_get_active_conversation(win); 636 GaimConversation *conv = gaim_conv_window_get_active_conversation(win);
618 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); 637 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win);
619 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); 638 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
620 GtkWidget *hbox; 639 GtkWidget *hbox;
621 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); 640 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
641 GTK_ICON_SIZE_DIALOG);
622 GtkWidget *label; 642 GtkWidget *label;
623 struct _search *s; 643 struct _search *s;
624 644
625 if (gtkconv->dialogs.search) { 645 if (gtkconv->dialogs.search) {
626 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search)); 646 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search));
632 652
633 gtkconv->dialogs.search = gtk_dialog_new_with_buttons(_("Find"), 653 gtkconv->dialogs.search = gtk_dialog_new_with_buttons(_("Find"),
634 GTK_WINDOW(gtkwin->window), GTK_DIALOG_DESTROY_WITH_PARENT, 654 GTK_WINDOW(gtkwin->window), GTK_DIALOG_DESTROY_WITH_PARENT,
635 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, 655 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
636 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL); 656 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL);
637 gtk_dialog_set_default_response(GTK_DIALOG(gtkconv->dialogs.search), GTK_RESPONSE_OK); 657 gtk_dialog_set_default_response(GTK_DIALOG(gtkconv->dialogs.search),
658 GTK_RESPONSE_OK);
638 g_signal_connect(G_OBJECT(gtkconv->dialogs.search), "response", 659 g_signal_connect(G_OBJECT(gtkconv->dialogs.search), "response",
639 G_CALLBACK(do_search_cb), s); 660 G_CALLBACK(do_search_cb), s);
640 661
641 gtk_container_set_border_width(GTK_CONTAINER(gtkconv->dialogs.search), 6); 662 gtk_container_set_border_width(GTK_CONTAINER(gtkconv->dialogs.search), 6);
642 gtk_window_set_resizable(GTK_WINDOW(gtkconv->dialogs.search), FALSE); 663 gtk_window_set_resizable(GTK_WINDOW(gtkconv->dialogs.search), FALSE);
643 gtk_dialog_set_has_separator(GTK_DIALOG(gtkconv->dialogs.search), FALSE); 664 gtk_dialog_set_has_separator(GTK_DIALOG(gtkconv->dialogs.search), FALSE);
644 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 12); 665 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 12);
645 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 6); 666 gtk_container_set_border_width(
667 GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 6);
646 668
647 hbox = gtk_hbox_new(FALSE, 12); 669 hbox = gtk_hbox_new(FALSE, 12);
648 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), hbox); 670 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox),
671 hbox);
649 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); 672 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
650 673
651 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); 674 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
652 gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search), GTK_RESPONSE_OK, FALSE); 675 gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search),
653 676 GTK_RESPONSE_OK, FALSE);
654 label = gtk_label_new(NULL); 677
655 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:")); 678 label = gtk_label_new(NULL);
679 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:"));
656 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 680 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
657 681
658 s->entry = gtk_entry_new(); 682 s->entry = gtk_entry_new();
659 gtk_entry_set_activates_default(GTK_ENTRY(s->entry), TRUE); 683 gtk_entry_set_activates_default(GTK_ENTRY(s->entry), TRUE);
660 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(s->entry)); 684 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(s->entry));
661 g_signal_connect(G_OBJECT(s->entry), "changed", 685 g_signal_connect(G_OBJECT(s->entry), "changed",
662 G_CALLBACK(gaim_gtk_set_sensitive_if_input), 686 G_CALLBACK(gaim_gtk_set_sensitive_if_input),
663 gtkconv->dialogs.search); 687 gtkconv->dialogs.search);
664 gtk_box_pack_start(GTK_BOX(hbox), s->entry, FALSE, FALSE, 0); 688 gtk_box_pack_start(GTK_BOX(hbox), s->entry, FALSE, FALSE, 0);
665 689
676 conv = gaim_conv_window_get_active_conversation(win); 700 conv = gaim_conv_window_get_active_conversation(win);
677 701
678 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv), 702 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv),
679 gaim_conversation_get_name(conv), NULL); 703 gaim_conversation_get_name(conv), NULL);
680 } 704 }
681 /* 705
706 #if 0
682 static void 707 static void
683 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) 708 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget)
684 { 709 {
685 GaimConvWindow *win = (GaimConvWindow *)data; 710 GaimConvWindow *win = (GaimConvWindow *)data;
686 GaimConversation *conv; 711 GaimConversation *conv;
702 gtkconv = GAIM_GTK_CONVERSATION(gaim_conv_window_get_active_conversation(win)); 727 gtkconv = GAIM_GTK_CONVERSATION(gaim_conv_window_get_active_conversation(win));
703 728
704 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image), 729 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image),
705 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))); 730 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image)));
706 } 731 }
707 */ 732 #endif
733
708 static void 734 static void
709 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) 735 menu_alias_cb(gpointer data, guint action, GtkWidget *widget)
710 { 736 {
711 GaimConvWindow *win = (GaimConvWindow *)data; 737 GaimConvWindow *win = (GaimConvWindow *)data;
712 GaimConversation *conv; 738 GaimConversation *conv;
978 /* 1004 /*
979 * May want to expand this to work similarly to menu_info_cb? 1005 * May want to expand this to work similarly to menu_info_cb?
980 */ 1006 */
981 1007
982 if (prpl_info->get_cb_away != NULL) 1008 if (prpl_info->get_cb_away != NULL)
983 prpl_info->get_cb_away(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); 1009 {
1010 prpl_info->get_cb_away(gc,
1011 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who);
1012 }
984 } 1013 }
985 } 1014 }
986 1015
987 static void 1016 static void
988 menu_chat_add_remove_cb(GtkWidget *w, GaimConversation *conv) 1017 menu_chat_add_remove_cb(GtkWidget *w, GaimConversation *conv)
1104 if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) 1133 if(!gtk_tree_selection_get_selected(sel, NULL, &iter))
1105 return FALSE; 1134 return FALSE;
1106 1135
1107 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &who, -1); 1136 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &who, -1);
1108 menu = create_chat_menu (conv, who, prpl_info, gc); 1137 menu = create_chat_menu (conv, who, prpl_info, gc);
1109 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gaim_gtk_treeview_popup_menu_position_func, widget, 0, GDK_CURRENT_TIME); 1138 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
1139 gaim_gtk_treeview_popup_menu_position_func, widget,
1140 0, GDK_CURRENT_TIME);
1110 1141
1111 return TRUE; 1142 return TRUE;
1112 } 1143 }
1113 1144
1114 1145
1203 if (next_conv == NULL) { 1234 if (next_conv == NULL) {
1204 /* Okay, just grab the next conversation tab. */ 1235 /* Okay, just grab the next conversation tab. */
1205 if (index == gaim_conv_window_get_conversation_count(win) - 1) 1236 if (index == gaim_conv_window_get_conversation_count(win) - 1)
1206 next_conv = gaim_conv_window_get_conversation_at(win, 0); 1237 next_conv = gaim_conv_window_get_conversation_at(win, 0);
1207 else 1238 else
1208 next_conv = gaim_conv_window_get_conversation_at(win, index + 1); 1239 {
1240 next_conv = gaim_conv_window_get_conversation_at(win,
1241 index + 1);
1242 }
1209 } 1243 }
1210 } 1244 }
1211 1245
1212 if (next_conv != NULL && next_conv != conv) { 1246 if (next_conv != NULL && next_conv != conv) {
1213 gaim_conv_window_switch_conversation(win, 1247 gaim_conv_window_switch_conversation(win,
1235 /* If CTRL was held down... */ 1269 /* If CTRL was held down... */
1236 if (event->state & GDK_CONTROL_MASK) { 1270 if (event->state & GDK_CONTROL_MASK) {
1237 switch (event->keyval) { 1271 switch (event->keyval) {
1238 case GDK_Return: 1272 case GDK_Return:
1239 case GDK_KP_Enter: 1273 case GDK_KP_Enter:
1240 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ctrl_enter_sends")) { 1274 if (gaim_prefs_get_bool(
1275 "/gaim/gtk/conversations/ctrl_enter_sends"))
1276 {
1241 send_cb(NULL, conv); 1277 send_cb(NULL, conv);
1242 1278
1243 return TRUE; 1279 return TRUE;
1244 } 1280 }
1245 break; 1281 break;
1266 if (conv->send_history->next && 1302 if (conv->send_history->next &&
1267 conv->send_history->next->data) { 1303 conv->send_history->next->data) {
1268 1304
1269 conv->send_history = conv->send_history->next; 1305 conv->send_history = conv->send_history->next;
1270 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); 1306 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry));
1271 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->entry), conv->send_history->data, 0, NULL); 1307 gtk_imhtml_append_text_with_images(
1308 GTK_IMHTML(gtkconv->entry), conv->send_history->data,
1309 0, NULL);
1272 } 1310 }
1273 1311
1274 return TRUE; 1312 return TRUE;
1275 break; 1313 break;
1276 1314
1281 if (conv->send_history->prev && 1319 if (conv->send_history->prev &&
1282 conv->send_history->prev->data) { 1320 conv->send_history->prev->data) {
1283 1321
1284 conv->send_history = conv->send_history->prev; 1322 conv->send_history = conv->send_history->prev;
1285 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); 1323 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry));
1286 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->entry), conv->send_history->data, 0, NULL); 1324 gtk_imhtml_append_text_with_images(
1325 GTK_IMHTML(gtkconv->entry), conv->send_history->data,
1326 0, NULL);
1287 } 1327 }
1288 1328
1289 return TRUE; 1329 return TRUE;
1290 break; 1330 break;
1291 1331
1292 case GDK_Page_Down: 1332 case GDK_Page_Down:
1293 case ']': 1333 case ']':
1294 gaim_conv_window_switch_conversation(win, (curconv + 1) % numconvs); 1334 gaim_conv_window_switch_conversation(win,
1335 (curconv + 1) % numconvs);
1295 1336
1296 return TRUE; 1337 return TRUE;
1297 break; 1338 break;
1298 1339
1299 case GDK_Page_Up: 1340 case GDK_Page_Up:
1300 case '[': 1341 case '[':
1301 gaim_conv_window_switch_conversation(win, (curconv + numconvs - 1) % numconvs); 1342 gaim_conv_window_switch_conversation(win,
1343 (curconv + numconvs - 1) % numconvs);
1302 1344
1303 return TRUE; 1345 return TRUE;
1304 break; 1346 break;
1305 1347
1306 case GDK_Tab: 1348 case GDK_Tab:
1323 return TRUE; 1365 return TRUE;
1324 break; 1366 break;
1325 1367
1326 } /* End of switch */ 1368 } /* End of switch */
1327 1369
1328 /* if (gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")) { 1370 #if 0
1371 if (gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")) {
1329 switch (event->keyval) { 1372 switch (event->keyval) {
1330 1373
1331 1374
1332 } 1375 }
1333 } */ /* End of switch */ 1376 } /* End of switch */
1334 1377
1335 /* if (gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")) { 1378 if (gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")) {
1336 char buf[7]; 1379 char buf[7];
1337 1380
1338 *buf = '\0'; 1381 *buf = '\0';
1339 1382
1340 switch (event->keyval) { 1383 switch (event->keyval) {
1341 1384
1342 } 1385 }
1343 1386
1344 1387
1345 }*/ 1388 }
1346 1389 #endif
1347 } else 1390
1348 1391 }
1349 /* If ALT (or whatever) was held down... */ 1392 /* If ALT (or whatever) was held down... */
1350 if (event->state & GDK_MOD1_MASK) { 1393 else if (event->state & GDK_MOD1_MASK)
1394 {
1351 /* XXX - Make sure the conv exists befeore switching to it */ 1395 /* XXX - Make sure the conv exists befeore switching to it */
1352 if (event->keyval > '0' && event->keyval <= '9') { 1396 if (event->keyval > '0' && event->keyval <= '9') {
1353 int switchto = event->keyval - '1'; 1397 int switchto = event->keyval - '1';
1354 if (switchto < numconvs) 1398 if (switchto < numconvs)
1355 gaim_conv_window_switch_conversation(win, switchto); 1399 gaim_conv_window_switch_conversation(win, switchto);
1356 1400
1357 return TRUE; 1401 return TRUE;
1358 } 1402 }
1359 } else 1403 }
1360
1361 /* If neither CTRL nor ALT were held down... */ 1404 /* If neither CTRL nor ALT were held down... */
1362 switch (event->keyval) { 1405 else
1363 case GDK_Return: 1406 {
1364 case GDK_KP_Enter: 1407 switch (event->keyval)
1365 if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) && 1408 {
1366 gaim_prefs_get_bool("/gaim/gtk/conversations/enter_sends")) { 1409 case GDK_Return:
1367 1410 case GDK_KP_Enter:
1368 send_cb(NULL, conv); 1411 if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) &&
1412 gaim_prefs_get_bool("/gaim/gtk/conversations/enter_sends"))
1413 {
1414 send_cb(NULL, conv);
1415 return TRUE;
1416 }
1417 break;
1418
1419 case GDK_Tab:
1420 if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT &&
1421 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/tab_completion"))
1422 {
1423 tab_complete(conv);
1424 return TRUE;
1425 }
1426 break;
1427
1428 case GDK_Page_Up:
1429 gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml));
1369 return TRUE; 1430 return TRUE;
1370 } 1431 break;
1371 break; 1432
1372 1433 case GDK_Page_Down:
1373 case GDK_Tab: 1434 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml));
1374 if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT &&
1375 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/tab_completion")) {
1376
1377 tab_complete(conv);
1378 return TRUE; 1435 return TRUE;
1379 } 1436 break;
1380 break; 1437
1381 1438 case GDK_F2:
1382 case GDK_Page_Up: 1439 gaim_prefs_set_bool("/gaim/gtk/conversations/show_timestamps",
1383 gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml)); 1440 !gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
1384 return TRUE; 1441 return TRUE;
1385 break; 1442 break;
1386 1443
1387 case GDK_Page_Down: 1444 }
1388 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml)); 1445 }
1389 return TRUE;
1390 break;
1391
1392 case GDK_F2:
1393 gaim_prefs_set_bool("/gaim/gtk/conversations/show_timestamps",
1394 !gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
1395 return TRUE;
1396 break;
1397
1398 } /* End of switch */
1399 1446
1400 return FALSE; 1447 return FALSE;
1401 } 1448 }
1402 1449
1403 /* 1450 /*
1960 status = get_tab_icon(conv); 2007 status = get_tab_icon(conv);
1961 2008
1962 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); 2009 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status);
1963 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); 2010 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status);
1964 2011
1965 if (gaim_conv_window_get_active_conversation(win) == conv && gtkconv->u.im->anim == NULL) 2012 if (gaim_conv_window_get_active_conversation(win) == conv &&
2013 gtkconv->u.im->anim == NULL)
1966 gtk_window_set_icon(GTK_WINDOW(GAIM_GTK_WINDOW(win)->window), status); 2014 gtk_window_set_icon(GTK_WINDOW(GAIM_GTK_WINDOW(win)->window), status);
1967 2015
1968 if(status) 2016 if(status)
1969 g_object_unref(status); 2017 g_object_unref(status);
1970 } 2018 }
2067 if (!GAIM_IS_GTK_CONVERSATION(conv)) 2115 if (!GAIM_IS_GTK_CONVERSATION(conv))
2068 return; 2116 return;
2069 2117
2070 gtkconv = GAIM_GTK_CONVERSATION(conv); 2118 gtkconv = GAIM_GTK_CONVERSATION(conv);
2071 2119
2072 gtkconv->u.im->animate = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); 2120 gtkconv->u.im->animate =
2121 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w));
2073 2122
2074 if (gtkconv->u.im->animate) 2123 if (gtkconv->u.im->animate)
2075 start_anim(NULL, conv); 2124 start_anim(NULL, conv);
2076 else 2125 else
2077 stop_anim(NULL, conv); 2126 stop_anim(NULL, conv);
2146 /************************************************************************** 2195 /**************************************************************************
2147 * End of the bunch of buddy icon functions 2196 * End of the bunch of buddy icon functions
2148 **************************************************************************/ 2197 **************************************************************************/
2149 2198
2150 /* 2199 /*
2151 * Makes sure all the menu items and all the buttons are hidden/shown and 2200 * Makes sure all the menu items and all the buttons are hidden/shown and
2152 * sensitive/insensitve. This is called after changing tabs and when an 2201 * sensitive/insensitve. This is called after changing tabs and when an
2153 * account signs on or off. 2202 * account signs on or off.
2154 */ 2203 */
2155 static void 2204 static void
2156 gray_stuff_out(GaimConversation *conv) 2205 gray_stuff_out(GaimConversation *conv)
2157 { 2206 {
2173 if (gtkwin->menu.send_as != NULL) 2222 if (gtkwin->menu.send_as != NULL)
2174 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); 2223 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win);
2175 2224
2176 /* 2225 /*
2177 * Handle hiding and showing stuff based on what type of conv this is. 2226 * Handle hiding and showing stuff based on what type of conv this is.
2178 * Stuff that Gaim IMs support in general should be shown for IM 2227 * Stuff that Gaim IMs support in general should be shown for IM
2179 * conversations. Stuff that Gaim chats support in gerneal should be 2228 * conversations. Stuff that Gaim chats support in gerneal should be
2180 * shown for chat conversations. It doesn't matter whether the PRPL 2229 * shown for chat conversations. It doesn't matter whether the PRPL
2181 * supports it or not--that only affects if the button or menu item 2230 * supports it or not--that only affects if the button or menu item
2182 * is sensitive or not. 2231 * is sensitive or not.
2183 */ 2232 */
2184 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2233 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
2185 /* Show stuff that applies to IMs, hide stuff that applies to chats */ 2234 /* Show stuff that applies to IMs, hide stuff that applies to chats */
2186 2235
2247 gtk_widget_show(gtkwin->menu.insert_link); 2296 gtk_widget_show(gtkwin->menu.insert_link);
2248 gtk_widget_hide(gtkwin->menu.insert_image); 2297 gtk_widget_hide(gtkwin->menu.insert_image);
2249 } 2298 }
2250 2299
2251 /* 2300 /*
2252 * Handle graying stuff out based on whether an account is connected 2301 * Handle graying stuff out based on whether an account is connected
2253 * and what features that account supports. 2302 * and what features that account supports.
2254 */ 2303 */
2255 if ((gc != NULL) && 2304 if ((gc != NULL) &&
2256 ( (gaim_conversation_get_type(conv) != GAIM_CONV_CHAT) || 2305 ( (gaim_conversation_get_type(conv) != GAIM_CONV_CHAT) ||
2257 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) { 2306 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) {
2260 /* Deal with buttons */ 2309 /* Deal with buttons */
2261 gtk_widget_set_sensitive(gtkconv->add, TRUE); 2310 gtk_widget_set_sensitive(gtkconv->add, TRUE);
2262 gtk_widget_set_sensitive(gtkconv->remove, TRUE); 2311 gtk_widget_set_sensitive(gtkconv->remove, TRUE);
2263 gtk_widget_set_sensitive(gtkconv->info, (prpl_info->get_info != NULL)); 2312 gtk_widget_set_sensitive(gtkconv->info, (prpl_info->get_info != NULL));
2264 2313
2265 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2314 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM)
2266 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->send_im != NULL)); 2315 {
2316 gtk_widget_set_sensitive(gtkconv->send,
2317 (prpl_info->send_im != NULL));
2267 gtk_widget_set_sensitive(gtkconv->u.im->warn, 2318 gtk_widget_set_sensitive(gtkconv->u.im->warn,
2268 (prpl_info->warn != NULL)); 2319 (prpl_info->warn != NULL));
2269 gtk_widget_set_sensitive(gtkconv->u.im->block, 2320 gtk_widget_set_sensitive(gtkconv->u.im->block,
2270 (prpl_info->add_deny != NULL)); 2321 (prpl_info->add_deny != NULL));
2271 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { 2322 }
2272 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->chat_send != NULL)); 2323 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)
2324 {
2325 gtk_widget_set_sensitive(gtkconv->send,
2326 (prpl_info->chat_send != NULL));
2273 gtk_widget_set_sensitive(gtkconv->u.chat->invite, 2327 gtk_widget_set_sensitive(gtkconv->u.chat->invite,
2274 (prpl_info->chat_invite != NULL)); 2328 (prpl_info->chat_invite != NULL));
2275 } 2329 }
2276 2330
2277 /* Deal with the toolbar */ 2331 /* Deal with the toolbar */
2303 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); 2357 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE);
2304 else 2358 else
2305 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE); 2359 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE);
2306 } 2360 }
2307 2361
2308 gtk_widget_set_sensitive(gtkwin->menu.block, (prpl_info->add_deny != NULL)); 2362 gtk_widget_set_sensitive(gtkwin->menu.block,
2363 (prpl_info->add_deny != NULL));
2309 gtk_widget_set_sensitive(gtkwin->menu.add, TRUE); 2364 gtk_widget_set_sensitive(gtkwin->menu.add, TRUE);
2310 gtk_widget_set_sensitive(gtkwin->menu.remove, TRUE); 2365 gtk_widget_set_sensitive(gtkwin->menu.remove, TRUE);
2311 gtk_widget_set_sensitive(gtkwin->menu.insert_link, TRUE); 2366 gtk_widget_set_sensitive(gtkwin->menu.insert_link, TRUE);
2312 gtk_widget_set_sensitive(gtkwin->menu.insert_image, 2367 gtk_widget_set_sensitive(gtkwin->menu.insert_image,
2313 (prpl_info->options & OPT_PROTO_IM_IMAGE)); 2368 (prpl_info->options & OPT_PROTO_IM_IMAGE));
2342 } 2397 }
2343 2398
2344 /* 2399 /*
2345 * Update the window's icon 2400 * Update the window's icon
2346 */ 2401 */
2347 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) && (gtkconv->u.im->anim)) { 2402 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) &&
2348 window_icon = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); 2403 (gtkconv->u.im->anim))
2404 {
2405 window_icon =
2406 gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim);
2349 g_object_ref(window_icon); 2407 g_object_ref(window_icon);
2350 } else { 2408 } else {
2351 window_icon = get_tab_icon(conv); 2409 window_icon = get_tab_icon(conv);
2352 } 2410 }
2353 gtk_window_set_icon(GTK_WINDOW(gtkwin->window), window_icon); 2411 gtk_window_set_icon(GTK_WINDOW(gtkwin->window), window_icon);
2408 gtk_check_menu_item_set_active( 2466 gtk_check_menu_item_set_active(
2409 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar), 2467 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar),
2410 gtkconv->show_formatting_toolbar); 2468 gtkconv->show_formatting_toolbar);
2411 2469
2412 /* 2470 /*
2413 * We pause icons when they are not visible. If this icon should 2471 * We pause icons when they are not visible. If this icon should
2414 * be animated then start it back up again.lll 2472 * be animated then start it back up again.lll
2415 */ 2473 */
2416 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) && 2474 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) &&
2417 (gtkconv->u.im->animate)) 2475 (gtkconv->u.im->animate))
2418 start_anim(NULL, conv); 2476 start_anim(NULL, conv);
3034 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb, 3092 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb,
3035 0, "<StockItem>", GAIM_STOCK_IM }, 3093 0, "<StockItem>", GAIM_STOCK_IM },
3036 3094
3037 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>" }, 3095 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>" },
3038 3096
3039 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, "<StockItem>", GTK_STOCK_FIND }, 3097 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0,
3098 "<StockItem>", GTK_STOCK_FIND },
3040 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, NULL }, 3099 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, NULL },
3041 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, 3100 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0,
3042 "<StockItem>", GTK_STOCK_SAVE_AS }, 3101 "<StockItem>", GTK_STOCK_SAVE_AS },
3043 3102
3044 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" }, 3103 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" },
3599 GTK_SHADOW_IN); 3658 GTK_SHADOW_IN);
3600 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); 3659 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
3601 gtk_widget_show(sw); 3660 gtk_widget_show(sw);
3602 3661
3603 gtkconv->entry = gtk_imhtml_new(NULL, NULL); 3662 gtkconv->entry = gtk_imhtml_new(NULL, NULL);
3604 gtkconv->entry_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); 3663 gtkconv->entry_buffer =
3664 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry));
3605 gaim_setup_imhtml(gtkconv->entry); 3665 gaim_setup_imhtml(gtkconv->entry);
3606 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE); 3666 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE);
3607 default_formatize(conv); 3667 default_formatize(conv);
3608 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry), GTK_WRAP_WORD_CHAR); 3668 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry),
3669 GTK_WRAP_WORD_CHAR);
3609 gtk_widget_set_size_request(gtkconv->entry, -1, 3670 gtk_widget_set_size_request(gtkconv->entry, -1,
3610 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height")); 3671 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height"));
3611 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); 3672 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv);
3612 3673
3613 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", 3674 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event",
3615 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", 3676 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event",
3616 G_CALLBACK(entry_stop_rclick_cb), NULL); 3677 G_CALLBACK(entry_stop_rclick_cb), NULL);
3617 3678
3618 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) 3679 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
3619 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry)); 3680 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry));
3620 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gtkconv->entry); 3681 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(gtkconv->toolbar),
3682 gtkconv->entry);
3621 3683
3622 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry)); 3684 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry));
3623 gtk_widget_show(gtkconv->entry); 3685 gtk_widget_show(gtkconv->entry);
3624 3686
3625 /* Setup the bottom button box. */ 3687 /* Setup the bottom button box. */
3694 gtkconv->toolbar = gtk_imhtmltoolbar_new(); 3756 gtkconv->toolbar = gtk_imhtmltoolbar_new();
3695 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->toolbar, FALSE, FALSE, 0); 3757 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->toolbar, FALSE, FALSE, 0);
3696 3758
3697 /* Setup the entry widget. 3759 /* Setup the entry widget.
3698 * We never show the horizontal scrollbar because it was causing weird 3760 * We never show the horizontal scrollbar because it was causing weird
3699 * lockups when typing text just as you type the character that would 3761 * lockups when typing text just as you type the character that would
3700 * cause both scrollbars to appear. Definitely seems like a gtk bug. 3762 * cause both scrollbars to appear. Definitely seems like a gtk bug.
3701 */ 3763 */
3702 sw = gtk_scrolled_window_new(NULL, NULL); 3764 sw = gtk_scrolled_window_new(NULL, NULL);
3703 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), 3765 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
3704 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); 3766 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
3706 GTK_SHADOW_IN); 3768 GTK_SHADOW_IN);
3707 gtk_box_pack_start(GTK_BOX(vbox2), sw, TRUE, TRUE, 0); 3769 gtk_box_pack_start(GTK_BOX(vbox2), sw, TRUE, TRUE, 0);
3708 gtk_widget_show(sw); 3770 gtk_widget_show(sw);
3709 3771
3710 gtkconv->entry = gtk_imhtml_new(NULL, NULL); 3772 gtkconv->entry = gtk_imhtml_new(NULL, NULL);
3711 gtkconv->entry_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); 3773 gtkconv->entry_buffer =
3774 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry));
3712 gaim_setup_imhtml(gtkconv->entry); 3775 gaim_setup_imhtml(gtkconv->entry);
3713 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE); 3776 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE);
3714 default_formatize(conv); 3777 default_formatize(conv);
3715 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry), GTK_WRAP_WORD_CHAR); 3778 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry),
3779 GTK_WRAP_WORD_CHAR);
3716 gtk_widget_set_size_request(gtkconv->entry, -1, 3780 gtk_widget_set_size_request(gtkconv->entry, -1,
3717 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height")); 3781 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height"));
3718 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); 3782 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv);
3719 3783
3720 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", 3784 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event",
4024 GDK_ACTION_COPY); 4088 GDK_ACTION_COPY);
4025 gtk_drag_dest_set(gtkconv->imhtml, 4089 gtk_drag_dest_set(gtkconv->imhtml,
4026 GTK_DEST_DEFAULT_MOTION | 4090 GTK_DEST_DEFAULT_MOTION |
4027 GTK_DEST_DEFAULT_DROP, 4091 GTK_DEST_DEFAULT_DROP,
4028 te, sizeof(te) / sizeof(GtkTargetEntry), 4092 te, sizeof(te) / sizeof(GtkTargetEntry),
4029 GDK_ACTION_DEFAULT | GDK_ACTION_COPY | GDK_ACTION_MOVE); 4093 GDK_ACTION_DEFAULT | GDK_ACTION_COPY |
4094 GDK_ACTION_MOVE);
4030 gtk_drag_dest_set(gtkconv->entry, 4095 gtk_drag_dest_set(gtkconv->entry,
4031 GTK_DEST_DEFAULT_MOTION | 4096 GTK_DEST_DEFAULT_MOTION |
4032 GTK_DEST_DEFAULT_DROP, 4097 GTK_DEST_DEFAULT_DROP,
4033 te, sizeof(te) / sizeof(GtkTargetEntry), 4098 te, sizeof(te) / sizeof(GtkTargetEntry),
4034 GDK_ACTION_COPY); 4099 GDK_ACTION_COPY);
4100 #endif 4165 #endif
4101 4166
4102 4167
4103 /* Pack it all together. */ 4168 /* Pack it all together. */
4104 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->icon, FALSE, FALSE, 0); 4169 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->icon, FALSE, FALSE, 0);
4105 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_icon, FALSE, FALSE, 0); 4170 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_icon,
4106 if (gaim_prefs_get_bool("/gaim/gtk/conversations/icons_on_tabs")) { 4171 FALSE, FALSE, 0);
4172
4173 if (gaim_prefs_get_bool("/gaim/gtk/conversations/icons_on_tabs"))
4174 {
4107 gtk_widget_show_all(gtkconv->icon); 4175 gtk_widget_show_all(gtkconv->icon);
4108 gtk_widget_show_all(gtkconv->menu_icon); 4176 gtk_widget_show_all(gtkconv->menu_icon);
4109 } 4177 }
4110 4178
4111 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0); 4179 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0);
4124 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) 4192 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM)
4125 gaim_gtkconv_update_buddy_icon(conv); 4193 gaim_gtkconv_update_buddy_icon(conv);
4126 4194
4127 /* Add this pane to the conversations notebook. */ 4195 /* Add this pane to the conversations notebook. */
4128 gtk_notebook_append_page(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby); 4196 gtk_notebook_append_page(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby);
4129 gtk_notebook_set_menu_label(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, menu_tabby); 4197 gtk_notebook_set_menu_label(GTK_NOTEBOOK(gtkwin->notebook),
4198 tab_cont, menu_tabby);
4130 4199
4131 gtk_widget_show(tab_cont); 4200 gtk_widget_show(tab_cont);
4132 4201
4133 if (gaim_conv_window_get_conversation_count(win) == 1) { 4202 if (gaim_conv_window_get_conversation_count(win) == 1) {
4134 /* Er, bug in notebooks? Switch to the page manually. */ 4203 /* Er, bug in notebooks? Switch to the page manually. */
4420 4489
4421 g_snprintf(buf2, sizeof(buf2), 4490 g_snprintf(buf2, sizeof(buf2),
4422 "<FONT %s><FONT SIZE=\2\"><!--(%s) --></FONT><B>%s</B></FONT><BR>", 4491 "<FONT %s><FONT SIZE=\2\"><!--(%s) --></FONT><B>%s</B></FONT><BR>",
4423 sml_attrib, mdate, message); 4492 sml_attrib, mdate, message);
4424 4493
4425 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml), buf2, 0, images); 4494 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml),
4495 buf2, 0, images);
4426 4496
4427 /* Add the message to a conversations scrollback buffer */ 4497 /* Add the message to a conversations scrollback buffer */
4428 conv->history = g_string_append(conv->history, buf); 4498 conv->history = g_string_append(conv->history, buf);
4429 conv->history = g_string_append(conv->history, "<BR>\n"); 4499 conv->history = g_string_append(conv->history, "<BR>\n");
4430 4500
4431 } else if (flags & GAIM_MESSAGE_NO_LOG) { 4501 } else if (flags & GAIM_MESSAGE_NO_LOG) {
4432 g_snprintf(buf, BUF_LONG, 4502 g_snprintf(buf, BUF_LONG,
4433 "<B><FONT %s COLOR=\"#777777\">%s</FONT></B><BR>", 4503 "<B><FONT %s COLOR=\"#777777\">%s</FONT></B><BR>",
4434 sml_attrib, message); 4504 sml_attrib, message);
4435 4505
4436 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml), buf, 0, images); 4506 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml),
4507 buf, 0, images);
4437 } 4508 }
4438 else { 4509 else {
4439 char *new_message = g_memdup(message, length); 4510 char *new_message = g_memdup(message, length);
4440 4511
4441 if (flags & GAIM_MESSAGE_WHISPER) { 4512 if (flags & GAIM_MESSAGE_WHISPER) {
4508 "<B>%s</B></FONT> ", 4579 "<B>%s</B></FONT> ",
4509 color, sml_attrib ? sml_attrib : "", mdate, str); 4580 color, sml_attrib ? sml_attrib : "", mdate, str);
4510 4581
4511 g_free(str); 4582 g_free(str);
4512 4583
4513 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml), buf2, 0, images); 4584 gtk_imhtml_append_text_with_images(GTK_IMHTML(gtkconv->imhtml),
4585 buf2, 0, images);
4514 4586
4515 if(gc){ 4587 if(gc){
4516 char *pre = g_strdup_printf("<font %s>", sml_attrib ? sml_attrib : ""); 4588 char *pre = g_strdup_printf("<font %s>", sml_attrib ? sml_attrib : "");
4517 char *post = "</font>"; 4589 char *post = "</font>";
4518 int pre_len = strlen(pre); 4590 int pre_len = strlen(pre);
4788 4860
4789 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); 4861 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
4790 4862
4791 g_free(val); 4863 g_free(val);
4792 } while (f); 4864 } while (f);
4793 4865
4794 break; 4866 break;
4795 } 4867 }
4796 } 4868 }
4797 } 4869 }
4798 4870
4998 gtkconv->u.im->animate = gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons"); 5070 gtkconv->u.im->animate = gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons");
4999 5071
5000 if((buddy = gaim_find_buddy(gaim_conversation_get_account(conv), 5072 if((buddy = gaim_find_buddy(gaim_conversation_get_account(conv),
5001 gaim_conversation_get_name(conv))) != NULL) { 5073 gaim_conversation_get_name(conv))) != NULL) {
5002 const char *iconfile; 5074 const char *iconfile;
5003 if((iconfile = gaim_blist_node_get_string((GaimBlistNode*)buddy, "buddy_icon"))) { 5075 if((iconfile = gaim_blist_node_get_string((GaimBlistNode*)buddy,
5076 "buddy_icon"))) {
5004 GaimBuddyIcon *icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); 5077 GaimBuddyIcon *icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv));
5005 struct stat st; 5078 struct stat st;
5006 if ((icon == NULL) && (!stat(iconfile, &st))) { 5079 if ((icon == NULL) && (!stat(iconfile, &st))) {
5007 FILE *file = fopen(iconfile, "rb"); 5080 FILE *file = fopen(iconfile, "rb");
5008 if (file) { 5081 if (file) {
5013 g_free(data); 5086 g_free(data);
5014 } 5087 }
5015 return; 5088 return;
5016 } 5089 }
5017 else 5090 else
5018 gtkconv->u.im->anim = gdk_pixbuf_animation_new_from_file(iconfile, &err); 5091 gtkconv->u.im->anim =
5092 gdk_pixbuf_animation_new_from_file(iconfile, &err);
5019 } 5093 }
5020 } 5094 }
5021 else 5095 else
5022 { 5096 {
5023 GaimBuddyIcon *icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); 5097 GaimBuddyIcon *icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv));