comparison src/gtkconv.c @ 10175:53410b84336f

[gaim-migrate @ 11290] I wrote a helper function that creates the imhtml and toolbar and puts them in a widget and what not. And I changed some places to use this. And I removed some whitespace from log.c. And I changed the conversation colors back to normal. And I'm not committing everything in my tree, so let me know if this doesn't compile. And that's all. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 14 Nov 2004 01:52:25 +0000
parents 3f71f7282dbf
children e67ecadcbe0f
comparison
equal deleted inserted replaced
10174:8dd4535dd359 10175:53410b84336f
64 /* XXX */ 64 /* XXX */
65 #include "gaim.h" 65 #include "gaim.h"
66 66
67 #define AUTO_RESPONSE "&lt;AUTO-REPLY&gt; : " 67 #define AUTO_RESPONSE "&lt;AUTO-REPLY&gt; : "
68 68
69 #define SEND_COLOR "#0d005d" 69 #define SEND_COLOR "#16569E"
70 #define RECV_COLOR "#fd4100" 70 #define RECV_COLOR "#A82F2F"
71 71
72 #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) 72 #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue)))
73 73
74 /* These colors come from the default GNOME palette */ 74 /* These colors come from the default GNOME palette */
75 static GdkColor nick_colors[] = { 75 static GdkColor nick_colors[] = {
168 * will fit, but then I don't want new windows taking up the entire screen. I check to see if there is only one 168 * will fit, but then I don't want new windows taking up the entire screen. I check to see if there is only one
169 * conversation in the window. This way we'll be setting new windows to the size of the last resized new window. */ 169 * conversation in the window. This way we'll be setting new windows to the size of the last resized new window. */
170 170
171 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) 171 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM)
172 { 172 {
173 if (w == gtkconv->sw && (gaim_conv_window_get_conversation_count(win) == 1)) 173 if (w == gtkconv->imhtml && (gaim_conv_window_get_conversation_count(win) == 1))
174 { 174 {
175 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width", allocation->width); 175 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width", allocation->width);
176 if (saveheight) 176 if (saveheight)
177 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height", allocation->height); 177 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height", allocation->height);
178 } 178 }
179 if (w == gtkconv->entry) 179 if (w == gtkconv->entry)
180 gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height", allocation->height); 180 gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height", allocation->height);
181 } 181 }
182 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) 182 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)
183 { 183 {
184 if (w == gtkconv->sw && (gaim_conv_window_get_conversation_count(win) == 1)) 184 if (w == gtkconv->imhtml && (gaim_conv_window_get_conversation_count(win) == 1))
185 { 185 {
186 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width", allocation->width); 186 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width", allocation->width);
187 if (saveheight) 187 if (saveheight)
188 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height", allocation->height); 188 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height", allocation->height);
189 } 189 }
3970 GaimPluginProtocolInfo *prpl_info = NULL; 3970 GaimPluginProtocolInfo *prpl_info = NULL;
3971 GaimGtkConversation *gtkconv; 3971 GaimGtkConversation *gtkconv;
3972 GaimGtkChatPane *gtkchat; 3972 GaimGtkChatPane *gtkchat;
3973 GaimConnection *gc; 3973 GaimConnection *gc;
3974 GtkWidget *vpaned, *hpaned; 3974 GtkWidget *vpaned, *hpaned;
3975 GtkWidget *vbox, *hbox, *frame, *vbox2, *sep; 3975 GtkWidget *vbox, *hbox, *frame;
3976 GtkWidget *lbox, *bbox; 3976 GtkWidget *lbox, *bbox;
3977 GtkWidget *label; 3977 GtkWidget *label;
3978 GtkWidget *list; 3978 GtkWidget *list;
3979 GtkWidget *button; 3979 GtkWidget *button;
3980 GtkWidget *sw; 3980 GtkWidget *sw;
4025 /* Setup the horizontal pane. */ 4025 /* Setup the horizontal pane. */
4026 hpaned = gtk_hpaned_new(); 4026 hpaned = gtk_hpaned_new();
4027 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); 4027 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0);
4028 gtk_widget_show(hpaned); 4028 gtk_widget_show(hpaned);
4029 4029
4030 /* Setup the scrolled window to put gtkimhtml in. */ 4030 /* Setup gtkihmtml. */
4031 gtkconv->sw = gtk_scrolled_window_new(NULL, NULL); 4031 frame = gaim_gtk_create_imhtml(FALSE, &gtkconv->imhtml, NULL);
4032 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkconv->sw), 4032 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml");
4033 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); 4033 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
4034 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkconv->sw), 4034 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
4035 GTK_SHADOW_IN); 4035 gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE);
4036 gtk_paned_pack1(GTK_PANED(hpaned), gtkconv->sw, TRUE, TRUE); 4036 gtk_widget_show(frame);
4037 4037
4038 gtk_widget_set_size_request(gtkconv->sw, 4038 gtk_widget_set_size_request(gtkconv->imhtml,
4039 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_width"), 4039 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_width"),
4040 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_height")); 4040 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_height"));
4041 4041 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate",
4042 g_signal_connect(G_OBJECT(gtkconv->sw), "size-allocate",
4043 G_CALLBACK(size_allocate_cb), conv); 4042 G_CALLBACK(size_allocate_cb), conv);
4044
4045 gtk_widget_show(gtkconv->sw);
4046
4047 /* Setup gtkihmtml. */
4048 gtkconv->imhtml = gtk_imhtml_new(NULL, NULL);
4049 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml");
4050 gtk_container_add(GTK_CONTAINER(gtkconv->sw), gtkconv->imhtml);
4051
4052 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
4053 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
4054 4043
4055 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", 4044 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event",
4056 G_CALLBACK(entry_stop_rclick_cb), NULL); 4045 G_CALLBACK(entry_stop_rclick_cb), NULL);
4057 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", 4046 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event",
4058 G_CALLBACK(refocus_entry_cb), gtkconv); 4047 G_CALLBACK(refocus_entry_cb), gtkconv);
4059 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", 4048 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event",
4060 G_CALLBACK(refocus_entry_cb), gtkconv); 4049 G_CALLBACK(refocus_entry_cb), gtkconv);
4061
4062 gaim_setup_imhtml(gtkconv->imhtml);
4063 gtk_widget_show(gtkconv->imhtml);
4064 4050
4065 /* Build the right pane. */ 4051 /* Build the right pane. */
4066 lbox = gtk_vbox_new(FALSE, 6); 4052 lbox = gtk_vbox_new(FALSE, 6);
4067 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); 4053 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE);
4068 gtk_widget_show(lbox); 4054 gtk_widget_show(lbox);
4158 4144
4159 gtk_widget_show(button); 4145 gtk_widget_show(button);
4160 4146
4161 gtkconv->info = button; 4147 gtkconv->info = button;
4162 4148
4163 /* Build the toolbar. */ 4149 /* Setup the bottom half of the conversation window */
4164 frame = gtk_frame_new(NULL);
4165
4166 vbox = gtk_vbox_new(FALSE, 6); 4150 vbox = gtk_vbox_new(FALSE, 6);
4167 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, TRUE); 4151 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, TRUE);
4168 gtk_widget_show(vbox); 4152 gtk_widget_show(vbox);
4169 4153
4170 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6); 4154 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6);
4173 4157
4174 vbox = gtk_vbox_new(FALSE, 6); 4158 vbox = gtk_vbox_new(FALSE, 6);
4175 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0); 4159 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0);
4176 gtk_widget_show(vbox); 4160 gtk_widget_show(vbox);
4177 4161
4178 frame = gtk_frame_new(NULL); 4162 /* Setup the toolbar, entry widget and all signals */
4163 frame = gaim_gtk_create_imhtml(TRUE, &gtkconv->entry, &gtkconv->toolbar);
4179 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); 4164 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
4180 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); 4165 gtk_widget_show(frame);
4181 vbox2 = gtk_vbox_new(FALSE, 0); 4166
4182 gtk_container_add(GTK_CONTAINER(frame), vbox2);
4183 gtk_widget_show_all(frame);
4184
4185 gtkconv->toolbar = gtk_imhtmltoolbar_new();
4186 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->toolbar, FALSE, FALSE, 0);
4187
4188 sep = gtk_hseparator_new();
4189 gtk_box_pack_start(GTK_BOX(vbox2), sep, FALSE, FALSE, 0);
4190 gtk_widget_show(sep);
4191
4192 /* Setup the entry widget.
4193 * We never show the horizontal scrollbar because it was causing weird
4194 * lockups when typing text just as you type the character that would
4195 * cause both scrollbars to appear. Definitely seems like a gtk bug.
4196 */
4197 sw = gtk_scrolled_window_new(NULL, NULL);
4198 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
4199 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
4200 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
4201 GTK_SHADOW_NONE);
4202 gtk_box_pack_start(GTK_BOX(vbox2), sw, TRUE, TRUE, 0);
4203 gtk_widget_show(sw);
4204
4205 gtkconv->entry = gtk_imhtml_new(NULL, NULL);
4206 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); 4167 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry");
4207
4208 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), 4168 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry),
4209 gaim_account_get_protocol_name(conv->account)); 4169 gaim_account_get_protocol_name(conv->account));
4170 gtk_widget_set_size_request(gtkconv->entry, -1,
4171 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height"));
4210 gtkconv->entry_buffer = 4172 gtkconv->entry_buffer =
4211 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); 4173 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry));
4212 gaim_setup_imhtml(gtkconv->entry);
4213 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE);
4214 default_formatize(conv);
4215 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry),
4216 GTK_WRAP_WORD_CHAR);
4217 gtk_widget_set_size_request(gtkconv->entry, -1,
4218 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height"));
4219 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); 4174 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv);
4220 4175
4221 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", 4176 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event",
4222 G_CALLBACK(entry_key_press_cb), conv); 4177 G_CALLBACK(entry_key_press_cb), conv);
4223 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", 4178 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send",
4225 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", 4180 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event",
4226 G_CALLBACK(entry_stop_rclick_cb), NULL); 4181 G_CALLBACK(entry_stop_rclick_cb), NULL);
4227 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", 4182 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate",
4228 G_CALLBACK(size_allocate_cb), conv); 4183 G_CALLBACK(size_allocate_cb), conv);
4229 4184
4230 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) 4185 default_formatize(conv);
4231 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry));
4232 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(gtkconv->toolbar),
4233 gtkconv->entry);
4234
4235 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry));
4236 gtk_widget_show(gtkconv->entry);
4237 4186
4238 /* Setup the bottom button box. */ 4187 /* Setup the bottom button box. */
4239 gtkconv->bbox = gtk_hbox_new(FALSE, 6); 4188 gtkconv->bbox = gtk_hbox_new(FALSE, 6);
4240 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->bbox, FALSE, FALSE, 0); 4189 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->bbox, FALSE, FALSE, 0);
4241 setup_chat_buttons(conv, gtkconv->bbox); 4190 setup_chat_buttons(conv, gtkconv->bbox);
4255 static GtkWidget * 4204 static GtkWidget *
4256 setup_im_pane(GaimConversation *conv) 4205 setup_im_pane(GaimConversation *conv)
4257 { 4206 {
4258 GaimGtkConversation *gtkconv; 4207 GaimGtkConversation *gtkconv;
4259 GaimGtkImPane *gtkim; 4208 GaimGtkImPane *gtkim;
4209 GtkWidget *frame;
4260 GtkWidget *paned; 4210 GtkWidget *paned;
4261 GtkWidget *vbox, *sep; 4211 GtkWidget *vbox;
4262 GtkWidget *vbox2, *vbox3, *frame; 4212 GtkWidget *vbox2;
4263 GtkWidget *sw;
4264 GList *focus_chain = NULL; 4213 GList *focus_chain = NULL;
4265 4214
4266 gtkconv = GAIM_GTK_CONVERSATION(conv); 4215 gtkconv = GAIM_GTK_CONVERSATION(conv);
4267 gtkim = gtkconv->u.im; 4216 gtkim = gtkconv->u.im;
4268 4217
4269 /* Setup the outer pane. */ 4218 /* Setup the outer pane */
4270 paned = gtk_vpaned_new(); 4219 paned = gtk_vpaned_new();
4271 gtk_widget_show(paned); 4220 gtk_widget_show(paned);
4272 4221
4273 /* Setup the top part of the pane. */ 4222 /* Setup the top part of the pane */
4274 vbox = gtk_vbox_new(FALSE, 6); 4223 vbox = gtk_vbox_new(FALSE, 6);
4275 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); 4224 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE);
4276 gtk_widget_show(vbox); 4225 gtk_widget_show(vbox);
4277 4226
4278 /* Setup the gtkimhtml widget. */ 4227 /* Setup the gtkimhtml widget */
4279 gtkconv->sw = gtk_scrolled_window_new(NULL, NULL); 4228 frame = gaim_gtk_create_imhtml(FALSE, &gtkconv->imhtml, NULL);
4280 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkconv->sw), 4229 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml");
4281 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); 4230 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
4282 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkconv->sw), 4231 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
4283 GTK_SHADOW_IN); 4232 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
4284 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->sw, TRUE, TRUE, 0); 4233 gtk_widget_show(frame);
4285 4234
4286 gtk_widget_set_size_request(gtkconv->sw, 4235 gtk_widget_set_size_request(gtkconv->imhtml,
4287 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_width"), 4236 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_width"),
4288 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_height")); 4237 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_height"));
4289 g_signal_connect(G_OBJECT(gtkconv->sw), "size-allocate", 4238 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate",
4290 G_CALLBACK(size_allocate_cb), conv); 4239 G_CALLBACK(size_allocate_cb), conv);
4291 gtk_widget_show(gtkconv->sw);
4292
4293 gtkconv->imhtml = gtk_imhtml_new(NULL, NULL);
4294 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml");
4295 gtk_container_add(GTK_CONTAINER(gtkconv->sw), gtkconv->imhtml);
4296 4240
4297 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", 4241 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event",
4298 G_CALLBACK(entry_stop_rclick_cb), NULL); 4242 G_CALLBACK(entry_stop_rclick_cb), NULL);
4299 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", 4243 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event",
4300 G_CALLBACK(refocus_entry_cb), gtkconv); 4244 G_CALLBACK(refocus_entry_cb), gtkconv);
4301 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", 4245 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event",
4302 G_CALLBACK(refocus_entry_cb), gtkconv); 4246 G_CALLBACK(refocus_entry_cb), gtkconv);
4303 4247
4304 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 4248 /* Setup the bottom half of the conversation window */
4305 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
4306 gaim_setup_imhtml(gtkconv->imhtml);
4307 gtk_widget_show(gtkconv->imhtml);
4308 vbox2 = gtk_vbox_new(FALSE, 6); 4249 vbox2 = gtk_vbox_new(FALSE, 6);
4309 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, TRUE); 4250 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, TRUE);
4310 gtk_widget_show(vbox2); 4251 gtk_widget_show(vbox2);
4311 4252
4312 /* Setup the entry widget.
4313 * We never show the horizontal scrollbar because it was causing weird
4314 * lockups when typing text just as you type the character that would
4315 * cause both scrollbars to appear. Definitely seems like a gtk bug.
4316 */
4317 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6); 4253 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6);
4318 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->lower_hbox, TRUE, TRUE, 0); 4254 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->lower_hbox, TRUE, TRUE, 0);
4319 gtk_widget_show(gtkconv->lower_hbox); 4255 gtk_widget_show(gtkconv->lower_hbox);
4320 4256
4321 vbox2 = gtk_vbox_new(FALSE, 6); 4257 vbox2 = gtk_vbox_new(FALSE, 6);
4322 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox2, TRUE, TRUE, 0); 4258 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox2, TRUE, TRUE, 0);
4323 gtk_widget_show(vbox2); 4259 gtk_widget_show(vbox2);
4324 4260
4325 frame = gtk_frame_new(NULL); 4261 /* Setup the toolbar, entry widget and all signals */
4326 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); 4262 frame = gaim_gtk_create_imhtml(TRUE, &gtkconv->entry, &gtkconv->toolbar);
4327 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0); 4263 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0);
4328 vbox3 = gtk_vbox_new(FALSE, 0); 4264 gtk_widget_show(frame);
4329 gtk_container_add(GTK_CONTAINER(frame), vbox3); 4265
4330 gtk_widget_show_all(frame);
4331
4332 /* Build the toolbar. */
4333 gtkconv->toolbar = gtk_imhtmltoolbar_new();
4334 gtk_box_pack_start(GTK_BOX(vbox3), gtkconv->toolbar, FALSE, FALSE, 0);
4335
4336 sep = gtk_hseparator_new();
4337 gtk_box_pack_start(GTK_BOX(vbox3), sep, FALSE, FALSE, 0);
4338 gtk_widget_show(sep);
4339
4340 sw = gtk_scrolled_window_new(NULL, NULL);
4341 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
4342 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
4343 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
4344 GTK_SHADOW_NONE);
4345 gtk_box_pack_start(GTK_BOX(vbox3), sw, TRUE, TRUE, 0);
4346 gtk_widget_show(sw);
4347
4348 gtkconv->entry = gtk_imhtml_new(NULL, NULL);
4349 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); 4266 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry");
4350
4351 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), 4267 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry),
4352 gaim_account_get_protocol_name(conv->account)); 4268 gaim_account_get_protocol_name(conv->account));
4269 gtk_widget_set_size_request(gtkconv->entry, -1,
4270 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height"));
4353 gtkconv->entry_buffer = 4271 gtkconv->entry_buffer =
4354 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); 4272 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry));
4355 gaim_setup_imhtml(gtkconv->entry);
4356 gtk_imhtml_set_editable(GTK_IMHTML(gtkconv->entry), TRUE);
4357 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gtkconv->entry),
4358 GTK_WRAP_WORD_CHAR);
4359 gtk_widget_set_size_request(gtkconv->entry, -1,
4360 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height"));
4361 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); 4273 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv);
4362 4274
4363 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", 4275 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event",
4364 G_CALLBACK(entry_key_press_cb), conv); 4276 G_CALLBACK(entry_key_press_cb), conv);
4365 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", G_CALLBACK(send_cb), conv); 4277 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", G_CALLBACK(send_cb), conv);
4371 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", 4283 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text",
4372 G_CALLBACK(insert_text_cb), conv); 4284 G_CALLBACK(insert_text_cb), conv);
4373 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", 4285 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range",
4374 G_CALLBACK(delete_text_cb), conv); 4286 G_CALLBACK(delete_text_cb), conv);
4375 4287
4376 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
4377 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry));
4378
4379 gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(gtkconv->entry));
4380 gtk_widget_show(gtkconv->entry);
4381 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(gtkconv->toolbar),
4382 gtkconv->entry);
4383 /* had to move this after the imtoolbar is attached so that the 4288 /* had to move this after the imtoolbar is attached so that the
4384 * signals get fired to toggle the buttons on the toolbar as well. 4289 * signals get fired to toggle the buttons on the toolbar as well.
4385 */ 4290 */
4386 default_formatize(conv); 4291 default_formatize(conv);
4387 4292
5730 g_return_if_fail(conv != NULL); 5635 g_return_if_fail(conv != NULL);
5731 g_return_if_fail(GAIM_IS_GTK_CONVERSATION(conv)); 5636 g_return_if_fail(GAIM_IS_GTK_CONVERSATION(conv));
5732 g_return_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_IM); 5637 g_return_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_IM);
5733 5638
5734 gtkconv = GAIM_GTK_CONVERSATION(conv); 5639 gtkconv = GAIM_GTK_CONVERSATION(conv);
5735 5640
5736 if (!gtkconv->u.im->show_icon) 5641 if (!gtkconv->u.im->show_icon)
5737 return; 5642 return;
5738 5643
5739 account = gaim_conversation_get_account(conv); 5644 account = gaim_conversation_get_account(conv);
5740 if(account && account->gc) 5645 if(account && account->gc)