# HG changeset patch # User Richard Laager # Date 1135153457 0 # Node ID 3169cd6727ad969b52ecb934e84af79b22bb660a # Parent 3d34460ecfd6b47656821efe11523803d1591d20 [gaim-migrate @ 14925] I've been meaning to spend the time to commit these changes separately, but it's been a couple days without me finding the time... 1. Allow the creation of GaimStatusTypes by passing NULL for the name and/or id. The core uses the default name and/or id. This eliminates quite a bit of duplication in the prpls. 2. Make statuses more consistent. For example, in some prpls, "Busy" was descended from the UNAVAILABLE primitive and on others it was a case of AWAY. Another example... "On Vacation" is definitely an EXTENDED_AWAY not an AWAY. 3. Rename some pixmaps to elminate some special cases. The names of the pixmaps should now match the primitive default IDs. 4. Rename the HIDDEN primitive to INVISIBLE, since we seem to be using that term everywhere. In conjunction with #1, more duplication was eliminated. 5. Add a MOBILE status primitive. It's not used now. It'll be needed in the (hopefully not-too-distant) future, so I'm planning ahead. 6. Shrink the status select for small blist folks. Now if someone can get rid of that stupid extra padding, we'll be set (well, after we deal with imhtml space issues). I've fought with this for many many hours over several days and I can't get it. It's clear that the combo box is requesting more space than is really necessary, but I don't know why. This is really my first go at anything significant status-related. Everyone should check their favorite prpls carefully to make sure I didn't break anything. committer: Tailor Script diff -r 3d34460ecfd6 -r 3169cd6727ad pixmaps/status/default/Makefile.am --- a/pixmaps/status/default/Makefile.am Wed Dec 21 07:59:45 2005 +0000 +++ b/pixmaps/status/default/Makefile.am Wed Dec 21 08:24:17 2005 +0000 @@ -7,7 +7,7 @@ blocked.png \ bonjour.png \ dnd.png \ - extendedaway.png \ + extended_away.png \ external.png \ female.png \ founder.png \ @@ -26,7 +26,6 @@ male.png \ meanwhile.png \ msn.png \ - na.png \ napster.png \ notauthorized.png \ novell.png \ @@ -37,6 +36,7 @@ secure.png \ silc.png \ simple.png \ + unavailable.png \ voice.png \ wireless.png \ yahoo.png \ diff -r 3d34460ecfd6 -r 3169cd6727ad pixmaps/status/default/extended_away.png Binary file pixmaps/status/default/extended_away.png has changed diff -r 3d34460ecfd6 -r 3169cd6727ad pixmaps/status/default/extendedaway.png Binary file pixmaps/status/default/extendedaway.png has changed diff -r 3d34460ecfd6 -r 3169cd6727ad pixmaps/status/default/na.png Binary file pixmaps/status/default/na.png has changed diff -r 3d34460ecfd6 -r 3169cd6727ad pixmaps/status/default/unavailable.png Binary file pixmaps/status/default/unavailable.png has changed diff -r 3d34460ecfd6 -r 3169cd6727ad plugins/ChangeLog.API --- a/plugins/ChangeLog.API Wed Dec 21 07:59:45 2005 +0000 +++ b/plugins/ChangeLog.API Wed Dec 21 08:24:17 2005 +0000 @@ -25,6 +25,8 @@ * gaim_conv_window_remove_conversation()'s last argument to be a GaimConversation. * A new blocked icon: pixmaps/status/default/blocked.png + * In pixmaps/status/default: extendedaway.png renamed to extended_away.png + * In pixmaps/status/default: na.png renamed to unavailable.png * gtk_imhtml_toggle_bold(): No longer returns a value * gtk_imhtml_toggle_italic(): No longer returns a value * gtk_imhtml_toggle_underline(): No longer returns a value diff -r 3d34460ecfd6 -r 3169cd6727ad plugins/contact_priority.c --- a/plugins/contact_priority.c Wed Dec 21 07:59:45 2005 +0000 +++ b/plugins/contact_priority.c Wed Dec 21 08:24:17 2005 +0000 @@ -61,6 +61,10 @@ { "idle", N_("Buddy is idle") }, { "away", N_("Buddy is away") }, { "extended_away", N_("Buddy is \"extended\" away") }, +#if 0 + /* Not used yet. */ + { "mobile", N_("Buddy is mobile") }, +#endif { "offline", N_("Buddy is offline") }, { NULL, NULL } }; diff -r 3d34460ecfd6 -r 3169cd6727ad src/gtkstatusbox.c --- a/src/gtkstatusbox.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/gtkstatusbox.c Wed Dec 21 08:24:17 2005 +0000 @@ -344,7 +344,7 @@ update_to_reflect_current_status(GtkGaimStatusBox *status_box) { GaimSavedStatus *saved_status; - GaimStatusPrimitive primitive; + guint index; const char *message; /* this function is inappropriate for ones with accounts */ @@ -359,26 +359,30 @@ */ gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE); - primitive = gaim_savedstatus_get_type(saved_status); - if (gaim_savedstatus_has_substatuses(saved_status) || - ((primitive != GAIM_STATUS_AVAILABLE) && - (primitive != GAIM_STATUS_OFFLINE) && - (primitive != GAIM_STATUS_AWAY) && - (primitive != GAIM_STATUS_HIDDEN))) - { - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), 5); - } + if (gaim_savedstatus_has_substatuses(saved_status)) + index = 5; else { - if (primitive == GAIM_STATUS_AVAILABLE) - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), 0); - if (primitive == GAIM_STATUS_OFFLINE) - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), 3); - else if (primitive == GAIM_STATUS_AWAY) - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), 1); - else if (primitive == GAIM_STATUS_HIDDEN) - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), 2); + switch (gaim_savedstatus_get_type(saved_status)) + { + case GAIM_STATUS_AVAILABLE: + index = 0; + break; + case GAIM_STATUS_AWAY: + index = 1; + break; + case GAIM_STATUS_INVISIBLE: + index = 2; + break; + case GAIM_STATUS_OFFLINE: + index = 3; + break; + default: + index = 5; + break; + } } + gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), index); message = gaim_savedstatus_get_message(saved_status); if (!message || !*message) @@ -416,7 +420,10 @@ GdkPixbuf *pixbuf, *pixbuf2, *pixbuf3, *pixbuf4; GtkIconSize icon_size; - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); + if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); + else + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); /* Unset the model while clearing it */ gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL); @@ -437,7 +444,7 @@ /* hacks */ gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AVAILABLE, pixbuf, _("Available"), NULL); gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AWAY, pixbuf2, _("Away"), NULL); - gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_HIDDEN, pixbuf4, _("Invisible"), NULL); + gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_INVISIBLE, pixbuf4, _("Invisible"), NULL); gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_OFFLINE, pixbuf3, _("Offline"), NULL); gtk_gaim_status_box_add_separator(GTK_GAIM_STATUS_BOX(status_box)); gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_CUSTOM, pixbuf, _("Custom..."), NULL); @@ -511,6 +518,60 @@ #endif static void +cache_pixbufs(GtkGaimStatusBox *status_box) +{ + GtkIconSize icon_size; + + if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_TWO_LINE); + else + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE); + + if (status_box->error_pixbuf != NULL) + gdk_pixbuf_unref(status_box->error_pixbuf); + + status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE, + icon_size, "GtkGaimStatusBox"); + if (status_box->connecting_pixbufs[0] != NULL) + gdk_pixbuf_unref(status_box->connecting_pixbufs[0]); + if (status_box->connecting_pixbufs[1] != NULL) + gdk_pixbuf_unref(status_box->connecting_pixbufs[1]); + if (status_box->connecting_pixbufs[2] != NULL) + gdk_pixbuf_unref(status_box->connecting_pixbufs[2]); + if (status_box->connecting_pixbufs[3] != NULL) + gdk_pixbuf_unref(status_box->connecting_pixbufs[3]); + + status_box->connecting_index = 0; + status_box->connecting_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT0, + icon_size, "GtkGaimStatusBox"); + status_box->connecting_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT1, + icon_size, "GtkGaimStatusBox"); + status_box->connecting_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT2, + icon_size, "GtkGaimStatusBox"); + status_box->connecting_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT3, + icon_size, "GtkGaimStatusBox"); + + if (status_box->typing_pixbufs[0] != NULL) + gdk_pixbuf_unref(status_box->typing_pixbufs[0]); + if (status_box->typing_pixbufs[1] != NULL) + gdk_pixbuf_unref(status_box->typing_pixbufs[1]); + if (status_box->typing_pixbufs[2] != NULL) + gdk_pixbuf_unref(status_box->typing_pixbufs[2]); + if (status_box->typing_pixbufs[3] != NULL) + gdk_pixbuf_unref(status_box->typing_pixbufs[3]); + + status_box->typing_index = 0; + status_box->typing_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING0, + icon_size, "GtkGaimStatusBox"); + status_box->typing_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING1, + icon_size, "GtkGaimStatusBox"); + status_box->typing_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING2, + icon_size, "GtkGaimStatusBox"); + status_box->typing_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING3, + icon_size, "GtkGaimStatusBox"); +} + +static void current_status_pref_changed_cb(const char *name, GaimPrefType type, gpointer val, gpointer data) { @@ -522,6 +583,16 @@ update_to_reflect_current_status(box); } +static void +buddy_list_details_pref_changed_cb(const char *name, GaimPrefType type, + gpointer val, gpointer data) +{ + GtkGaimStatusBox *status_box = (GtkGaimStatusBox *)data; + + cache_pixbufs(status_box); + gtk_gaim_status_box_regenerate(status_box); +} + #if 0 static gboolean button_released_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box) { @@ -561,11 +632,9 @@ GtkCellRenderer *icon_rend; GtkTextBuffer *buffer; GtkTreePath *path; - GtkIconSize icon_size; text_rend = gtk_cell_renderer_text_new(); icon_rend = gtk_cell_renderer_pixbuf_new(); - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); status_box->imhtml_visible = FALSE; status_box->connecting = FALSE; @@ -652,36 +721,17 @@ G_CALLBACK(scroll_event_cb), status_box->imhtml); #if GTK_CHECK_VERSION(2,6,0) - gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); #endif - status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE, - icon_size, "GtkGaimStatusBox"); - status_box->connecting_index = 0; - status_box->connecting_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT0, - icon_size, "GtkGaimStatusBox"); - status_box->connecting_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT1, - icon_size, "GtkGaimStatusBox"); - status_box->connecting_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT2, - icon_size, "GtkGaimStatusBox"); - status_box->connecting_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT3, - icon_size, "GtkGaimStatusBox"); - - status_box->typing_index = 0; - status_box->typing_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING0, - icon_size, "GtkGaimStatusBox"); - status_box->typing_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING1, - icon_size, "GtkGaimStatusBox"); - status_box->typing_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING2, - icon_size, "GtkGaimStatusBox"); - status_box->typing_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING3, - icon_size, "GtkGaimStatusBox"); - + cache_pixbufs(status_box); gtk_gaim_status_box_regenerate(status_box); - /* Monitor changes in the "/core/savedstatus/current" preference */ gaim_prefs_connect_callback(status_box, "/core/savedstatus/current", current_status_pref_changed_cb, status_box); + gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons", + buddy_list_details_pref_changed_cb, status_box); + } static void @@ -715,7 +765,7 @@ box_alc = *allocation; combo_box_size_request(widget, &req); - box_alc.height = MAX(1, ((allocation->height) - (req.height) - (12))); + box_alc.height = MAX(1, (allocation->height - req.height - 12)); box_alc.y = box_alc.y + req.height + 9; box_alc.width -= 6; diff -r 3d34460ecfd6 -r 3169cd6727ad src/gtkstock.c --- a/src/gtkstock.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/gtkstock.c Wed Dec 21 08:24:17 2005 +0000 @@ -272,6 +272,9 @@ gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_TWO_LINE, 30, 30); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL, 16, 16); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE, 24, 24); g_object_unref(G_OBJECT(icon_factory)); diff -r 3d34460ecfd6 -r 3169cd6727ad src/gtkstock.h --- a/src/gtkstock.h Wed Dec 21 07:59:45 2005 +0000 +++ b/src/gtkstock.h Wed Dec 21 08:24:17 2005 +0000 @@ -102,9 +102,12 @@ /** * For using icons that aren't one of the default GTK_ICON_SIZEs */ -#define GAIM_ICON_SIZE_DIALOG_COOL "gaim-icon-size-dialog-cool" -#define GAIM_ICON_SIZE_LOGO "gaim-icon-size-logo" -#define GAIM_ICON_SIZE_STATUS "gaim-icon-size-status" +#define GAIM_ICON_SIZE_DIALOG_COOL "gaim-icon-size-dialog-cool" +#define GAIM_ICON_SIZE_LOGO "gaim-icon-size-logo" +#define GAIM_ICON_SIZE_STATUS "gaim-icon-size-status" +#define GAIM_ICON_SIZE_STATUS_TWO_LINE "gaim-icon-size-status-two-line" +#define GAIM_ICON_SIZE_STATUS_SMALL "gaim-icon-size-status-small" +#define GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE "gaim-icon-size-status-small-two-line" /** * Sets up the gaim stock repository. diff -r 3d34460ecfd6 -r 3169cd6727ad src/gtkutils.c --- a/src/gtkutils.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/gtkutils.c Wed Dec 21 08:24:17 2005 +0000 @@ -1599,10 +1599,7 @@ /* TODO: let the prpl pick the emblem on a per status basis, and only * use the primitive as a fallback */ type_name = gaim_primitive_get_id_from_type(gaim_status_type_get_primitive(status_type)); - if (!strcmp(type_name, "hidden")) - type_name = "invisible"; - else if (!strcmp(type_name, "unavailable")) - type_name = "na"; + g_snprintf(basename2, sizeof(basename2), "%s.png", type_name); filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/bonjour/bonjour.c --- a/src/protocols/bonjour/bonjour.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/bonjour/bonjour.c Wed Dec 21 08:24:17 2005 +0000 @@ -243,19 +243,19 @@ type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, BONJOUR_STATUS_ID_OFFLINE, - _("Offline"), TRUE, TRUE, FALSE); + NULL, TRUE, TRUE, FALSE); status_types = g_list_append(status_types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, BONJOUR_STATUS_ID_AVAILABLE, - _("Available"), TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, BONJOUR_STATUS_ID_AWAY, - _("Away"), TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); @@ -269,11 +269,13 @@ GaimBuddy *buddy = gaim_find_buddy(connection->account, who); if (buddy == NULL) + { /* * This buddy is not in our buddy list, and therefore does not really * exist, so we won't have any data about them. */ return; + } bonjour_jabber_close_conversation(((BonjourData*)(connection->proto_data))->jabber_data, buddy); } @@ -281,7 +283,7 @@ static void bonjour_list_emblems(GaimBuddy *buddy, const char **se, const char **sw, - const char **nw,const char **ne) + const char **nw, const char **ne) { GaimPresence *presence; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/gg/gg.c --- a/src/protocols/gg/gg.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/gg/gg.c Wed Dec 21 08:24:17 2005 +0000 @@ -1343,23 +1343,19 @@ * The only valid status types are those defined * in prpl_info->status_types. * - * Usable icons: away, blocked, dnd, extendedaway, + * Usable icons: away, blocked, dnd, extended_away, * freeforchat, ignored, invisible, na, offline. */ if (!GAIM_BUDDY_IS_ONLINE(b)) { *se = "offline"; - } else if (gaim_presence_is_status_active(presence, "away")) { + } else if (gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_AWAY)) { *se = "away"; - } else if (gaim_presence_is_status_active(presence, "available")) { - *se = "online"; - } else if (gaim_presence_is_status_active(presence, "offline")) { - *se = "offline"; } else if (gaim_presence_is_status_active(presence, "blocked")) { *se = "blocked"; } else { *se = "offline"; - gaim_debug_info("gg", "ggp_list_emblems: unknown status\n"); + gaim_debug_error("gg", "ggp_list_emblems: unknown status\n"); } } /* }}} */ @@ -1428,33 +1424,38 @@ GaimStatusType *type; GList *types = NULL; - type = gaim_status_type_new_with_attrs(GAIM_STATUS_OFFLINE, "offline", - _("Offline"), TRUE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs( + GAIM_STATUS_OFFLINE, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, "available", - _("Available"), TRUE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs( + GAIM_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); /* * Without this selecting Invisible as own status doesn't * work. It's not used and not needed to show status of buddies. */ - type = gaim_status_type_new_with_attrs(GAIM_STATUS_HIDDEN, "invisible", - _("Invisible"), TRUE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs( + GAIM_STATUS_INVISIBLE, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, "away", - _("Busy"), TRUE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, "busy", _("Busy"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_HIDDEN, "blocked", - _("Blocked"), TRUE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + /* Why is blocked a status??? -- rlaager */ + type = gaim_status_type_new_with_attrs( + GAIM_STATUS_INVISIBLE, "blocked", _("Blocked"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/irc/irc.c --- a/src/protocols/irc/irc.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/irc/irc.c Wed Dec 21 08:24:17 2005 +0000 @@ -163,17 +163,16 @@ GaimStatusType *type; GList *types = NULL; - type = gaim_status_type_new(GAIM_STATUS_OFFLINE, "offline", - _("Offline"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_OFFLINE, NULL, NULL, TRUE); types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, "available", - _("Available"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, NULL, NULL, TRUE); types = g_list_append(types, type); type = gaim_status_type_new_with_attrs( - GAIM_STATUS_AWAY, "away", _("Away"), TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); + GAIM_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/jabber/jabber.c --- a/src/protocols/jabber/jabber.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/jabber/jabber.c Wed Dec 21 08:24:17 2005 +0000 @@ -964,11 +964,10 @@ *se = "offline"; } else { GaimStatusType *status_type = gaim_status_get_type(gaim_presence_get_active_status(gaim_buddy_get_presence(b))); + GaimStatusPrimitive primitive = gaim_status_type_get_primitive(status_type); - if(gaim_status_type_get_primitive(status_type) > GAIM_STATUS_AVAILABLE) { + if(primitive > GAIM_STATUS_AVAILABLE) { *se = gaim_status_type_get_id(status_type); - if(!strcmp(*se, "xa")) - *se = "extendedaway"; } } } @@ -1083,49 +1082,61 @@ GList *types = NULL; GaimValue *priority_value; - type = gaim_status_type_new_with_attrs(GAIM_STATUS_OFFLINE, "offline", - _("Offline"), FALSE, TRUE, FALSE, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_OFFLINE, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_UNAVAILABLE), + NULL, FALSE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); priority_value = gaim_value_new(GAIM_TYPE_INT); gaim_value_set_int(priority_value, 1); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, "available", - _("Available"), TRUE, TRUE, FALSE, "priority", _("Priority"), - priority_value, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_ONLINE), + NULL, TRUE, TRUE, FALSE, + "priority", _("Priority"), priority_value, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); priority_value = gaim_value_new(GAIM_TYPE_INT); gaim_value_set_int(priority_value, 1); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, "chat", - _("Chatty"), TRUE, TRUE, FALSE, "priority", _("Priority"), - priority_value, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), + _("Chatty"), TRUE, TRUE, FALSE, + "priority", _("Priority"), priority_value, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); priority_value = gaim_value_new(GAIM_TYPE_INT); gaim_value_set_int(priority_value, 0); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, "away", - _("Away"), TRUE, TRUE, FALSE, "priority", _("Priority"), - priority_value, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), + NULL, TRUE, TRUE, FALSE, + "priority", _("Priority"), priority_value, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); priority_value = gaim_value_new(GAIM_TYPE_INT); gaim_value_set_int(priority_value, 0); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_EXTENDED_AWAY, "xa", - _("Extended Away"), TRUE, TRUE, FALSE, "priority", _("Priority"), - priority_value, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_EXTENDED_AWAY, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), + NULL, TRUE, TRUE, FALSE, + "priority", _("Priority"), priority_value, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); priority_value = gaim_value_new(GAIM_TYPE_INT); gaim_value_set_int(priority_value, 0); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_UNAVAILABLE, "dnd", - _("Do Not Disturb"), TRUE, TRUE, FALSE, "priority", _("Priority"), - priority_value, "message", _("Message"), - gaim_value_new(GAIM_TYPE_STRING), NULL); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_UNAVAILABLE, + jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND), + _("Do Not Disturb"), TRUE, TRUE, FALSE, + "priority", _("Priority"), priority_value, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); /* diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/msn/msn.c --- a/src/protocols/msn/msn.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/msn/msn.c Wed Dec 21 08:24:17 2005 +0000 @@ -574,35 +574,35 @@ GList *types = NULL; status = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, - "offline", _("Offline"), FALSE, TRUE, FALSE); + NULL, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, status); status = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, - "available", _("Available"), FALSE, TRUE, FALSE); + NULL, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, "away", - _("Away"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_AWAY, + NULL, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, "brb", - _("Be Right Back"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_AWAY, + "brb", _("Be Right Back"), FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, "busy", - _("Busy"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_UNAVAILABLE, + "busy", _("Busy"), FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, "phone", - _("On the Phone"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_UNAVAILABLE, + "phone", _("On the Phone"), FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, "lunch", - _("Out to Lunch"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_AWAY, + "lunch", _("Out to Lunch"), FALSE, TRUE, FALSE); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_HIDDEN, "invisible", - _("Hidden"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE, + NULL, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, status); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/napster/napster.c --- a/src/protocols/napster/napster.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/napster/napster.c Wed Dec 21 08:24:17 2005 +0000 @@ -575,13 +575,11 @@ g_return_val_if_fail(account != NULL, NULL); type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, - "offline", - _("Offline"), TRUE, TRUE, FALSE); + NULL, NULL, TRUE, TRUE, FALSE); types = g_list_append(types, type); type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, - "available", - _("Available"), TRUE, TRUE, FALSE); + NULL, NULL, TRUE, TRUE, FALSE); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/novell/novell.c --- a/src/protocols/novell/novell.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/novell/novell.c Wed Dec 21 08:24:17 2005 +0000 @@ -2972,29 +2972,29 @@ g_return_val_if_fail(account != NULL, NULL); - type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, "offline", _("Offline"), FALSE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, NULL, NULL, FALSE, TRUE, FALSE); status_types = g_list_append(status_types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, NOVELL_STATUS_TYPE_AVAILABLE, _("Available"), - TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, NOVELL_STATUS_TYPE_AVAILABLE, + NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, NOVELL_STATUS_TYPE_AWAY, _("Away"), - TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, NOVELL_STATUS_TYPE_AWAY, + NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); - type = gaim_status_type_new_with_attrs(GAIM_STATUS_UNAVAILABLE, NOVELL_STATUS_TYPE_BUSY, _("Busy"), - TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + type = gaim_status_type_new_with_attrs(GAIM_STATUS_UNAVAILABLE, NOVELL_STATUS_TYPE_BUSY, + _("Busy"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); - type = gaim_status_type_new_full(GAIM_STATUS_HIDDEN, NOVELL_STATUS_TYPE_APPEAR_OFFLINE, _("Appear Offline"), - TRUE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE, NOVELL_STATUS_TYPE_APPEAR_OFFLINE, + NULL, TRUE, TRUE, FALSE); status_types = g_list_append(status_types, type); return status_types; @@ -3041,7 +3041,7 @@ novellstatus = NM_STATUS_AWAY; } else if (primitive == GAIM_STATUS_UNAVAILABLE) { novellstatus = NM_STATUS_BUSY; - } else if (primitive == GAIM_STATUS_HIDDEN) { + } else if (primitive == GAIM_STATUS_INVISIBLE) { novellstatus = NM_STATUS_OFFLINE; } else if (gaim_presence_is_idle(presence)) { novellstatus = NM_STATUS_AWAY_IDLE; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/oscar/oscar.c Wed Dec 21 08:24:17 2005 +0000 @@ -6527,7 +6527,7 @@ od = gc->proto_data; account = gaim_connection_get_account(gc); presence = gaim_account_get_presence(account); - invisible = gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_HIDDEN); + invisible = gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE); if (invisible) aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); @@ -6561,7 +6561,7 @@ status_type = gaim_status_get_type(status); primitive = gaim_status_type_get_primitive(status_type); presence = gaim_account_get_presence(account); - invisible = gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_HIDDEN); + invisible = gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE); if (!setinfo) { @@ -6656,7 +6656,7 @@ if (!od) return; - if (gaim_status_type_get_primitive(gaim_status_get_type(status)) == GAIM_STATUS_HIDDEN) + if (gaim_status_type_get_primitive(gaim_status_get_type(status)) == GAIM_STATUS_INVISIBLE) account->perm_deny = GAIM_PRIVACY_ALLOW_USERS; else account->perm_deny = GAIM_PRIVACY_DENY_USERS; @@ -7539,7 +7539,7 @@ else if (!strcmp(status_id, OSCAR_STATUS_ID_DND)) emblems[i++] = "dnd"; else if (!strcmp(status_id, OSCAR_STATUS_ID_NA)) - emblems[i++] = "na"; + emblems[i++] = "unavailable"; else if (!strcmp(status_id, OSCAR_STATUS_ID_OCCUPIED)) emblems[i++] = "occupied"; else if (!strcmp(status_id, OSCAR_STATUS_ID_AWAY)) @@ -7819,26 +7819,26 @@ /* Oscar-common status types */ type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, OSCAR_STATUS_ID_OFFLINE, - _("Offline"), TRUE, TRUE, FALSE); + NULL, TRUE, TRUE, FALSE); status_types = g_list_append(status_types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, OSCAR_STATUS_ID_AVAILABLE, - _("Available"), TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, OSCAR_STATUS_ID_AWAY, - _("Away"), TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); status_types = g_list_append(status_types, type); - type = gaim_status_type_new_full(GAIM_STATUS_HIDDEN, + type = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE, OSCAR_STATUS_ID_INVISIBLE, - _("Invisible"), TRUE, TRUE, FALSE); + NULL, TRUE, TRUE, FALSE); status_types = g_list_append(status_types, type); if (aim_sn_is_icq(gaim_account_get_username(account)) == FALSE ) diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/sametime/sametime.c --- a/src/protocols/sametime/sametime.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/sametime/sametime.c Wed Dec 21 08:24:17 2005 +0000 @@ -3234,7 +3234,7 @@ GaimStatusType *type; type = gaim_status_type_new(GAIM_STATUS_OFFLINE, MW_STATE_OFFLINE, - _("Offline"), TRUE); + NULL, TRUE); types = g_list_append(types, type); type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, MW_STATE_ACTIVE, @@ -3244,7 +3244,7 @@ types = g_list_append(types, type); type = gaim_status_type_new(GAIM_STATUS_AWAY, MW_STATE_AWAY, - _("Away"), TRUE); + NULL, TRUE); gaim_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"), gaim_value_new(GAIM_TYPE_STRING)); types = g_list_append(types, type); diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/silc/silc.c --- a/src/protocols/silc/silc.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/silc/silc.c Wed Dec 21 08:24:17 2005 +0000 @@ -44,15 +44,15 @@ GaimStatusType *type; GList *types = NULL; - type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, SILCGAIM_STATUS_ID_OFFLINE, _("Offline"), FALSE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, SILCGAIM_STATUS_ID_OFFLINE, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, type); - type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, SILCGAIM_STATUS_ID_AVAILABLE, _("Available"), FALSE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, SILCGAIM_STATUS_ID_AVAILABLE, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, type); type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, SILCGAIM_STATUS_ID_HYPER, _("Hyper Active"), FALSE, TRUE, FALSE); types = g_list_append(types, type); - type = gaim_status_type_new_full(GAIM_STATUS_AWAY, SILCGAIM_STATUS_ID_AWAY, _("Away"), FALSE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_AWAY, SILCGAIM_STATUS_ID_AWAY, NULL, FALSE, TRUE, FALSE); types = g_list_append(types, type); - type = gaim_status_type_new_full(GAIM_STATUS_AWAY, SILCGAIM_STATUS_ID_BUSY, _("Busy"), FALSE, TRUE, FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_UNAVAILABLE, SILCGAIM_STATUS_ID_BUSY, _("Busy"), FALSE, TRUE, FALSE); types = g_list_append(types, type); type = gaim_status_type_new_full(GAIM_STATUS_AWAY, SILCGAIM_STATUS_ID_INDISPOSED, _("Indisposed"), FALSE, TRUE, FALSE); types = g_list_append(types, type); diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/simple/simple.c --- a/src/protocols/simple/simple.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/simple/simple.c Wed Dec 21 08:24:17 2005 +0000 @@ -247,13 +247,13 @@ GList *types = NULL; type = gaim_status_type_new_full( - GAIM_STATUS_OFFLINE, "offline", _("Offline"), TRUE, TRUE, FALSE); + GAIM_STATUS_OFFLINE, NULL, NULL, TRUE, TRUE, FALSE); types = g_list_append(types, type); type = gaim_status_type_new_with_attrs( - GAIM_STATUS_AVAILABLE, "available", _("Available"), - TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); + GAIM_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/yahoo/yahoo.c --- a/src/protocols/yahoo/yahoo.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/yahoo/yahoo.c Wed Dec 21 08:24:17 2005 +0000 @@ -3199,17 +3199,17 @@ GaimStatusType *type; GList *types = NULL; - type = gaim_status_type_new(GAIM_STATUS_OFFLINE, YAHOO_STATUS_TYPE_OFFLINE, _("Offline"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_OFFLINE, YAHOO_STATUS_TYPE_OFFLINE, NULL, TRUE); types = g_list_append(types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, YAHOO_STATUS_TYPE_AVAILABLE, - "Available", TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); types = g_list_append(types, type); type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_AWAY, - _("Away"), TRUE, TRUE, FALSE, + NULL, TRUE, TRUE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); types = g_list_append(types, type); @@ -3217,7 +3217,7 @@ type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_BRB, _("Be Right Back"), TRUE); types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_BUSY, _("Busy"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_UNAVAILABLE, YAHOO_STATUS_TYPE_BUSY, _("Busy"), TRUE); types = g_list_append(types, type); type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_NOTATHOME, _("Not at Home"), TRUE); @@ -3229,10 +3229,10 @@ type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_NOTINOFFICE, _("Not in Office"), TRUE); types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_ONPHONE, _("On the Phone"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_UNAVAILABLE, YAHOO_STATUS_TYPE_ONPHONE, _("On the Phone"), TRUE); types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_ONVACATION, _("On Vacation"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_EXTENDED_AWAY, YAHOO_STATUS_TYPE_ONVACATION, _("On Vacation"), TRUE); types = g_list_append(types, type); type = gaim_status_type_new(GAIM_STATUS_AWAY, YAHOO_STATUS_TYPE_OUTTOLUNCH, _("Out to Lunch"), TRUE); @@ -3242,7 +3242,7 @@ types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_HIDDEN, YAHOO_STATUS_TYPE_INVISIBLE, _("Invisible"), TRUE); + type = gaim_status_type_new(GAIM_STATUS_INVISIBLE, YAHOO_STATUS_TYPE_INVISIBLE, NULL, TRUE); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/protocols/zephyr/zephyr.c --- a/src/protocols/zephyr/zephyr.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/protocols/zephyr/zephyr.c Wed Dec 21 08:24:17 2005 +0000 @@ -2199,17 +2199,17 @@ static void zephyr_set_status(GaimAccount *account, GaimStatus *status) { zephyr_account *zephyr = gaim_account_get_connection(account)->proto_data; - const char *status_id = gaim_status_get_id(status); + GaimStatusPrimitive primitive = gaim_status_type_get_primitive(gaim_status_get_type(status)); if (zephyr->away) { g_free(zephyr->away); zephyr->away=NULL; } - if (!strcmp(status_id,"away")) { + if (primitive == GAIM_STATUS_AWAY) { zephyr->away = g_strdup(gaim_status_get_attr_string(status,"message")); } - else if (!strcmp(status_id,"available")) { + else if (primitive == GAIM_STATUS_AVAILABLE) { if (use_zeph02(zephyr)) { ZSetLocation(zephyr->exposure); } @@ -2219,7 +2219,7 @@ g_free(zexpstr); } } - else if (!strcmp(status_id,"hidden")) { + else if (primitive == GAIM_STATUS_INVISIBLE) { /* XXX handle errors */ if (use_zeph02(zephyr)) { ZSetLocation(EXPOSE_OPSTAFF); @@ -2250,15 +2250,16 @@ Away won't change their exposure but will set an auto away message (for IMs only) */ - type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, "available", _("Available"), FALSE); + type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, NULL, NULL, FALSE); types = g_list_append(types,type); - type = gaim_status_type_new(GAIM_STATUS_HIDDEN, "hidden", _("Hidden"), FALSE); + type = gaim_status_type_new(GAIM_STATUS_INVISIBLE, NULL, NULL, FALSE); types = g_list_append(types,type); type = gaim_status_type_new_with_attrs( - GAIM_STATUS_AWAY, "away", _("Away"), TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); + GAIM_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, type); return types; diff -r 3d34460ecfd6 -r 3169cd6727ad src/status.c --- a/src/status.c Wed Dec 21 07:59:45 2005 +0000 +++ b/src/status.c Wed Dec 21 08:24:17 2005 +0000 @@ -126,9 +126,10 @@ -500, /* offline */ 100, /* available */ -75, /* unavailable */ - -50, /* hidden */ + -50, /* invisible */ -100, /* away */ -200, /* extended away */ + -400, /* mobile */ -10, /* idle, special case. */ -5 /* idle time, special case. */ }; @@ -153,9 +154,10 @@ { GAIM_STATUS_OFFLINE, "offline", N_("Offline") }, { GAIM_STATUS_AVAILABLE, "available", N_("Available") }, { GAIM_STATUS_UNAVAILABLE, "unavailable", N_("Unavailable") }, - { GAIM_STATUS_HIDDEN, "hidden", N_("Hidden") }, + { GAIM_STATUS_INVISIBLE, "invisible", N_("Invisible") }, { GAIM_STATUS_AWAY, "away", N_("Away") }, - { GAIM_STATUS_EXTENDED_AWAY, "extended_away", N_("Extended Away") } + { GAIM_STATUS_EXTENDED_AWAY, "extended_away", N_("Extended Away") }, + { GAIM_STATUS_MOBILE, "mobile", N_("Mobile") } }; const char * @@ -179,8 +181,8 @@ for (i = 0; i < GAIM_STATUS_NUM_PRIMITIVES; i++) { - if (type == status_primitive_map[i].type) - return status_primitive_map[i].name; + if (type == status_primitive_map[i].type) + return status_primitive_map[i].name; } return status_primitive_map[0].name; @@ -214,19 +216,25 @@ GaimStatusType *status_type; g_return_val_if_fail(primitive != GAIM_STATUS_UNSET, NULL); - g_return_val_if_fail(id != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); status_type = g_new0(GaimStatusType, 1); GAIM_DBUS_REGISTER_POINTER(status_type, GaimStatusType); status_type->primitive = primitive; - status_type->id = g_strdup(id); - status_type->name = g_strdup(name); status_type->saveable = saveable; status_type->user_settable = user_settable; status_type->independent = independent; + if (id != NULL) + status_type->id = g_strdup(id); + else + status_type->id = g_strdup(gaim_primitive_get_id_from_type(primitive)); + + if (name != NULL) + status_type->name = g_strdup(name); + else + status_type->name = g_strdup(_(gaim_primitive_get_name_from_type(primitive))); + return status_type; } @@ -235,8 +243,6 @@ const char *name, gboolean user_settable) { g_return_val_if_fail(primitive != GAIM_STATUS_UNSET, NULL); - g_return_val_if_fail(id != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); return gaim_status_type_new_full(primitive, id, name, FALSE, user_settable, FALSE); @@ -254,8 +260,6 @@ va_list args; g_return_val_if_fail(primitive != GAIM_STATUS_UNSET, NULL); - g_return_val_if_fail(id != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); g_return_val_if_fail(attr_id != NULL, NULL); g_return_val_if_fail(attr_name != NULL, NULL); g_return_val_if_fail(attr_value != NULL, NULL); @@ -1696,8 +1700,8 @@ primitive_scores[GAIM_STATUS_OFFLINE]); gaim_prefs_add_int("/core/status/scores/available", primitive_scores[GAIM_STATUS_AVAILABLE]); - gaim_prefs_add_int("/core/status/scores/hidden", - primitive_scores[GAIM_STATUS_HIDDEN]); + gaim_prefs_add_int("/core/status/scores/invisible", + primitive_scores[GAIM_STATUS_INVISIBLE]); gaim_prefs_add_int("/core/status/scores/away", primitive_scores[GAIM_STATUS_AWAY]); gaim_prefs_add_int("/core/status/scores/extended_away", @@ -1711,9 +1715,9 @@ gaim_prefs_connect_callback(handle, "/core/status/scores/available", score_pref_changed_cb, GINT_TO_POINTER(GAIM_STATUS_AVAILABLE)); - gaim_prefs_connect_callback(handle, "/core/status/scores/hidden", + gaim_prefs_connect_callback(handle, "/core/status/scores/invisible", score_pref_changed_cb, - GINT_TO_POINTER(GAIM_STATUS_HIDDEN)); + GINT_TO_POINTER(GAIM_STATUS_INVISIBLE)); gaim_prefs_connect_callback(handle, "/core/status/scores/away", score_pref_changed_cb, GINT_TO_POINTER(GAIM_STATUS_AWAY)); diff -r 3d34460ecfd6 -r 3169cd6727ad src/status.h --- a/src/status.h Wed Dec 21 07:59:45 2005 +0000 +++ b/src/status.h Wed Dec 21 08:24:17 2005 +0000 @@ -100,9 +100,10 @@ GAIM_STATUS_OFFLINE, GAIM_STATUS_AVAILABLE, GAIM_STATUS_UNAVAILABLE, - GAIM_STATUS_HIDDEN, + GAIM_STATUS_INVISIBLE, GAIM_STATUS_AWAY, GAIM_STATUS_EXTENDED_AWAY, + GAIM_STATUS_MOBILE, GAIM_STATUS_NUM_PRIMITIVES } GaimStatusPrimitive; @@ -113,7 +114,7 @@ #include "value.h" /**************************************************************************/ -/** @name GaimStatusPrimtive API */ +/** @name GaimStatusPrimitive API */ /**************************************************************************/ /*@{*/ @@ -159,8 +160,10 @@ * Creates a new status type. * * @param primitive The primitive status type. - * @param id The ID of the status type. - * @param name The name presented to the user. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. * @param saveable TRUE if the information set for this status by the * user can be saved for future sessions. * @param user_settable TRUE if this is a status the user can manually set. @@ -180,8 +183,10 @@ * savable and not independent). * * @param primitive The primitive status type. - * @param id The ID of the status type. - * @param name The name presented to the user. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. * @param user_settable TRUE if this is a status the user can manually set. * * @return A new status type. @@ -194,8 +199,10 @@ * Creates a new status type with attributes. * * @param primitive The primitive status type. - * @param id The ID of the status type. - * @param name The name presented to the user. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. * @param saveable TRUE if the information set for this status by the * user can be saved for future sessions. * @param user_settable TRUE if this is a status the user can manually set. @@ -343,7 +350,7 @@ /** * Returns whether or not a status type is available. * - * Available status types are online and possibly hidden, but not away. + * Available status types are online and possibly invisible, but not away. * * @param status_type The status type. * @@ -608,7 +615,7 @@ /** * Returns whether or not a status is available. * - * Available statuses are online and possibly hidden, but not away or idle. + * Available statuses are online and possibly invisible, but not away or idle. * * This is a convenience method for * gaim_status_type_is_available(gaim_status_get_type(status)). @@ -898,7 +905,7 @@ /** * Returns whether or not a presence is available. * - * Available presences are online and possibly hidden, but not away or idle. + * Available presences are online and possibly invisible, but not away or idle. * * @param presence The presence. *