pidgin/gtkblist.c

branch
cpw.rekkanoryo.icqxstatus
changeset 29404
f51e82b8b886
parent 29304
6a941ac152e3
child 29408
a1d7b09414fa
equal deleted inserted replaced
29403:9d1d55abd31f 29404:f51e82b8b886
3828 struct _pidgin_blist_node *gtkbuddynode = NULL; 3828 struct _pidgin_blist_node *gtkbuddynode = NULL;
3829 PurplePlugin *prpl; 3829 PurplePlugin *prpl;
3830 PurplePluginProtocolInfo *prpl_info; 3830 PurplePluginProtocolInfo *prpl_info;
3831 const char *name = NULL; 3831 const char *name = NULL;
3832 char *filename, *path; 3832 char *filename, *path;
3833 PurplePresence *presence = NULL; 3833 PurplePresence *p = NULL;
3834 PurpleStatus *tune; 3834 PurpleStatus *tune;
3835 3835
3836 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { 3836 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
3837 if(!gtknode->contact_expanded) { 3837 if(!gtknode->contact_expanded) {
3838 buddy = purple_contact_get_priority_buddy((PurpleContact*)node); 3838 buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
3839 gtkbuddynode = ((PurpleBlistNode*)buddy)->ui_data; 3839 gtkbuddynode = ((PurpleBlistNode*)buddy)->ui_data;
3840 } 3840 }
3841 } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { 3841 } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
3842 buddy = (PurpleBuddy*)node; 3842 buddy = (PurpleBuddy*)node;
3843 gtkbuddynode = node->ui_data; 3843 gtkbuddynode = node->ui_data;
3844 presence = purple_buddy_get_presence(buddy); 3844 p = purple_buddy_get_presence(buddy);
3845 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) { 3845 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) {
3846 /* This emblem comes from the small emoticon set now, 3846 /* This emblem comes from the small emoticon set now,
3847 * to reduce duplication. */ 3847 * to reduce duplication. */
3848 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", 3848 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes",
3849 "small", "mobile.png", NULL); 3849 "small", "mobile.png", NULL);
3850 return _pidgin_blist_get_cached_emblem(path); 3850 return _pidgin_blist_get_cached_emblem(path);
3866 return _pidgin_blist_get_cached_emblem(path); 3866 return _pidgin_blist_get_cached_emblem(path);
3867 } 3867 }
3868 3868
3869 /* If we came through the contact code flow above, we didn't need 3869 /* If we came through the contact code flow above, we didn't need
3870 * to get the presence until now. */ 3870 * to get the presence until now. */
3871 if (presence == NULL) 3871 if (p == NULL)
3872 presence = purple_buddy_get_presence(buddy); 3872 p = purple_buddy_get_presence(buddy);
3873 3873
3874 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) { 3874 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) {
3875 /* This emblem comes from the small emoticon set now, to reduce duplication. */ 3875 /* This emblem comes from the small emoticon set now, to reduce duplication. */
3876 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", "small", "mobile.png", NULL); 3876 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", "small", "mobile.png", NULL);
3877 return _pidgin_blist_get_cached_emblem(path); 3877 return _pidgin_blist_get_cached_emblem(path);
3878 } 3878 }
3879 3879
3906 name = prpl_info->list_emblem(buddy); 3906 name = prpl_info->list_emblem(buddy);
3907 3907
3908 if (name == NULL) { 3908 if (name == NULL) {
3909 PurpleStatus *status; 3909 PurpleStatus *status;
3910 3910
3911 if (!purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOOD)) 3911 if (!purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOOD))
3912 return NULL; 3912 return NULL;
3913 3913
3914 status = purple_presence_get_status(presence, "mood"); 3914 status = purple_presence_get_status(p, "mood");
3915 name = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); 3915 name = purple_status_get_attr_string(status, PURPLE_MOOD_NAME);
3916 3916
3917 if (!(name && *name)) 3917 if (!(name && *name))
3918 return NULL; 3918 return NULL;
3919 3919
7947 PurpleAccount *account = data; 7947 PurpleAccount *account = data;
7948 7948
7949 purple_account_set_enabled(account, PIDGIN_UI, FALSE); 7949 purple_account_set_enabled(account, PIDGIN_UI, FALSE);
7950 } 7950 }
7951 7951
7952 static void
7953 edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields)
7954 {
7955 PurpleRequestField *f;
7956 GList *l;
7957
7958 f = purple_request_fields_get_field(fields, "mood");
7959 l = purple_request_field_list_get_selected(f);
7960
7961 if (l) {
7962 const char *mood = purple_request_field_list_get_data(f, l->data);
7963 PurpleAccount *account = purple_connection_get_account(gc);
7964
7965 if (mood != NULL) {
7966 purple_account_set_status(account, "mood", TRUE,
7967 PURPLE_MOOD_NAME, mood,
7968 NULL);
7969 } else {
7970 purple_account_set_status(account, "mood", FALSE, NULL);
7971 }
7972 }
7973 }
7974
7975 static void
7976 set_mood_cb(GtkWidget *widget, PurpleAccount *account)
7977 {
7978 PurplePresence *presence = purple_account_get_presence(account);
7979 PurpleStatus *status = purple_presence_get_status(presence, "mood");
7980 const char *current_mood;
7981 PurpleRequestFields *fields;
7982 PurpleRequestFieldGroup *g;
7983 PurpleRequestField *f;
7984 char* na_fn;
7985 PurpleConnection *gc = purple_account_get_connection(account);
7986 PurplePluginProtocolInfo *prpl_info;
7987 PurpleMood *mood;
7988
7989 g_return_if_fail(gc->prpl != NULL);
7990 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
7991
7992 current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME);
7993
7994 fields = purple_request_fields_new();
7995 g = purple_request_field_group_new(NULL);
7996 f = purple_request_field_list_new("mood", _("Please select your mood from the list"));
7997
7998 na_fn = g_build_filename("pixmaps", "pidgin", "emblems", "16", "not-authorized.png", NULL);
7999
8000 purple_request_field_list_add_icon(f, _("None"), na_fn, NULL);
8001 if (current_mood == NULL)
8002 purple_request_field_list_add_selected(f, _("None"));
8003
8004 g_free(na_fn);
8005
8006 /* TODO: rlaager wants this sorted. */
8007 for (mood = prpl_info->get_moods(account);
8008 mood->mood != NULL ; mood++) {
8009 char *path;
8010
8011 if (mood->mood == NULL || mood->description == NULL)
8012 continue;
8013
8014 path = get_mood_icon_path(mood->mood);
8015 purple_request_field_list_add_icon(f, _(mood->description),
8016 path, (gpointer)mood->mood);
8017 g_free(path);
8018
8019 if (current_mood && !strcmp(current_mood, mood->mood))
8020 purple_request_field_list_add_selected(f, _(mood->description));
8021 }
8022 purple_request_field_group_add_field(g, f);
8023
8024 purple_request_fields_add_group(fields, g);
8025
8026 purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"),
8027 NULL, fields,
8028 _("OK"), G_CALLBACK(edit_mood_cb),
8029 _("Cancel"), NULL,
8030 purple_connection_get_account(gc),
8031 NULL, NULL, gc);
8032 }
8033
7952 void 8034 void
7953 pidgin_blist_update_accounts_menu(void) 8035 pidgin_blist_update_accounts_menu(void)
7954 { 8036 {
7955 GtkWidget *menuitem = NULL, *submenu = NULL; 8037 GtkWidget *menuitem = NULL, *submenu = NULL;
7956 GtkAccelGroup *accel_group = NULL; 8038 GtkAccelGroup *accel_group = NULL;
8026 GtkWidget *image = NULL; 8108 GtkWidget *image = NULL;
8027 PurpleConnection *gc = NULL; 8109 PurpleConnection *gc = NULL;
8028 PurpleAccount *account = NULL; 8110 PurpleAccount *account = NULL;
8029 GdkPixbuf *pixbuf = NULL; 8111 GdkPixbuf *pixbuf = NULL;
8030 PurplePlugin *plugin = NULL; 8112 PurplePlugin *plugin = NULL;
8031 PurplePluginProtocolInfo *prpl_info 8113 PurplePluginProtocolInfo *prpl_info;
8032 8114
8033 account = accounts->data; 8115 account = accounts->data;
8034 8116
8035 if (!purple_account_get_enabled(account, PIDGIN_UI)) 8117 if (!purple_account_get_enabled(account, PIDGIN_UI))
8036 continue; 8118 continue;

mercurial