comparison pidgin/gtkconv.c @ 18803:abb9aac69507

merge of '7ee71f1a32c4a5d7001c0049f2c7ec1e6cb54fa3' and 'c896d38533c1a23a6748a75257104e1f501999e5'
author Ka-Hing Cheung <khc@hxbc.us>
date Sun, 05 Aug 2007 19:42:29 +0000
parents 42161f9233bf 95fe5195bf98
children 25c2af20affe 536ee8e459ef
comparison
equal deleted inserted replaced
18790:42161f9233bf 18803:abb9aac69507
6254 6254
6255 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || 6255 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) ||
6256 (fields & PIDGIN_CONV_SET_TITLE) || 6256 (fields & PIDGIN_CONV_SET_TITLE) ||
6257 (fields & PIDGIN_CONV_TOPIC)) 6257 (fields & PIDGIN_CONV_TOPIC))
6258 { 6258 {
6259 char *title; 6259 char *title, *truncate = NULL, truncchar;
6260 PurpleConvIm *im = NULL; 6260 PurpleConvIm *im = NULL;
6261 PurpleAccount *account = purple_conversation_get_account(conv); 6261 PurpleAccount *account = purple_conversation_get_account(conv);
6262 PurpleBuddy *buddy = NULL;
6263 PurplePresence *p = NULL;
6262 char *markup = NULL; 6264 char *markup = NULL;
6263 AtkObject *accessibility_obj; 6265 AtkObject *accessibility_obj;
6264 /* I think this is a little longer than it needs to be but I'm lazy. */ 6266 /* I think this is a little longer than it needs to be but I'm lazy. */
6265 char style[51]; 6267 char *style, *status_style;
6266 6268
6267 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) 6269 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
6268 im = PURPLE_CONV_IM(conv); 6270 im = PURPLE_CONV_IM(conv);
6269 6271
6270 if ((account == NULL) || 6272 if ((account == NULL) ||
6273 && purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv)))) 6275 && purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))))
6274 title = g_strdup_printf("(%s)", purple_conversation_get_title(conv)); 6276 title = g_strdup_printf("(%s)", purple_conversation_get_title(conv));
6275 else 6277 else
6276 title = g_strdup(purple_conversation_get_title(conv)); 6278 title = g_strdup(purple_conversation_get_title(conv));
6277 6279
6280 if ((truncate = strchr(title, ' ')) ||
6281 (truncate = strchr(title, '@'))) {
6282 truncchar = *truncate;
6283 *truncate = '\0';
6284 }
6285
6278 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 6286 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
6279 PurpleBuddy *buddy = purple_find_buddy(account, conv->name); 6287 buddy = purple_find_buddy(account, conv->name);
6280 if (buddy) 6288 if (buddy) {
6289 p = purple_buddy_get_presence(buddy);
6281 markup = pidgin_blist_get_name_markup(buddy, FALSE, FALSE); 6290 markup = pidgin_blist_get_name_markup(buddy, FALSE, FALSE);
6282 else 6291 } else {
6283 markup = title; 6292 markup = title;
6293 }
6284 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { 6294 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) {
6285 PurpleConvChat *chat = PURPLE_CONV_CHAT(conv); 6295 PurpleConvChat *chat = PURPLE_CONV_CHAT(conv);
6286 const char *topic = purple_conv_chat_get_topic(chat); 6296 const char *topic = purple_conv_chat_get_topic(chat);
6287 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", 6297 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>",
6288 purple_conversation_get_title(conv), 6298 purple_conversation_get_title(conv),
6294 CONV_TEXT_COLUMN, markup, -1); 6304 CONV_TEXT_COLUMN, markup, -1);
6295 6305
6296 if (title != markup) 6306 if (title != markup)
6297 g_free(markup); 6307 g_free(markup);
6298 6308
6299 *style = '\0';
6300
6301 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label)) 6309 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label))
6302 gtk_widget_realize(gtkconv->tab_label); 6310 gtk_widget_realize(gtkconv->tab_label);
6303 6311
6304 accessibility_obj = gtk_widget_get_accessible(gtkconv->tab_cont); 6312 accessibility_obj = gtk_widget_get_accessible(gtkconv->tab_cont);
6305 if (im != NULL && 6313 if (im != NULL &&
6306 purple_conv_im_get_typing_state(im) == PURPLE_TYPING) 6314 purple_conv_im_get_typing_state(im) == PURPLE_TYPING) {
6307 {
6308 atk_object_set_description(accessibility_obj, _("Typing")); 6315 atk_object_set_description(accessibility_obj, _("Typing"));
6309 strncpy(style, "color=\"#4e9a06\"", sizeof(style)); 6316 style = "color=\"#4e9a06\"";
6317 } else if (im != NULL &&
6318 purple_conv_im_get_typing_state(im) == PURPLE_TYPED) {
6319 atk_object_set_description(accessibility_obj, _("Stopped Typing"));
6320 style = "color=\"#c4a000\"";
6321 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_NICK) {
6322 atk_object_set_description(accessibility_obj, _("Nick Said"));
6323 style = "color=\"#204a87\" style=\"italic\" weight=\"bold\"";
6324 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT) {
6325 atk_object_set_description(accessibility_obj, _("Unread Messages"));
6326 style = "color=\"#cc0000\" weight=\"bold\"";
6327 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) {
6328 atk_object_set_description(accessibility_obj, _("New Event"));
6329 style = "color=\"#888a85\" style=\"italic\"";
6330 } else {
6331 style = "";
6310 } 6332 }
6311 else if (im != NULL && 6333
6312 purple_conv_im_get_typing_state(im) == PURPLE_TYPED) 6334 if (p && purple_presence_is_status_primitive_active(p, PURPLE_STATUS_OFFLINE)) {
6313 { 6335 status_style = "strikethrough='true'";
6314 atk_object_set_description(accessibility_obj, _("Stopped Typing")); 6336 } else if (p && !purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AVAILABLE) &&
6315 strncpy(style, "color=\"#c4a000\"", sizeof(style)); 6337 !purple_presence_is_status_primitive_active(p, PURPLE_STATUS_INVISIBLE)) {
6338 status_style = "style='italic'";
6339 } else {
6340 status_style = "";
6316 } 6341 }
6317 else if (gtkconv->unseen_state == PIDGIN_UNSEEN_NICK) 6342
6318 { 6343 if (*style != '\0' || *status_style != '\0')
6319 atk_object_set_description(accessibility_obj, _("Nick Said"));
6320 strncpy(style, "color=\"#204a87\" style=\"italic\" weight=\"bold\"", sizeof(style));
6321 }
6322 else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT)
6323 {
6324 atk_object_set_description(accessibility_obj, _("Unread Messages"));
6325 strncpy(style, "color=\"#cc0000\" weight=\"bold\"", sizeof(style));
6326 }
6327 else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT)
6328 {
6329 atk_object_set_description(accessibility_obj, _("New Event"));
6330 strncpy(style, "color=\"#888a85\" style=\"italic\"", sizeof(style));
6331 }
6332
6333 if (*style != '\0')
6334 { 6344 {
6335 char *html_title,*label; 6345 char *html_title,*label;
6336 6346
6337 html_title = g_markup_escape_text(title, -1); 6347 html_title = g_markup_escape_text(title, -1);
6338 6348 label = g_strdup_printf("<span %s %s>%s</span>",
6339 label = g_strdup_printf("<span %s>%s</span>", 6349 style, status_style, html_title);
6340 style, html_title);
6341 g_free(html_title); 6350 g_free(html_title);
6342 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label); 6351 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label);
6343 g_free(label); 6352 g_free(label);
6344 } 6353 }
6345 else 6354 else
6346 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title); 6355 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title);
6356
6357 if (truncate)
6358 *truncate = truncchar;
6347 6359
6348 if (pidgin_conv_window_is_active_conversation(conv)) 6360 if (pidgin_conv_window_is_active_conversation(conv))
6349 update_typing_icon(gtkconv); 6361 update_typing_icon(gtkconv);
6350 6362
6351 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); 6363 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title);
8604 gtk_box_pack_start(GTK_BOX(gtkconv->menu_tabby), gtkconv->menu_label, TRUE, TRUE, 0); 8616 gtk_box_pack_start(GTK_BOX(gtkconv->menu_tabby), gtkconv->menu_label, TRUE, TRUE, 0);
8605 gtk_widget_show(gtkconv->menu_label); 8617 gtk_widget_show(gtkconv->menu_label);
8606 gtk_misc_set_alignment(GTK_MISC(gtkconv->menu_label), 0, 0); 8618 gtk_misc_set_alignment(GTK_MISC(gtkconv->menu_label), 0, 0);
8607 8619
8608 gtk_widget_show(gtkconv->menu_tabby); 8620 gtk_widget_show(gtkconv->menu_tabby);
8621 gtk_widget_set_size_request(gtkconv->menu_tabby, 0, -1);
8609 8622
8610 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) 8623 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
8611 pidgin_conv_update_buddy_icon(conv); 8624 pidgin_conv_update_buddy_icon(conv);
8612 8625
8613 /* Build and set conversations tab */ 8626 /* Build and set conversations tab */
8720 gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, 8733 gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont,
8721 !tabs_side && !angle && pidgin_conv_window_get_gtkconv_count(win) > 1, 8734 !tabs_side && !angle && pidgin_conv_window_get_gtkconv_count(win) > 1,
8722 TRUE, GTK_PACK_START); 8735 TRUE, GTK_PACK_START);
8723 8736
8724 /* show the widgets */ 8737 /* show the widgets */
8725 gtk_widget_show(gtkconv->icon); 8738 /* gtk_widget_show(gtkconv->icon); */
8726 gtk_widget_show(gtkconv->tab_label); 8739 gtk_widget_show(gtkconv->tab_label);
8727 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/close_on_tabs")) 8740 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/close_on_tabs"))
8728 gtk_widget_show(gtkconv->close); 8741 gtk_widget_show(gtkconv->close);
8729 gtk_widget_show(gtkconv->tabby); 8742 gtk_widget_show(gtkconv->tabby);
8730 gtk_widget_show(ebox); 8743 gtk_widget_show(ebox);