comparison src/away.c @ 1250:b5783215b245

[gaim-migrate @ 1260] decklin's clean up of the account editor, much needed. indent -kr -i8 -l105 -ncs -cp7 -npcs -T GtkWidget -T gpointer -T AppletCallbackFunc -T GtkFunction -T gaim_plugin_remove -T name -T FILE -T gchar -T user_opts -T GdkEvent -T GtkObject ... did about.c, aim.c, away.c, browser.c, buddy_chat.c, gaimrc.c, html.c, idle.c, multi.c. Need to do buddy.c, conversation.c, dialogs.c, oscar.c, perl.c, plugins.c, prefs.c, proxy.c, prpl.c, rvous.c, server.c, sound.c, toc.c, util.c. not doing gtkhtml.c because it's a piece of crap anyway, or *ticker.c because they're syd's. got rid of debug_buff, just debug_printf now. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 13 Dec 2000 20:18:35 +0000
parents 4fd0d35826fe
children 9da444224f0e
comparison
equal deleted inserted replaced
1249:3e44de27622d 1250:b5783215b245
34 34
35 #include <gtk/gtk.h> 35 #include <gtk/gtk.h>
36 #include "gaim.h" 36 #include "gaim.h"
37 #include "pixmaps/join.xpm" 37 #include "pixmaps/join.xpm"
38 38
39 GtkWidget *imaway=NULL; 39 GtkWidget *imaway = NULL;
40 40
41 GtkWidget *awaymenu = NULL; 41 GtkWidget *awaymenu = NULL;
42 struct away_message *awaymessage = NULL; 42 struct away_message *awaymessage = NULL;
43 int default_away; 43 int default_away;
44 int auto_away; 44 int auto_away;
45 45
46 static void destroy_im_away() 46 static void destroy_im_away()
47 { 47 {
48 if (imaway) 48 if (imaway)
49 gtk_widget_destroy(imaway); 49 gtk_widget_destroy(imaway);
50 imaway=NULL; 50 imaway = NULL;
51 } 51 }
52 52
53 void do_im_back(GtkWidget *w, GtkWidget *x) 53 void do_im_back(GtkWidget *w, GtkWidget *x)
54 { 54 {
55 #ifdef USE_APPLET 55 #ifdef USE_APPLET
56 applet_widget_unregister_callback(APPLET_WIDGET(applet),"away"); 56 applet_widget_unregister_callback(APPLET_WIDGET(applet), "away");
57 set_user_state(online); 57 set_user_state(online);
58 insert_applet_away(); 58 insert_applet_away();
59 #endif /* USE_APPLET */ 59 #endif /* USE_APPLET */
60 if (imaway) { 60 if (imaway) {
61 GtkWidget *tmp = imaway; 61 GtkWidget *tmp = imaway;
62 imaway=NULL; 62 imaway = NULL;
63 gtk_widget_destroy(tmp); 63 gtk_widget_destroy(tmp);
64 plugin_event(event_back, 0, 0, 0, 0); 64 plugin_event(event_back, 0, 0, 0, 0);
65 } 65 }
66 66
67 serv_set_away(NULL); 67 serv_set_away(NULL);
68 awaymessage = NULL; 68 awaymessage = NULL;
69 } 69 }
70 70
71 71
72 /* 72 /*
73 * rcg10312000 This could be more robust, but it works for my current 73 * rcg10312000 This could be more robust, but it works for my current
74 * goal: to remove those annoying <BR> tags. :) 74 * goal: to remove those annoying <BR> tags. :)
75 */ 75 */
76 static void strncpy_nohtml(gchar *dest, const gchar *src, size_t destsize) 76 static void strncpy_nohtml(gchar * dest, const gchar * src, size_t destsize)
77 { 77 {
78 gchar *ptr; 78 gchar *ptr;
79 g_snprintf(dest, destsize, "%s", src); 79 g_snprintf(dest, destsize, "%s", src);
80 80
81 while (1) { 81 while (1) {
82 ptr = strstr(dest, "<BR>"); 82 ptr = strstr(dest, "<BR>");
83 if (ptr == NULL) /* done? */ 83 if (ptr == NULL) /* done? */
84 return; 84 return;
85 85
86 /* replace <BR> with a newline. */ 86 /* replace <BR> with a newline. */
87 *ptr = '\n'; 87 *ptr = '\n';
88 memmove(ptr + 1, ptr + 4, strlen(ptr + 4) + 1); 88 memmove(ptr + 1, ptr + 4, strlen(ptr + 4) + 1);
89 } 89 }
90 } 90 }
91 91
92 void do_away_message(GtkWidget *w, struct away_message *a) 92 void do_away_message(GtkWidget *w, struct away_message *a)
93 { 93 {
94 GtkWidget *back; 94 GtkWidget *back;
95 GtkWidget *awaytext; 95 GtkWidget *awaytext;
96 GtkWidget *vscrollbar; 96 GtkWidget *vscrollbar;
97 GtkWidget *vbox; 97 GtkWidget *vbox;
98 char *buf2; 98 char *buf2;
99 char buf[BUF_LONG]; 99 char buf[BUF_LONG];
100 GList *cnv = conversations; 100 GList *cnv = conversations;
101 struct conversation *c; 101 struct conversation *c;
102 102
103 if (!blist) 103 if (!blist)
104 return; 104 return;
105 105
106 #ifdef USE_APPLET 106 #ifdef USE_APPLET
107 remove_applet_away(); 107 remove_applet_away();
108 applet_widget_register_callback(APPLET_WIDGET(applet), 108 applet_widget_register_callback(APPLET_WIDGET(applet),
109 "away", 109 "away", _("Back"), (AppletCallbackFunc)do_im_back, NULL);
110 _("Back"),
111 (AppletCallbackFunc) do_im_back,
112 NULL);
113 set_user_state(away); 110 set_user_state(away);
114 #endif 111 #endif
115 112
116 if (!imaway) { 113 if (!imaway) {
117 imaway = gtk_window_new(GTK_WINDOW_DIALOG); 114 imaway = gtk_window_new(GTK_WINDOW_DIALOG);
118 gtk_window_set_wmclass(GTK_WINDOW(imaway), "imaway", "Gaim"); 115 gtk_window_set_wmclass(GTK_WINDOW(imaway), "imaway", "Gaim");
119 gtk_widget_realize(imaway); 116 gtk_widget_realize(imaway);
120 aol_icon(imaway->window); 117 aol_icon(imaway->window);
121 back = picture_button(imaway, _("I'm Back!"), join_xpm); 118 back = picture_button(imaway, _("I'm Back!"), join_xpm);
122 vbox = gtk_vbox_new(FALSE, 5); 119 vbox = gtk_vbox_new(FALSE, 5);
123 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 120 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
124 121
125 awaytext = gtk_text_new(NULL, NULL); 122 awaytext = gtk_text_new(NULL, NULL);
126 123
127 /* rcg10312000 Convert basic HTML (<BR>, etc) to plain text. 124 /* rcg10312000 Convert basic HTML (<BR>, etc) to plain text.
128 g_snprintf(buf, sizeof(buf), "%s", a->message); 125 g_snprintf(buf, sizeof(buf), "%s", a->message);
129 */ 126 */
130 strncpy_nohtml(buf, a->message, sizeof (buf)); 127 strncpy_nohtml(buf, a->message, sizeof(buf));
131 128
132 vscrollbar = gtk_vscrollbar_new(GTK_TEXT(awaytext)->vadj); 129 vscrollbar = gtk_vscrollbar_new(GTK_TEXT(awaytext)->vadj);
133 gtk_widget_show(vscrollbar); 130 gtk_widget_show(vscrollbar);
134 gtk_widget_set_usize(awaytext, 225, 100); 131 gtk_widget_set_usize(awaytext, 225, 100);
135 gtk_text_set_word_wrap(GTK_TEXT(awaytext), TRUE); 132 gtk_text_set_word_wrap(GTK_TEXT(awaytext), TRUE);
136 gtk_widget_show(awaytext); 133 gtk_widget_show(awaytext);
137 gtk_text_freeze(GTK_TEXT(awaytext)); 134 gtk_text_freeze(GTK_TEXT(awaytext));
138 gtk_text_insert(GTK_TEXT(awaytext), NULL, NULL, NULL, buf, -1); 135 gtk_text_insert(GTK_TEXT(awaytext), NULL, NULL, NULL, buf, -1);
139 gtk_widget_show(awaytext); 136 gtk_widget_show(awaytext);
140 137
141 if (display_options & OPT_DISP_COOL_LOOK) 138 if (display_options & OPT_DISP_COOL_LOOK)
142 gtk_button_set_relief(GTK_BUTTON(back), GTK_RELIEF_NONE); 139 gtk_button_set_relief(GTK_BUTTON(back), GTK_RELIEF_NONE);
143 140
144 /* Put the buttons in the box */ 141 /* Put the buttons in the box */
145 gtk_box_pack_start(GTK_BOX(vbox), awaytext, TRUE, TRUE, 0); 142 gtk_box_pack_start(GTK_BOX(vbox), awaytext, TRUE, TRUE, 0);
146 gtk_box_pack_start(GTK_BOX(vbox), back, FALSE, FALSE, 0); 143 gtk_box_pack_start(GTK_BOX(vbox), back, FALSE, FALSE, 0);
147 144
148 /* Handle closes right */ 145 /* Handle closes right */
149 gtk_signal_connect(GTK_OBJECT(imaway), "destroy", 146 gtk_signal_connect(GTK_OBJECT(imaway), "destroy", GTK_SIGNAL_FUNC(do_im_back), imaway);
150 GTK_SIGNAL_FUNC(do_im_back), imaway); 147 gtk_signal_connect(GTK_OBJECT(back), "clicked", GTK_SIGNAL_FUNC(do_im_back), imaway);
151 gtk_signal_connect(GTK_OBJECT(back), "clicked",
152 GTK_SIGNAL_FUNC(do_im_back), imaway);
153 148
154 /* Finish up */ 149 /* Finish up */
155 gtk_widget_show(back); 150 gtk_widget_show(back);
156 gtk_widget_show(vbox); 151 gtk_widget_show(vbox);
157 if (strlen(a->name)) 152 if (strlen(a->name))
158 gtk_window_set_title(GTK_WINDOW(imaway), a->name); 153 gtk_window_set_title(GTK_WINDOW(imaway), a->name);
159 else 154 else
160 gtk_window_set_title(GTK_WINDOW(imaway), _("Gaim - Away!")); 155 gtk_window_set_title(GTK_WINDOW(imaway), _("Gaim - Away!"));
161 gtk_window_set_focus(GTK_WINDOW(imaway), back); 156 gtk_window_set_focus(GTK_WINDOW(imaway), back);
162 gtk_container_add(GTK_CONTAINER(imaway), vbox); 157 gtk_container_add(GTK_CONTAINER(imaway), vbox);
163 awaymessage = a; 158 awaymessage = a;
164 159
165 } else { 160 } else {
166 destroy_im_away(); 161 destroy_im_away();
167 do_away_message(w, a); 162 do_away_message(w, a);
168 return; 163 return;
169 } 164 }
170 165
171 /* New away message... Clear out the old sent_aways */ 166 /* New away message... Clear out the old sent_aways */
172 while(cnv) { 167 while (cnv) {
173 c = (struct conversation *)cnv->data; 168 c = (struct conversation *)cnv->data;
174 c->sent_away = 0; 169 c->sent_away = 0;
175 cnv = cnv->next; 170 cnv = cnv->next;
176 } 171 }
177 172
178 173
179 buf2 = g_malloc(strlen(awaymessage->message)*4 + 1); 174 buf2 = g_malloc(strlen(awaymessage->message) * 4 + 1);
180 strncpy_withhtml(buf2, awaymessage->message, strlen(awaymessage->message)*4 + 1); 175 strncpy_withhtml(buf2, awaymessage->message, strlen(awaymessage->message) * 4 + 1);
181 serv_set_away(buf2); 176 serv_set_away(buf2);
182 g_free(buf2); 177 g_free(buf2);
183 gtk_widget_show(imaway); 178 gtk_widget_show(imaway);
184 plugin_event(event_away, 0, 0, 0, 0); 179 plugin_event(event_away, 0, 0, 0, 0);
185 } 180 }
186 181
187 void rem_away_mess(GtkWidget *w, struct away_message *a) 182 void rem_away_mess(GtkWidget *w, struct away_message *a)
188 { 183 {
189 struct away_message *default_msg; 184 struct away_message *default_msg;
190 #ifdef USE_APPLET 185 #ifdef USE_APPLET
191 char *awayname; 186 char *awayname;
192 awayname = g_malloc(sizeof (*awayname) * (6 + strlen(a->name))); 187 awayname = g_malloc(sizeof(*awayname) * (6 + strlen(a->name)));
193 awayname[0] = '\0'; 188 awayname[0] = '\0';
194 strcat(awayname, "away/"); 189 strcat(awayname, "away/");
195 strcat(awayname, a->name); 190 strcat(awayname, a->name);
196 applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname); 191 applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname);
197 g_free(awayname); 192 g_free(awayname);
198 #endif 193 #endif
199 default_msg = g_slist_nth_data(away_messages, default_away); 194 default_msg = g_slist_nth_data(away_messages, default_away);
200 away_messages = g_slist_remove(away_messages, a); 195 away_messages = g_slist_remove(away_messages, a);
201 default_away = g_slist_index(away_messages, default_msg); 196 default_away = g_slist_index(away_messages, default_msg);
202 if (default_away == -1) 197 if (default_away == -1)
203 default_away = 0; 198 default_away = 0;
204 g_free(a); 199 g_free(a);
205 do_away_menu(); 200 do_away_menu();
206 save_prefs(); 201 save_prefs();
207 } 202 }
208 203
209 204
210 void do_away_menu() 205 void do_away_menu()
211 { 206 {
214 GtkWidget *remitem; 209 GtkWidget *remitem;
215 GtkWidget *label; 210 GtkWidget *label;
216 GtkWidget *sep; 211 GtkWidget *sep;
217 GList *l; 212 GList *l;
218 GtkWidget *list_item; 213 GtkWidget *list_item;
219 GSList *awy = away_messages; 214 GSList *awy = away_messages;
220 struct away_message *a; 215 struct away_message *a;
221 216
222 #ifdef USE_APPLET 217 #ifdef USE_APPLET
223 remove_applet_away(); 218 remove_applet_away();
224 if (imaway) 219 if (imaway)
225 applet_widget_register_callback(APPLET_WIDGET(applet), 220 applet_widget_register_callback(APPLET_WIDGET(applet),
226 "away", 221 "away", _("Back"), (AppletCallbackFunc)do_im_back, NULL);
227 _("Back"),
228 (AppletCallbackFunc)do_im_back,
229 NULL);
230 else 222 else
231 insert_applet_away(); 223 insert_applet_away();
232 #endif 224 #endif
233 225
234 if (prefs_away_list != NULL) { 226 if (prefs_away_list != NULL) {
235 gtk_list_clear_items(GTK_LIST(prefs_away_list), 0, -1); 227 gtk_list_clear_items(GTK_LIST(prefs_away_list), 0, -1);
236 while(awy) { 228 while (awy) {
237 a = (struct away_message *)awy->data; 229 a = (struct away_message *)awy->data;
238 label = gtk_label_new(a->name); 230 label = gtk_label_new(a->name);
239 list_item = gtk_list_item_new(); 231 list_item = gtk_list_item_new();
240 gtk_container_add(GTK_CONTAINER(list_item), label); 232 gtk_container_add(GTK_CONTAINER(list_item), label);
241 gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(away_list_clicked), a); 233 gtk_signal_connect(GTK_OBJECT(list_item), "select",
234 GTK_SIGNAL_FUNC(away_list_clicked), a);
242 /* gtk_signal_connect(GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(away_list_unclicked), a);*/ 235 /* gtk_signal_connect(GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(away_list_unclicked), a);*/
243 gtk_object_set_user_data(GTK_OBJECT(list_item), a); 236 gtk_object_set_user_data(GTK_OBJECT(list_item), a);
244 237
245 gtk_widget_show(label); 238 gtk_widget_show(label);
246 gtk_container_add(GTK_CONTAINER(prefs_away_list), list_item); 239 gtk_container_add(GTK_CONTAINER(prefs_away_list), list_item);
247 gtk_widget_show(list_item); 240 gtk_widget_show(list_item);
248 241
249 awy = g_slist_next(awy); 242 awy = g_slist_next(awy);
250 } 243 }
251 if (away_messages != NULL) 244 if (away_messages != NULL)
252 gtk_list_select_item(GTK_LIST(prefs_away_list), 0); 245 gtk_list_select_item(GTK_LIST(prefs_away_list), 0);
253 } 246 }
254 247
255 if (awaymenu) { 248 if (awaymenu) {
256 l = gtk_container_children(GTK_CONTAINER(awaymenu)); 249 l = gtk_container_children(GTK_CONTAINER(awaymenu));
257 250
258 while(l) { 251 while (l) {
259 gtk_widget_destroy(GTK_WIDGET(l->data)); 252 gtk_widget_destroy(GTK_WIDGET(l->data));
260 l = l->next; 253 l = l->next;
261 } 254 }
262 255
263 256
264 remmenu = gtk_menu_new(); 257 remmenu = gtk_menu_new();
265 258
266 menuitem = gtk_menu_item_new_with_label(_("New Away Message")); 259 menuitem = gtk_menu_item_new_with_label(_("New Away Message"));
267 gtk_menu_append(GTK_MENU(awaymenu), menuitem); 260 gtk_menu_append(GTK_MENU(awaymenu), menuitem);
268 gtk_widget_show(menuitem); 261 gtk_widget_show(menuitem);
269 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(create_away_mess), NULL); 262 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(create_away_mess),
270 263 NULL);
264
271 awy = away_messages; 265 awy = away_messages;
272 while(awy) { 266 while (awy) {
273 a = (struct away_message *)awy->data; 267 a = (struct away_message *)awy->data;
274 268
275 remitem = gtk_menu_item_new_with_label(a->name); 269 remitem = gtk_menu_item_new_with_label(a->name);
276 gtk_menu_append(GTK_MENU(remmenu), remitem); 270 gtk_menu_append(GTK_MENU(remmenu), remitem);
277 gtk_widget_show(remitem); 271 gtk_widget_show(remitem);
278 gtk_signal_connect(GTK_OBJECT(remitem), "activate", GTK_SIGNAL_FUNC(rem_away_mess), a); 272 gtk_signal_connect(GTK_OBJECT(remitem), "activate",
279 273 GTK_SIGNAL_FUNC(rem_away_mess), a);
274
280 awy = g_slist_next(awy); 275 awy = g_slist_next(awy);
281 276
282 } 277 }
283 278
284 menuitem = gtk_menu_item_new_with_label(_("Remove Away Message")); 279 menuitem = gtk_menu_item_new_with_label(_("Remove Away Message"));
285 gtk_menu_append(GTK_MENU(awaymenu), menuitem); 280 gtk_menu_append(GTK_MENU(awaymenu), menuitem);
286 gtk_widget_show(menuitem); 281 gtk_widget_show(menuitem);
287 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); 282 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu);
288 gtk_widget_show(remmenu); 283 gtk_widget_show(remmenu);
289 284
290 sep = gtk_hseparator_new(); 285 sep = gtk_hseparator_new();
291 menuitem = gtk_menu_item_new(); 286 menuitem = gtk_menu_item_new();
292 gtk_menu_append(GTK_MENU(awaymenu), menuitem); 287 gtk_menu_append(GTK_MENU(awaymenu), menuitem);
293 gtk_container_add(GTK_CONTAINER(menuitem), sep); 288 gtk_container_add(GTK_CONTAINER(menuitem), sep);
294 gtk_widget_set_sensitive(menuitem, FALSE); 289 gtk_widget_set_sensitive(menuitem, FALSE);
295 gtk_widget_show(menuitem); 290 gtk_widget_show(menuitem);
296 gtk_widget_show(sep); 291 gtk_widget_show(sep);
297 292
298 awy = away_messages; 293 awy = away_messages;
299 294
300 while(awy) { 295 while (awy) {
301 a = (struct away_message *)awy->data; 296 a = (struct away_message *)awy->data;
302 297
303 menuitem = gtk_menu_item_new_with_label(a->name); 298 menuitem = gtk_menu_item_new_with_label(a->name);
304 gtk_menu_append(GTK_MENU(awaymenu), menuitem); 299 gtk_menu_append(GTK_MENU(awaymenu), menuitem);
305 gtk_widget_show(menuitem); 300 gtk_widget_show(menuitem);
306 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(do_away_message), a); 301 gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
307 302 GTK_SIGNAL_FUNC(do_away_message), a);
303
308 awy = g_slist_next(awy); 304 awy = g_slist_next(awy);
309 305
310 } 306 }
311 } 307 }
312 if (prefs_away_menu) { 308 if (prefs_away_menu) {
313 l = gtk_container_children(GTK_CONTAINER(prefs_away_menu)); 309 l = gtk_container_children(GTK_CONTAINER(prefs_away_menu));
314 while(l) { 310 while (l) {
315 gtk_widget_destroy(GTK_WIDGET(l->data)); 311 gtk_widget_destroy(GTK_WIDGET(l->data));
316 l = l->next; 312 l = l->next;
317 } 313 }
318 gtk_widget_hide(GTK_WIDGET(prefs_away_menu)); 314 gtk_widget_hide(GTK_WIDGET(prefs_away_menu));
319 default_away_menu_init(GTK_WIDGET(prefs_away_menu)); 315 default_away_menu_init(GTK_WIDGET(prefs_away_menu));
320 gtk_widget_show(prefs_away_menu); 316 gtk_widget_show(prefs_away_menu);
321 } 317 }
322 318
323 } 319 }
324
325
326
327
328
329