pidgin/gtkconv.c

changeset 21814
51ea68d3a41a
parent 21784
f3baacdf1de8
child 21815
cd9bd951717d
equal deleted inserted replaced
21813:180d34c5351a 21814:51ea68d3a41a
6447 PurplePresence *p = NULL; 6447 PurplePresence *p = NULL;
6448 char *markup = NULL; 6448 char *markup = NULL;
6449 AtkObject *accessibility_obj; 6449 AtkObject *accessibility_obj;
6450 /* I think this is a little longer than it needs to be but I'm lazy. */ 6450 /* I think this is a little longer than it needs to be but I'm lazy. */
6451 char *style; 6451 char *style;
6452 gboolean bold = FALSE;
6453 6452
6454 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) 6453 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
6455 im = PURPLE_CONV_IM(conv); 6454 im = PURPLE_CONV_IM(conv);
6456 6455
6457 if ((account == NULL) || 6456 if ((account == NULL) ||
6482 } 6481 }
6483 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), 6482 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter),
6484 CONV_TEXT_COLUMN, markup, -1); 6483 CONV_TEXT_COLUMN, markup, -1);
6485 /* XXX seanegan Why do I have to do this? */ 6484 /* XXX seanegan Why do I have to do this? */
6486 gtk_widget_queue_draw(gtkconv->infopane); 6485 gtk_widget_queue_draw(gtkconv->infopane);
6487 6486
6488 if (title != markup) 6487 if (title != markup)
6489 g_free(markup); 6488 g_free(markup);
6490 6489
6491 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label)) 6490 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label))
6492 gtk_widget_realize(gtkconv->tab_label); 6491 gtk_widget_realize(gtkconv->tab_label);
6493 6492
6494 accessibility_obj = gtk_widget_get_accessible(gtkconv->tab_cont); 6493 accessibility_obj = gtk_widget_get_accessible(gtkconv->tab_cont);
6495 if (im != NULL && 6494 if (im != NULL &&
6496 purple_conv_im_get_typing_state(im) == PURPLE_TYPING) { 6495 purple_conv_im_get_typing_state(im) == PURPLE_TYPING) {
6497 atk_object_set_description(accessibility_obj, _("Typing")); 6496 atk_object_set_description(accessibility_obj, _("Typing"));
6498 style = "color=\"#4e9a06\""; 6497 style = "tab-label-typing";
6499 } else if (im != NULL && 6498 } else if (im != NULL &&
6500 purple_conv_im_get_typing_state(im) == PURPLE_TYPED) { 6499 purple_conv_im_get_typing_state(im) == PURPLE_TYPED) {
6501 atk_object_set_description(accessibility_obj, _("Stopped Typing")); 6500 atk_object_set_description(accessibility_obj, _("Stopped Typing"));
6502 style = "color=\"#c4a000\""; 6501 style = "tab-label-typed";
6503 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_NICK) { 6502 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_NICK) {
6504 atk_object_set_description(accessibility_obj, _("Nick Said")); 6503 atk_object_set_description(accessibility_obj, _("Nick Said"));
6505 style = "color=\"#204a87\""; 6504 style = "tab-label-attention";
6506 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT) { 6505 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT) {
6507 atk_object_set_description(accessibility_obj, _("Unread Messages")); 6506 atk_object_set_description(accessibility_obj, _("Unread Messages"));
6508 if (gtkconv->active_conv->type == PURPLE_CONV_TYPE_CHAT) 6507 if (gtkconv->active_conv->type == PURPLE_CONV_TYPE_CHAT)
6509 style = "color=\"#cc0000\""; 6508 style = "color=\"#cc0000\"";
6510 else 6509 else
6511 style = "color=\"#204a87\""; 6510 style = "tab-label-attention";
6512 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) { 6511 } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) {
6513 atk_object_set_description(accessibility_obj, _("New Event")); 6512 atk_object_set_description(accessibility_obj, _("New Event"));
6514 style = "color=\"#888a85\""; 6513 style = "tab-label-event";
6515 } else { 6514 } else {
6516 style = NULL; 6515 style = NULL;
6517 } 6516 }
6518 6517
6518 gtk_widget_set_name(gtkconv->tab_label, style);
6519 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title);
6520 gtk_widget_set_state(gtkconv->tab_label, GTK_STATE_ACTIVE);
6521
6519 if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT || 6522 if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT ||
6520 gtkconv->unseen_state == PIDGIN_UNSEEN_NICK || 6523 gtkconv->unseen_state == PIDGIN_UNSEEN_NICK ||
6521 gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) 6524 gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) {
6522 bold = TRUE; 6525 PangoAttrList *list = pango_attr_list_new();
6523 6526 PangoAttribute *attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
6524 if (style || bold) 6527 attr->start_index = 0;
6525 { 6528 attr->end_index = -1;
6526 char *html_title,*label; 6529 pango_attr_list_insert(list, attr);
6527 6530 gtk_label_set_attributes(GTK_LABEL(gtkconv->tab_label), list);
6528 html_title = g_markup_escape_text(title, -1); 6531 pango_attr_list_unref(list);
6529 label = g_strdup_printf("<span %s %s>%s</span>", 6532 } else
6530 style ? style : "", 6533 gtk_label_set_attributes(GTK_LABEL(gtkconv->tab_label), NULL);
6531 bold ? "weight=\"bold\"" : "",
6532 html_title);
6533 g_free(html_title);
6534 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label);
6535 g_free(label);
6536 }
6537 else
6538 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title);
6539 6534
6540 if (pidgin_conv_window_is_active_conversation(conv)) 6535 if (pidgin_conv_window_is_active_conversation(conv))
6541 update_typing_icon(gtkconv); 6536 update_typing_icon(gtkconv);
6542 6537
6543 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); 6538 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title);
7746 PURPLE_SIGNAL_PRIORITY_LOWEST); 7741 PURPLE_SIGNAL_PRIORITY_LOWEST);
7747 purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", handle, 7742 purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", handle,
7748 PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL); 7743 PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL);
7749 purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", handle, 7744 purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", handle,
7750 PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL); 7745 PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL);
7746
7747 {
7748 /* Set default tab colors */
7749 GString *str = g_string_new(NULL);
7750 GtkSettings *settings = gtk_settings_get_default();
7751 struct {
7752 const char *stylename;
7753 const char *labelname;
7754 const char *color;
7755 } styles[] = {
7756 {"pidgin_tab_label_typing_default", "tab-label-typing", "#4e9a06"},
7757 {"pidgin_tab_label_typed_default", "tab-label-typed", "#c4a000"},
7758 {"pidgin_tab_label_attention_default", "tab-label-attention", "#204a87"},
7759 {"pidgin_tab_label_event_default", "tab-label-event", "#888a85"},
7760 {NULL, NULL, NULL}
7761 };
7762 int iter;
7763 for (iter = 0; styles[iter].stylename; iter++) {
7764 if (!gtk_rc_get_style_by_paths(settings, styles[iter].labelname, NULL, G_TYPE_NONE))
7765 /* Apparently both ACTIVE and NORMAL are required */
7766 g_string_append_printf(str, "style \"%s\" {\n"
7767 "fg[ACTIVE] = \"%s\"\n"
7768 "}\n"
7769 "widget \"*%s\" style \"%s\"\n",
7770 styles[iter].stylename,
7771 styles[iter].color,
7772 styles[iter].labelname, styles[iter].stylename);
7773 }
7774 gtk_rc_parse_string(str->str);
7775 g_string_free(str, TRUE);
7776 #if GTK_CHECK_VERSION(2,4,0)
7777 gtk_rc_reset_styles(settings);
7778 #endif
7779 }
7751 } 7780 }
7752 7781
7753 void 7782 void
7754 pidgin_conversations_uninit(void) 7783 pidgin_conversations_uninit(void)
7755 { 7784 {
9048 gtk_widget_show(gtkconv->icon); 9077 gtk_widget_show(gtkconv->icon);
9049 update_tab_icon(conv); 9078 update_tab_icon(conv);
9050 9079
9051 /* Tab label. */ 9080 /* Tab label. */
9052 gtkconv->tab_label = gtk_label_new(tmp_lab = purple_conversation_get_title(conv)); 9081 gtkconv->tab_label = gtk_label_new(tmp_lab = purple_conversation_get_title(conv));
9082 gtk_widget_set_name(gtkconv->tab_label, "tab-label");
9053 9083
9054 gtkconv->menu_tabby = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 9084 gtkconv->menu_tabby = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
9055 gtkconv->menu_label = gtk_label_new(tmp_lab); 9085 gtkconv->menu_label = gtk_label_new(tmp_lab);
9056 gtk_box_pack_start(GTK_BOX(gtkconv->menu_tabby), gtkconv->menu_icon, FALSE, FALSE, 0); 9086 gtk_box_pack_start(GTK_BOX(gtkconv->menu_tabby), gtkconv->menu_icon, FALSE, FALSE, 0);
9057 9087

mercurial