Mercurial > pidgin
changeset 19974:7a118cacd4b0
propagate from branch 'im.pidgin.pidgin' (head 671cfe949215447db0da7081a7e1501693ab4f98)
to branch 'org.maemo.garage.pidgin.pidgin.dialog-transience' (head ec0c632512dfdd332d217cb3173c05338f1feb1c)
author | Gabriel Schulhof <nix@go-nix.ca> |
---|---|
date | Sun, 19 Aug 2007 13:40:34 +0000 |
parents | 1cb5f84cb644 (diff) d1dd84d36d8d (current diff) |
children | 6a0d9fa477d4 |
files | pidgin/gtkconv.c pidgin/gtkdialogs.c pidgin/gtkstatusbox.c |
diffstat | 6 files changed, 74 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Sun Aug 19 13:09:02 2007 +0000 +++ b/NEWS Sun Aug 19 13:40:34 2007 +0000 @@ -14,6 +14,12 @@ Many thanks to everyone who has helped with tracking down the various issues, testing fixes, and getting patches in. + Tim: Sean finally got me to fix some of the buddy list bugs with + Yahoo! when in version 15 mode. So now we have some Yahoo! to + MSN support, which is kind of nice. Looks like some others have + been contributing to Yahoo! while I've been AWOL, so many thanks + to them. + 2.1.0 (7/28/2007): Sean: This release took a bit longer than 3 weeks, but boy is it worth it! We're beginning to experiment with new UI concepts and
--- a/finch/gntconv.c Sun Aug 19 13:09:02 2007 +0000 +++ b/finch/gntconv.c Sun Aug 19 13:40:34 2007 +0000 @@ -60,6 +60,7 @@ static void finch_write_common(PurpleConversation *conv, const char *who, const char *message, PurpleMessageFlags flags, time_t mtime); +static void generate_send_to_menu(FinchConv *ggc); static void send_typing_notification(GntWidget *w, FinchConv *ggconv) @@ -199,10 +200,10 @@ } static PurpleConversation * -find_conv_with_contact(PurpleConversation *conv) +find_conv_with_contact(PurpleAccount *account, const char *name) { PurpleBlistNode *node; - PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); + PurpleBuddy *buddy = purple_find_buddy(account, name); PurpleConversation *ret = NULL; if (!buddy) @@ -272,6 +273,28 @@ PURPLE_MESSAGE_SYSTEM, time(NULL)); } +static void +buddy_signed_on_off(PurpleBuddy *buddy, gpointer null) +{ + PurpleConversation *conv = find_conv_with_contact(buddy->account, buddy->name); + if (conv == NULL) + return; + generate_send_to_menu(conv->ui_data); +} + +static void +account_signed_on_off(PurpleConnection *gc, gpointer null) +{ + GList *ims = purple_get_ims(); + while (ims) { + PurpleConversation *conv = ims->data; + PurpleConversation *cc = find_conv_with_contact(conv->account, conv->name); + if (cc) + generate_send_to_menu(cc->ui_data); + ims = ims->next; + } +} + static gpointer finch_conv_get_handle() { @@ -339,12 +362,15 @@ if (!buds) return; - item = gnt_menuitem_new(_("Send To")); - gnt_menu_add_item(GNT_MENU(menu), item); + if ((item = ggc->u.im->sendto) == NULL) { + item = gnt_menuitem_new(_("Send To")); + gnt_menu_add_item(GNT_MENU(menu), item); + ggc->u.im->sendto = item; + } sub = gnt_menu_new(GNT_MENU_POPUP); gnt_menuitem_set_submenu(item, GNT_MENU(sub)); - for (; buds; buds = buds->next) { + for (; buds; buds = g_slist_delete_link(buds, buds)) { PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data); for (node = node->child; node != NULL; node = node->next) { PurpleBuddy *buddy = (PurpleBuddy *)node; @@ -357,7 +383,7 @@ } } } - for (list = g_list_last(list); list != NULL; list = list->prev) { + for (list = g_list_reverse(list); list != NULL; list = g_list_delete_link(list, list)) { PurplePresence *pre = list->data; PurpleBuddy *buddy = purple_presence_get_buddy(pre); PurpleAccount *account = purple_buddy_get_account(buddy); @@ -370,8 +396,6 @@ g_object_set_data(G_OBJECT(item), "purple_account", account); g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free); } - g_list_free(list); - g_slist_free(buds); } static void @@ -462,7 +486,7 @@ if (ggc) return; - cc = find_conv_with_contact(conv); + cc = find_conv_with_contact(conv->account, conv->name); if (cc && cc->ui_data) ggc = cc->ui_data; else @@ -504,8 +528,6 @@ break; } - gg_create_menu(ggc); - ggc->tv = gnt_text_view_new(); gnt_widget_set_name(ggc->tv, "conversation-window-textview"); gnt_widget_set_size(ggc->tv, purple_prefs_get_int(PREF_ROOT "/size/width"), @@ -527,6 +549,7 @@ g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(create_conv_from_userlist), ggc); gnt_widget_set_visible(tree, purple_prefs_get_bool(PREF_USERLIST)); } else { + ggc->u.im = g_new0(FinchConvIm, 1); gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv); } @@ -558,6 +581,8 @@ g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc); } + gg_create_menu(ggc); + g_free(title); gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry); g_signal_connect(G_OBJECT(ggc->window), "gained-focus", G_CALLBACK(gained_focus_cb), ggc); @@ -1016,6 +1041,14 @@ PURPLE_CALLBACK(update_buddy_typing), NULL); purple_signal_connect(purple_conversations_get_handle(), "chat-left", finch_conv_get_handle(), PURPLE_CALLBACK(chat_left_cb), NULL); + purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", finch_conv_get_handle(), + PURPLE_CALLBACK(buddy_signed_on_off), NULL); + purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_conv_get_handle(), + PURPLE_CALLBACK(buddy_signed_on_off), NULL); + purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_conv_get_handle(), + PURPLE_CALLBACK(account_signed_on_off), NULL); + purple_signal_connect(purple_connections_get_handle(), "signed-off", finch_conv_get_handle(), + PURPLE_CALLBACK(account_signed_on_off), NULL); } void finch_conversation_uninit()
--- a/finch/gntconv.h Sun Aug 19 13:09:02 2007 +0000 +++ b/finch/gntconv.h Sun Aug 19 13:40:34 2007 +0000 @@ -27,6 +27,7 @@ #include <gnt.h> #include <gntwidget.h> +#include <gntmenuitem.h> #include "conversation.h" @@ -50,7 +51,7 @@ GntWidget *window; /* the container */ GntWidget *entry; /* entry */ GntWidget *tv; /* text-view */ - GntWidget *menu; /* future use */ + GntWidget *menu; GntWidget *info; void *pad; @@ -70,7 +71,7 @@ struct _FinchConvIm { - void *nothing_for_now; + GntMenuItem *sendto; void *something_for_later; };
--- a/pidgin/gtkconv.c Sun Aug 19 13:09:02 2007 +0000 +++ b/pidgin/gtkconv.c Sun Aug 19 13:40:34 2007 +0000 @@ -7805,25 +7805,20 @@ if (e->button == 3) { /* Right click was pressed. Popup the Send To menu. */ GtkWidget *menu = gtk_menu_new(), *sub; + gboolean populated = populate_menu_with_options(menu, gtkconv, TRUE); sub = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to)); - if (populate_menu_with_options(menu, gtkconv, TRUE)) - pidgin_separator(menu); - else if (!sub || - !GTK_WIDGET_IS_SENSITIVE(gtkconv->win->menu.send_to)) { - gtk_widget_destroy(menu); - return FALSE; - } else { - menu = sub; - sub = NULL; - } - - if (sub) { + if (sub && GTK_WIDGET_IS_SENSITIVE(gtkconv->win->menu.send_to)) { GtkWidget *item = gtk_menu_item_new_with_mnemonic(_("_Send To")); + if (populated) + pidgin_separator(menu); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub); gtk_widget_show(item); gtk_widget_show_all(sub); + } else if (!populated) { + gtk_widget_destroy(menu); + return FALSE; } gtk_widget_show_all(menu);
--- a/pidgin/gtkdialogs.c Sun Aug 19 13:09:02 2007 +0000 +++ b/pidgin/gtkdialogs.c Sun Aug 19 13:40:34 2007 +0000 @@ -301,7 +301,7 @@ context = gtk_widget_get_pango_context(widget); layout = pango_layout_new(context); - markup = g_strdup_printf("<span foreground=\"#5c3566\">%s</span>", VERSION); + markup = g_strdup_printf("<span foreground=\"#FFFFFF\">%s</span>", VERSION); pango_layout_set_font_description(layout, style->font_desc); pango_layout_set_markup(layout, markup, strlen(markup)); g_free(markup);
--- a/pidgin/gtkstatusbox.c Sun Aug 19 13:09:02 2007 +0000 +++ b/pidgin/gtkstatusbox.c Sun Aug 19 13:40:34 2007 +0000 @@ -788,7 +788,8 @@ primitive = purple_savedstatus_get_type(saved_status); if (!status_box->token_status_account && purple_savedstatus_is_transient(saved_status) && ((primitive == PURPLE_STATUS_AVAILABLE) || (primitive == PURPLE_STATUS_AWAY) || - (primitive == PURPLE_STATUS_INVISIBLE) || (primitive == PURPLE_STATUS_OFFLINE)) && + (primitive == PURPLE_STATUS_INVISIBLE) || (primitive == PURPLE_STATUS_OFFLINE) || + (primitive == PURPLE_STATUS_UNAVAILABLE)) && (!purple_savedstatus_has_substatuses(saved_status))) { index = get_statusbox_index(status_box, saved_status); @@ -2562,24 +2563,23 @@ static gint get_statusbox_index(PidginStatusBox *box, PurpleSavedStatus *saved_status) { - gint index; + gint index = -1; switch (purple_savedstatus_get_type(saved_status)) { - case PURPLE_STATUS_AVAILABLE: - index = 0; - break; + /* In reverse order */ + case PURPLE_STATUS_OFFLINE: + index++; + case PURPLE_STATUS_INVISIBLE: + index++; + case PURPLE_STATUS_UNAVAILABLE: + index++; case PURPLE_STATUS_AWAY: - index = 1; - break; - case PURPLE_STATUS_INVISIBLE: - index = 2; - break; - case PURPLE_STATUS_OFFLINE: - index = 3; + index++; + case PURPLE_STATUS_AVAILABLE: + index++; break; default: - index = -1; break; }