Mercurial > pidgin
annotate src/buddy.c @ 340:0d9cfc3579a5
[gaim-migrate @ 350]
More changes to the applet. Now, you can have it remember the position and
not have it near the applet, or not remember the position and not near the
applet, or near the applet. Also, if you want it near the applet, the login
box will appear near the applet.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Tue, 06 Jun 2000 21:33:20 +0000 |
parents | 9d258a0aa560 |
children | df984d56efb4 |
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> | |
84 | 25 #include "gnome_applet_mgr.h" |
1 | 26 #endif /* USE_APPLET */ |
27 #include <string.h> | |
28 #include <stdio.h> | |
29 #include <stdlib.h> | |
30 #include <math.h> | |
31 #include <time.h> | |
32 | |
33 #include <gtk/gtk.h> | |
34 #include <gdk/gdkx.h> | |
35 #include "gaim.h" | |
36 #include "pixmaps/admin_icon.xpm" | |
37 #include "pixmaps/aol_icon.xpm" | |
38 #include "pixmaps/free_icon.xpm" | |
39 #include "pixmaps/dt_icon.xpm" | |
40 #include "pixmaps/no_icon.xpm" | |
41 #include "pixmaps/login_icon.xpm" | |
42 #include "pixmaps/logout_icon.xpm" | |
43 | |
44 #include "pixmaps/buddyadd.xpm" | |
45 #include "pixmaps/buddydel.xpm" | |
46 #include "pixmaps/buddychat.xpm" | |
47 #include "pixmaps/im.xpm" | |
48 #include "pixmaps/info.xpm" | |
49 #include "pixmaps/permadd.xpm" | |
50 #include "pixmaps/permdel.xpm" | |
51 #include "pixmaps/away_icon.xpm" | |
52 | |
150
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
53 #include "pixmaps/daemon-buddyadd.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
54 #include "pixmaps/daemon-buddydel.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
55 #include "pixmaps/daemon-buddychat.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
56 #include "pixmaps/daemon-im.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
57 #include "pixmaps/daemon-info.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
58 #include "pixmaps/daemon-permadd.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
59 #include "pixmaps/daemon-permdel.xpm" |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
60 |
1 | 61 static GtkTooltips *tips; |
62 static GtkWidget *editpane; | |
63 static GtkWidget *buddypane; | |
64 static GtkWidget *permitpane; | |
65 static GtkWidget *edittree; | |
66 static GtkWidget *permtree; | |
67 static GtkWidget *imbutton, *infobutton, *chatbutton; | |
68 static GtkWidget *addbutton, *rembutton; | |
69 static GtkWidget *addpermbutton, *rempermbutton; | |
70 static GtkWidget *lagometer = NULL; | |
71 static GtkWidget *lagometer_box = NULL; | |
72 | |
73 static int last_lag_us; | |
74 | |
75 | |
76 GtkWidget *blist = NULL; | |
77 GtkWidget *bpmenu; | |
78 GtkWidget *buddies; | |
79 int permdeny; | |
80 | |
81 | |
82 /* Predefine some functions */ | |
83 static void new_bp_callback(GtkWidget *w, char *name); | |
84 static void log_callback(GtkWidget *w, char *name); | |
85 | |
86 | |
87 void destroy_buddy() | |
88 { | |
89 if (blist) | |
90 gtk_widget_destroy(blist); | |
91 blist=NULL; | |
10 | 92 #ifdef USE_APPLET |
93 buddy_created = FALSE; | |
94 #endif | |
1 | 95 } |
96 | |
97 void update_num_groups() | |
98 { | |
99 GList *grp = groups; | |
100 GList *mem; | |
101 struct buddy *b; | |
102 struct group *g; | |
103 int pres, total; | |
104 char buf[BUF_LONG]; | |
105 | |
106 if (!(display_options & OPT_DISP_SHOW_GRPNUM)) | |
107 return; | |
108 | |
109 while(grp) { | |
110 g = (struct group *)grp->data; | |
111 mem = g->members; | |
112 pres = 0; | |
113 total = 0; | |
114 while(mem) { | |
115 b = (struct buddy *)mem->data; | |
116 if (b->present) | |
117 pres++; | |
118 total++; | |
119 | |
120 | |
121 mem = mem->next; | |
122 } | |
123 | |
124 g_snprintf(buf, sizeof(buf), "%s (%d/%d)", g->name, pres, total); | |
125 | |
126 gtk_label_set(GTK_LABEL(g->label), buf); | |
127 grp = grp->next; | |
128 } | |
129 | |
130 } | |
131 | |
132 void update_show_idlepix() | |
133 { | |
134 GList *grp = groups; | |
135 GList *mem; | |
136 struct group *g; | |
137 struct buddy *b; | |
138 | |
139 while (grp) { | |
140 g = (struct group *)grp->data; | |
141 mem = g->members; | |
142 | |
143 while(mem) { | |
144 b = (struct buddy *)mem->data; | |
145 | |
146 if (display_options & OPT_DISP_SHOW_IDLETIME) | |
147 gtk_widget_show(b->idletime); | |
148 else | |
149 gtk_widget_hide(b->idletime); | |
150 | |
151 if (display_options & OPT_DISP_SHOW_PIXMAPS) | |
152 gtk_widget_show(b->pix); | |
153 else | |
154 gtk_widget_hide(b->pix); | |
155 mem = mem->next; | |
156 } | |
157 grp = grp->next; | |
158 } | |
159 } | |
160 | |
161 void update_all_buddies() | |
162 { | |
163 GList *grp = groups; | |
164 GList *mem; | |
165 struct buddy *b; | |
166 struct group *g; | |
167 | |
168 while(grp) { | |
169 g = (struct group *)grp->data; | |
170 mem = g->members; | |
171 while(mem) { | |
172 b = (struct buddy *)mem->data; | |
173 | |
59 | 174 if (b->present || !GTK_WIDGET_VISIBLE(b->item)) |
175 set_buddy(b); | |
1 | 176 |
177 mem = mem->next; | |
178 } | |
179 grp = grp->next; | |
180 } | |
181 | |
182 | |
183 } | |
184 | |
185 void update_lagometer(int us) | |
186 { | |
187 double pct; | |
188 | |
189 | |
190 | |
191 if (us != -1) | |
192 last_lag_us = us; | |
193 | |
194 | |
195 if (lagometer_box == NULL) | |
196 return; | |
197 | |
198 | |
199 if (!(general_options & OPT_GEN_SHOW_LAGMETER)) | |
200 gtk_widget_hide(lagometer_box); | |
201 else | |
202 gtk_widget_show(lagometer_box); | |
203 | |
204 | |
205 pct = last_lag_us/100000; | |
6 | 206 |
207 if (pct > 0) | |
208 pct = 25 * log(pct); | |
1 | 209 |
210 if (pct < 0) | |
211 pct = 0; | |
212 | |
213 if (pct > 100) | |
214 pct = 100; | |
215 | |
216 | |
217 pct /= 100; | |
218 | |
219 | |
220 gtk_progress_bar_update(GTK_PROGRESS_BAR(lagometer), pct); | |
221 } | |
222 | |
223 static void adjust_pic(GtkWidget *button, const char *c, gchar **xpm) | |
224 { | |
225 GdkPixmap *pm; | |
226 GdkBitmap *bm; | |
227 GtkWidget *pic; | |
228 GtkWidget *label; | |
229 | |
230 /*if the user had opted to put pictures on the buttons*/ | |
231 if (display_options & OPT_DISP_SHOW_BUTTON_XPM) { | |
232 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
233 NULL, xpm); | |
234 pic = gtk_pixmap_new(pm, bm); | |
235 gtk_widget_show(pic); | |
236 label = GTK_BIN(button)->child; | |
237 gtk_container_remove(GTK_CONTAINER(button), label); | |
238 gtk_container_add(GTK_CONTAINER(button), pic); | |
239 } else { | |
240 label = gtk_label_new(c); | |
241 gtk_widget_show(label); | |
242 pic = GTK_BIN(button)->child; | |
243 gtk_container_remove(GTK_CONTAINER(button), pic); | |
244 gtk_container_add(GTK_CONTAINER(button), label); | |
245 } | |
246 | |
247 } | |
248 | |
249 | |
250 void update_button_pix() | |
251 { | |
252 | |
150
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
253 if (display_options & OPT_DISP_DEVIL_PIXMAPS) { |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
254 adjust_pic(addbutton, "Add", (gchar **)daemon_buddyadd_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
255 adjust_pic(rembutton, "Remove", (gchar **)daemon_buddydel_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
256 adjust_pic(chatbutton, "Chat", (gchar **)daemon_buddychat_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
257 adjust_pic(imbutton, "IM", (gchar **)daemon_im_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
258 adjust_pic(infobutton, "Info", (gchar **)daemon_info_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
259 adjust_pic(addpermbutton, "Add", (gchar **)daemon_permadd_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
260 adjust_pic(rempermbutton, "Remove", (gchar **)daemon_permdel_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
261 } else { |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
262 adjust_pic(addbutton, "Add", (gchar **)buddyadd_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
263 adjust_pic(rembutton, "Remove", (gchar **)buddydel_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
264 adjust_pic(chatbutton, "Chat", (gchar **)buddychat_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
265 adjust_pic(imbutton, "IM", (gchar **)im_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
266 adjust_pic(infobutton, "Info", (gchar **)info_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
267 adjust_pic(addpermbutton, "Add", (gchar **)permadd_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
268 adjust_pic(rempermbutton, "Remove", (gchar **)permdel_xpm); |
d4e99c17e399
[gaim-migrate @ 160]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
146
diff
changeset
|
269 } |
1 | 270 } |
271 | |
272 | |
273 | |
274 #ifdef USE_APPLET | |
275 gint applet_destroy_buddy( GtkWidget *widget, GdkEvent *event,gpointer *data ) { | |
276 set_applet_draw_closed(); | |
277 gnome_buddy_hide(); | |
278 return (TRUE); | |
279 } | |
280 | |
281 void gnome_buddy_show(){ | |
282 gtk_widget_show( blist ); | |
283 } | |
284 | |
285 void gnome_buddy_hide(){ | |
286 gtk_widget_hide( blist ); | |
287 } | |
288 | |
289 void gnome_buddy_set_pos( gint x, gint y ){ | |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
290 if (general_options & OPT_GEN_NEAR_APPLET) |
272
6b6cd02de8f9
[gaim-migrate @ 282]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
291 gtk_widget_set_uposition ( blist, x, y ); |
340
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
292 else if (general_options & OPT_GEN_SAVED_WINDOWS) |
0d9cfc3579a5
[gaim-migrate @ 350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
293 gtk_widget_set_uposition(blist, blist_pos.x - blist_pos.xoff, blist_pos.y - blist_pos.yoff); |
1 | 294 } |
295 | |
296 GtkRequisition gnome_buddy_get_dimentions(){ | |
107
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
297 if (general_options & OPT_GEN_SAVED_WINDOWS) { |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
298 GtkRequisition r; |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
299 r.width = blist_pos.width; |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
300 r.height = blist_pos.height; |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
301 return r; |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
302 } else { |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
303 return blist->requisition; |
55faf2e3a134
[gaim-migrate @ 117]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
94
diff
changeset
|
304 } |
1 | 305 } |
306 | |
307 #endif | |
308 | |
309 | |
84 | 310 extern enum gaim_user_states MRI_user_status; |
1 | 311 void signoff() |
312 { | |
313 GList *mem; | |
94
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
314 |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
315 #ifdef GAIM_PLUGINS |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
316 GList *c = callbacks; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
317 struct gaim_callback *g; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
318 void (*function)(void *); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
319 while (c) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
320 g = (struct gaim_callback *)c->data; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
321 if (g->event == event_signoff && g->function != NULL) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
322 function = g->function; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
323 (*function)(g->data); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
324 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
325 c = c->next; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
326 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
327 #endif |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
328 |
1 | 329 while(groups) { |
330 mem = ((struct group *)groups->data)->members; | |
331 while(mem) { | |
332 g_free(mem->data); | |
333 mem = g_list_remove(mem, mem->data); | |
334 } | |
335 g_free(groups->data); | |
336 groups = g_list_remove(groups, groups->data); | |
337 } | |
338 | |
339 serv_close(); | |
340 destroy_all_dialogs(); | |
341 destroy_buddy(); | |
342 hide_login_progress(""); | |
343 #ifdef USE_APPLET | |
84 | 344 MRI_user_status = offline; |
1 | 345 set_applet_draw_closed(); |
346 applet_widget_unregister_callback(APPLET_WIDGET(applet),"signoff"); | |
18 | 347 remove_applet_away(); |
1 | 348 applet_widget_register_callback(APPLET_WIDGET(applet), |
349 "signon", | |
350 _("Signon"), | |
351 applet_show_login, | |
352 NULL); | |
353 #else | |
354 show_login(); | |
355 #endif /* USE_APPLET */ | |
356 } | |
357 | |
358 void handle_click_group(GtkWidget *widget, GdkEventButton *event, gpointer func_data) | |
359 { | |
360 if (event->type == GDK_2BUTTON_PRESS) { | |
361 if (GTK_TREE_ITEM(widget)->expanded) | |
362 gtk_tree_item_collapse(GTK_TREE_ITEM(widget)); | |
363 else | |
364 gtk_tree_item_expand(GTK_TREE_ITEM(widget)); | |
365 } else { | |
366 } | |
367 } | |
368 | |
369 void pressed_im(GtkWidget *widget, struct buddy *b) | |
370 { | |
371 struct conversation *c; | |
372 | |
373 c = find_conversation(b->name); | |
374 | |
375 if (c != NULL) { | |
87 | 376 gdk_window_show(c->window->window); |
1 | 377 } else { |
378 c = new_conversation(b->name); | |
379 } | |
380 } | |
381 | |
382 void pressed_info(GtkWidget *widget, struct buddy *b) | |
383 { | |
384 serv_get_info(b->name); | |
385 | |
386 } | |
387 | |
388 void pressed_dir_info(GtkWidget *widget, struct buddy *b) | |
389 { | |
390 serv_get_dir(b->name); | |
391 | |
392 } | |
393 | |
249
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
394 void pressed_away_msg(GtkWidget *widget, struct buddy *b) |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
395 { |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
396 serv_get_away_msg(b->name); |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
397 |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
398 } |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
399 |
1 | 400 void handle_click_buddy(GtkWidget *widget, GdkEventButton *event, struct buddy *b) |
401 { | |
402 if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { | |
403 struct conversation *c; | |
404 | |
405 c = find_conversation(b->name); | |
406 | |
407 if (c != NULL) { | |
87 | 408 gdk_window_show(c->window->window); |
1 | 409 } else { |
410 c = new_conversation(b->name); | |
411 } | |
412 } else if (event->type == GDK_BUTTON_PRESS && event->button == 3) { | |
413 GtkWidget *menu, *button; | |
414 /* We're gonna make us a menu right here */ | |
415 | |
416 menu = gtk_menu_new(); | |
417 | |
418 button = gtk_menu_item_new_with_label("IM"); | |
419 gtk_signal_connect(GTK_OBJECT(button), "activate", | |
420 GTK_SIGNAL_FUNC(pressed_im), b); | |
421 gtk_menu_append(GTK_MENU(menu), button); | |
422 gtk_widget_show(button); | |
423 | |
424 button = gtk_menu_item_new_with_label("Info"); | |
425 gtk_signal_connect(GTK_OBJECT(button), "activate", | |
426 GTK_SIGNAL_FUNC(pressed_info), b); | |
427 gtk_menu_append(GTK_MENU(menu), button); | |
428 gtk_widget_show(button); | |
429 | |
430 button = gtk_menu_item_new_with_label("Dir Info"); | |
431 gtk_signal_connect(GTK_OBJECT(button), "activate", | |
432 GTK_SIGNAL_FUNC(pressed_dir_info), b); | |
433 gtk_menu_append(GTK_MENU(menu), button); | |
434 gtk_widget_show(button); | |
435 | |
249
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
436 #ifdef USE_OSCAR /* FIXME : someday maybe TOC can do this too */ |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
437 button = gtk_menu_item_new_with_label("Away Msg"); |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
438 gtk_signal_connect(GTK_OBJECT(button), "activate", |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
439 GTK_SIGNAL_FUNC(pressed_away_msg), b); |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
440 gtk_menu_append(GTK_MENU(menu), button); |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
441 gtk_widget_show(button); |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
442 #endif |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
228
diff
changeset
|
443 |
1 | 444 button = gtk_menu_item_new_with_label("Toggle Logging"); |
445 gtk_signal_connect(GTK_OBJECT(button), "activate", | |
446 GTK_SIGNAL_FUNC(log_callback), b->name); | |
447 gtk_menu_append(GTK_MENU(menu), button); | |
448 gtk_widget_show(button); | |
449 | |
450 button = gtk_menu_item_new_with_label("Add Buddy Pounce"); | |
451 gtk_signal_connect(GTK_OBJECT(button), "activate", | |
452 GTK_SIGNAL_FUNC(new_bp_callback), b->name); | |
453 gtk_menu_append(GTK_MENU(menu), button); | |
454 gtk_widget_show(button); | |
455 | |
456 | |
457 | |
458 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, | |
459 event->button, event->time); | |
460 | |
461 } else if (event->type == GDK_3BUTTON_PRESS && event->button == 2) { | |
462 if (!strcasecmp("zilding", normalize(b->name))) | |
463 show_ee_dialog(0); | |
464 else if (!strcasecmp("robflynn", normalize(b->name))) | |
465 show_ee_dialog(1); | |
466 else if (!strcasecmp("flynorange", normalize(b->name))) | |
467 show_ee_dialog(2); | |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
318
diff
changeset
|
468 else if (!strcasecmp("ewarmenhoven", normalize(b->name))) |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
318
diff
changeset
|
469 show_ee_dialog(3); |
1 | 470 |
471 } else { | |
472 | |
473 /* Anything for other buttons? :) */ | |
474 } | |
475 } | |
476 | |
477 | |
478 | |
479 void remove_buddy(struct group *rem_g, struct buddy *rem_b) | |
480 { | |
481 GList *grp; | |
482 GList *mem; | |
483 | |
484 struct group *delg; | |
485 struct buddy *delb; | |
486 | |
487 grp = g_list_find(groups, rem_g); | |
488 delg = (struct group *)grp->data; | |
489 mem = delg->members; | |
490 | |
491 mem = g_list_find(mem, rem_b); | |
492 delb = (struct buddy *)mem->data; | |
493 | |
494 gtk_tree_remove_items(GTK_TREE(delg->tree), g_list_append(NULL, delb->item)); | |
495 delg->members = g_list_remove(delg->members, delb); | |
496 serv_remove_buddy(delb->name); | |
497 g_free(delb); | |
498 | |
499 serv_save_config(); | |
228 | 500 |
501 // flush buddy list to cache | |
502 | |
503 do_export( (GtkWidget *) NULL, 0 ); | |
1 | 504 |
505 update_num_groups(); | |
506 | |
507 | |
508 } | |
509 | |
510 void remove_group(struct group *rem_g) | |
511 { | |
512 GList *grp; | |
513 GList *mem; | |
514 | |
515 struct group *delg; | |
516 struct buddy *delb; | |
517 | |
518 grp = g_list_find(groups, rem_g); | |
519 delg = (struct group *)grp->data; | |
520 mem = delg->members; | |
521 | |
522 while(delg->members) { | |
523 delb = (struct buddy *)delg->members->data; | |
524 gtk_tree_remove_items(GTK_TREE(delg->tree), g_list_append(NULL, delb->item)); | |
525 delg->members = g_list_remove(delg->members, delb); | |
526 serv_remove_buddy(delb->name); | |
527 g_free(delb); | |
528 } | |
529 | |
530 | |
531 gtk_tree_remove_items(GTK_TREE(buddies), g_list_append(NULL, delg->item)); | |
532 groups = g_list_remove(groups, delg); | |
533 g_free(delg); | |
534 | |
535 serv_save_config(); | |
228 | 536 |
537 // flush buddy list to cache | |
538 | |
539 do_export( (GtkWidget *) NULL, 0 ); | |
1 | 540 } |
541 | |
542 | |
543 | |
544 void build_permit_tree() | |
545 { | |
546 GtkWidget *ti; | |
547 GtkWidget *sub; | |
548 GList *plist = permit; | |
549 GList *dlist = deny; | |
550 | |
551 gtk_tree_clear_items(GTK_TREE(permtree), 0, -1); | |
552 | |
553 ti = gtk_tree_item_new_with_label("Permit"); | |
554 sub = gtk_tree_new(); | |
555 gtk_widget_show(ti); | |
556 gtk_widget_show(sub); | |
557 gtk_tree_prepend(GTK_TREE(permtree), ti); | |
558 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub); | |
559 gtk_tree_item_expand(GTK_TREE_ITEM(ti)); | |
560 | |
561 while(plist) { | |
562 ti = gtk_tree_item_new_with_label((char *)plist->data); | |
563 gtk_widget_show(ti); | |
564 gtk_tree_prepend(GTK_TREE(sub), ti); | |
565 plist = plist->next; | |
566 } | |
567 | |
568 | |
569 ti = gtk_tree_item_new_with_label("Deny"); | |
570 sub = gtk_tree_new(); | |
571 gtk_widget_show(ti); | |
572 gtk_widget_show(sub); | |
573 gtk_tree_prepend(GTK_TREE(permtree), ti); | |
574 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub); | |
575 gtk_tree_item_expand(GTK_TREE_ITEM(ti)); | |
576 | |
577 while(dlist) { | |
578 ti = gtk_tree_item_new_with_label((char *)dlist->data); | |
579 gtk_widget_show(ti); | |
580 gtk_tree_prepend(GTK_TREE(sub), ti); | |
581 dlist = dlist->next; | |
582 } | |
583 | |
584 | |
585 } | |
586 | |
587 | |
588 gboolean edit_drag_compare_func (GtkCTree *ctree, GtkCTreeNode *source_node, | |
589 GtkCTreeNode *new_parent, GtkCTreeNode *new_sibling) | |
590 { | |
591 gboolean leaf; | |
592 | |
593 gtk_ctree_get_node_info (ctree, source_node, NULL, | |
594 NULL, NULL, NULL, NULL, NULL, &leaf, NULL); | |
595 | |
596 | |
597 if (leaf) { | |
598 if (!new_parent) | |
599 return FALSE; | |
600 } else { | |
601 | |
602 if (new_parent) | |
603 return FALSE; | |
604 | |
605 } | |
606 | |
607 return TRUE; | |
608 } | |
609 | |
610 | |
611 | |
612 static void edit_tree_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent, | |
613 GtkCTreeNode *sibling, gpointer data) | |
614 { | |
615 char *source; | |
616 char *target1; | |
617 char *target2; | |
618 | |
619 gtk_ctree_get_node_info (ctree, child, &source, | |
620 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
621 if (parent) | |
622 gtk_ctree_get_node_info (ctree, parent, &target1, | |
623 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
624 if (sibling) | |
625 gtk_ctree_get_node_info (ctree, sibling, &target2, | |
626 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
627 | |
628 | |
629 if (!parent) { | |
630 GList *grps, *buds; | |
631 struct group *g, *g2; | |
632 GList *tmp; | |
633 int pos; | |
634 struct buddy *b; | |
635 /* Okay we've moved group order... */ | |
636 | |
637 g = find_group(source); | |
638 | |
639 gtk_widget_ref(g->tree); | |
640 | |
641 buds = g->members; | |
642 while(buds) { | |
643 b = (struct buddy *)buds->data; | |
644 gtk_widget_ref(b->item); | |
645 gtk_widget_ref(b->label); | |
646 gtk_widget_ref(b->idletime); | |
647 gtk_widget_ref(b->pix); | |
648 buds = buds->next; | |
649 } | |
650 | |
651 | |
652 | |
653 | |
654 pos = g_list_index(GTK_TREE(buddies)->children, g->item); | |
655 | |
656 tmp = g_list_append(NULL, g->item); | |
657 gtk_tree_remove_items(GTK_TREE(buddies), tmp); | |
658 g_list_free(tmp); | |
659 | |
660 groups = g_list_remove(groups, g); | |
661 | |
662 g->item = gtk_tree_item_new_with_label(g->name); | |
663 gtk_widget_show(g->item); | |
664 | |
665 if (sibling) { | |
666 g2 = find_group(target2); | |
667 pos = g_list_index(groups, g2); | |
668 if (pos == 0) { | |
669 groups = g_list_prepend(groups, g); | |
670 gtk_tree_prepend(GTK_TREE(buddies), g->item); | |
671 } else { | |
672 groups = g_list_insert(groups, g, pos); | |
673 gtk_tree_insert(GTK_TREE(buddies), g->item, pos); | |
674 } | |
675 | |
676 } else { | |
677 groups = g_list_append(groups, g); | |
678 gtk_tree_append(GTK_TREE(buddies), g->item); | |
679 | |
680 } | |
681 | |
682 gtk_tree_item_set_subtree (GTK_TREE_ITEM(g->item), g->tree); | |
683 gtk_tree_item_expand (GTK_TREE_ITEM(g->item)); | |
684 gtk_signal_connect(GTK_OBJECT(g->item), "button_press_event", | |
685 GTK_SIGNAL_FUNC(handle_click_group), | |
686 NULL); | |
687 gtk_object_set_user_data(GTK_OBJECT(g->item), NULL); | |
688 | |
689 gtk_widget_unref(g->tree); | |
690 | |
691 update_num_groups(); | |
692 | |
693 | |
694 buds = g->members; | |
695 | |
696 while(buds) { | |
697 b = (struct buddy *)buds->data; | |
698 set_buddy(b); | |
699 buds = buds->next; | |
700 } | |
701 | |
702 grps = groups; | |
703 while(grps) { | |
704 g = (struct group *)grps->data; | |
705 grps = grps->next; | |
706 } | |
707 | |
708 } else { | |
709 struct group *new_g, *old_g; | |
710 struct buddy *b, *s; | |
711 GtkWidget *gtree; | |
712 GtkWidget *owner; | |
713 GList *temp; | |
714 int pos; | |
715 | |
716 b = find_buddy(source); | |
717 new_g = find_group(target1); | |
718 old_g = find_group_by_buddy(source); | |
719 gtree = old_g->tree; | |
720 if (sibling) | |
721 s = find_buddy(target2); | |
722 else | |
723 s = NULL; | |
724 | |
725 old_g->members = g_list_remove(old_g->members, b); | |
726 | |
727 gtk_widget_ref(b->item); | |
728 gtk_widget_ref(b->label); | |
729 gtk_widget_ref(b->pix); | |
730 gtk_widget_ref(b->idletime); | |
731 gtk_widget_ref(gtree); | |
732 | |
733 owner = GTK_TREE(gtree)->tree_owner; | |
734 | |
735 temp = g_list_append(NULL, b->item); | |
736 gtk_tree_remove_items(GTK_TREE(old_g->tree), temp); | |
737 g_list_free(temp); | |
738 | |
739 if (gtree->parent == NULL){ | |
740 gtk_tree_item_set_subtree (GTK_TREE_ITEM(owner), gtree); | |
741 gtk_tree_item_expand (GTK_TREE_ITEM(owner)); | |
742 } | |
743 | |
744 if (!sibling) { | |
745 gtk_tree_append(GTK_TREE(new_g->tree), b->item); | |
746 new_g->members = g_list_append(new_g->members, b); | |
747 } else { | |
748 pos = g_list_index(new_g->members, s); | |
749 if (pos != 0) { | |
750 new_g->members = g_list_insert(new_g->members, b, pos); | |
751 gtk_tree_insert(GTK_TREE(new_g->tree), b->item, pos); | |
752 } else { | |
753 new_g->members = g_list_prepend(new_g->members, b); | |
754 gtk_tree_prepend(GTK_TREE(new_g->tree), b->item); | |
755 | |
756 } | |
757 } | |
758 | |
759 gtk_widget_unref(b->item); | |
760 gtk_widget_unref(b->label); | |
761 gtk_widget_unref(b->pix); | |
762 gtk_widget_unref(b->idletime); | |
763 gtk_widget_unref(gtree); | |
764 | |
765 gtk_ctree_expand(ctree, parent); | |
766 | |
767 update_num_groups(); | |
768 update_show_idlepix(); | |
769 set_buddy(b); | |
770 | |
771 | |
772 | |
773 | |
774 | |
775 } | |
776 | |
777 serv_save_config(); | |
228 | 778 |
779 // flush buddy list to cache | |
780 | |
781 do_export( (GtkWidget *) NULL, 0 ); | |
1 | 782 } |
783 | |
784 | |
785 | |
786 void build_edit_tree() | |
787 { | |
788 GtkCTreeNode *p = NULL, *n; | |
789 GList *grp = groups; | |
790 GList *mem; | |
791 struct group *g; | |
792 struct buddy *b; | |
793 char *text[1]; | |
794 | |
795 gtk_clist_freeze(GTK_CLIST(edittree)); | |
796 gtk_clist_clear(GTK_CLIST(edittree)); | |
797 | |
798 | |
799 while(grp) { | |
800 g = (struct group *)grp->data; | |
801 | |
802 text[0] = g->name; | |
803 | |
804 p = gtk_ctree_insert_node(GTK_CTREE(edittree), NULL, | |
805 NULL, text, 5, NULL, NULL, | |
806 NULL, NULL, 0, 1); | |
807 | |
808 n = NULL; | |
809 | |
810 mem = g->members; | |
811 | |
812 while(mem) { | |
813 b = (struct buddy *)mem->data; | |
814 | |
815 text[0] = b->name; | |
816 | |
817 n = gtk_ctree_insert_node(GTK_CTREE(edittree), | |
818 p, NULL, text, 5, | |
819 NULL, NULL, | |
820 NULL, NULL, 1, 1); | |
821 | |
822 mem = mem->next; | |
823 | |
824 } | |
825 grp = grp->next; | |
826 } | |
827 | |
828 gtk_clist_thaw(GTK_CLIST(edittree)); | |
829 | |
830 } | |
831 | |
832 struct buddy *add_buddy(char *group, char *buddy) | |
833 { | |
834 struct buddy *b; | |
835 struct group *g; | |
836 GdkPixmap *pm; | |
837 GdkBitmap *bm; | |
838 GtkWidget *box; | |
839 | |
840 | |
841 if ((b = find_buddy(buddy)) != NULL) | |
842 return b; | |
843 | |
844 g = find_group(group); | |
845 | |
846 if (g == NULL) | |
847 g = add_group(group); | |
848 | |
849 b = (struct buddy *)g_new0(struct buddy, 1); | |
850 | |
851 if (!b) | |
852 return NULL; | |
853 | |
854 b->present = 0; | |
855 b->item = gtk_tree_item_new(); | |
856 | |
857 g_snprintf(b->name, sizeof(b->name), "%s", buddy); | |
858 g->members = g_list_append(g->members, b); | |
859 | |
860 | |
861 if (blist == NULL) | |
862 return b; | |
863 | |
864 box = gtk_hbox_new(FALSE, 1); | |
865 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
866 NULL, (gchar **)login_icon_xpm); | |
867 b->pix = gtk_pixmap_new(pm, bm); | |
868 | |
869 b->idle = 0; | |
870 | |
871 gtk_widget_show(b->pix); | |
872 | |
873 b->label = gtk_label_new(buddy); | |
874 gtk_misc_set_alignment(GTK_MISC(b->label), 0.0, 0.5); | |
875 | |
876 b->idletime = gtk_label_new(""); | |
877 | |
878 gtk_tree_append(GTK_TREE(g->tree),b->item); | |
879 gtk_container_add(GTK_CONTAINER(b->item), box); | |
880 | |
881 gtk_box_pack_start(GTK_BOX(box), b->pix, FALSE, FALSE, 1); | |
882 gtk_box_pack_start(GTK_BOX(box), b->label, TRUE, TRUE, 1); | |
883 gtk_box_pack_start(GTK_BOX(box), b->idletime, FALSE, FALSE, 1); | |
884 | |
885 gtk_widget_show(b->label); | |
886 gtk_widget_show(box); | |
887 | |
888 gtk_object_set_user_data(GTK_OBJECT(b->item), b); | |
889 | |
890 gtk_signal_connect(GTK_OBJECT(b->item), "button_press_event", | |
891 GTK_SIGNAL_FUNC(handle_click_buddy), b); | |
892 | |
893 return b; | |
894 } | |
895 | |
896 | |
897 struct group *add_group(char *group) | |
898 { | |
318
35796808896a
[gaim-migrate @ 328]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
281
diff
changeset
|
899 struct group *g = find_group(group); |
35796808896a
[gaim-migrate @ 328]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
281
diff
changeset
|
900 if (g) |
35796808896a
[gaim-migrate @ 328]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
281
diff
changeset
|
901 return g; |
1 | 902 g = (struct group *)g_new0(struct group, 1); |
903 if (!g) | |
904 return NULL; | |
905 | |
906 strncpy(g->name, group, sizeof(g->name)); | |
907 groups = g_list_append(groups, g); | |
908 | |
909 if (blist == NULL) | |
910 return g; | |
911 | |
912 g->item = gtk_tree_item_new(); | |
913 g->label = gtk_label_new(g->name); | |
914 gtk_misc_set_alignment(GTK_MISC(g->label), 0.0, 0.5); | |
915 gtk_widget_show(g->label); | |
916 gtk_container_add(GTK_CONTAINER(g->item), g->label); | |
917 g->tree = gtk_tree_new(); | |
918 gtk_widget_show(g->item); | |
919 gtk_widget_show(g->tree); | |
920 gtk_tree_append(GTK_TREE(buddies), g->item); | |
921 gtk_tree_item_set_subtree(GTK_TREE_ITEM(g->item), g->tree); | |
922 gtk_tree_item_expand(GTK_TREE_ITEM(g->item)); | |
923 gtk_signal_connect(GTK_OBJECT(g->item), "button_press_event", | |
924 GTK_SIGNAL_FUNC(handle_click_group), | |
925 NULL); | |
926 gtk_object_set_user_data(GTK_OBJECT(g->item), NULL); | |
927 g->members = NULL; | |
928 | |
929 | |
930 build_edit_tree(); | |
931 | |
932 return g; | |
933 | |
934 } | |
935 | |
936 | |
937 static void do_del_buddy(GtkWidget *w, GtkCTree *ctree) | |
938 { | |
939 GtkCTreeNode *node; | |
940 char *bud, *grp; | |
941 struct buddy *b; | |
942 struct group *g; | |
943 GList *i; | |
944 | |
945 i = GTK_CLIST(edittree)->selection; | |
946 if (i) { | |
947 node = i->data; | |
948 | |
949 if (GTK_CTREE_ROW(node)->is_leaf) { | |
950 gtk_ctree_get_node_info (GTK_CTREE(edittree), node, &bud, | |
951 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
952 | |
953 b = find_buddy(bud); | |
954 g = find_group_by_buddy(bud); | |
955 remove_buddy(g, b); | |
956 } else { | |
957 gtk_ctree_get_node_info (ctree, node, &grp, | |
958 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
959 g = find_group(grp); | |
960 remove_group(g); | |
961 } | |
962 | |
963 build_edit_tree(); | |
964 serv_save_config(); | |
228 | 965 |
966 // flush buddy list to cache | |
967 | |
968 do_export( (GtkWidget *) NULL, 0 ); | |
969 | |
1 | 970 } else { |
971 /* Nothing selected. */ | |
972 } | |
973 update_num_groups(); | |
974 } | |
975 | |
976 static void do_del_perm(GtkWidget *w, GtkTree *permtree) | |
977 { | |
978 GtkLabel *label, *plabel; | |
979 GtkWidget *item, *pitem; | |
980 char *c, *d; | |
981 GList *i; | |
982 | |
983 GList *plist; | |
984 GList *dlist; | |
985 int level; | |
986 | |
987 plist = permit; | |
988 dlist = deny; | |
989 | |
990 i = GTK_TREE_SELECTION(permtree); | |
991 if (i) { | |
992 item = GTK_WIDGET(i->data); | |
993 gtk_tree_unselect_child(GTK_TREE(permtree), item); | |
994 label = GTK_LABEL(GTK_BIN(item)->child); | |
995 gtk_label_get(label, &c); | |
996 level = GTK_TREE(item->parent)->level; | |
997 if (level > 0) { | |
998 pitem = GTK_WIDGET(GTK_TREE(item->parent)->tree_owner); | |
999 plabel = GTK_LABEL(GTK_BIN(pitem)->child); | |
1000 gtk_label_get(plabel, &d); | |
1001 if (!strcasecmp(d, "Permit")) { | |
1002 while(plist) { | |
1003 if (!strcasecmp((char *)(plist->data), c)) { | |
1004 permit = g_list_remove(permit, plist->data); | |
1005 break; | |
1006 } | |
1007 | |
1008 plist = plist->next; | |
1009 } | |
1010 | |
1011 } else { | |
1012 while(dlist) { | |
1013 if (!strcasecmp((char *)(dlist->data), c)) { | |
1014 deny = g_list_remove(deny, dlist->data); | |
1015 | |
1016 break; | |
1017 } | |
1018 dlist = dlist->next; | |
1019 } | |
1020 | |
1021 } | |
1022 | |
1023 | |
1024 } else { | |
1025 /* Can't delete groups here! :) */ | |
1026 return; | |
1027 } | |
1028 serv_set_permit_deny(); | |
1029 gtk_tree_clear_items(GTK_TREE(permtree), 0, -1); | |
1030 build_permit_tree(); | |
1031 serv_save_config(); | |
1032 } | |
1033 } | |
1034 | |
1035 | |
1036 | |
1037 void gaimreg_callback(GtkWidget *widget) | |
1038 { | |
1039 show_register_dialog(); | |
1040 } | |
1041 | |
1042 void import_callback(GtkWidget *widget, void *null) | |
1043 { | |
1044 show_import_dialog(); | |
1045 } | |
1046 | |
1047 void export_callback(GtkWidget *widget, void *null) | |
1048 { | |
1049 show_export_dialog(); | |
1050 } | |
1051 | |
1052 | |
1053 | |
1054 void do_quit() | |
1055 { | |
1056 exit(0); | |
1057 } | |
1058 | |
1059 void add_buddy_callback(GtkWidget *widget, void *dummy) | |
1060 { | |
1061 char *grp = NULL; | |
1062 GtkCTreeNode *node; | |
1063 GList *i; | |
1064 | |
1065 i = GTK_CLIST(edittree)->selection; | |
1066 if (i) { | |
1067 node = i->data; | |
1068 | |
1069 if (GTK_CTREE_ROW(node)->is_leaf) { | |
1070 node = GTK_CTREE_ROW(node)->parent; | |
1071 } | |
1072 | |
1073 gtk_ctree_get_node_info (GTK_CTREE(edittree), node, &grp, | |
1074 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
1075 } | |
1076 show_add_buddy(NULL, grp); | |
1077 | |
1078 } | |
1079 | |
1080 void add_perm_callback(GtkWidget *widget, void *dummy) | |
1081 { | |
1082 show_add_perm(NULL); | |
1083 } | |
1084 | |
1085 | |
1086 static void info_callback(GtkWidget *widget, GtkTree *tree) | |
1087 { | |
1088 GList *i; | |
1089 struct buddy *b = NULL; | |
1090 i = GTK_TREE_SELECTION(tree); | |
1091 if (i) { | |
1092 b = gtk_object_get_user_data(GTK_OBJECT(i->data)); | |
1093 } else { | |
1094 return; | |
1095 } | |
1096 if (!b->name) | |
1097 return; | |
1098 serv_get_info(b->name); | |
1099 } | |
1100 | |
1101 | |
1102 void chat_callback(GtkWidget *widget, GtkTree *tree) | |
1103 { | |
1104 join_chat(); | |
1105 } | |
1106 | |
1107 struct group *find_group(char *group) | |
1108 { | |
1109 struct group *g; | |
1110 GList *grp = groups; | |
1111 char *grpname = g_malloc(strlen(group) + 1); | |
1112 | |
1113 strcpy(grpname, normalize(group)); | |
1114 while (grp) { | |
1115 g = (struct group *)grp->data; | |
1116 if (!strcasecmp(normalize(g->name), grpname)) { | |
1117 g_free(grpname); | |
1118 return g; | |
1119 } | |
1120 grp = grp->next; | |
1121 } | |
1122 | |
1123 g_free(grpname); | |
1124 return NULL; | |
1125 | |
1126 } | |
1127 | |
1128 | |
1129 struct group *find_group_by_buddy(char *who) | |
1130 { | |
1131 struct group *g; | |
1132 struct buddy *b; | |
1133 GList *grp = groups; | |
1134 GList *mem; | |
1135 char *whoname = g_malloc(strlen(who) + 1); | |
1136 | |
1137 strcpy(whoname, normalize(who)); | |
1138 | |
1139 while(grp) { | |
1140 g = (struct group *)grp->data; | |
1141 | |
1142 mem = g->members; | |
1143 while(mem) { | |
1144 b = (struct buddy *)mem->data; | |
1145 if (!strcasecmp(normalize(b->name), whoname)) { | |
1146 g_free(whoname); | |
1147 return g; | |
1148 } | |
1149 mem = mem->next; | |
1150 } | |
1151 grp = grp->next; | |
1152 } | |
1153 g_free(whoname); | |
1154 return NULL; | |
1155 } | |
1156 | |
1157 | |
1158 struct buddy *find_buddy(char *who) | |
1159 { | |
1160 struct group *g; | |
1161 struct buddy *b; | |
1162 GList *grp = groups; | |
1163 GList *mem; | |
1164 char *whoname = g_malloc(strlen(who) + 1); | |
1165 | |
1166 strcpy(whoname, normalize(who)); | |
1167 | |
1168 while(grp) { | |
1169 g = (struct group *)grp->data; | |
1170 | |
1171 mem = g->members; | |
1172 while(mem) { | |
1173 b = (struct buddy *)mem->data; | |
1174 if (!strcasecmp(normalize(b->name), whoname)) { | |
1175 g_free(whoname); | |
1176 return b; | |
1177 } | |
1178 mem = mem->next; | |
1179 } | |
1180 grp = grp->next; | |
1181 } | |
1182 g_free(whoname); | |
1183 return NULL; | |
1184 } | |
1185 | |
1186 | |
1187 void rem_bp(GtkWidget *w, struct buddy_pounce *b) | |
1188 { | |
1189 buddy_pounces = g_list_remove(buddy_pounces, b); | |
1190 } | |
1191 | |
1192 void do_pounce(char *name) | |
1193 { | |
26 | 1194 char *who; |
1 | 1195 |
1196 struct buddy_pounce *b; | |
1197 struct conversation *c; | |
1198 | |
1199 GList *bp = buddy_pounces; | |
1200 | |
26 | 1201 who = g_strdup(normalize(name)); |
1 | 1202 |
1203 while(bp) { | |
1204 b = (struct buddy_pounce *)bp->data;; | |
26 | 1205 bp = bp->next; /* increment the list here because rem_bp can make our handle bad */ |
1206 | |
1 | 1207 if (!strcasecmp(who, normalize(b->name))) { |
1208 if (b->popup == 1) | |
1209 { | |
1210 c = find_conversation(name); | |
1211 if (c == NULL) | |
1212 c = new_conversation(name); | |
1213 } | |
1214 if (b->sendim == 1) | |
1215 { | |
1216 c = find_conversation(name); | |
1217 if (c == NULL) | |
1218 c = new_conversation(name); | |
1219 | |
1220 write_to_conv(c, b->message, WFLAG_SEND); | |
1221 | |
1222 escape_text(b->message); | |
1223 | |
1224 serv_send_im(name, b->message, 0); | |
1225 } | |
1226 | |
1227 rem_bp(NULL, b); | |
1228 | |
1229 } | |
1230 } | |
1231 g_free(who); | |
1232 } | |
1233 | |
1234 static void new_bp_callback(GtkWidget *w, char *name) | |
1235 { | |
1236 show_new_bp(name); | |
1237 } | |
1238 | |
1239 static void log_callback(GtkWidget *w, char *name) | |
1240 { | |
1241 struct conversation *c = find_conversation(name); | |
1242 | |
1243 if (find_log_info(name)) | |
1244 { | |
1245 if (c) { | |
1246 set_state_lock(1); | |
1247 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->log_button), FALSE); | |
1248 set_state_lock(0); | |
1249 } | |
1250 rm_log(find_log_info(name)); | |
1251 } | |
1252 else | |
1253 { | |
1254 show_log_dialog(name); | |
1255 if (c) { | |
1256 set_state_lock(1); | |
1257 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->log_button), TRUE); | |
1258 set_state_lock(0); | |
1259 } | |
1260 } | |
1261 } | |
1262 | |
1263 void do_bp_menu() | |
1264 { | |
1265 GtkWidget *menuitem, *mess, *messmenu; | |
1266 static GtkWidget *remmenu; | |
1267 GtkWidget *remitem; | |
1268 GtkWidget *sep; | |
1269 GList *l; | |
1270 struct buddy_pounce *b; | |
1271 GList *bp = buddy_pounces; | |
1272 | |
1273 l = gtk_container_children(GTK_CONTAINER(bpmenu)); | |
1274 | |
1275 while(l) { | |
1276 gtk_widget_destroy(GTK_WIDGET(l->data)); | |
1277 l = l->next; | |
1278 } | |
1279 | |
1280 remmenu = gtk_menu_new(); | |
1281 | |
1282 menuitem = gtk_menu_item_new_with_label("New Buddy Pounce"); | |
1283 gtk_menu_append(GTK_MENU(bpmenu), menuitem); | |
1284 gtk_widget_show(menuitem); | |
1285 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(new_bp_callback), NULL); | |
1286 | |
1287 | |
1288 while(bp) { | |
1289 | |
1290 b = (struct buddy_pounce *)bp->data; | |
1291 remitem = gtk_menu_item_new_with_label(b->name); | |
1292 gtk_menu_append(GTK_MENU(remmenu), remitem); | |
1293 gtk_widget_show(remitem); | |
1294 gtk_signal_connect(GTK_OBJECT(remitem), "activate", GTK_SIGNAL_FUNC(rem_bp), b); | |
1295 | |
1296 bp = bp->next; | |
1297 | |
1298 } | |
1299 | |
1300 menuitem = gtk_menu_item_new_with_label("Remove Buddy Pounce"); | |
1301 gtk_menu_append(GTK_MENU(bpmenu), menuitem); | |
1302 gtk_widget_show(menuitem); | |
1303 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), remmenu); | |
1304 gtk_widget_show(remmenu); | |
1305 | |
1306 | |
1307 sep = gtk_hseparator_new(); | |
1308 menuitem = gtk_menu_item_new(); | |
1309 gtk_menu_append(GTK_MENU(bpmenu), menuitem); | |
1310 gtk_container_add(GTK_CONTAINER(menuitem), sep); | |
1311 gtk_widget_set_sensitive(menuitem, FALSE); | |
1312 gtk_widget_show(menuitem); | |
1313 gtk_widget_show(sep); | |
1314 | |
1315 bp = buddy_pounces;; | |
1316 | |
1317 while(bp) { | |
1318 | |
1319 b = (struct buddy_pounce *)bp->data; | |
1320 | |
1321 menuitem = gtk_menu_item_new_with_label(b->name); | |
1322 gtk_menu_append(GTK_MENU(bpmenu), menuitem); | |
1323 messmenu = gtk_menu_new(); | |
1324 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), messmenu); | |
1325 gtk_widget_show(menuitem); | |
1326 | |
1327 | |
1328 | |
1329 mess = gtk_menu_item_new_with_label(b->message); | |
1330 gtk_menu_append(GTK_MENU(messmenu), mess); | |
1331 gtk_widget_show(mess); | |
1332 | |
1333 bp = bp->next; | |
1334 | |
1335 } | |
1336 | |
1337 } | |
1338 | |
1339 | |
1340 gint log_timeout(char *name) | |
1341 { | |
1342 struct buddy *b; | |
119
66ec3865bd46
[gaim-migrate @ 129]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
1343 struct group *g; |
1 | 1344 |
1345 b = find_buddy(name); | |
1346 | |
1347 if(!b) | |
1348 return FALSE; | |
1349 | |
1350 b->log_timer = 0; | |
1351 | |
119
66ec3865bd46
[gaim-migrate @ 129]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
1352 if (!b->present) { |
1 | 1353 gtk_widget_hide(b->item); |
119
66ec3865bd46
[gaim-migrate @ 129]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
1354 g = find_group_by_buddy(name); |
120
991d5f0c6c90
[gaim-migrate @ 130]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
119
diff
changeset
|
1355 if (GTK_TREE_ITEM(g->item)->expanded) { |
991d5f0c6c90
[gaim-migrate @ 130]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
119
diff
changeset
|
1356 gtk_tree_item_collapse(GTK_TREE_ITEM(g->item)); |
991d5f0c6c90
[gaim-migrate @ 130]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
119
diff
changeset
|
1357 gtk_tree_item_expand(GTK_TREE_ITEM(g->item)); |
991d5f0c6c90
[gaim-migrate @ 130]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
119
diff
changeset
|
1358 } |
119
66ec3865bd46
[gaim-migrate @ 129]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
107
diff
changeset
|
1359 } else |
1 | 1360 set_buddy(b); |
1361 | |
1362 return FALSE; | |
1363 } | |
1364 | |
1365 | |
1366 void set_buddy(struct buddy *b) | |
1367 { | |
1368 char infotip[256]; | |
1369 char idlet[16]; | |
1370 char warn[256]; | |
70 | 1371 char *who; |
1 | 1372 int i; |
1373 int ihrs, imin; | |
1374 time_t t; | |
1375 GdkPixmap *pm; | |
1376 GdkBitmap *bm; | |
1377 char *itime, *sotime; | |
1378 | |
1379 if (b->present) { | |
1380 time(&t); | |
1381 | |
1382 ihrs = (t - b->idle) / 3600; | |
1383 imin = ((t - b->idle) / 60) % 60; | |
1384 | |
1385 if (ihrs) | |
1386 g_snprintf(idlet, sizeof(idlet), "(%d:%02d)", ihrs, imin); | |
1387 else | |
1388 g_snprintf(idlet, sizeof(idlet), "(%02d)", imin); | |
1389 | |
1390 gtk_widget_hide(b->idletime); | |
1391 | |
1392 if (b->idle) | |
1393 gtk_label_set(GTK_LABEL(b->idletime), idlet); | |
1394 else | |
1395 gtk_label_set(GTK_LABEL(b->idletime), ""); | |
1396 if (display_options & OPT_DISP_SHOW_IDLETIME) | |
1397 gtk_widget_show(b->idletime); | |
1398 | |
1399 | |
1400 sotime = sec_to_text(t - b->signon + correction_time); | |
1401 if (b->idle) { | |
1402 itime = sec_to_text(t - b->idle); | |
1403 } else { | |
1404 itime = g_malloc(1); | |
1405 itime[0] = 0; | |
1406 } | |
1407 | |
1408 if (b->evil) { | |
1409 g_snprintf(warn, sizeof(warn), "Warnings: %d%%\n", b->evil); | |
1410 | |
1411 } else | |
1412 warn[0] = '\0'; | |
1413 | |
1414 i = g_snprintf(infotip, sizeof(infotip), "Name: %s \nLogged in: %s\n%s%s%s", b->name, sotime, warn, ((b->idle) ? "Idle: " : ""), itime); | |
1415 | |
1416 gtk_tooltips_set_tip(tips, GTK_WIDGET(b->item), infotip, ""); | |
1417 | |
1418 g_free(sotime); | |
1419 g_free(itime); | |
1420 | |
1421 | |
1422 | |
121
3571b593f423
[gaim-migrate @ 131]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
120
diff
changeset
|
1423 /* this check should also depend on whether they left, |
3571b593f423
[gaim-migrate @ 131]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
120
diff
changeset
|
1424 * and signed on again before they got erased */ |
3571b593f423
[gaim-migrate @ 131]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
120
diff
changeset
|
1425 if (!GTK_WIDGET_VISIBLE(b->item) || b->present == 1) { |
94
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1426 #ifdef GAIM_PLUGINS |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1427 GList *c = callbacks; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1428 struct gaim_callback *g; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1429 void (*function)(char *, void *); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1430 while (c) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1431 g = (struct gaim_callback *)c->data; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1432 if (g->event == event_buddy_signon && |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1433 g->function != NULL) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1434 function = g->function; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1435 (*function)(b->name, g->data); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1436 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1437 c = c->next; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1438 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1439 #endif |
1 | 1440 |
1441 play_sound(BUDDY_ARRIVE); | |
121
3571b593f423
[gaim-migrate @ 131]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
120
diff
changeset
|
1442 b->present = 2; |
1 | 1443 |
70 | 1444 who = g_malloc(sizeof(b->name) + 10); |
1445 strcpy(who, b->name); | |
1446 gtk_label_set(GTK_LABEL(b->label), who); | |
1447 g_free(who); | |
1448 | |
1 | 1449 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, |
1450 NULL, (gchar **)login_icon_xpm); | |
1451 gtk_widget_hide(b->pix); | |
1452 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1453 if (display_options & OPT_DISP_SHOW_PIXMAPS) | |
1454 gtk_widget_show(b->pix); | |
1455 | |
1456 if (display_options & OPT_DISP_SHOW_LOGON) { | |
1457 struct conversation *c = find_conversation(b->name); | |
1458 if (c) { | |
1459 char tmp[1024]; | |
1460 | |
1461 | |
1462 g_snprintf(tmp, sizeof(tmp), "<HR><B>%s logged in%s%s.</B><BR><HR>", b->name, | |
1463 ((display_options & OPT_DISP_SHOW_TIME) ? " @ " : ""), | |
1464 ((display_options & OPT_DISP_SHOW_TIME) ? date() : "")); | |
1465 | |
1466 | |
1467 write_to_conv(c, tmp, WFLAG_SYSTEM); | |
1468 | |
1469 } | |
1470 } | |
1471 | |
1472 | |
1473 gtk_widget_show(b->item); | |
1474 gtk_widget_show(b->label); | |
58 | 1475 b->log_timer = gtk_timeout_add(10000, (GtkFunction) log_timeout, b->name); |
1 | 1476 update_num_groups(); |
1477 update_show_idlepix(); | |
1478 setup_buddy_chats(); | |
1479 return; | |
1480 } | |
1481 | |
1482 | |
1483 | |
1484 if (!b->log_timer) { | |
1485 gtk_widget_hide(b->pix); | |
1486 if (b->uc & UC_UNAVAILABLE) { | |
133
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1487 #ifdef GAIM_PLUGINS |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1488 GList *c = callbacks; |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1489 struct gaim_callback *g; |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1490 void (*function)(char *, void *); |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1491 while (c) { |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1492 g = (struct gaim_callback *)c->data; |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1493 if (g->event == event_buddy_away && |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1494 g->function != NULL) { |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1495 function = g->function; |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1496 (*function)(b->name, g->data); |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1497 } |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1498 c = c->next; |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1499 } |
e277d5f0c1dd
[gaim-migrate @ 143]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
121
diff
changeset
|
1500 #endif |
1 | 1501 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, |
1502 NULL, (gchar **)away_icon_xpm); | |
1503 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1504 } else if (b->uc & UC_AOL) { | |
1505 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1506 NULL, (gchar **)aol_icon_xpm); | |
1507 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1508 } else if (b->uc & UC_NORMAL) { | |
1509 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1510 NULL, (gchar **)free_icon_xpm); | |
1511 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1512 } else if (b->uc & UC_ADMIN) { | |
1513 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1514 NULL, (gchar **)admin_icon_xpm); | |
1515 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1516 } else if (b->uc & UC_UNCONFIRMED) { | |
1517 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1518 NULL, (gchar **)dt_icon_xpm); | |
1519 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1520 } else { | |
1521 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1522 NULL, (gchar **)no_icon_xpm); | |
1523 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1524 } | |
1525 if (display_options & OPT_DISP_SHOW_PIXMAPS) | |
1526 gtk_widget_show(b->pix); | |
1527 } | |
1528 | |
1529 | |
1530 | |
1531 } else { | |
59 | 1532 if (GTK_WIDGET_VISIBLE(b->item)) { |
94
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1533 #ifdef GAIM_PLUGINS |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1534 GList *c = callbacks; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1535 struct gaim_callback *g; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1536 void (*function)(char *, void *); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1537 while (c) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1538 g = (struct gaim_callback *)c->data; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1539 if (g->event == event_buddy_signoff && |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1540 g->function != NULL) { |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1541 function = g->function; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1542 (*function)(b->name, g->data); |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1543 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1544 c = c->next; |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1545 } |
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
90
diff
changeset
|
1546 #endif |
1 | 1547 play_sound(BUDDY_LEAVE); |
1548 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm, | |
1549 NULL, (gchar **)logout_icon_xpm); | |
1550 gtk_widget_hide(b->pix); | |
1551 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm); | |
1552 if (display_options & OPT_DISP_SHOW_PIXMAPS) | |
1553 gtk_widget_show(b->pix); | |
1554 if (display_options & OPT_DISP_SHOW_LOGON) { | |
1555 struct conversation *c = find_conversation(b->name); | |
1556 if (c) { | |
1557 char tmp[1024]; | |
1558 | |
1559 | |
1560 g_snprintf(tmp, sizeof(tmp), "<HR><B>%s logged out%s%s.</B><BR><HR>", b->name, | |
1561 ((display_options & OPT_DISP_SHOW_TIME) ? " @ " : ""), | |
1562 ((display_options & OPT_DISP_SHOW_TIME) ? date() : "")); | |
1563 | |
1564 | |
1565 write_to_conv(c, tmp, WFLAG_SYSTEM); | |
1566 | |
1567 } | |
1568 } | |
58 | 1569 b->log_timer = gtk_timeout_add(10000, (GtkFunction)log_timeout, b->name); |
1 | 1570 update_num_groups(); |
1571 update_show_idlepix(); | |
1572 } | |
1573 } | |
1574 setup_buddy_chats(); | |
1575 } | |
1576 | |
1577 | |
1578 static void set_permit(GtkWidget *w, int *data) | |
1579 { | |
1580 permdeny = (int)data; | |
1581 /* printf("BLAH BLAH %d %d", permdeny, (int) data); */ | |
1582 /* We don't save this 'at home', it's on the server. | |
1583 * So, we gotta resend the config to the server. */ | |
1584 serv_save_config(); | |
281
7b06ba09ffe2
[gaim-migrate @ 291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
272
diff
changeset
|
1585 #ifdef USE_OSCAR |
7b06ba09ffe2
[gaim-migrate @ 291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
272
diff
changeset
|
1586 /* we do this here because we can :) */ |
7b06ba09ffe2
[gaim-migrate @ 291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
272
diff
changeset
|
1587 serv_set_permit_deny(); |
7b06ba09ffe2
[gaim-migrate @ 291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
272
diff
changeset
|
1588 #endif |
1 | 1589 } |
1590 | |
1591 | |
1592 static void move_blist_window(GtkWidget *w, GdkEventConfigure *e, void *dummy) | |
1593 { | |
1594 int x, y, width, height; | |
1595 int save = 0; | |
1596 gdk_window_get_position(blist->window, &x, &y); | |
1597 gdk_window_get_size(blist->window, &width, &height); | |
1598 | |
1599 if(e->send_event) { /* Is a position event */ | |
1600 if (blist_pos.x != x || blist_pos.y != y) | |
1601 save = 1; | |
1602 blist_pos.x = x; | |
1603 blist_pos.y = y; | |
1604 } else { /* Is a size event */ | |
1605 if (blist_pos.xoff != x || blist_pos.yoff != y || | |
1606 blist_pos.width != width || blist_pos.width != width) | |
1607 save = 1; | |
1608 | |
1609 blist_pos.width = width; | |
1610 blist_pos.height = height; | |
1611 blist_pos.xoff = x; | |
1612 blist_pos.yoff = y; | |
1613 } | |
1614 | |
1615 if (save) | |
1616 save_prefs(); | |
1617 | |
1618 } | |
1619 | |
1620 | |
1621 /******************************************************************* | |
1622 * | |
1623 * Helper funs for making the menu | |
1624 * | |
1625 *******************************************************************/ | |
1626 | |
1627 void gaim_seperator(GtkWidget *menu) | |
1628 { | |
1629 GtkWidget *sep, *menuitem; | |
1630 sep = gtk_hseparator_new(); | |
1631 menuitem = gtk_menu_item_new(); | |
1632 gtk_menu_append(GTK_MENU(menu), menuitem); | |
1633 gtk_container_add(GTK_CONTAINER(menuitem), sep); | |
1634 gtk_widget_set_sensitive(menuitem, FALSE); | |
1635 gtk_widget_show(menuitem); | |
1636 gtk_widget_show(sep); | |
1637 } | |
1638 | |
1639 GtkWidget *gaim_new_item(GtkWidget *menu, const char *str, GtkSignalFunc sf) | |
1640 { | |
1641 GtkWidget *menuitem; | |
1642 menuitem = gtk_menu_item_new_with_label(str); | |
1643 if (menu) | |
1644 gtk_menu_append(GTK_MENU(menu), menuitem); | |
1645 gtk_widget_show(menuitem); | |
1646 if (sf) | |
1647 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", sf, NULL); | |
1648 return menuitem; | |
1649 } | |
1650 | |
1651 | |
1652 | |
1653 | |
1654 | |
1655 void show_buddy_list() | |
1656 { | |
1657 | |
1658 /* Build the buddy list, based on *config */ | |
1659 | |
1660 GtkWidget *sw; | |
1661 GtkWidget *menu; | |
1662 GtkWidget *findmenu; | |
1663 GtkWidget *setmenu; | |
1664 GtkWidget *menubar; | |
1665 GtkWidget *vbox; | |
1666 GtkWidget *hbox; | |
1667 GtkWidget *menuitem; | |
1668 GtkWidget *notebook; | |
1669 GtkWidget *label; | |
1670 GtkWidget *bbox; | |
1671 GtkWidget *permopt; | |
1672 GtkWidget *tbox; | |
1673 GtkWidget *xbox; | |
1674 GtkWidget *pbox; | |
1675 | |
1676 | |
1677 #ifdef USE_APPLET | |
1678 blist = gtk_window_new(GTK_WINDOW_DIALOG); | |
1679 #else | |
1680 blist = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
1681 #endif | |
1682 | |
1683 gtk_widget_realize(blist); | |
1684 aol_icon(blist->window); | |
1685 | |
1686 gtk_window_set_policy(GTK_WINDOW(blist), TRUE, TRUE, TRUE); | |
1687 | |
1688 menubar = gtk_menu_bar_new(); | |
1689 | |
1690 menu = gtk_menu_new(); | |
1691 | |
1692 | |
1693 menuitem = gaim_new_item(NULL, "File", NULL); | |
1694 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); | |
1695 gtk_menu_bar_append(GTK_MENU_BAR(menubar), menuitem); | |
1696 | |
1697 gaim_new_item(menu, "Add A Buddy", GTK_SIGNAL_FUNC(add_buddy_callback)); | |
1698 gaim_seperator(menu); | |
1699 gaim_new_item(menu, "Import Buddy List", GTK_SIGNAL_FUNC(import_callback)); | |
1700 gaim_new_item(menu, "Export Buddy List", GTK_SIGNAL_FUNC(export_callback)); | |
1701 if (!(general_options & OPT_GEN_REGISTERED)) | |
1702 { | |
1703 gaim_seperator(menu); | |
1704 gaim_new_item(menu, "Register", GTK_SIGNAL_FUNC(gaimreg_callback)); | |
1705 } | |
1706 gaim_seperator(menu); | |
1707 gaim_new_item(menu, "Signoff", GTK_SIGNAL_FUNC(signoff)); | |
1708 | |
1709 #ifndef USE_APPLET | |
1710 gaim_new_item(menu, "Quit", GTK_SIGNAL_FUNC(do_quit)); | |
1711 #else | |
1712 gaim_new_item(menu, "Close", GTK_SIGNAL_FUNC(applet_destroy_buddy)); | |
1713 #endif | |
1714 | |
1715 menu = gtk_menu_new(); | |
1716 | |
1717 menuitem = gaim_new_item(NULL, "Tools", NULL); | |
1718 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); | |
1719 gtk_menu_bar_append(GTK_MENU_BAR(menubar), menuitem); | |
1720 | |
1721 awaymenu = gtk_menu_new(); | |
1722 menuitem = gaim_new_item(menu, "Away", NULL); | |
1723 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), awaymenu); | |
1724 do_away_menu(); | |
1725 | |
1726 bpmenu = gtk_menu_new(); | |
1727 menuitem = gaim_new_item(menu, "Buddy Pounce", NULL); | |
1728 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), bpmenu); | |
1729 do_bp_menu(); | |
1730 | |
1731 gaim_seperator(menu); | |
1732 | |
1733 findmenu = gtk_menu_new(); | |
1734 gtk_widget_show(findmenu); | |
1735 menuitem = gaim_new_item(menu, "Search for Buddy", NULL); | |
1736 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), findmenu); | |
1737 gtk_widget_show(menuitem); | |
1738 menuitem = gtk_menu_item_new_with_label("by Email"); | |
1739 gtk_menu_append(GTK_MENU(findmenu), menuitem); | |
1740 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(show_find_email), NULL); | |
1741 gtk_widget_show(menuitem); | |
1742 menuitem = gtk_menu_item_new_with_label("by Dir Info"); | |
1743 gtk_menu_append(GTK_MENU(findmenu), menuitem); | |
1744 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(show_find_info), NULL); | |
1745 gtk_widget_show(menuitem); | |
1746 | |
1747 setmenu = gtk_menu_new(); | |
1748 gtk_widget_show(setmenu); | |
1749 menuitem = gaim_new_item(menu, "Settings", NULL); | |
1750 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), setmenu); | |
1751 gtk_widget_show(menuitem); | |
1752 menuitem = gtk_menu_item_new_with_label("User Info"); | |
1753 gtk_menu_append(GTK_MENU(setmenu), menuitem); | |
1754 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(show_set_info), NULL); | |
1755 gtk_widget_show(menuitem); | |
1756 menuitem = gtk_menu_item_new_with_label("Directory Info"); | |
1757 gtk_menu_append(GTK_MENU(setmenu), menuitem); | |
1758 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(show_set_dir), NULL); | |
1759 gtk_widget_show(menuitem); | |
146 | 1760 menuitem = gtk_menu_item_new_with_label("Change Password"); |
1761 gtk_menu_append(GTK_MENU(setmenu), menuitem); | |
1762 gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(show_change_passwd), NULL); | |
1763 gtk_widget_show(menuitem); | |
1 | 1764 gaim_seperator(menu); |
1765 | |
1766 gaim_new_item(menu, "Preferences", GTK_SIGNAL_FUNC(show_prefs)); | |
90
f5b305c0d974
[gaim-migrate @ 100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
87
diff
changeset
|
1767 |
152
cb0d3ec5a4c8
[gaim-migrate @ 162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
150
diff
changeset
|
1768 #ifdef GAIM_PLUGINS |
139
c009c4f4ad02
[gaim-migrate @ 149]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
133
diff
changeset
|
1769 gaim_new_item(menu, "Plugins", GTK_SIGNAL_FUNC(show_plugins)); |
152
cb0d3ec5a4c8
[gaim-migrate @ 162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
150
diff
changeset
|
1770 #endif |
90
f5b305c0d974
[gaim-migrate @ 100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
87
diff
changeset
|
1771 |
1 | 1772 menu = gtk_menu_new(); |
1773 | |
1774 menuitem = gaim_new_item(NULL, "Help", NULL); | |
1775 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); | |
1776 gtk_menu_item_right_justify(GTK_MENU_ITEM(menuitem)); | |
1777 gtk_menu_bar_append(GTK_MENU_BAR(menubar), menuitem); | |
1778 | |
1779 gaim_new_item(menu, "About", show_about); | |
1780 | |
1781 gtk_widget_show(menubar); | |
1782 | |
1783 lagometer_box = gtk_hbox_new(FALSE, 0); | |
1784 | |
1785 | |
1786 lagometer = gtk_progress_bar_new(); | |
1787 gtk_widget_show(lagometer); | |
1788 | |
1789 label = gtk_label_new("Lag-O-Meter: "); | |
1790 gtk_widget_show(label); | |
1791 | |
1792 gtk_box_pack_start(GTK_BOX(lagometer_box), label, FALSE, FALSE, 5); | |
1793 gtk_box_pack_start(GTK_BOX(lagometer_box), lagometer, TRUE, TRUE, 5); | |
1794 | |
1795 gtk_widget_set_usize(lagometer, 5, 5); | |
1796 | |
1797 | |
1798 if ((general_options & OPT_GEN_SHOW_LAGMETER)) | |
1799 gtk_widget_show(lagometer_box); | |
1800 | |
1801 | |
1802 vbox = gtk_vbox_new(FALSE, 10); | |
1803 | |
1804 notebook = gtk_notebook_new(); | |
1805 | |
1806 | |
1807 | |
1808 | |
1809 /* Do buddy list stuff */ | |
1810 | |
1811 buddypane = gtk_vbox_new(FALSE, 0); | |
1812 | |
1813 imbutton = gtk_button_new_with_label("Im"); | |
1814 infobutton = gtk_button_new_with_label("Info"); | |
1815 chatbutton = gtk_button_new_with_label("Chat"); | |
1816 | |
1817 hbox = gtk_hbox_new(TRUE, 10); | |
1818 | |
1819 buddies = gtk_tree_new(); | |
1820 sw = gtk_scrolled_window_new(NULL, NULL); | |
1821 | |
1822 | |
1823 | |
1824 | |
1825 | |
1826 tips = gtk_tooltips_new(); | |
1827 gtk_object_set_data(GTK_OBJECT(blist), "Buddy List", tips); | |
1828 | |
1829 | |
1830 | |
1831 /* Now the buddy list */ | |
1832 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw),buddies); | |
1833 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
1834 GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); | |
1835 gtk_widget_set_usize(sw,200,200); | |
1836 gtk_widget_show(buddies); | |
1837 gtk_widget_show(sw); | |
1838 | |
1839 /* Put the buttons in the hbox */ | |
1840 gtk_widget_show(imbutton); | |
1841 gtk_widget_show(chatbutton); | |
1842 gtk_widget_show(infobutton); | |
1843 | |
1844 gtk_box_pack_start(GTK_BOX(hbox), imbutton, TRUE, TRUE, 0); | |
1845 gtk_box_pack_start(GTK_BOX(hbox), infobutton, TRUE, TRUE, 0); | |
1846 gtk_box_pack_start(GTK_BOX(hbox), chatbutton, TRUE, TRUE, 0); | |
1847 gtk_container_border_width(GTK_CONTAINER(hbox), 10); | |
1848 | |
1849 | |
1850 gtk_tooltips_set_tip(tips,infobutton, "Information on selected Buddy", "Penguin"); | |
1851 gtk_tooltips_set_tip(tips,imbutton, "Send Instant Message", "Penguin"); | |
1852 gtk_tooltips_set_tip(tips,chatbutton, "Start/join a Buddy Chat", "Penguin"); | |
1853 | |
1854 gtk_box_pack_start(GTK_BOX(buddypane), sw, TRUE, TRUE, 0); | |
1855 gtk_box_pack_start(GTK_BOX(buddypane), hbox, FALSE, FALSE, 0); | |
1856 | |
1857 gtk_widget_show(hbox); | |
1858 gtk_widget_show(buddypane); | |
1859 | |
1860 | |
1861 | |
1862 /* Swing the edit buddy */ | |
1863 editpane = gtk_vbox_new(FALSE, 0); | |
1864 | |
1865 | |
1866 addbutton = gtk_button_new_with_label("Add"); | |
1867 rembutton = gtk_button_new_with_label("Remove"); | |
1868 edittree = gtk_ctree_new(1, 0); | |
1869 gtk_ctree_set_line_style (GTK_CTREE(edittree), GTK_CTREE_LINES_SOLID); | |
1870 gtk_ctree_set_expander_style(GTK_CTREE(edittree), GTK_CTREE_EXPANDER_SQUARE); | |
1871 gtk_clist_set_reorderable(GTK_CLIST(edittree), TRUE); | |
1872 | |
1873 gtk_ctree_set_drag_compare_func (GTK_CTREE(edittree), | |
1874 (GtkCTreeCompareDragFunc)edit_drag_compare_func); | |
1875 | |
1876 | |
1877 gtk_signal_connect_after (GTK_OBJECT (edittree), "tree_move", | |
1878 GTK_SIGNAL_FUNC (edit_tree_move), NULL); | |
1879 | |
1880 | |
1881 bbox = gtk_hbox_new(TRUE, 10); | |
1882 tbox = gtk_scrolled_window_new(NULL, NULL); | |
1883 /* Put the buttons in the box */ | |
1884 gtk_box_pack_start(GTK_BOX(bbox), addbutton, TRUE, TRUE, 10); | |
1885 gtk_box_pack_start(GTK_BOX(bbox), rembutton, TRUE, TRUE, 10); | |
1886 | |
1887 gtk_tooltips_set_tip(tips, addbutton, "Add a new Buddy", "Penguin"); | |
1888 gtk_tooltips_set_tip(tips, rembutton, "Remove selected Buddy", "Penguin"); | |
1889 | |
1890 /* And the boxes in the box */ | |
1891 gtk_box_pack_start(GTK_BOX(editpane), tbox, TRUE, TRUE, 5); | |
1892 gtk_box_pack_start(GTK_BOX(editpane), bbox, FALSE, FALSE, 5); | |
1893 | |
1894 /* Handle closes right */ | |
1895 | |
1896 | |
1897 | |
1898 /* Finish up */ | |
1899 gtk_widget_show(addbutton); | |
1900 gtk_widget_show(rembutton); | |
1901 gtk_widget_show(edittree); | |
1902 gtk_widget_show(tbox); | |
1903 gtk_widget_show(bbox); | |
1904 gtk_widget_show(editpane); | |
1905 | |
1906 | |
1907 /* Permit/Deny */ | |
1908 | |
1909 permitpane = gtk_vbox_new(FALSE, 0); | |
1910 | |
1911 permopt = gtk_radio_button_new_with_label(NULL, "Allow anyone"); | |
1912 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0); | |
1913 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)1); | |
1914 gtk_widget_show(permopt); | |
1915 if (permdeny == 1) | |
1916 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE); | |
1917 | |
1918 permopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(permopt)), "Permit some"); | |
1919 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0); | |
1920 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)3); | |
1921 gtk_widget_show(permopt); | |
1922 if (permdeny == 3) | |
1923 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE); | |
1924 | |
1925 | |
1926 permopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(permopt)), "Deny some"); | |
1927 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0); | |
1928 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)4); | |
1929 gtk_widget_show(permopt); | |
1930 if (permdeny == 4) | |
1931 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE); | |
1932 | |
1933 | |
1934 | |
1935 addpermbutton = gtk_button_new_with_label("Add"); | |
1936 rempermbutton = gtk_button_new_with_label("Remove"); | |
1937 | |
1938 permtree = gtk_tree_new(); | |
225
d95f65a22b14
[gaim-migrate @ 235]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
178
diff
changeset
|
1939 build_permit_tree(); |
1 | 1940 pbox = gtk_hbox_new(TRUE, 10); |
1941 xbox = gtk_scrolled_window_new(NULL, NULL); | |
1942 /* Put the buttons in the box */ | |
1943 gtk_box_pack_start(GTK_BOX(pbox), addpermbutton, TRUE, TRUE, 10); | |
1944 gtk_box_pack_start(GTK_BOX(pbox), rempermbutton, TRUE, TRUE, 10); | |
1945 | |
1946 | |
1947 gtk_tooltips_set_tip(tips, addpermbutton, "Add buddy to permit/deny", "Penguin"); | |
1948 gtk_tooltips_set_tip(tips, rempermbutton, "Remove buddy from permit/deny", "Penguin"); | |
1949 /* And the boxes in the box */ | |
1950 gtk_box_pack_start(GTK_BOX(permitpane), xbox, TRUE, TRUE, 5); | |
1951 gtk_box_pack_start(GTK_BOX(permitpane), pbox, FALSE, FALSE, 5); | |
1952 | |
1953 /* Handle closes right */ | |
1954 | |
1955 | |
1956 | |
1957 /* Finish up */ | |
1958 gtk_widget_show(addpermbutton); | |
1959 gtk_widget_show(rempermbutton); | |
1960 gtk_widget_show(permtree); | |
1961 gtk_widget_show(xbox); | |
1962 gtk_widget_show(pbox); | |
1963 gtk_widget_show(permitpane); | |
1964 | |
1965 | |
1966 | |
1967 label = gtk_label_new("Online"); | |
1968 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buddypane, label); | |
1969 label = gtk_label_new("Edit Buddies"); | |
1970 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), editpane, label); | |
1971 label = gtk_label_new("Permit"); | |
1972 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), permitpane, label); | |
1973 | |
1974 gtk_widget_show_all(notebook); | |
1975 | |
1976 /* Pack things in the vbox */ | |
1977 gtk_widget_show(vbox); | |
1978 | |
1979 | |
1980 gtk_widget_show(notebook); | |
1981 | |
1982 /* Enable buttons */ | |
1983 | |
1984 gtk_signal_connect(GTK_OBJECT(imbutton), "clicked", GTK_SIGNAL_FUNC(show_im_dialog), buddies); | |
1985 gtk_signal_connect(GTK_OBJECT(infobutton), "clicked", GTK_SIGNAL_FUNC(info_callback), buddies); | |
1986 gtk_signal_connect(GTK_OBJECT(chatbutton), "clicked", GTK_SIGNAL_FUNC(chat_callback), buddies); | |
1987 gtk_signal_connect(GTK_OBJECT(rembutton), "clicked", GTK_SIGNAL_FUNC(do_del_buddy), edittree); | |
1988 gtk_signal_connect(GTK_OBJECT(addbutton), "clicked", GTK_SIGNAL_FUNC(add_buddy_callback), NULL); | |
1989 gtk_signal_connect(GTK_OBJECT(addpermbutton), "clicked", GTK_SIGNAL_FUNC(add_perm_callback), NULL); | |
1990 gtk_signal_connect(GTK_OBJECT(rempermbutton), "clicked", GTK_SIGNAL_FUNC(do_del_perm), permtree); | |
1991 gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); | |
1992 gtk_box_pack_start(GTK_BOX(vbox), lagometer_box, FALSE, TRUE, 0); | |
1993 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); | |
1994 | |
1995 gtk_container_add(GTK_CONTAINER(blist), vbox); | |
1996 | |
1997 #ifndef USE_APPLET | |
1998 gtk_signal_connect(GTK_OBJECT(blist), "delete_event", GTK_SIGNAL_FUNC(do_quit), blist); | |
1999 #else | |
2000 gtk_signal_connect(GTK_OBJECT(blist), "delete_event", GTK_SIGNAL_FUNC(applet_destroy_buddy), NULL); | |
2001 #endif | |
2002 | |
2003 gtk_signal_connect(GTK_OBJECT(blist), "configure_event", GTK_SIGNAL_FUNC(move_blist_window), NULL); | |
2004 | |
2005 | |
2006 | |
2007 /* The edit tree */ | |
2008 gtk_container_add(GTK_CONTAINER(tbox), edittree); | |
2009 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(tbox), | |
2010 GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC); | |
2011 | |
2012 | |
2013 /* The permit tree */ | |
2014 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(xbox), permtree); | |
2015 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xbox), | |
2016 GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); | |
2017 | |
2018 gtk_window_set_title(GTK_WINDOW(blist), "Gaim - Buddy List"); | |
2019 | |
2020 if (general_options & OPT_GEN_SAVED_WINDOWS) { | |
2021 if (blist_pos.width != 0) { /* Sanity check! */ | |
2022 gtk_widget_set_uposition(blist, blist_pos.x - blist_pos.xoff, blist_pos.y - blist_pos.yoff); | |
2023 gtk_widget_set_usize(blist, blist_pos.width, blist_pos.height); | |
2024 } | |
2025 } | |
2026 } | |
2027 | |
2028 void refresh_buddy_window() | |
2029 { | |
2030 setup_buddy_chats(); | |
2031 | |
2032 build_edit_tree(); | |
2033 build_permit_tree(); | |
2034 | |
2035 update_button_pix(); | |
2036 gtk_widget_show(blist); | |
2037 | |
2038 | |
2039 } | |
2040 |