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