HACKING

Thu, 17 Aug 2000 08:35:34 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Thu, 17 Aug 2000 08:35:34 +0000
changeset 708
c4285ce27acc
parent 706
6eb097e6cc24
child 749
b904907252d3
permissions
-rw-r--r--

[gaim-migrate @ 718]
la la la

639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 A lot of people have tried to hack gaim, but haven't been able to because
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 the code is just so horrid. Well, the code isn't getting better anytime
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 soon, so to help all you would-be hackers help out gaim, here's a brief
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 tutorial on how gaim works. I'll quickly describe the logical flow of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 things, then what you'll find in each of the source files. Hopefully
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 that's enough to get most of you going.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
8 If you're going to hack gaim, PLEASE, PLEASE PLEASE PLEASE send patches
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
9 against the absolute latest CVS. I get really annoyed when I get patches
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
10 against the last released version, especially since I don't usually have
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
11 a copy of it on my computer, and gaim tends to change a lot between
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
12 versions. (I sometimes get annoyed when they're against CVS from 3 days
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
13 ago, but can't complain because it's usually my fault that I haven't
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
14 looked at the patch yet.) To get gaim from CVS (if you haven't already),
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
15 run the following commands:
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
16
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
17 $ export CVSROOT=anonymous@cvs.gaim.sourceforge.net:/cvsroot/gaim
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
18 $ cvs login
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
19 (hit enter as the password)
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
20 $ cvs co gaim
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
21 (you'll see it getting all of the files)
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
22 $ cd gaim
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
23 $ ./gen
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
24
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
25 You'll now have your normal gaim tree with ./configure and all. (If you
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
26 want to make your life really simple, learn how CVS works. CVS is your
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
27 friend.)
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
28
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 There's one little thing that's just a pet peeve, and it's really stupid.
706
6eb097e6cc24 [gaim-migrate @ 716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 684
diff changeset
30 In ./configure there's an --enable-debug option. This does two things:
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 compiles with -Wall, and prints debugging information to stdout. The
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 debugging information is printed to the debug window (which can be turned
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 on in the preferences) whether or not --enable-debug was selected. Most
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 of the information that's printed is useless anyway though; so the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 --enable-debug option really doesn't do a whole lot.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36
684
85f0ef25fe51 [gaim-migrate @ 694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 639
diff changeset
37 This was written around August 8, 2000. It's now August 15, 2000, and I'm
85f0ef25fe51 [gaim-migrate @ 694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 639
diff changeset
38 sure a lot of it is already out of date.
85f0ef25fe51 [gaim-migrate @ 694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 639
diff changeset
39
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 PROGRAM FLOW
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 ============
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 Before gaim does anything you can see, it initializes itself, which is
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 mostly just reading .gaimrc (handled by the functions in gaimrc.c). It
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 then draws the login window by calling show_login, and waits for input.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 At the login window, when "signon" is clicked, dologin() is called. This
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49 in turn calls serv_login, which checks to see if you want to use Oscar or
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 TOC, and calls oscar_login or toc_login appropriately. We'll assume TOC
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 for the rest of this discussion; Oscar has a lot of bad hacks to get it
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 working that I don't even want to think about.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 After you're signed in (I'll skip that discussion - I doubt many people
706
6eb097e6cc24 [gaim-migrate @ 716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 684
diff changeset
55 are going to change the login process, since it pretty much just follows
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 PROTOCOL), Gaim draws the buddy list by calling show_buddy_list, and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 waits for input from two places: the server and the user. The first place
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 it gets input from after signon is invariably the server, when the server
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 tells Gaim which buddies are signed on.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
61 When there is information ready to be read from the server, toc_callback
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62 is called (by GDK) to parse the incoming information. On an UPDATE,
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 serv_got_update is called, which takes care of things like notifying
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 conversation windows of the update if need be; notifying the plugins;
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65 and finally, calling set_buddy.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67 set_buddy is one of the most frequently called functions in gaim, one of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 the largest functions in gaim, and probably one of the buggiest functions
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 in gaim. It is responsible for updating the pixmaps in the buddy list;
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70 notifying plugins of various events; updating the tooltips for buddies;
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 making sounds; and updating the ticker. It's also called once per online
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 buddy every 20 seconds (by GTK through update_all_buddies).
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 When the user opens a new conversation window, new_conversation is called.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 That's easy enough. If there isn't a conversation with the person already
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 open (checked by calling find_conversation), show_conv is called to
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 create the new window. All sorts of neat things happen there, but it's
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 mostly drawing the window. show_conv is the best place to edit the UI. Be
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 prepared for some incredibly bad GTK programming. (Rob's fixing this as
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 we speak no doubt.)
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 That's pretty much it for the quick tutorial. I know it wasn't much but
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 it's enough to get you started. Make sure you know GTK before you get too
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 involved. Most of the back-end stuff is pretty basic; most of gaim is GTK.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 SOURCE FILES
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 ============
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 about.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 Not much to say here, just a few basic functions.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 aim.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 This is where the main() function is. It takes care of a lot of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 initialization stuff, and showing the login window. It's pretty tiny
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 and there's not really much to edit in it. Watch out for bad Oscar
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 sign in hacks.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 away.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 This takes care of most of the away stuff: setting the away message
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 (do_im_away); coming back (do_im_back); drawing the away window;
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 etc. To be honest I haven't looked at this file in months.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 browser.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 Code for opening a browser window. Most of the code is trying to deal
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 with Netscape. The most important function here is open_url. Have fun.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 buddy.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 This takes care of not only nearly everything buddy-related (the buddy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110 list, the permit/deny lists, and the window), but also a lot of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111 code flow and util functions. Look for good things like find_buddy,
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112 set_buddy, and signoff() here.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114 buddy_chat.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115 This takes care of the buddy chat stuff. This used to be a lot bigger
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116 until the chat and IM windows got merged in the code. Now it mostly
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 just takes care of chat-specific stuff, like ignoring people and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 keeping track of who's in the room. This is also where the chat window
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119 is created.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121 conversation.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 This is where most of the functions dealing with the IM and chat windows
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123 are hidden. It tries to abstract things as much as possible, but doesn't
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 do a very good job. This is also where things like "Enter sends" and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 "Ctrl-{B/I/U/S}" options get carried out (look for send_callback). The
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126 chat and IM toolbar (with the B/I/U/S buttons) are both built from the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 same function, build_conv_toolbar.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 dialogs.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 A massive file with a lot of little utility functions. This is where
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 all of those little dialog windows are created. Things like the warn
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 dialog and the add buddy dialog are here. Not all of the dialogs in
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 gaim are in this file, though. But most of them are. This is also
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 where do_import is housed, to import buddy lists.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136 gaimrc.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137 This controls everything about the .gaimrc file. There's not really much
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 to say about it; this is probably one of the better designed and easier
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139 to follow files in gaim. The important functions are towards the bottom.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 gnome_applet_mgr.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142 A hideous creation from the days before I started working on gaim. Most
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 of it works, but it has functionsLikeThis. I hate looking at this
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 file, but I'm too lazy to change the functions. The best functions
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 are things like set_applet_draw_open, whose sole purpose is to set a
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 global variable to TRUE.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 gtkhtml.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 This is really just one big hack. It started off as an HTML widget that
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150 was written for Gnome as far as I can tell. The current version is
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 huge, requires way too many libs, and is too hard to upgrade to. But
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 we've managed to hack this poor old version into basically what we
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153 need it for. I recommend not looking at this file if you want to save
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 your sanity.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 gtkticker.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 Syd, our resident GTK God, wrote a GtkWidget, GtkTicker. This is that
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 widget. It's cool, and it's tiny.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 html.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 Don't ask my why this is called html.c. Most of it is just grab_url,
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 which does like the name says; it downloads a URL to show in the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163 GtkHTML widget. http.c would be a more appropriate name, but that's OK.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165 idle.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 There is a very good reason why this file is still on version 1.1
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167 in CVS. The entire thing is #if 0'd out. I haven't ever really taken
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 a good look at it, but I think what it was supposed to have done is
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 set you as being away when a screensaver came on.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 network.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172 This has two functions: get_address and connect_address, both of which
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
173 call proxy functions. If you want to see how these are used, look at
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174 toc.c and/or rvous.c. These are really just front-ends to the proxy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175 stuff; use these instead of calling the proxy functions.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 oscar.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 One big hack of copied code. This is supposed to be the libfaim tie-in
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 in gaim. Most of it is just copied straight from faimtest, the small
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 program that comes with libfaim. I'm not even sure how half of it works,
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 if that makes you feel any better.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 perl.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 This was basically copied straight from X-Chat through the power of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 the GPL. Perl is the biggest, most confusing piece of C code I've ever
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 seen in my life (and keep in mind I'm a gaim hacker). I have a basic
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 idea of what's going on in it, but I couldn't tell you exactly. The
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 top half sets up perl and tells it what's going on and the bottom half
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 implements the AIM module.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 plugins.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 This is the "plugin plug", as the file states. This file is probably
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 the only file in all of gaim that at the top has all of the functions
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 and global and static variables named out for you. It makes reading
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 it a little easier, but not by much. A lot of the code in here deals
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 with the plugin window rather than the plugins themselves.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 prefs.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 The important function in here is build_prefs, but the most useful
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 function is gaim_button. build_prefs draws the window, and calls
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 gaim_button probably 30 or 40 times. (I don't really wanna run grep
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 | wc to count.) This is where you add the toggle button for gaim
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 preferences. It's very simple, and if you look at a couple of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 calls to gaim_button you'll figure it out right away.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 proxy.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 This is where the bulk of the actual networking code is done. The big
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 function here is proxy_connect, which will connect through the proxy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 setup you've chosen (most of which don't work...) or just regularly.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 rvous.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 This was originally going to be the stuff for all of the Buddy Icon
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 and Voice Chat stuff, but I got really sick of protocol hacking really
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 quick. Now it only houses the file transfer stuff, which only works
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 for TOC.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 server.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 This is where all of the differentiation between TOC and Oscar is
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 done. Nearly everything that's network related goes through here
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 at one point or another. This has good things like serv_send_im and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 serv_got_update. Most of it should be pretty self-explanatory.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 sound.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 The big important function is play_sound, which plays one of 4 (actually
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 6) sounds. One of the sounds is called in 3 different events, which
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 is why there are actually 6 sounds. This then calls play which then
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 checks for esd, then nas if that's not available, then falls back
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 to /dev/audio.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 ticker.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
231 Syd is just so cool. I really can't get over it. He let me come
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232 visit him at Netscape one day, and I got to see all of their toys
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
233 (don't worry, I'm under an NDA). Anyway, this file is for the buddy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 ticker. This is also a damn cool file because it's got all of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235 functions that you'd want right up at the top. Someday I want to be
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236 as cool as Syd.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
237
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
238 toc.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
239 This handles everything TOC-related, including parsing gaim's buddy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240 list. Most of this file is toc_callback, which parses the incoming
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
241 information from the server. I really don't like TOC though.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243 util.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244 There's not really a lot of cohesion to this file; it's just a lot of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245 stuff that happened to be thrown into it for no apparent reason. None
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
246 of it is particularly tasty; it's all just utility functions. Just
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 like the name says.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 So that's our little tour of the internals of Gaim. It's really not
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
251 difficult to figure out if you've spent any time with GTK. I'm looking
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
252 forward to getting all of your patches :)

mercurial