Mercurial > pidgin
annotate src/away.c @ 338:9d258a0aa560
[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).
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Tue, 06 Jun 2000 09:55:30 +0000 |
| parents | 83dd297aa363 |
| children | b402a23f35df |
| rev | line source |
|---|---|
| 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
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
35 GtkWidget *imaway=NULL; |
| 84 | 36 #ifdef USE_APPLET |
| 37 extern enum gaim_user_states MRI_user_status; | |
| 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 | 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
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
64 #ifdef GAIM_PLUGINS |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
65 { |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
66 GList *c = callbacks; |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
67 struct gaim_callback *g; |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
68 void (*function)(void *); |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
69 while (c) { |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
70 g = (struct gaim_callback *)c->data; |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
71 if (g->event == event_back && g->function != NULL) { |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
72 function = g->function; |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
73 (*function)(g->data); |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
74 } |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
75 c = c->next; |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
76 } |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
77 } |
|
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
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
4e91b92f91a7
[gaim-migrate @ 146]
Eric Warmenhoven <eric@warmenhoven.org>
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 | 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
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
169 #ifdef GAIM_PLUGINS |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
170 { |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
171 GList *c = callbacks; |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
172 struct gaim_callback *g; |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
173 void (*function)(void *); |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
174 while (c) { |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
175 g = (struct gaim_callback *)c->data; |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
176 if (g->event == event_away && g->function != NULL) { |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
177 function = g->function; |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
178 (*function)(g->data); |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
179 } |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
180 c = c->next; |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
181 } |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
182 } |
|
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
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
83dd297aa363
[gaim-migrate @ 240]
Eric Warmenhoven <eric@warmenhoven.org>
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 | 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 |
