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