Mercurial > pidgin
changeset 5135:102135caa225
[gaim-migrate @ 5499]
make use of KingAnt's uber-cool new notauthorized emblem, and let the prpls
stick text into the status line of the buddy to replace "Offline" if they
care to do so
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Tue, 15 Apr 2003 03:45:31 +0000 |
parents | 2acc2ee66597 |
children | 381da05cb5ed |
files | src/buddy.c src/protocols/jabber/jabber.c |
diffstat | 2 files changed, 60 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/src/buddy.c Tue Apr 15 03:10:45 2003 +0000 +++ b/src/buddy.c Tue Apr 15 03:45:31 2003 +0000 @@ -395,19 +395,26 @@ static void gaim_gtk_blist_edit_mode_cb(gpointer callback_data, guint callback_action, GtkWidget *checkitem) { - GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); - gdk_window_set_cursor(gtkblist->window->window, cursor); - while (gtk_events_pending()) - gtk_main_iteration(); + if(gtkblist->window->window) { + GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); + gdk_window_set_cursor(gtkblist->window->window, cursor); + while (gtk_events_pending()) + gtk_main_iteration(); + gdk_cursor_unref(cursor); + } + if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkitem))) blist_options |= OPT_BLIST_SHOW_OFFLINE; else blist_options &= ~OPT_BLIST_SHOW_OFFLINE; save_prefs(); - gdk_cursor_unref(cursor); - cursor = gdk_cursor_new(GDK_LEFT_PTR); - gdk_window_set_cursor(gtkblist->window->window, cursor); - gdk_cursor_unref(cursor); + + if(gtkblist->window->window) { + GdkCursor *cursor = gdk_cursor_new(GDK_LEFT_PTR); + gdk_window_set_cursor(gtkblist->window->window, cursor); + gdk_cursor_unref(cursor); + } + gaim_gtk_blist_refresh(gaim_get_blist()); } @@ -1003,24 +1010,25 @@ if (b->evil > 0) warning = g_strdup_printf(_("Warned (%d%%) "), b->evil); + if(!GAIM_BUDDY_IS_ONLINE(b) && !statustext) + statustext = g_strdup("Offline "); + if (b->idle && blist_options & OPT_BLIST_GREY_IDLERS && !selected) { text = g_strdup_printf("<span color='dim grey'>%s</span>\n" - "<span color='dim grey' size='smaller'>%s%s%s%s</span>", + "<span color='dim grey' size='smaller'>%s%s%s</span>", esc, statustext != NULL ? statustext : "", - idletime != NULL ? idletime : "", - warning != NULL ? warning : "", - !GAIM_BUDDY_IS_ONLINE(b) ? _("Offline ") : ""); + idletime != NULL ? idletime : "", + warning != NULL ? warning : ""); } else if (statustext == NULL && idletime == NULL && warning == NULL && GAIM_BUDDY_IS_ONLINE(b)) { text = g_strdup(esc); } else { text = g_strdup_printf("%s\n" - "<span %s size='smaller'>%s%s%s%s</span>", esc, + "<span %s size='smaller'>%s%s%s</span>", esc, selected ? "" : "color='dim grey'", statustext != NULL ? statustext : "", idletime != NULL ? idletime : "", - warning != NULL ? warning : "", - !GAIM_BUDDY_IS_ONLINE(b) ? _("Offline ") : ""); + warning != NULL ? warning : ""); } if (idletime) g_free(idletime);
--- a/src/protocols/jabber/jabber.c Tue Apr 15 03:10:45 2003 +0000 +++ b/src/protocols/jabber/jabber.c Tue Apr 15 03:45:31 2003 +0000 @@ -1022,7 +1022,7 @@ /* * Return pointer to jabber_buddy_data if buddy found. Create if necessary. */ -static struct jabber_buddy_data* jabber_find_buddy(struct gaim_connection *gc, char *buddy) +static struct jabber_buddy_data* jabber_find_buddy(struct gaim_connection *gc, char *buddy, gboolean create) { struct jabber_data *jd = gc->proto_data; gpointer val; @@ -1036,12 +1036,14 @@ g_free(realwho); return (struct jabber_buddy_data *)val; - } else { + } else if (create) { struct jabber_buddy_data *jbd = g_new0(struct jabber_buddy_data, 1); jbd->invisible = JABBER_NOT_INVIS; g_hash_table_insert(jd->buddies, g_strdup(realwho), jbd); g_free(realwho); return jbd; + } else { + return NULL; } } @@ -1053,7 +1055,7 @@ static jab_res_info jabber_find_resource(struct gaim_connection *gc, char *who) { GSList *resources; - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, who); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, who, FALSE); jab_res_info jri = NULL; char *res = strstr(who, "/"); @@ -1092,7 +1094,7 @@ int priority, int state) { - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, TRUE); if(jbd) { char *who; @@ -1120,7 +1122,7 @@ */ static void jabber_remove_resource(struct gaim_connection *gc, char *buddy, char *res) { - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, FALSE); if(jbd) { char *who; jab_res_info jri; @@ -1219,11 +1221,7 @@ if(jri->thread_id) ct = g_strdup(jri->thread_id); } - if(!ct) { - char buf[1024]; - snprintf(buf, sizeof(buf), "%s%d", name, (int)time(NULL)); - ct = g_strdup(shahash(buf)); - } + return ct; } @@ -1269,8 +1267,6 @@ if ((y = xmlnode_get_tag(p->x, "thread"))) thread_id = xmlnode_get_data(y); - if(!thread_id) - thread_id = ""; y = xmlnode_get_firstchild(p->x); @@ -1457,7 +1453,7 @@ return; } - jbd = jabber_find_buddy(GJ_GC(gjc), buddy); + jbd = jabber_find_buddy(GJ_GC(gjc), buddy, TRUE); if(jbd->error_msg) { g_free(jbd->error_msg); @@ -1806,7 +1802,7 @@ } else if (BUD_USUB_TO_PEND(sub, ask) || BUD_USUBD_TO(sub, ask) || !strcasecmp(sub, "remove")) { jabber_remove_gaim_buddy(GJ_GC(gjc), buddyname); } - if(b && (jbd = jabber_find_buddy(b->account->gc, buddyname)) != NULL) { + if(b && (jbd = jabber_find_buddy(b->account->gc, buddyname, TRUE)) != NULL) { jbd->subscription = JABBER_SUB_NONE; if(!strcasecmp(sub, "to")) jbd->subscription |= JABBER_SUB_TO; @@ -2713,7 +2709,7 @@ char *realwho; if((realwho = get_realwho(gjc, name, FALSE, NULL)) != NULL) { - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho, TRUE); xmlnode g = xmlnode_new_tag("presence"); xmlnode_put_attrib(g, "to", realwho); @@ -2799,25 +2795,18 @@ static void jabber_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) { - struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name); - - if(jbd) { - if (jbd->error_msg) + struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE); + + if(!GAIM_BUDDY_IS_ONLINE(b)) { + if (jbd && jbd->error_msg) *nw = "error"; - if ((jbd->subscription & JABBER_SUB_BOTH) != JABBER_SUB_BOTH) { - if(jbd->subscription & JABBER_SUB_PENDING) - *ne = "pending"; - else if(jbd->subscription & JABBER_SUB_FROM) - *ne = "sub_from"; - else if(jbd->subscription & JABBER_SUB_TO) - *ne = "sub_to"; - else - *ne = "sub_none"; - } - } - - if (b->present == GAIM_BUDDY_OFFLINE) { - *se = "offline"; + + if(jbd && (jbd->subscription & JABBER_SUB_PENDING || + !(jbd->subscription & JABBER_SUB_TO))) + *se = "notauthorized"; + else + *se = "offline"; + } else { switch (b->uc) { case UC_AWAY: @@ -3152,7 +3141,7 @@ return; } - jbd = jabber_find_buddy(gc, realwho); + jbd = jabber_find_buddy(gc, realwho, TRUE); *ap++ = g_strdup_printf("<B>Jabber ID:</B> %s<BR>\n", realwho); *ap++ = g_strdup_printf("<B>Error:</B> %s<BR>\n", jbd->error_msg); @@ -3173,7 +3162,7 @@ int num_resources; gaim_jid gjid; char *buddy = get_realwho(gjc, who, FALSE, &gjid); - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, TRUE); gchar **str_arr; gchar **ap; gchar *realwho, *final; @@ -3255,12 +3244,13 @@ static char *jabber_tooltip_text(struct buddy *b) { + struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE); jab_res_info jri = jabber_find_resource(b->account->gc, b->name); + char *ret = NULL; if(jri) { char *stripped = strip_html(jabber_lookup_away(GC_GJ(b->account->gc), b->name)); char *text = NULL; - char *ret; if(stripped) text = g_markup_escape_text(stripped, strlen(stripped)); ret = g_strdup_printf(_("<b>Status:</b> %s%s%s"), @@ -3271,17 +3261,20 @@ g_free(stripped); g_free(text); } - return ret; + } else if(jbd && (jbd->subscription & JABBER_SUB_PENDING || + !(jbd->subscription & JABBER_SUB_TO))) { + ret = g_strdup(_("<b>Status:</b> Not Authorized")); } - return NULL; + return ret; } static char *jabber_status_text(struct buddy *b) { + struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE); + char *ret = NULL; if (b->uc & UC_UNAVAILABLE) { char *stripped = strip_html(jabber_lookup_away(GC_GJ(b->account->gc), b->name)); - char *ret; if(!stripped) { jab_res_info jri = jabber_find_resource(b->account->gc, b->name); if(jri) @@ -3289,9 +3282,11 @@ } ret = g_markup_escape_text(stripped, strlen(stripped)); g_free(stripped); - return ret; + } else if(jbd && (jbd->subscription & JABBER_SUB_PENDING || + !(jbd->subscription & JABBER_SUB_TO))) { + ret = g_strdup(_("Not Authorized")); } - return NULL; + return ret; } static GList *jabber_buddy_menu(struct gaim_connection *gc, char *who) { @@ -3309,7 +3304,7 @@ } else { gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc; char *realwho = get_realwho(gjc, who, FALSE, NULL); - struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho); + struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho, FALSE); g_free(realwho);