Mercurial > pidgin.yaz
comparison pidgin/gtkconv.c @ 25515:37af7de81430
propagate from branch 'im.pidgin.pidgin' (head 4aabd11d86454556c0ed6e7c67640fa2a2ea5d6b)
to branch 'im.pidgin.pidgin.yaz' (head 8376a42bcad5e1ffeaa542cec3a258adb1b83c1a)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Wed, 20 Jun 2007 04:56:08 +0000 |
parents | a8c701d877aa 90d558470507 |
children | 708198aadad8 |
comparison
equal
deleted
inserted
replaced
18204:4cc042912ac2 | 25515:37af7de81430 |
---|---|
134 #define MIN_COLOR_CONTRAST 200 | 134 #define MIN_COLOR_CONTRAST 200 |
135 | 135 |
136 #define NUM_NICK_COLORS 220 | 136 #define NUM_NICK_COLORS 220 |
137 static GdkColor *nick_colors = NULL; | 137 static GdkColor *nick_colors = NULL; |
138 static guint nbr_nick_colors; | 138 static guint nbr_nick_colors; |
139 | |
140 /* yaz. If you want to use shortcut keys that may conflict with | |
141 inputmethods, change this to 1. */ | |
142 #define ENABLE_SHORTCUT 0 | |
139 | 143 |
140 typedef struct { | 144 typedef struct { |
141 GtkWidget *window; | 145 GtkWidget *window; |
142 | 146 |
143 GtkWidget *entry; | 147 GtkWidget *entry; |
2782 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb, | 2786 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb, |
2783 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW }, | 2787 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW }, |
2784 | 2788 |
2785 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>", NULL }, | 2789 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>", NULL }, |
2786 | 2790 |
2791 #if ENABLE_SHORTCUT | |
2787 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, | 2792 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, |
2788 "<StockItem>", GTK_STOCK_FIND }, | 2793 "<StockItem>", GTK_STOCK_FIND }, |
2794 #else | |
2795 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, | |
2796 "<Item>" }, | |
2797 #endif | |
2789 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, "<Item>", NULL }, | 2798 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, "<Item>", NULL }, |
2790 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, | 2799 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, |
2791 "<StockItem>", GTK_STOCK_SAVE_AS }, | 2800 "<StockItem>", GTK_STOCK_SAVE_AS }, |
2801 #if ENABLE_SHORTCUT | |
2792 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, | 2802 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, |
2793 | 2803 #else |
2804 { N_("/Conversation/Clea_r Scrollback"), NULL, menu_clear_cb, 0, "<Item>" }, | |
2805 #endif | |
2794 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, | 2806 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, |
2795 | 2807 |
2796 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, | 2808 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, |
2797 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, | 2809 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, |
2798 0, "<Item>", NULL }, | 2810 0, "<Item>", NULL }, |
2811 #if ENABLE_SHORTCUT | |
2799 { N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0, | 2812 { N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0, |
2800 "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, | 2813 "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, |
2814 #else | |
2815 { N_("/Conversation/_Get Info"), NULL, menu_get_info_cb, 0, | |
2816 "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, | |
2817 #endif | |
2801 { N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0, | 2818 { N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0, |
2802 "<Item>", NULL }, | 2819 "<Item>", NULL }, |
2803 { N_("/Conversation/M_ore"), NULL, NULL, 0, "<Branch>", NULL }, | 2820 { N_("/Conversation/M_ore"), NULL, NULL, 0, "<Branch>", NULL }, |
2804 | 2821 |
2805 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>", NULL }, | 2822 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>", NULL }, |
3483 | 3500 |
3484 if (win->menu.send_to != NULL) | 3501 if (win->menu.send_to != NULL) |
3485 gtk_widget_destroy(win->menu.send_to); | 3502 gtk_widget_destroy(win->menu.send_to); |
3486 | 3503 |
3487 /* Build the Send To menu */ | 3504 /* Build the Send To menu */ |
3505 | |
3506 #if ENABLE_SHORTCUT | |
3488 win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("_Send To")); | 3507 win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("_Send To")); |
3508 #else | |
3509 win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("Send To")); //to free Alt-s. intentional. --yaz | |
3510 #endif | |
3489 gtk_widget_show(win->menu.send_to); | 3511 gtk_widget_show(win->menu.send_to); |
3490 | 3512 |
3491 menu = gtk_menu_new(); | 3513 menu = gtk_menu_new(); |
3492 gtk_menu_shell_insert(GTK_MENU_SHELL(win->menu.menubar), | 3514 gtk_menu_shell_insert(GTK_MENU_SHELL(win->menu.menubar), |
3493 win->menu.send_to, 2); | 3515 win->menu.send_to, 2); |
3957 PurplePluginProtocolInfo *prpl_info = NULL; | 3979 PurplePluginProtocolInfo *prpl_info = NULL; |
3958 PurpleConnection *gc; | 3980 PurpleConnection *gc; |
3959 PurpleConversation *conv = gtkconv->active_conv; | 3981 PurpleConversation *conv = gtkconv->active_conv; |
3960 PidginChatPane *gtkchat; | 3982 PidginChatPane *gtkchat; |
3961 char *new_topic; | 3983 char *new_topic; |
3962 const char *current_topic; | 3984 // const char *current_topic; |
3985 char dummy[] = "No Topic"; | |
3986 char *current_topic = NULL; | |
3963 | 3987 |
3964 gc = purple_conversation_get_gc(conv); | 3988 gc = purple_conversation_get_gc(conv); |
3965 | 3989 |
3966 if(!gc || !(prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl))) | 3990 if(!gc || !(prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl))) |
3967 return; | 3991 return; |
3970 return; | 3994 return; |
3971 | 3995 |
3972 gtkconv = PIDGIN_CONVERSATION(conv); | 3996 gtkconv = PIDGIN_CONVERSATION(conv); |
3973 gtkchat = gtkconv->u.chat; | 3997 gtkchat = gtkconv->u.chat; |
3974 new_topic = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtkchat->topic_text))); | 3998 new_topic = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtkchat->topic_text))); |
3999 // purple_debug_info("yaz gtkconv", "new_topic=%s\n", new_topic); | |
3975 current_topic = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(conv)); | 4000 current_topic = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(conv)); |
4001 | |
4002 if(!current_topic) | |
4003 current_topic = dummy; | |
4004 // purple_debug_info("yaz gtkconv", "current_topic=%s\n", current_topic); | |
3976 | 4005 |
3977 if(current_topic && !g_utf8_collate(new_topic, current_topic)){ | 4006 if(current_topic && !g_utf8_collate(new_topic, current_topic)){ |
3978 g_free(new_topic); | 4007 g_free(new_topic); |
3979 return; | 4008 return; |
3980 } | 4009 } |
6153 pidgin_themes_smiley_themeize(PIDGIN_CONVERSATION(conv)->imhtml); | 6182 pidgin_themes_smiley_themeize(PIDGIN_CONVERSATION(conv)->imhtml); |
6154 | 6183 |
6155 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || | 6184 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || |
6156 (fields & PIDGIN_CONV_SET_TITLE)) | 6185 (fields & PIDGIN_CONV_SET_TITLE)) |
6157 { | 6186 { |
6158 char *title; | 6187 char *title, *title_tmp; |
6159 PurpleConvIm *im = NULL; | 6188 PurpleConvIm *im = NULL; |
6160 PurpleAccount *account = purple_conversation_get_account(conv); | 6189 PurpleAccount *account = purple_conversation_get_account(conv); |
6161 PurpleBuddy *buddy; | 6190 PurpleBuddy *buddy; |
6162 char *markup; | 6191 char *markup; |
6163 AtkObject *accessibility_obj; | 6192 AtkObject *accessibility_obj; |
6193 gboolean ellipsis = FALSE; | |
6164 /* I think this is a little longer than it needs to be but I'm lazy. */ | 6194 /* I think this is a little longer than it needs to be but I'm lazy. */ |
6165 char style[51]; | 6195 char style[51]; |
6166 | 6196 |
6167 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) | 6197 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) |
6168 im = PURPLE_CONV_IM(conv); | 6198 im = PURPLE_CONV_IM(conv); |
6218 { | 6248 { |
6219 atk_object_set_description(accessibility_obj, _("New Event")); | 6249 atk_object_set_description(accessibility_obj, _("New Event")); |
6220 strncpy(style, "color=\"#888a85\" style=\"italic\"", sizeof(style)); | 6250 strncpy(style, "color=\"#888a85\" style=\"italic\"", sizeof(style)); |
6221 } | 6251 } |
6222 | 6252 |
6253 // nosuke's tab width patch | |
6254 if ((purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_LEFT|8) | |
6255 || purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_RIGHT|8)) | |
6256 && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs")) | |
6257 ellipsis = TRUE; | |
6258 | |
6259 if (ellipsis) | |
6260 title_tmp = pidgin_gtk_ellipsis_text(gtkconv->tab_label, title, 60, "..."); | |
6261 else | |
6262 title_tmp = title; | |
6263 | |
6264 | |
6223 if (*style != '\0') | 6265 if (*style != '\0') |
6224 { | 6266 { |
6225 char *html_title,*label; | 6267 char *html_title,*label; |
6226 | 6268 |
6227 html_title = g_markup_escape_text(title, -1); | 6269 html_title = g_markup_escape_text(title_tmp, -1); |
6228 | 6270 |
6229 label = g_strdup_printf("<span %s>%s</span>", | 6271 label = g_strdup_printf("<span %s>%s</span>", |
6230 style, html_title); | 6272 style, html_title); |
6231 g_free(html_title); | 6273 g_free(html_title); |
6232 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label); | 6274 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label); |
6233 g_free(label); | 6275 g_free(label); |
6234 } | 6276 } |
6235 else | 6277 else |
6236 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title); | 6278 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title_tmp); |
6237 | 6279 |
6238 if (pidgin_conv_window_is_active_conversation(conv)) | 6280 if (pidgin_conv_window_is_active_conversation(conv)) |
6239 update_typing_icon(gtkconv); | 6281 update_typing_icon(gtkconv); |
6240 | 6282 |
6241 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); | 6283 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); |
6567 } | 6609 } |
6568 | 6610 |
6569 return page_num; | 6611 return page_num; |
6570 } | 6612 } |
6571 | 6613 |
6614 //nosuke | |
6615 static void | |
6616 trim_vertical_tabs_pref_cb(const char *name, PurplePrefType type, | |
6617 gconstpointer value, gpointer data) | |
6618 { | |
6619 GList *l; | |
6620 PurpleConversation *conv; | |
6621 | |
6622 for (l = purple_get_conversations(); l != NULL; l = l->next) { | |
6623 conv = (PurpleConversation *)l->data; | |
6624 | |
6625 if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) | |
6626 continue; | |
6627 | |
6628 pidgin_conv_update_fields(conv, PIDGIN_CONV_SET_TITLE); | |
6629 } | |
6630 } | |
6631 | |
6572 static void | 6632 static void |
6573 close_on_tabs_pref_cb(const char *name, PurplePrefType type, | 6633 close_on_tabs_pref_cb(const char *name, PurplePrefType type, |
6574 gconstpointer value, gpointer data) | 6634 gconstpointer value, gpointer data) |
6575 { | 6635 { |
6576 GList *l; | 6636 GList *l; |
6636 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkwin->notebook), pos&~8); | 6696 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkwin->notebook), pos&~8); |
6637 for (gtkconvs = gtkwin->gtkconvs; gtkconvs != NULL; gtkconvs = gtkconvs->next) { | 6697 for (gtkconvs = gtkwin->gtkconvs; gtkconvs != NULL; gtkconvs = gtkconvs->next) { |
6638 pidgin_conv_tab_pack(gtkwin, gtkconvs->data); | 6698 pidgin_conv_tab_pack(gtkwin, gtkconvs->data); |
6639 } | 6699 } |
6640 } | 6700 } |
6701 trim_vertical_tabs_pref_cb(name, type, value, data); | |
6641 } | 6702 } |
6642 | 6703 |
6643 static void | 6704 static void |
6644 show_timestamps_pref_cb(const char *name, PurplePrefType type, | 6705 show_timestamps_pref_cb(const char *name, PurplePrefType type, |
6645 gconstpointer value, gpointer data) | 6706 gconstpointer value, gpointer data) |
7005 | 7066 |
7006 /* Conversations */ | 7067 /* Conversations */ |
7007 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations"); | 7068 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations"); |
7008 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling", TRUE); | 7069 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling", TRUE); |
7009 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", TRUE); | 7070 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", TRUE); |
7071 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs", FALSE); | |
7010 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold", FALSE); | 7072 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold", FALSE); |
7011 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic", FALSE); | 7073 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic", FALSE); |
7012 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline", FALSE); | 7074 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline", FALSE); |
7013 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck", TRUE); | 7075 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck", TRUE); |
7014 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting", TRUE); | 7076 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting", TRUE); |
7048 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); | 7110 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); |
7049 | 7111 |
7050 /* Connect callbacks. */ | 7112 /* Connect callbacks. */ |
7051 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", | 7113 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", |
7052 close_on_tabs_pref_cb, NULL); | 7114 close_on_tabs_pref_cb, NULL); |
7115 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs", | |
7116 trim_vertical_tabs_pref_cb, NULL); | |
7053 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_timestamps", | 7117 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_timestamps", |
7054 show_timestamps_pref_cb, NULL); | 7118 show_timestamps_pref_cb, NULL); |
7055 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar", | 7119 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar", |
7056 show_formatting_toolbar_pref_cb, NULL); | 7120 show_formatting_toolbar_pref_cb, NULL); |
7057 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/spellcheck", | 7121 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/spellcheck", |