comparison src/dialogs.c @ 5050:dfec167391a5

[gaim-migrate @ 5398] New Alias Buddy dialog. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 06 Apr 2003 22:32:09 +0000
parents 8e55a4d362a3
children 317bdeedc729
comparison
equal deleted inserted replaced
5049:24d0da9c56f2 5050:dfec167391a5
62 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ 62 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */
63 static GList *dialogwindows = NULL; 63 static GList *dialogwindows = NULL;
64 static GtkWidget *importdialog; 64 static GtkWidget *importdialog;
65 static struct gaim_connection *importgc; 65 static struct gaim_connection *importgc;
66 static GtkWidget *icondlg; 66 static GtkWidget *icondlg;
67 static GtkWidget *aliasdlg = NULL; 67 static GtkWidget *alias_dialog = NULL;
68 static GtkWidget *aliasentry = NULL;
69 static GtkWidget *aliasname = NULL;
70 static GtkWidget *rename_dialog = NULL; 68 static GtkWidget *rename_dialog = NULL;
71 static GtkWidget *rename_bud_dialog = NULL; 69 static GtkWidget *rename_bud_dialog = NULL;
72 70
73 71
74 struct confirm_del { 72 struct confirm_del {
138 struct getuserinfo { 136 struct getuserinfo {
139 GtkWidget *window; 137 GtkWidget *window;
140 GtkWidget *entry; 138 GtkWidget *entry;
141 GtkWidget *account; 139 GtkWidget *account;
142 struct gaim_connection *gc; 140 struct gaim_connection *gc;
141 };
142
143 struct alias_dialog_info
144 {
145 GtkWidget *window;
146 GtkWidget *name_entry;
147 GtkWidget *alias_entry;
148 struct buddy *buddy;
143 }; 149 };
144 150
145 static GSList *info_dlgs = NULL; 151 static GSList *info_dlgs = NULL;
146 152
147 static struct info_dlg *find_info_dlg(struct gaim_connection *gc, char *who) 153 static struct info_dlg *find_info_dlg(struct gaim_connection *gc, char *who)
289 else 295 else
290 dest = w2; 296 dest = w2;
291 297
292 if (dest == imdialog) 298 if (dest == imdialog)
293 imdialog = NULL; 299 imdialog = NULL;
294 300 else if (dest == importdialog) {
295 if (dest == importdialog) {
296 importdialog = NULL; 301 importdialog = NULL;
297 importgc = NULL; 302 importgc = NULL;
298 } 303 }
299 304 else if (dest == icondlg)
300 if (dest == icondlg)
301 icondlg = NULL; 305 icondlg = NULL;
302 306 else if (dest == rename_dialog)
303 if (dest == aliasdlg) {
304 aliasdlg = NULL;
305 aliasentry = NULL;
306 aliasname = NULL;
307 }
308
309 if (dest == rename_dialog)
310 rename_dialog = NULL; 307 rename_dialog = NULL;
311 308 else if (dest == rename_bud_dialog)
312 if (dest == rename_bud_dialog)
313 rename_bud_dialog = NULL; 309 rename_bud_dialog = NULL;
314 310
315 dialogwindows = g_list_remove(dialogwindows, dest); 311 dialogwindows = g_list_remove(dialogwindows, dest);
316 gtk_widget_destroy(dest); 312 gtk_widget_destroy(dest);
317
318 } 313 }
319 314
320 315
321 void destroy_all_dialogs() 316 void destroy_all_dialogs()
322 { 317 {
3269 gtkconv->dialogs.smiley = dialog; 3264 gtkconv->dialogs.smiley = dialog;
3270 3265
3271 return; 3266 return;
3272 } 3267 }
3273 3268
3274 static void do_alias_bud(GtkWidget *w, struct buddy *b) 3269 static void
3275 { 3270 do_alias_buddy(GtkWidget *w, int resp, struct alias_dialog_info *info)
3276 const char *al = gtk_entry_get_text(GTK_ENTRY(aliasname)); 3271 {
3277 gaim_blist_alias_buddy (b, (al && strlen(al)) ? al : NULL); 3272 if (resp == GTK_RESPONSE_OK) {
3278 serv_alias_buddy(b); 3273 const char *alias;
3279 gaim_blist_save(); 3274
3280 destroy_dialog(aliasdlg, aliasdlg); 3275 alias = gtk_entry_get_text(GTK_ENTRY(info->alias_entry));
3281 } 3276
3282 3277 gaim_blist_alias_buddy(info->buddy, (alias && *alias) ? alias : NULL);
3283 void alias_dialog_bud(struct buddy *b) 3278 serv_alias_buddy(info->buddy);
3284 { 3279 gaim_blist_save();
3280 }
3281
3282 destroy_dialog(NULL, alias_dialog);
3283 alias_dialog = NULL;
3284
3285 g_free(info);
3286 }
3287
3288 void
3289 alias_dialog_bud(struct buddy *b)
3290 {
3291 struct alias_dialog_info *info = NULL;
3292 struct gaim_gtk_buddy_list *gtkblist;
3293 GtkWidget *hbox;
3285 GtkWidget *vbox; 3294 GtkWidget *vbox;
3286 GtkWidget *bbox;
3287 GtkWidget *cancel;
3288 static GtkWidget *add = NULL;
3289 GtkWidget *label; 3295 GtkWidget *label;
3290 GtkWidget *topbox; 3296 GtkWidget *table;
3291 3297 GtkWidget *img;
3292 if (aliasdlg) 3298
3293 gtk_widget_destroy(aliasdlg); 3299 gtkblist = GAIM_GTK_BLIST(gaim_get_blist());
3294 3300
3295 GAIM_DIALOG(aliasdlg); 3301 if (!alias_dialog) {
3296 gtk_window_set_resizable(GTK_WINDOW(aliasdlg), FALSE); 3302 info = g_new0(struct alias_dialog_info, 1);
3297 gtk_window_set_role(GTK_WINDOW(aliasdlg), "alias_dialog"); 3303 info->buddy = b;
3298 gtk_widget_realize(aliasdlg); 3304
3299 dialogwindows = g_list_prepend(dialogwindows, aliasdlg); 3305 alias_dialog = gtk_dialog_new_with_buttons(_("Alias Buddy"),
3300 3306 (gtkblist ? GTK_WINDOW(gtkblist->window) : NULL),
3301 topbox = gtk_vbox_new(FALSE, 5); 3307 GTK_DIALOG_NO_SEPARATOR,
3302 vbox = gtk_vbox_new(FALSE, 5); 3308 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3303 3309 GTK_STOCK_OK, GTK_RESPONSE_OK,
3304 aliasentry = gtk_entry_new(); 3310 NULL);
3305 aliasname = gtk_entry_new(); 3311
3306 3312 gtk_dialog_set_default_response(GTK_DIALOG(alias_dialog),
3307 /* Make the buddy name box */ 3313 GTK_RESPONSE_OK);
3308 bbox = gtk_hbox_new(FALSE, 5); 3314 gtk_container_set_border_width(GTK_CONTAINER(alias_dialog), 6);
3309 label = gtk_label_new(_("Buddy")); 3315 gtk_window_set_resizable(GTK_WINDOW(alias_dialog), FALSE);
3310 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 5); 3316 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(alias_dialog)->vbox), 12);
3311 gtk_box_pack_end(GTK_BOX(bbox), aliasentry, FALSE, FALSE, 5); 3317 gtk_container_set_border_width(
3312 gtk_editable_set_editable(GTK_EDITABLE(aliasentry), FALSE); 3318 GTK_CONTAINER(GTK_DIALOG(alias_dialog)->vbox), 6);
3313 gtk_box_pack_start(GTK_BOX(topbox), bbox, FALSE, FALSE, 0); 3319 gtk_dialog_set_response_sensitive(GTK_DIALOG(alias_dialog),
3314 3320 GTK_RESPONSE_OK, FALSE);
3315 /* And the buddy alias box */ 3321
3316 bbox = gtk_hbox_new(FALSE, 5); 3322 /* The main hbox container. */
3317 label = gtk_label_new(_("Alias")); 3323 hbox = gtk_hbox_new(FALSE, 12);
3318 gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 5); 3324 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(alias_dialog)->vbox), hbox);
3319 gtk_box_pack_end(GTK_BOX(bbox), aliasname, FALSE, FALSE, 5); 3325
3320 gtk_box_pack_start(GTK_BOX(topbox), bbox, FALSE, FALSE, 0); 3326 /* The dialog image. */
3321 3327 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
3322 gtk_entry_set_text(GTK_ENTRY(aliasentry), b->name); 3328 GTK_ICON_SIZE_DIALOG);
3323 if(b->alias) 3329 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
3324 gtk_entry_set_text(GTK_ENTRY(aliasname), b->alias); 3330 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
3325 3331
3326 /* Put the buttons in the box */ 3332 /* The main vbox container. */
3327 bbox = gtk_hbox_new(FALSE, 5); 3333 vbox = gtk_vbox_new(FALSE, 0);
3328 3334 gtk_container_add(GTK_CONTAINER(hbox), vbox);
3329 add = gaim_pixbuf_button_from_stock(_("Alias"), GTK_STOCK_ADD, GAIM_BUTTON_HORIZONTAL); 3335
3330 cancel = gaim_pixbuf_button_from_stock(_("Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL); 3336 /* Setup the label containing the description. */
3331 gtk_box_pack_end(GTK_BOX(bbox), add, FALSE, FALSE, 0); 3337 label = gtk_label_new(_("Please enter an aliased name for the "
3332 gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 0); 3338 "person below, or rename this contact "
3333 3339 "in your buddy list.\n"));
3334 /* And the boxes in the box */ 3340 gtk_widget_set_size_request(GTK_WIDGET(label), 350, -1);
3335 gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); 3341
3336 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); 3342 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
3337 3343 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
3338 /* Handle closes right */ 3344 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
3339 g_signal_connect(GTK_OBJECT(aliasdlg), "destroy", G_CALLBACK(destroy_dialog), aliasdlg); 3345
3340 g_signal_connect(GTK_OBJECT(cancel), "clicked", G_CALLBACK(destroy_dialog), aliasdlg); 3346 hbox = gtk_hbox_new(FALSE, 6);
3341 g_signal_connect(GTK_OBJECT(add), "clicked", G_CALLBACK(do_alias_bud), b); 3347 gtk_container_add(GTK_CONTAINER(vbox), hbox);
3342 g_signal_connect(GTK_OBJECT(aliasname), "activate", G_CALLBACK(do_alias_bud), b); 3348
3343 /* Finish up */ 3349 /* The table containing the entry widgets and labels. */
3344 gtk_window_set_title(GTK_WINDOW(aliasdlg), _("Alias Buddy")); 3350 table = gtk_table_new(2, 2, FALSE);
3345 gtk_window_set_focus(GTK_WINDOW(aliasdlg), aliasname); 3351 gtk_table_set_row_spacings(GTK_TABLE(table), 6);
3346 gtk_container_add(GTK_CONTAINER(aliasdlg), vbox); 3352 gtk_table_set_col_spacings(GTK_TABLE(table), 6);
3347 gtk_container_set_border_width(GTK_CONTAINER(aliasdlg), 5); 3353 gtk_container_set_border_width(GTK_CONTAINER(table), 12);
3348 gtk_widget_realize(aliasdlg); 3354 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
3349 3355
3350 gtk_widget_show_all(aliasdlg); 3356 /* The "Screenname:" label. */
3357 label = gtk_label_new(NULL);
3358 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Screenname:"));
3359 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
3360 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
3361
3362 /* The Screen name entry field. */
3363 info->name_entry = gtk_entry_new();
3364 gtk_table_attach_defaults(GTK_TABLE(table), info->name_entry,
3365 1, 2, 0, 1);
3366 gtk_entry_set_activates_default(GTK_ENTRY(info->name_entry), TRUE);
3367 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->name_entry);
3368 gtk_entry_set_text(GTK_ENTRY(info->name_entry), info->buddy->name);
3369
3370 g_signal_connect(G_OBJECT(info->name_entry), "changed",
3371 G_CALLBACK(dialog_set_ok_sensitive), alias_dialog);
3372
3373 /* The "Alias:" label. */
3374 label = gtk_label_new(NULL);
3375 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Alias:"));
3376 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
3377 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
3378
3379 /* The alias entry field. */
3380 info->alias_entry = gtk_entry_new();
3381 gtk_table_attach_defaults(GTK_TABLE(table), info->alias_entry,
3382 1, 2, 1, 2);
3383 gtk_entry_set_activates_default(GTK_ENTRY(info->alias_entry), TRUE);
3384 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->alias_entry);
3385
3386 if (info->buddy->alias != NULL)
3387 gtk_entry_set_text(GTK_ENTRY(info->alias_entry),
3388 info->buddy->alias);
3389
3390 g_signal_connect(G_OBJECT(info->alias_entry), "changed",
3391 G_CALLBACK(dialog_set_ok_sensitive), alias_dialog);
3392
3393 g_signal_connect(G_OBJECT(alias_dialog), "response",
3394 G_CALLBACK(do_alias_buddy), info);
3395 }
3396
3397 gtk_widget_show_all(alias_dialog);
3398
3399 if (info)
3400 gtk_widget_grab_focus(info->name_entry);
3351 } 3401 }
3352 3402
3353 3403
3354 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) 3404 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c)
3355 { 3405 {