| 4162 gtk_widget_set_size_request(gtkconv->lower_hbox, -1, height + PIDGIN_HIG_BOX_SPACE); |
4162 gtk_widget_set_size_request(gtkconv->lower_hbox, -1, height + PIDGIN_HIG_BOX_SPACE); |
| 4163 g_idle_add(reset_auto_resize_cb, gtkconv); |
4163 g_idle_add(reset_auto_resize_cb, gtkconv); |
| 4164 } |
4164 } |
| 4165 } |
4165 } |
| 4166 |
4166 |
| 4167 static GtkWidget * |
4167 static void |
| 4168 setup_chat_pane(PidginConversation *gtkconv) |
4168 setup_chat_topic(PidginConversation *gtkconv, GtkWidget *vbox) |
| 4169 { |
4169 { |
| 4170 PurplePluginProtocolInfo *prpl_info; |
|
| 4171 PurpleConversation *conv = gtkconv->active_conv; |
4170 PurpleConversation *conv = gtkconv->active_conv; |
| 4172 PidginChatPane *gtkchat; |
4171 PurpleConnection *gc = purple_conversation_get_gc(conv); |
| 4173 PurpleConnection *gc; |
4172 PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); |
| 4174 GtkWidget *vpaned, *hpaned; |
|
| 4175 GtkWidget *vbox, *hbox, *frame; |
|
| 4176 GtkWidget *imhtml_sw; |
|
| 4177 GtkPolicyType imhtml_sw_hscroll; |
|
| 4178 GtkWidget *lbox; |
|
| 4179 GtkWidget *label; |
|
| 4180 GtkWidget *list; |
|
| 4181 GtkWidget *sw; |
|
| 4182 GtkListStore *ls; |
|
| 4183 GtkCellRenderer *rend; |
|
| 4184 GtkTreeViewColumn *col; |
|
| 4185 void *blist_handle = purple_blist_get_handle(); |
|
| 4186 GList *focus_chain = NULL; |
|
| 4187 int ul_width; |
|
| 4188 |
|
| 4189 gtkchat = gtkconv->u.chat; |
|
| 4190 gc = purple_conversation_get_gc(conv); |
|
| 4191 g_return_val_if_fail(gc != NULL, NULL); |
|
| 4192 g_return_val_if_fail(gc->prpl != NULL, NULL); |
|
| 4193 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
| 4194 |
|
| 4195 /* Setup the outer pane. */ |
|
| 4196 vpaned = gtk_vpaned_new(); |
|
| 4197 gtk_widget_show(vpaned); |
|
| 4198 |
|
| 4199 /* Setup the top part of the pane. */ |
|
| 4200 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
|
| 4201 gtk_paned_pack1(GTK_PANED(vpaned), vbox, TRUE, TRUE); |
|
| 4202 gtk_widget_show(vbox); |
|
| 4203 |
|
| 4204 if (prpl_info->options & OPT_PROTO_CHAT_TOPIC) |
4173 if (prpl_info->options & OPT_PROTO_CHAT_TOPIC) |
| 4205 { |
4174 { |
| |
4175 GtkWidget *hbox, *label; |
| |
4176 PidginChatPane *gtkchat = gtkconv->u.chat; |
| |
4177 |
| 4206 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4178 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4207 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
4179 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 4208 gtk_widget_show(hbox); |
4180 gtk_widget_show(hbox); |
| 4209 |
4181 |
| 4210 label = gtk_label_new(_("Topic:")); |
4182 label = gtk_label_new(_("Topic:")); |
| 4221 } |
4193 } |
| 4222 |
4194 |
| 4223 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); |
4195 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); |
| 4224 gtk_widget_show(gtkchat->topic_text); |
4196 gtk_widget_show(gtkchat->topic_text); |
| 4225 } |
4197 } |
| 4226 |
4198 } |
| 4227 /* Setup the horizontal pane. */ |
4199 |
| 4228 hpaned = gtk_hpaned_new(); |
4200 static void |
| 4229 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); |
4201 setup_chat_userlist(PidginConversation *gtkconv, GtkWidget *hpaned) |
| 4230 gtk_widget_show(hpaned); |
4202 { |
| 4231 |
4203 PidginChatPane *gtkchat = gtkconv->u.chat; |
| 4232 /* Setup gtkihmtml. */ |
4204 GtkWidget *lbox, *sw, *list; |
| 4233 frame = pidgin_create_imhtml(FALSE, >kconv->imhtml, NULL, &imhtml_sw); |
4205 GtkListStore *ls; |
| 4234 gtk_widget_set_name(gtkconv->imhtml, "pidgin_conv_imhtml"); |
4206 GtkCellRenderer *rend; |
| 4235 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), TRUE); |
4207 GtkTreeViewColumn *col; |
| 4236 gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE); |
4208 int ul_width; |
| 4237 gtk_widget_show(frame); |
4209 void *blist_handle = purple_blist_get_handle(); |
| 4238 gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
4210 PurpleConversation *conv = gtkconv->active_conv; |
| 4239 &imhtml_sw_hscroll, NULL); |
|
| 4240 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
|
| 4241 imhtml_sw_hscroll, GTK_POLICY_ALWAYS); |
|
| 4242 gtk_widget_set_size_request(gtkconv->imhtml, |
|
| 4243 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_width"), |
|
| 4244 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_height")); |
|
| 4245 |
|
| 4246 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
|
| 4247 G_CALLBACK(size_allocate_cb), gtkconv); |
|
| 4248 |
|
| 4249 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", |
|
| 4250 G_CALLBACK(entry_stop_rclick_cb), NULL); |
|
| 4251 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
|
| 4252 G_CALLBACK(refocus_entry_cb), gtkconv); |
|
| 4253 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
|
| 4254 G_CALLBACK(refocus_entry_cb), gtkconv); |
|
| 4255 |
4211 |
| 4256 /* Build the right pane. */ |
4212 /* Build the right pane. */ |
| 4257 lbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4213 lbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4258 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
4214 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
| 4259 gtk_widget_show(lbox); |
4215 gtk_widget_show(lbox); |
| 4330 gtk_widget_show(list); |
4284 gtk_widget_show(list); |
| 4331 |
4285 |
| 4332 gtkchat->list = list; |
4286 gtkchat->list = list; |
| 4333 |
4287 |
| 4334 gtk_container_add(GTK_CONTAINER(sw), list); |
4288 gtk_container_add(GTK_CONTAINER(sw), list); |
| |
4289 } |
| |
4290 |
| |
4291 static GtkWidget * |
| |
4292 setup_common_pane(PidginConversation *gtkconv) |
| |
4293 { |
| |
4294 GtkWidget *paned, *vbox, *frame, *imhtml_sw; |
| |
4295 PurpleConversation *conv = gtkconv->active_conv; |
| |
4296 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); |
| |
4297 GtkPolicyType imhtml_sw_hscroll; |
| |
4298 |
| |
4299 paned = gtk_vpaned_new(); |
| |
4300 gtk_widget_show(paned); |
| |
4301 |
| |
4302 /* Setup the top part of the pane */ |
| |
4303 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| |
4304 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); |
| |
4305 gtk_widget_show(vbox); |
| |
4306 |
| |
4307 /* Setup the gtkimhtml widget */ |
| |
4308 frame = pidgin_create_imhtml(FALSE, >kconv->imhtml, NULL, &imhtml_sw); |
| |
4309 if (chat) { |
| |
4310 GtkWidget *hpaned; |
| |
4311 |
| |
4312 /* Add the topic */ |
| |
4313 setup_chat_topic(gtkconv, vbox); |
| |
4314 |
| |
4315 /* Add the gtkimhtml frame */ |
| |
4316 hpaned = gtk_hpaned_new(); |
| |
4317 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); |
| |
4318 gtk_widget_show(hpaned); |
| |
4319 gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE); |
| |
4320 |
| |
4321 /* Now add the userlist */ |
| |
4322 setup_chat_userlist(gtkconv, hpaned); |
| |
4323 } else { |
| |
4324 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
| |
4325 } |
| |
4326 gtk_widget_show(frame); |
| |
4327 |
| |
4328 gtk_widget_set_name(gtkconv->imhtml, "pidgin_conv_imhtml"); |
| |
4329 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),TRUE); |
| |
4330 |
| |
4331 gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
| |
4332 &imhtml_sw_hscroll, NULL); |
| |
4333 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
| |
4334 imhtml_sw_hscroll, GTK_POLICY_ALWAYS); |
| |
4335 |
| |
4336 gtk_widget_set_size_request(gtkconv->imhtml, |
| |
4337 chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_width") : |
| |
4338 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_width"), |
| |
4339 chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_height") : |
| |
4340 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_height")); |
| |
4341 |
| |
4342 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
| |
4343 G_CALLBACK(size_allocate_cb), gtkconv); |
| |
4344 |
| |
4345 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", |
| |
4346 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| |
4347 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
| |
4348 G_CALLBACK(refocus_entry_cb), gtkconv); |
| |
4349 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
| |
4350 G_CALLBACK(refocus_entry_cb), gtkconv); |
| 4335 |
4351 |
| 4336 /* Setup the bottom half of the conversation window */ |
4352 /* Setup the bottom half of the conversation window */ |
| 4337 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4353 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4338 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, TRUE); |
4354 gtk_paned_pack2(GTK_PANED(paned), vbox, FALSE, TRUE); |
| 4339 gtk_widget_show(vbox); |
4355 gtk_widget_show(vbox); |
| 4340 |
4356 |
| 4341 gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4357 gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4342 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0); |
4358 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0); |
| 4343 gtk_widget_show(gtkconv->lower_hbox); |
4359 gtk_widget_show(gtkconv->lower_hbox); |
| 4349 /* Setup the toolbar, entry widget and all signals */ |
4365 /* Setup the toolbar, entry widget and all signals */ |
| 4350 frame = pidgin_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar, NULL); |
4366 frame = pidgin_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar, NULL); |
| 4351 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
4367 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
| 4352 gtk_widget_show(frame); |
4368 gtk_widget_show(frame); |
| 4353 |
4369 |
| 4354 g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", |
|
| 4355 G_CALLBACK(entry_popup_menu_cb), gtkconv); |
|
| 4356 |
|
| 4357 gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); |
4370 gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); |
| 4358 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
4371 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
| 4359 purple_account_get_protocol_name(conv->account)); |
4372 purple_account_get_protocol_name(conv->account)); |
| 4360 gtk_widget_set_size_request(gtkconv->lower_hbox, -1, |
4373 gtk_widget_set_size_request(gtkconv->lower_hbox, -1, |
| 4361 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height")); |
4374 chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height") : |
| 4362 gtkconv->entry_buffer = |
4375 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height")); |
| 4363 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
4376 |
| 4364 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", gtkconv); |
4377 g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", |
| 4365 g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", |
4378 G_CALLBACK(entry_popup_menu_cb), gtkconv); |
| 4366 G_CALLBACK(resize_imhtml_cb), gtkconv); |
|
| 4367 |
|
| 4368 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", |
4379 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", |
| 4369 G_CALLBACK(entry_key_press_cb), gtkconv); |
4380 G_CALLBACK(entry_key_press_cb), gtkconv); |
| 4370 g_signal_connect_after(G_OBJECT(gtkconv->entry), "message_send", |
4381 g_signal_connect_after(G_OBJECT(gtkconv->entry), "message_send", |
| 4371 G_CALLBACK(send_cb), gtkconv); |
4382 G_CALLBACK(send_cb), gtkconv); |
| 4372 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
4383 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
| 4373 G_CALLBACK(entry_stop_rclick_cb), NULL); |
4384 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| 4374 g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", |
4385 g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", |
| 4375 G_CALLBACK(size_allocate_cb), gtkconv); |
4386 G_CALLBACK(size_allocate_cb), gtkconv); |
| 4376 |
4387 |
| 4377 default_formatize(gtkconv); |
|
| 4378 |
|
| 4379 /* |
|
| 4380 * Focus for chat windows should be as follows: |
|
| 4381 * Tab title -> chat topic -> conversation scrollback -> user list -> |
|
| 4382 * user list buttons -> entry -> buttons at bottom |
|
| 4383 */ |
|
| 4384 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
|
| 4385 gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focus_chain); |
|
| 4386 |
|
| 4387 return vpaned; |
|
| 4388 } |
|
| 4389 |
|
| 4390 static GtkWidget * |
|
| 4391 setup_im_pane(PidginConversation *gtkconv) |
|
| 4392 { |
|
| 4393 PurpleConversation *conv = gtkconv->active_conv; |
|
| 4394 GtkWidget *frame; |
|
| 4395 GtkWidget *imhtml_sw; |
|
| 4396 GtkPolicyType imhtml_sw_hscroll; |
|
| 4397 GtkWidget *paned; |
|
| 4398 GtkWidget *vbox; |
|
| 4399 GtkWidget *vbox2; |
|
| 4400 GList *focus_chain = NULL; |
|
| 4401 |
|
| 4402 /* Setup the outer pane */ |
|
| 4403 paned = gtk_vpaned_new(); |
|
| 4404 gtk_widget_show(paned); |
|
| 4405 |
|
| 4406 /* Setup the top part of the pane */ |
|
| 4407 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
|
| 4408 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); |
|
| 4409 gtk_widget_show(vbox); |
|
| 4410 |
|
| 4411 /* Setup the gtkimhtml widget */ |
|
| 4412 frame = pidgin_create_imhtml(FALSE, >kconv->imhtml, NULL, &imhtml_sw); |
|
| 4413 gtk_widget_set_name(gtkconv->imhtml, "pidgin_conv_imhtml"); |
|
| 4414 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),TRUE); |
|
| 4415 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
|
| 4416 gtk_widget_show(frame); |
|
| 4417 gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
|
| 4418 &imhtml_sw_hscroll, NULL); |
|
| 4419 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(imhtml_sw), |
|
| 4420 imhtml_sw_hscroll, GTK_POLICY_ALWAYS); |
|
| 4421 |
|
| 4422 gtk_widget_set_size_request(gtkconv->imhtml, |
|
| 4423 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_width"), |
|
| 4424 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_height")); |
|
| 4425 |
|
| 4426 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
|
| 4427 G_CALLBACK(size_allocate_cb), gtkconv); |
|
| 4428 |
|
| 4429 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", |
|
| 4430 G_CALLBACK(entry_stop_rclick_cb), NULL); |
|
| 4431 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
|
| 4432 G_CALLBACK(refocus_entry_cb), gtkconv); |
|
| 4433 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
|
| 4434 G_CALLBACK(refocus_entry_cb), gtkconv); |
|
| 4435 |
|
| 4436 /* Setup the bottom half of the conversation window */ |
|
| 4437 vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
|
| 4438 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, TRUE); |
|
| 4439 gtk_widget_show(vbox2); |
|
| 4440 |
|
| 4441 gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
|
| 4442 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->lower_hbox, TRUE, TRUE, 0); |
|
| 4443 gtk_widget_show(gtkconv->lower_hbox); |
|
| 4444 |
|
| 4445 vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
|
| 4446 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox2, TRUE, TRUE, 0); |
|
| 4447 gtk_widget_show(vbox2); |
|
| 4448 |
|
| 4449 /* Setup the toolbar, entry widget and all signals */ |
|
| 4450 frame = pidgin_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar, NULL); |
|
| 4451 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0); |
|
| 4452 gtk_widget_show(frame); |
|
| 4453 |
|
| 4454 g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", |
|
| 4455 G_CALLBACK(entry_popup_menu_cb), gtkconv); |
|
| 4456 |
|
| 4457 gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); |
|
| 4458 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
|
| 4459 purple_account_get_protocol_name(conv->account)); |
|
| 4460 gtk_widget_set_size_request(gtkconv->lower_hbox, -1, |
|
| 4461 purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height")); |
|
| 4462 gtkconv->entry_buffer = |
4388 gtkconv->entry_buffer = |
| 4463 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
4389 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
| 4464 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", gtkconv); |
4390 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", gtkconv); |
| 4465 |
4391 |
| 4466 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", |
4392 if (!chat) { |
| 4467 G_CALLBACK(entry_key_press_cb), gtkconv); |
4393 /* For sending typing notifications for IMs */ |
| 4468 g_signal_connect_after(G_OBJECT(gtkconv->entry), "message_send", |
4394 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", |
| 4469 G_CALLBACK(send_cb), gtkconv); |
4395 G_CALLBACK(insert_text_cb), gtkconv); |
| 4470 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
4396 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", |
| 4471 G_CALLBACK(entry_stop_rclick_cb), NULL); |
4397 G_CALLBACK(delete_text_cb), gtkconv); |
| 4472 g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", |
4398 gtkconv->u.im->typing_timer = 0; |
| 4473 G_CALLBACK(size_allocate_cb), gtkconv); |
4399 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
| 4474 |
4400 gtkconv->u.im->show_icon = TRUE; |
| 4475 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", |
4401 } |
| 4476 G_CALLBACK(insert_text_cb), gtkconv); |
4402 |
| 4477 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", |
|
| 4478 G_CALLBACK(delete_text_cb), gtkconv); |
|
| 4479 g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", |
4403 g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", |
| 4480 G_CALLBACK(resize_imhtml_cb), gtkconv); |
4404 G_CALLBACK(resize_imhtml_cb), gtkconv); |
| 4481 |
4405 |
| 4482 /* had to move this after the imtoolbar is attached so that the |
|
| 4483 * signals get fired to toggle the buttons on the toolbar as well. |
|
| 4484 */ |
|
| 4485 default_formatize(gtkconv); |
4406 default_formatize(gtkconv); |
| 4486 |
|
| 4487 g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", |
4407 g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", |
| 4488 G_CALLBACK(clear_formatting_cb), gtkconv); |
4408 G_CALLBACK(clear_formatting_cb), gtkconv); |
| 4489 |
4409 |
| 4490 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
|
| 4491 gtkconv->u.im->show_icon = TRUE; |
|
| 4492 |
|
| 4493 /* |
|
| 4494 * Focus for IM windows should be as follows: |
|
| 4495 * Tab title -> conversation scrollback -> entry |
|
| 4496 */ |
|
| 4497 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
|
| 4498 gtk_container_set_focus_chain(GTK_CONTAINER(vbox2), focus_chain); |
|
| 4499 |
|
| 4500 gtkconv->u.im->typing_timer = 0; |
|
| 4501 return paned; |
4410 return paned; |
| 4502 } |
4411 } |
| 4503 |
4412 |
| 4504 static void |
4413 static void |
| 4505 conv_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, |
4414 conv_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, |