Tue, 06 Jun 2000 09:55:30 +0000
[gaim-migrate @ 348]
Whoa, all kinds of things happened here. The applet looks better. The
preferences dialog changes based on your compile-time options (oscar,
gnome). Whispering works again. libfaim got updated; it can almost do
RVOUS stuff, and hopefully soon can make requests too. The applet doesn't
need to have its sounds go through GNOME, although it still can. There
is code to facilitate SOCKS5 support (all that needs to be done is to
actually write the code to communicate with the proxy server).
| 1 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or modify | |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | * GNU General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 | * | |
| 20 | */ | |
| 21 | ||
| 22 | #ifdef USE_APPLET | |
| 23 | #include <gnome.h> | |
| 24 | #include <applet-widget.h> | |
| 25 | #include "gnome_applet_mgr.h" | |
| 26 | #endif /* USE_APPLET */ | |
| 27 | #include <string.h> | |
| 28 | #include <stdio.h> | |
| 29 | #include <stdlib.h> | |
| 30 | #include <time.h> | |
| 31 | ||
| 32 | #include <gtk/gtk.h> | |
| 33 | #include "gaim.h" | |
| 34 | ||
|
133
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
35 | GtkWidget *imaway=NULL; |
|
84
419c24cfe582
[gaim-migrate @ 94]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
79
diff
changeset
|
36 | #ifdef USE_APPLET |
|
419c24cfe582
[gaim-migrate @ 94]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
79
diff
changeset
|
37 | extern enum gaim_user_states MRI_user_status; |
|
419c24cfe582
[gaim-migrate @ 94]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
79
diff
changeset
|
38 | #endif |
| 1 | 39 | |
| 40 | GtkWidget *awaymenu; | |
| 41 | struct away_message *awaymessage = NULL; | |
| 42 | ||
| 43 | static void destroy_im_away() | |
| 44 | { | |
| 45 | if (imaway) | |
| 46 | gtk_widget_destroy(imaway); | |
| 47 | imaway=NULL; | |
| 48 | } | |
| 49 | ||
| 50 | void do_im_back(GtkWidget *w, GtkWidget *x) | |
| 51 | { | |
| 52 | #ifdef USE_APPLET | |
| 53 | applet_widget_unregister_callback(APPLET_WIDGET(applet),"away"); | |
|
84
419c24cfe582
[gaim-migrate @ 94]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
79
diff
changeset
|
54 | MRI_user_status = online; |
| 18 | 55 | insert_applet_away(); |
| 1 | 56 | #endif /* USE_APPLET */ |
| 57 | if (imaway) { | |
| 58 | gtk_widget_destroy(imaway); | |
| 59 | imaway=NULL; | |
| 60 | } | |
| 61 | ||
| 62 | serv_set_away(NULL); | |
| 63 | awaymessage = NULL; | |
|
136
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
64 | #ifdef GAIM_PLUGINS |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
65 | { |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
66 | GList *c = callbacks; |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
67 | struct gaim_callback *g; |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
68 | void (*function)(void *); |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
69 | while (c) { |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
70 | g = (struct gaim_callback *)c->data; |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
71 | if (g->event == event_back && g->function != NULL) { |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
72 | function = g->function; |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
73 | (*function)(g->data); |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
74 | } |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
75 | c = c->next; |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
76 | } |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
77 | } |
|
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
78 | #endif |
| 1 | 79 | } |
| 80 | ||
| 81 | void do_away_message(GtkWidget *w, struct away_message *a) | |
| 82 | { | |
| 83 | GtkWidget *back; | |
|
136
d8dee47cbeb7
[gaim-migrate @ 146]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
133
diff
changeset
|
84 | GtkWidget *awaytext; |
| 1 | 85 | GtkWidget *vscrollbar; |
| 86 | GtkWidget *bbox; | |
| 87 | GtkWidget *vbox; | |
| 88 | GtkWidget *topbox; | |
| 89 | char *buf2; | |
| 90 | char buf[BUF_LONG]; | |
| 91 | GList *cnv = conversations; | |
| 92 | struct conversation *c; | |
| 93 | ||
| 18 | 94 | #ifdef USE_APPLET |
| 95 | remove_applet_away(); | |
| 96 | applet_widget_register_callback(APPLET_WIDGET(applet), | |
| 97 | "away", | |
| 98 | _("Back"), | |
| 99 | (AppletCallbackFunc) do_im_back, | |
| 100 | NULL); | |
|
84
419c24cfe582
[gaim-migrate @ 94]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
79
diff
changeset
|
101 | MRI_user_status = away; |
| 18 | 102 | #endif |
| 103 | ||
| 1 | 104 | if (!imaway) { |
| 105 | imaway = gtk_window_new(GTK_WINDOW_DIALOG); | |
| 106 | gtk_widget_realize(imaway); | |
| 107 | aol_icon(imaway->window); | |
| 108 | back = gtk_button_new_with_label("I'm Back!"); | |
| 109 | bbox = gtk_hbox_new(TRUE, 10); | |
| 110 | topbox = gtk_hbox_new(FALSE, 5); | |
| 111 | vbox = gtk_vbox_new(FALSE, 5); | |
| 112 | ||
| 113 | awaytext = gtk_text_new(NULL, NULL); | |
| 114 | g_snprintf(buf, sizeof(buf), "%s", a->message); | |
| 115 | vscrollbar = gtk_vscrollbar_new(GTK_TEXT(awaytext)->vadj); | |
| 116 | gtk_widget_show(vscrollbar); | |
| 117 | gtk_widget_set_usize(awaytext, 225, 75); | |
| 118 | gtk_text_set_word_wrap(GTK_TEXT(awaytext), TRUE); | |
| 119 | gtk_widget_show(awaytext); | |
| 120 | gtk_text_freeze(GTK_TEXT(awaytext)); | |
| 121 | gtk_text_insert(GTK_TEXT(awaytext), NULL, NULL, NULL, buf, -1); | |
| 122 | gtk_widget_show(awaytext); | |
| 123 | ||
| 124 | ||
| 125 | /* Put the buttons in the box */ | |
| 126 | gtk_box_pack_start(GTK_BOX(bbox), back, TRUE, TRUE, 10); | |
| 127 | ||
| 128 | gtk_box_pack_start(GTK_BOX(topbox), awaytext, FALSE, FALSE, 5); | |
| 129 | ||
| 130 | /* And the boxes in the box */ | |
| 131 | gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); | |
| 132 | gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); | |
| 133 | ||
| 134 | /* Handle closes right */ | |
| 135 | gtk_signal_connect(GTK_OBJECT(imaway), "destroy", | |
| 136 | GTK_SIGNAL_FUNC(destroy_im_away), imaway); | |
| 137 | gtk_signal_connect(GTK_OBJECT(back), "clicked", | |
| 138 | GTK_SIGNAL_FUNC(do_im_back), imaway); | |
| 139 | ||
| 140 | /* Finish up */ | |
| 141 | gtk_widget_show(back); | |
| 142 | gtk_widget_show(topbox); | |
| 143 | gtk_widget_show(bbox); | |
| 144 | gtk_widget_show(vbox); | |
| 145 | if (strlen(a->name)) | |
| 146 | gtk_window_set_title(GTK_WINDOW(imaway), a->name); | |
| 147 | else | |
| 148 | gtk_window_set_title(GTK_WINDOW(imaway), "Gaim - Away!"); | |
| 149 | gtk_window_set_focus(GTK_WINDOW(imaway), back); | |
| 150 | gtk_container_add(GTK_CONTAINER(imaway), vbox); | |
| 151 | awaymessage = a; | |
| 152 | ||
| 153 | } | |
| 154 | ||
| 155 | /* New away message... Clear out the old sent_aways */ | |
| 156 | while(cnv) { | |
| 157 | c = (struct conversation *)cnv->data; | |
| 158 | c->sent_away = 0; | |
| 159 | cnv = cnv->next; | |
| 160 | } | |
| 161 | ||
| 162 | ||
| 79 | 163 | buf2 = g_malloc(strlen(awaymessage->message)*4 + 1); |
| 164 | strcpy(buf2, awaymessage->message); | |
| 1 | 165 | escape_text(buf2); |
| 166 | serv_set_away(buf2); | |
| 79 | 167 | g_free(buf2); |
| 1 | 168 | gtk_widget_show(imaway); |
|
133
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
169 | #ifdef GAIM_PLUGINS |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
170 | { |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
171 | GList *c = callbacks; |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
172 | struct gaim_callback *g; |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
173 | void (*function)(void *); |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
174 | while (c) { |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
175 | g = (struct gaim_callback *)c->data; |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
176 | if (g->event == event_away && g->function != NULL) { |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
177 | function = g->function; |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
178 | (*function)(g->data); |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
179 | } |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
180 | c = c->next; |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
181 | } |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
182 | } |
|
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
107
diff
changeset
|
183 | #endif |
| 1 | 184 | } |
| 185 | ||
| 186 | void rem_away_mess(GtkWidget *w, struct away_message *a) | |
| 187 | { | |
| 18 | 188 | #ifdef USE_APPLET |
| 189 | char *awayname; | |
| 79 | 190 | awayname = g_malloc(sizeof (*awayname) * (6 + strlen(a->name))); |
| 18 | 191 | awayname[0] = '\0'; |
| 192 | strcat(awayname, "away/"); | |
| 193 | strcat(awayname, a->name); | |
| 194 | applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname); | |
| 195 | #endif | |
| 1 | 196 | away_messages = g_list_remove(away_messages, a); |
| 197 | g_free(a); | |
| 198 | do_away_menu(); | |
|
230
5afbb3468f11
[gaim-migrate @ 240]
Todd Kulesza <fflewddur@users.sourceforge.net>
parents:
136
diff
changeset
|
199 | save_prefs(); |
| 1 | 200 | } |
| 201 | ||
| 202 | ||
| 203 | void do_away_menu() | |
| 204 | { | |
| 205 | GtkWidget *menuitem; | |
| 206 | static GtkWidget *remmenu; | |
| 207 | GtkWidget *remitem; | |
| 208 | GtkWidget *label; | |
| 209 | GtkWidget *sep; | |
| 210 | GList *l; | |
| 211 | GtkWidget *list_item; | |
| 212 | GList *awy = away_messages; | |
| 213 | struct away_message *a; | |
| 214 | ||
| 18 | 215 | #ifdef USE_APPLET |
| 216 | remove_applet_away(); | |
| 217 | if (imaway) | |
| 218 | applet_widget_register_callback(APPLET_WIDGET(applet), | |
| 219 | "away", | |
| 220 | _("Back"), | |
| 221 | (AppletCallbackFunc)do_im_back, | |
| 222 | NULL); | |
| 223 | else | |
| 224 | insert_applet_away(); | |
| 225 | #endif | |
| 1 | 226 | |
| 227 | if (pd != NULL) { | |
| 228 | gtk_list_clear_items(GTK_LIST(pd->away_list), 0, -1); | |
| 229 | while(awy) { | |
| 230 | a = (struct away_message *)awy->data; | |
| 231 | label = gtk_label_new(a->name); | |
| 232 | list_item = gtk_list_item_new(); | |
| 233 | gtk_container_add(GTK_CONTAINER(list_item), label); | |
| 234 | gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(away_list_clicked), a); | |
| 235 | gtk_signal_connect(GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(away_list_unclicked), a); | |
| 236 | gtk_object_set_user_data(GTK_OBJECT(list_item), a); | |
| 237 | ||
| 238 | gtk_widget_show(label); | |
| 239 | gtk_container_add(GTK_CONTAINER(pd->away_list), list_item); | |
| 240 | gtk_widget_show(list_item); | |
| 241 | ||
| 242 | awy = awy->next; | |
| 243 | } | |
| 244 | if (away_messages != NULL) | |
| 245 | gtk_list_select_item(GTK_LIST(pd->away_list), 0); | |
| 246 | } | |
| 247 | ||
| 248 | ||
| 249 | l = gtk_container_children(GTK_CONTAINER(awaymenu)); | |
| 250 | ||
| 251 | while(l) { | |
| 252 | gtk_widget_destroy(GTK_WIDGET(l->data)); | |
| 253 | l = l->next; | |
| 254 | } | |
| 255 | ||
| 256 | ||
| 257 | remmenu = gtk_menu_new(); | |
| 258 | ||
| 259 | ||
| 260 | ||
| 261 | menuitem = gtk_menu_item_new_with_label("New Away Message"); | |
| 262 | gtk_menu_append(GTK_MENU(awaymenu), menuitem); | |
| 263 | gtk_widget_show(menuitem); | |
| 264 | gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(create_away_mess), NULL); | |
| 265 | ||
| 266 | ||
|
22
e60d48f9b8c7
[gaim-migrate @ 31]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
18
diff
changeset
|
267 | awy = away_messages; |
| 1 | 268 | while(awy) { |
| 269 | a = (struct away_message *)awy->data; | |
| 270 | ||
| 271 | remitem = gtk_menu_item_new_with_label(a->name); | |
| 272 | gtk_menu_append(GTK_MENU(remmenu), remitem); | |
| 273 | gtk_widget_show(remitem); | |
| 274 | gtk_signal_connect(GTK_OBJECT(remitem), "activate", GTK_SIGNAL_FUNC(rem_away_mess), a); | |
| 275 | ||
| 276 | awy = awy->next; | |
| 277 | ||
| 278 | } | |
| 279 | ||
| 280 | menuitem = gtk_menu_item_new_with_label("Remove Away Message"); | |
| 281 | gtk_menu_append(GTK_MENU(awaymenu), menuitem); | |
| 282 | gtk_widget_show(menuitem); | |
| 283 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); | |
| 284 | gtk_widget_show(remmenu); | |
| 285 | ||
| 286 | ||
| 287 | sep = gtk_hseparator_new(); | |
| 288 | menuitem = gtk_menu_item_new(); | |
| 289 | gtk_menu_append(GTK_MENU(awaymenu), menuitem); | |
| 290 | gtk_container_add(GTK_CONTAINER(menuitem), sep); | |
| 291 | gtk_widget_set_sensitive(menuitem, FALSE); | |
| 292 | gtk_widget_show(menuitem); | |
| 293 | gtk_widget_show(sep); | |
| 294 | ||
| 295 | awy = away_messages; | |
| 296 | ||
| 297 | while(awy) { | |
| 298 | a = (struct away_message *)awy->data; | |
| 299 | ||
| 300 | menuitem = gtk_menu_item_new_with_label(a->name); | |
| 301 | gtk_menu_append(GTK_MENU(awaymenu), menuitem); | |
| 302 | gtk_widget_show(menuitem); | |
| 303 | gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(do_away_message), a); | |
| 304 | ||
| 305 | awy = awy->next; | |
| 306 | ||
| 307 | } | |
| 308 | ||
| 309 | } | |
| 310 | ||
| 311 | ||
| 312 | ||
| 313 | ||
| 314 | ||
| 315 |