# HG changeset patch # User Rob Flynn # Date 975235549 0 # Node ID 5b5d03dfa48af1c0a5a5cc5b491303c2416ce9a3 # Parent c8615d023aaf29003aed8bd98cf543aca91e4624 [gaim-migrate @ 1147] Started setting up the new Buddy Pounce code. The UI needs a little more work as it is a little cluttered right now. The .gaimrc file is now in revision 4. It properly saves buddy pounces between v3 and v4 and converts them. Actual functionality will be commited soon. I remembered that I didnt commit so I woke up to do so just incase :D committer: Tailor Script diff -r c8615d023aaf -r 5b5d03dfa48a ChangeLog --- a/ChangeLog Sun Nov 26 07:35:57 2000 +0000 +++ b/ChangeLog Sun Nov 26 10:45:49 2000 +0000 @@ -13,6 +13,7 @@ * Perl got updates (reread plugins/PERL-HOWTO) * Spell checker now uses gtkspell * Auto-Away (thanks, yet again, to bmiller ;) + * More buddy pounce options version 0.10.3 (10/09/2000): * Segfault when viewing user info fixed diff -r c8615d023aaf -r 5b5d03dfa48a src/aim.c --- a/src/aim.c Sun Nov 26 07:35:57 2000 +0000 +++ b/src/aim.c Sun Nov 26 10:45:49 2000 +0000 @@ -621,6 +621,7 @@ account_editor (NULL, NULL); } else if (do_login_ret == -1) show_login(); + gtk_main(); #endif /* USE_APPLET */ diff -r c8615d023aaf -r 5b5d03dfa48a src/buddy.c --- a/src/buddy.c Sun Nov 26 07:35:57 2000 +0000 +++ b/src/buddy.c Sun Nov 26 10:45:49 2000 +0000 @@ -1377,7 +1377,6 @@ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); gtk_widget_show(remmenu); - sep = gtk_hseparator_new(); menuitem = gtk_menu_item_new(); gtk_menu_append(GTK_MENU(bpmenu), menuitem); @@ -1398,8 +1397,6 @@ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), messmenu); gtk_widget_show(menuitem); - - mess = gtk_menu_item_new_with_label(b->message); gtk_menu_append(GTK_MENU(messmenu), mess); gtk_widget_show(mess); diff -r c8615d023aaf -r 5b5d03dfa48a src/dialogs.c --- a/src/dialogs.c Sun Nov 26 07:35:57 2000 +0000 +++ b/src/dialogs.c Sun Nov 26 10:45:49 2000 +0000 @@ -116,6 +116,10 @@ GtkWidget *messentry; GtkWidget *sendim; GtkWidget *openwindow; + GtkWidget *p_signon; + GtkWidget *p_unaway; + GtkWidget *p_unidle; + GtkWidget *menu; }; struct findbyemail { @@ -1040,16 +1044,71 @@ bp->sendim = 1; else bp->sendim = 0; + + if (GTK_TOGGLE_BUTTON(b->p_signon)->active) + bp->signon = 1; + else + bp->signon = 0; + + if (GTK_TOGGLE_BUTTON(b->p_unaway)->active) + bp->unaway = 1; + else + bp->unaway = 0; + + if (GTK_TOGGLE_BUTTON(b->p_unidle)->active) + bp->unidle = 1; + else + bp->unidle = 0; buddy_pounces = g_list_append(buddy_pounces, bp); do_bp_menu(); destroy_dialog(NULL, b->window); + save_prefs(); g_free(b); } +static void pounce_user_menu(struct addbp *b, GtkWidget *box) +{ + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *optmenu; + GtkWidget *menu; + GtkWidget *opt; + GList *u = aim_users; + struct aim_user *a; + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); + gtk_widget_show(hbox); + + label = gtk_label_new(_("Pounce buddy as:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + optmenu = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5); + gtk_widget_show(optmenu); + + menu = gtk_menu_new(); + + while (u) { + a = (struct aim_user *)u->data; + opt = gtk_menu_item_new_with_label(a->username); + gtk_object_set_user_data(GTK_OBJECT(opt), a); + gtk_menu_append(GTK_MENU(menu), opt); + gtk_widget_show(opt); + u = u->next; + } + + gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0); + + b->menu = optmenu; +} + void show_new_bp(char *name) { @@ -1082,16 +1141,35 @@ GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); + /* Pounce as menu */ + pounce_user_menu(b, vbox); + /* Put the buttons in the box */ label = gtk_label_new(_("Buddy To Pounce:")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), b->nameentry, FALSE, FALSE, 0); - b->openwindow = gtk_check_button_new_with_label(_("Open IM Window on Buddy Logon")); + /* Set up the different options */ + b->p_signon = gtk_check_button_new_with_label(_("Sign On")); + b->p_unaway = gtk_check_button_new_with_label(_("Return from away")); + b->p_unidle = gtk_check_button_new_with_label(_("Return from idle")); + + /* Show them */ + gtk_widget_show(b->p_signon); + gtk_widget_show(b->p_unaway); + gtk_widget_show(b->p_unidle); + + /* And pack'em */ + gtk_box_pack_start(GTK_BOX(vbox), b->p_signon, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), b->p_unaway, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), b->p_unidle, FALSE, FALSE, 0); + + /* And now the other stuff */ + b->openwindow = gtk_check_button_new_with_label(_("Open IM window on pounce")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->openwindow), FALSE); - b->sendim = gtk_check_button_new_with_label(_("Send IM on Buddy Logon")); + b->sendim = gtk_check_button_new_with_label(_("Send IM on pounce")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sendim), TRUE); gtk_widget_show(b->openwindow); diff -r c8615d023aaf -r 5b5d03dfa48a src/gaim.h --- a/src/gaim.h Sun Nov 26 07:35:57 2000 +0000 +++ b/src/gaim.h Sun Nov 26 10:45:49 2000 +0000 @@ -245,6 +245,10 @@ char message[2048]; int popup; int sendim; + + int signon; + int unaway; + int unidle; }; struct away_message { diff -r c8615d023aaf -r 5b5d03dfa48a src/gaimrc.c --- a/src/gaimrc.c Sun Nov 26 07:35:57 2000 +0000 +++ b/src/gaimrc.c Sun Nov 26 10:45:49 2000 +0000 @@ -36,6 +36,7 @@ /* for people like myself, who are too lazy to add an away msg :) */ #define BORING_DEFAULT_AWAY_MSG "sorry, i ran out for a while. bbl" +#define MAX_VALUES 7 GList *aim_users = NULL; int general_options; @@ -51,7 +52,7 @@ struct parse { char option[256]; - char value[6][256]; + char value[MAX_VALUES][256]; }; static struct parse *parse_line(char *line) @@ -60,8 +61,13 @@ int inopt = 1, inval = 0, curval = -1; int optlen = 0, vallen = 0; static struct parse p; - + int x; + for (x = 0; x < MAX_VALUES; x++) { + p.value[x][0] = 0; + } + + while(*c) { if (*c == '\t') { c++; @@ -115,6 +121,7 @@ } c++; } + return &p; } @@ -277,7 +284,23 @@ b->popup = atoi(p->value[2]); b->sendim = atoi(p->value[3]); - + + /* Let's check our version and see what's going on here */ + if ((p->value[4]) && (strlen(p->value[4]) > 0)) + { + /* If we have data, lets use it */ + b->signon = atoi(p->value[4]); + b->unaway = atoi(p->value[5]); + b->unidle = atoi(p->value[6]); + } + else + { + /* Otherwise, we have old info. Let's adjust */ + b->signon = 1; + b->unaway = 0; + b->unidle = 0; + } + filter_break(b->message); buddy_pounces = g_list_append(buddy_pounces, b); } @@ -295,7 +318,6 @@ { while (pnc) { char *str1, *str2; - int popup, sendim; b = (struct buddy_pounce *)pnc->data; @@ -306,10 +328,8 @@ str2 = malloc(1); str2[0] = 0; } - popup = b->popup; - sendim = b->sendim; - fprintf(f, "\tentry { %s } { %s } { %d } { %d }\n", str1, str2, popup, sendim); + fprintf(f, "\tentry { %s } { %s } { %d } { %d } { %d } { %d } { %d }\n", str1, str2, b->popup, b->sendim, b->signon, b->unaway, b->unidle); /* escape_text2 uses malloc(), so we don't want to g_free these */ free(str1); @@ -841,7 +861,6 @@ if ( (ver == 2) || (buf[0] != '#')) { set_defaults(TRUE); } - } void save_prefs() @@ -852,7 +871,7 @@ if (getenv("HOME")) { g_snprintf(buf, sizeof(buf), "%s/.gaimrc", getenv("HOME")); if ((f = fopen(buf,"w"))) { - fprintf(f, "# .gaimrc v%d\n", 3); + fprintf(f, "# .gaimrc v%d\n", 4); gaimrc_write_users(f); gaimrc_write_options(f); gaimrc_write_sounds(f);