# HG changeset patch # User Rob Flynn # Date 1001142150 0 # Node ID 19ea44f74a88e92839859ed2db6af08462878a6f # Parent 29449a6b79e64458e85fce37878acc7dd7222c1b [gaim-migrate @ 2357] well, it still needs some work, but I did promise that I'd commit it tonight. I need to make it check to make sure the file exists, and need to make it display the current buddy icon. I'll do this tomorrow and will commit it. If there's any errors, I'll grab them then. I've had a couple drinks tonight, so it's very possible that I did something dumb or extremely brilliant. ;-) committer: Tailor Script diff -r 29449a6b79e6 -r 19ea44f74a88 src/dialogs.c --- a/src/dialogs.c Sat Sep 22 02:19:48 2001 +0000 +++ b/src/dialogs.c Sat Sep 22 07:02:30 2001 +0000 @@ -85,6 +85,7 @@ static GtkWidget *infodialog = NULL; static GList *dialogwindows = NULL; static GtkWidget *exportdialog, *importdialog; +static GtkWidget *icondlg; static GtkWidget *aliasdlg = NULL; static GtkWidget *aliasentry = NULL; static GtkWidget *aliasname = NULL; @@ -173,6 +174,14 @@ GtkWidget *cancel; }; +struct set_icon_dlg { + GtkWidget *window; + struct aim_user *user; + GtkWidget *ok; + GtkWidget *cancel; + GtkWidget *entry; +}; + struct set_dir_dlg { struct gaim_connection *gc; GtkWidget *window; @@ -278,6 +287,9 @@ if (dest == importdialog) importdialog = NULL; + if (dest == icondlg) + icondlg = NULL; + if (dest == aliasdlg) { aliasdlg = NULL; aliasentry = NULL; @@ -330,6 +342,11 @@ destroy_dialog(NULL, importdialog); importdialog = NULL; } + + if (icondlg) { + destroy_dialog(NULL, icondlg); + icondlg = NULL; + } } static void do_warn(GtkWidget *widget, struct warning *w) @@ -1518,6 +1535,183 @@ gtk_widget_show(b->window); } +void do_user_icon(GtkWidget *w, gpointer data) +{ + struct set_icon_dlg *b = (struct set_icon_dlg *)data; + char *file; + + file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(icondlg)); + + if (file_is_dir(file, icondlg)) + return; + + if (b && b->entry) { + gtk_entry_set_text(GTK_ENTRY(b->entry), file); + } + + destroy_dialog(NULL, icondlg); + icondlg = NULL; + +} + +void show_icon_dialog(GtkWidget *w, gpointer data) +{ + struct set_icon_dlg *b = (struct set_icon_dlg *)data; + char *buf = g_malloc(BUF_LEN); + + if (!icondlg) { + icondlg = gtk_file_selection_new(_("Gaim - Load User Icon")); + + gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(icondlg)); + + g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME")); + + gtk_file_selection_set_filename(GTK_FILE_SELECTION(icondlg), buf); + gtk_signal_connect(GTK_OBJECT(icondlg), "destroy", + GTK_SIGNAL_FUNC(destroy_dialog), icondlg); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(icondlg)->ok_button), + "clicked", GTK_SIGNAL_FUNC(do_user_icon), b); + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(icondlg)->cancel_button), + "clicked", GTK_SIGNAL_FUNC(destroy_dialog), icondlg); + + + } + + g_free(buf); + gtk_widget_show(icondlg); + gdk_window_raise(icondlg->window); +} + +void do_save_icon(GtkWidget *w, struct set_icon_dlg *b) +{ + char *file = gtk_entry_get_text(GTK_ENTRY(b->entry)); + + if (file) + g_snprintf(b->user->iconfile, sizeof(b->user->iconfile), "%s", file); + else + b->user->iconfile[0] = 0; + + save_prefs(); + + destroy_dialog(NULL, b->window); +} + +void do_clear_icon(GtkWidget *w, struct set_icon_dlg *b) +{ + gtk_entry_set_text(GTK_ENTRY(b->entry), ""); +} + +void show_set_icon(struct gaim_connection *gc) +{ + GtkWidget *label; + GtkWidget *frame; + GtkWidget *buttons; + GtkWidget *button; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *hbox2; + GtkWidget *rbox; +/* GtkWidget *sep; */ + + struct aim_user *tmp; + struct set_icon_dlg *b = g_new0(struct set_icon_dlg, 1); + + if (!g_slist_find(connections, gc)) + gc = connections->data; + + tmp = gc->user; + b->user = tmp; + + b->window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_container_set_border_width(GTK_CONTAINER(b->window), 5); + gtk_window_set_wmclass(GTK_WINDOW(b->window), "set_icon", "Gaim"); + gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Set User Icon")); + gtk_signal_connect(GTK_OBJECT(b->window), "destroy", + GTK_SIGNAL_FUNC(destroy_dialog), b->window); + gtk_widget_realize(b->window); + aol_icon(b->window->window); + dialogwindows = g_list_prepend(dialogwindows, b->window); + + /* the box that holds everything */ + vbox = gtk_vbox_new(FALSE, 5); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(b->window), vbox); + + /* and the frame that umm frames shit */ + frame = gtk_frame_new(_("User Icon")); + gtk_container_set_border_width(GTK_CONTAINER(frame), 5); + gtk_widget_show(frame); + gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); + + /* the inner boxie */ + hbox = gtk_hbox_new(FALSE, 0); + gtk_widget_show(hbox); + gtk_container_add(GTK_CONTAINER(frame), hbox); + + /* + sep = gtk_vseparator_new(); + gtk_widget_show(sep); + gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5); + */ + + /* A boxy */ + rbox = gtk_vbox_new(FALSE, 5); + gtk_widget_show(rbox); + gtk_box_pack_start(GTK_BOX(hbox), rbox, FALSE, FALSE, 5); + + label = gtk_label_new(_("Please select an icon to be viewed when you chat with\nother users.")); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(rbox), label, FALSE, FALSE, 5); + + hbox2 = gtk_hbox_new(FALSE, 5); + gtk_widget_show(hbox2); + gtk_box_pack_start(GTK_BOX(rbox), hbox2, FALSE, FALSE, 5); + + b->entry = gtk_entry_new(); + + if (strlen(gc->user->iconfile)) { + gtk_entry_set_text(GTK_ENTRY(b->entry), gc->user->iconfile); + } + + gtk_widget_show(b->entry); + gtk_box_pack_start(GTK_BOX(hbox2), b->entry, TRUE, TRUE, 5); + + button = gtk_button_new_with_label(_("Browse")); + gtk_box_pack_start(GTK_BOX(hbox2), button, FALSE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(show_icon_dialog), b); + gtk_widget_show(button); + + button = gtk_button_new_with_label(_("Clear")); + gtk_box_pack_start(GTK_BOX(hbox2), button, FALSE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(do_clear_icon), b); + + gtk_widget_show(button); + + /* button buttons */ + buttons = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), buttons, FALSE, FALSE, 0); + gtk_widget_show(buttons); + + b->cancel = picture_button(b->window, _("Cancel"), cancel_xpm); + gtk_box_pack_end(GTK_BOX(buttons), b->cancel, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", + GTK_SIGNAL_FUNC(destroy_dialog), b->window); + + b->ok = picture_button(b->window, _("Ok"), ok_xpm); + gtk_box_pack_end(GTK_BOX(buttons), b->ok, FALSE, FALSE, 0); + + gtk_signal_connect(GTK_OBJECT(b->ok), "clicked", + GTK_SIGNAL_FUNC(do_save_icon), b); + + /* Show it */ + gtk_widget_show(b->window); + +} + void show_set_info(struct gaim_connection *gc) { GtkWidget *buttons; diff -r 29449a6b79e6 -r 19ea44f74a88 src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Sat Sep 22 02:19:48 2001 +0000 +++ b/src/protocols/oscar/oscar.c Sat Sep 22 07:02:30 2001 +0000 @@ -2634,6 +2634,8 @@ if (!strcmp(act, "Set User Info")) { show_set_info(gc); + } else if (!strcmp(act, "Set Buddy Icon")) { + show_set_icon(gc); } else if (!strcmp(act, "Change Password")) { show_change_passwd(gc); } else if (!strcmp(act, "Confirm Account")) { @@ -2659,6 +2661,7 @@ GList *m = NULL; m = g_list_append(m, "Set User Info"); + m = g_list_append(m, "Set Buddy Icon"); m = g_list_append(m, NULL); m = g_list_append(m, "Change Password"); m = g_list_append(m, "Confirm Account");