comparison src/gtkblist.c @ 9754:4a8bf81b82ae

[gaim-migrate @ 10621] " This will default the room/server fields to the proper values when an add chat is requested from a conversation window. It wasn't quite as trivial as the reporter suggested..." --Nathan (noif) Fredrickson committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sun, 15 Aug 2004 19:34:20 +0000
parents 60705fd4f411
children 41f302d41839
comparison
equal deleted inserted replaced
9753:60705fd4f411 9754:4a8bf81b82ae
73 } GaimGtkAddBuddyData; 73 } GaimGtkAddBuddyData;
74 74
75 typedef struct 75 typedef struct
76 { 76 {
77 GaimAccount *account; 77 GaimAccount *account;
78 const char *default_chat_name;
78 79
79 GtkWidget *window; 80 GtkWidget *window;
80 GtkWidget *account_menu; 81 GtkWidget *account_menu;
81 GtkWidget *alias_entry; 82 GtkWidget *alias_entry;
82 GtkWidget *group_combo; 83 GtkWidget *group_combo;
947 GaimBlistNode *node; 948 GaimBlistNode *node;
948 949
949 if(gtk_tree_selection_get_selected(sel, NULL, &iter)){ 950 if(gtk_tree_selection_get_selected(sel, NULL, &iter)){
950 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); 951 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
951 if (GAIM_BLIST_NODE_IS_BUDDY(node)) 952 if (GAIM_BLIST_NODE_IS_BUDDY(node))
952 gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent->parent, NULL); 953 gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent->parent, NULL, NULL);
953 if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node)) 954 if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node))
954 gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent, NULL); 955 gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent, NULL, NULL);
955 else if (GAIM_BLIST_NODE_IS_GROUP(node)) 956 else if (GAIM_BLIST_NODE_IS_GROUP(node))
956 gaim_blist_request_add_chat(NULL, (GaimGroup*)node, NULL); 957 gaim_blist_request_add_chat(NULL, (GaimGroup*)node, NULL, NULL);
957 } 958 }
958 else { 959 else {
959 gaim_blist_request_add_chat(NULL, NULL, NULL); 960 gaim_blist_request_add_chat(NULL, NULL, NULL, NULL);
960 } 961 }
961 } 962 }
962 963
963 static void gaim_gtk_blist_add_buddy_cb() 964 static void gaim_gtk_blist_add_buddy_cb()
964 { 965 {
4141 static void 4142 static void
4142 rebuild_addchat_entries(GaimGtkAddChatData *data) 4143 rebuild_addchat_entries(GaimGtkAddChatData *data)
4143 { 4144 {
4144 GaimConnection *gc; 4145 GaimConnection *gc;
4145 GList *list, *tmp; 4146 GList *list, *tmp;
4147 GHashTable *defaults = NULL;
4146 struct proto_chat_entry *pce; 4148 struct proto_chat_entry *pce;
4147 gboolean focus = TRUE; 4149 gboolean focus = TRUE;
4148 4150
4149 gc = gaim_account_get_connection(data->account); 4151 gc = gaim_account_get_connection(data->account);
4150 4152
4158 g_list_free(data->entries); 4160 g_list_free(data->entries);
4159 4161
4160 data->entries = NULL; 4162 data->entries = NULL;
4161 4163
4162 list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); 4164 list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc);
4165
4166 if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL)
4167 defaults = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc,
4168 data->default_chat_name);
4163 4169
4164 for (tmp = list; tmp; tmp = tmp->next) 4170 for (tmp = list; tmp; tmp = tmp->next)
4165 { 4171 {
4166 GtkWidget *label; 4172 GtkWidget *label;
4167 GtkWidget *rowbox; 4173 GtkWidget *rowbox;
4192 gaim_set_accessible_label (spin, label); 4198 gaim_set_accessible_label (spin, label);
4193 } 4199 }
4194 else 4200 else
4195 { 4201 {
4196 GtkWidget *entry = gtk_entry_new(); 4202 GtkWidget *entry = gtk_entry_new();
4203 char *value;
4197 4204
4198 g_object_set_data(G_OBJECT(entry), "identifier", pce->identifier); 4205 g_object_set_data(G_OBJECT(entry), "identifier", pce->identifier);
4199 data->entries = g_list_append(data->entries, entry); 4206 data->entries = g_list_append(data->entries, entry);
4200 4207
4201 if (pce->def) 4208 value = g_hash_table_lookup(defaults, pce->identifier);
4209 if (value != NULL)
4210 gtk_entry_set_text(GTK_ENTRY(entry), value);
4211 else if (pce->def)
4202 gtk_entry_set_text(GTK_ENTRY(entry), pce->def); 4212 gtk_entry_set_text(GTK_ENTRY(entry), pce->def);
4203 4213
4204 if (focus) 4214 if (focus)
4205 { 4215 {
4206 gtk_widget_grab_focus(entry); 4216 gtk_widget_grab_focus(entry);
4220 4230
4221 g_free(pce); 4231 g_free(pce);
4222 } 4232 }
4223 4233
4224 g_list_free(list); 4234 g_list_free(list);
4235 g_hash_table_destroy(defaults);
4225 4236
4226 gtk_widget_show_all(data->entries_box); 4237 gtk_widget_show_all(data->entries_box);
4227 } 4238 }
4228 4239
4229 static void 4240 static void
4250 return (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL); 4261 return (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL);
4251 } 4262 }
4252 4263
4253 void 4264 void
4254 gaim_gtk_blist_request_add_chat(GaimAccount *account, GaimGroup *group, 4265 gaim_gtk_blist_request_add_chat(GaimAccount *account, GaimGroup *group,
4255 const char *alias) 4266 const char *alias, const char *name)
4256 { 4267 {
4257 GaimGtkAddChatData *data; 4268 GaimGtkAddChatData *data;
4258 GaimGtkBuddyList *gtkblist; 4269 GaimGtkBuddyList *gtkblist;
4259 GList *l; 4270 GList *l;
4260 GaimConnection *gc; 4271 GaimConnection *gc;
4268 4279
4269 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, 4280 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
4270 GTK_ICON_SIZE_DIALOG); 4281 GTK_ICON_SIZE_DIALOG);
4271 4282
4272 gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); 4283 gtkblist = GAIM_GTK_BLIST(gaim_get_blist());
4284
4285 data->default_chat_name = name;
4273 4286
4274 if (account != NULL) 4287 if (account != NULL)
4275 { 4288 {
4276 data->account = account; 4289 data->account = account;
4277 } 4290 }