Mercurial > pidgin
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)); |