Mercurial > pidgin
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 { |
