Thu, 31 May 2012 03:48:16 +0000
propagate from branch 'im.pidgin.pidgin.2.x.y' (head 0aa32fc00dc281d336971ef3966efe6652dc1bf6)
to branch 'im.pidgin.pidgin' (head 89f064bdd762e62b3e3d3a2153cece816879cee9)
| 8273 | 1 | /** |
| 15884 | 2 | * @file eventloop.h Purple Event Loop API |
| 8273 | 3 | * @ingroup core |
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
4 | */ |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
5 | |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
6 | /* purple |
| 8273 | 7 | * |
| 15884 | 8 | * Purple is the legal property of its developers, whose names are too numerous |
| 8273 | 9 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 10 | * source distribution. | |
| 11 | * | |
| 12 | * This program is free software; you can redistribute it and/or modify | |
| 13 | * it under the terms of the GNU General Public License as published by | |
| 14 | * the Free Software Foundation; either version 2 of the License, or | |
| 15 | * (at your option) any later version. | |
| 16 | * | |
| 17 | * This program is distributed in the hope that it will be useful, | |
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 20 | * GNU General Public License for more details. | |
| 21 | * | |
| 22 | * You should have received a copy of the GNU General Public License | |
| 23 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18075
diff
changeset
|
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8273 | 25 | */ |
| 15884 | 26 | #ifndef _PURPLE_EVENTLOOP_H_ |
| 27 | #define _PURPLE_EVENTLOOP_H_ | |
| 8273 | 28 | |
|
10023
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
10008
diff
changeset
|
29 | #include <glib.h> |
| 8273 | 30 | |
| 31 | /** | |
| 32 | * An input condition. | |
| 33 | */ | |
| 34 | typedef enum | |
| 35 | { | |
| 15884 | 36 | PURPLE_INPUT_READ = 1 << 0, /**< A read condition. */ |
| 37 | PURPLE_INPUT_WRITE = 1 << 1 /**< A write condition. */ | |
| 8273 | 38 | |
| 15884 | 39 | } PurpleInputCondition; |
| 8273 | 40 | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
41 | /** The type of callbacks to handle events on file descriptors, as passed to |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
42 | * purple_input_add(). The callback will receive the @c user_data passed to |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
43 | * purple_input_add(), the file descriptor on which the event occurred, and the |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
44 | * condition that was satisfied to cause the callback to be invoked. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
45 | */ |
| 15884 | 46 | typedef void (*PurpleInputFunction)(gpointer, gint, PurpleInputCondition); |
| 8273 | 47 | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
48 | /** @copydoc _PurpleEventLoopUiOps */ |
| 15884 | 49 | typedef struct _PurpleEventLoopUiOps PurpleEventLoopUiOps; |
| 8273 | 50 | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
51 | /** An abstraction of an application's mainloop; libpurple will use this to |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
52 | * watch file descriptors and schedule timed callbacks. If your application |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
53 | * uses the glib mainloop, there is an implementation of this struct in |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
54 | * <tt>libpurple/example/nullclient.c</tt> which you can use verbatim. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
55 | */ |
| 15884 | 56 | struct _PurpleEventLoopUiOps |
| 8273 | 57 | { |
| 58 | /** | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
59 | * Should create a callback timer with an interval measured in |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
60 | * milliseconds. The supplied @a function should be called every @a |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
61 | * interval seconds until it returns @c FALSE, after which it should not |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
62 | * be called again. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
63 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
64 | * Analogous to g_timeout_add in glib. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
65 | * |
|
24050
583a6a2f13eb
Add a note about the timeout_add uiop being used to synchronize threads on win32.
Daniel Atallah <datallah@pidgin.im>
parents:
23063
diff
changeset
|
66 | * Note: On Win32, this function may be called from a thread other than |
|
583a6a2f13eb
Add a note about the timeout_add uiop being used to synchronize threads on win32.
Daniel Atallah <datallah@pidgin.im>
parents:
23063
diff
changeset
|
67 | * the libpurple thread. You should make sure to detect this situation |
|
583a6a2f13eb
Add a note about the timeout_add uiop being used to synchronize threads on win32.
Daniel Atallah <datallah@pidgin.im>
parents:
23063
diff
changeset
|
68 | * and to only call "function" from the libpurple thread. |
|
583a6a2f13eb
Add a note about the timeout_add uiop being used to synchronize threads on win32.
Daniel Atallah <datallah@pidgin.im>
parents:
23063
diff
changeset
|
69 | * |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
70 | * @param interval the interval in <em>milliseconds</em> between calls |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
71 | * to @a function. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
72 | * @param data arbitrary data to be passed to @a function at each |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
73 | * call. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
74 | * @todo Who is responsible for freeing @a data? |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
75 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
76 | * @return a handle for the timeout, which can be passed to |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
77 | * #timeout_remove. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
78 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
79 | * @see purple_timeout_add |
| 8273 | 80 | **/ |
| 81 | guint (*timeout_add)(guint interval, GSourceFunc function, gpointer data); | |
| 82 | ||
| 83 | /** | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
84 | * Should remove a callback timer. Analogous to g_source_remove in glib. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
85 | * @param handle an identifier for a timeout, as returned by |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
86 | * #timeout_add. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
87 | * @return @c TRUE if the timeout identified by @a handle was |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
88 | * found and removed. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
89 | * @see purple_timeout_remove |
| 8287 | 90 | */ |
|
15729
6932ac4e5b3d
Change out source_remove and input_remove eventloop functions to return
Mark Doliner <markdoliner@pidgin.im>
parents:
15435
diff
changeset
|
91 | gboolean (*timeout_remove)(guint handle); |
| 8287 | 92 | |
| 93 | /** | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
94 | * Should add an input handler. Analogous to g_io_add_watch_full in |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
95 | * glib. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
96 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
97 | * @param fd a file descriptor to watch for events |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
98 | * @param cond a bitwise OR of events on @a fd for which @a func |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
99 | * should be called. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
100 | * @param func a callback to fire whenever a relevant event on @a |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
101 | * fd occurs. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
102 | * @param user_data arbitrary data to pass to @a fd. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
103 | * @return an identifier for this input handler, which can be |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
104 | * passed to #input_remove. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
105 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
106 | * @see purple_input_add |
| 8273 | 107 | */ |
| 15884 | 108 | guint (*input_add)(int fd, PurpleInputCondition cond, |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
109 | PurpleInputFunction func, gpointer user_data); |
| 8273 | 110 | |
| 111 | /** | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
112 | * Should remove an input handler. Analogous to g_source_remove in glib. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
113 | * @param handle an identifier, as returned by #input_add. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
114 | * @return @c TRUE if the input handler was found and removed. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
115 | * @see purple_input_remove |
| 8273 | 116 | */ |
|
15729
6932ac4e5b3d
Change out source_remove and input_remove eventloop functions to return
Mark Doliner <markdoliner@pidgin.im>
parents:
15435
diff
changeset
|
117 | gboolean (*input_remove)(guint handle); |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
24050
diff
changeset
|
118 | |
|
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
24050
diff
changeset
|
119 | |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
120 | /** |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
121 | * If implemented, should get the current error status for an input. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
122 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
123 | * Implementation of this UI op is optional. Implement it if the UI's |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
124 | * sockets or event loop needs to customize determination of socket |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
125 | * error status. If unimplemented, <tt>getsockopt(2)</tt> will be used |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
126 | * instead. |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
127 | * |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
128 | * @see purple_input_get_error |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
129 | */ |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
130 | int (*input_get_error)(int fd, int *error); |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
131 | |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
132 | /** |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
133 | * If implemented, should create a callback timer with an interval |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
134 | * measured in seconds. Analogous to g_timeout_add_seconds in glib. |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
135 | * |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
136 | * This allows UIs to group timers for better power efficiency. For |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
137 | * this reason, @a interval may be rounded by up to a second. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
138 | * |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
139 | * Implementation of this UI op is optional. If it's not implemented, |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
140 | * calls to purple_timeout_add_seconds() will be serviced by |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
141 | * #timeout_add. |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
142 | * |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
143 | * @see purple_timeout_add_seconds() |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
144 | **/ |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
145 | guint (*timeout_add_seconds)(guint interval, GSourceFunc function, |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
146 | gpointer data); |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
147 | |
|
16743
1ce5ffe12e2a
Initial addition of padding for ui_ops and other class-like structs
Gary Kramlich <grim@reaperworld.com>
parents:
15997
diff
changeset
|
148 | void (*_purple_reserved2)(void); |
|
1ce5ffe12e2a
Initial addition of padding for ui_ops and other class-like structs
Gary Kramlich <grim@reaperworld.com>
parents:
15997
diff
changeset
|
149 | void (*_purple_reserved3)(void); |
|
1ce5ffe12e2a
Initial addition of padding for ui_ops and other class-like structs
Gary Kramlich <grim@reaperworld.com>
parents:
15997
diff
changeset
|
150 | void (*_purple_reserved4)(void); |
| 8273 | 151 | }; |
| 152 | ||
|
32787
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
153 | G_BEGIN_DECLS |
|
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
154 | |
| 8273 | 155 | /**************************************************************************/ |
| 156 | /** @name Event Loop API */ | |
| 157 | /**************************************************************************/ | |
| 158 | /*@{*/ | |
| 159 | /** | |
| 160 | * Creates a callback timer. | |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
24050
diff
changeset
|
161 | * |
|
10071
d2ba11541693
[gaim-migrate @ 11047]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
10023
diff
changeset
|
162 | * The timer will repeat until the function returns @c FALSE. The |
| 8273 | 163 | * first call will be at the end of the first interval. |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
164 | * |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
165 | * If the timer is in a multiple of seconds, use purple_timeout_add_seconds() |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
166 | * instead as it allows UIs to group timers for power efficiency. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
167 | * |
| 8273 | 168 | * @param interval The time between calls of the function, in |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
169 | * milliseconds. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
170 | * @param function The function to call. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
171 | * @param data data to pass to @a function. |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
172 | * @return A handle to the timer which can be passed to |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
173 | * purple_timeout_remove() to remove the timer. |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
174 | */ |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
175 | guint purple_timeout_add(guint interval, GSourceFunc function, gpointer data); |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
176 | |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
177 | /** |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
178 | * Creates a callback timer. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
179 | * |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
180 | * The timer will repeat until the function returns @c FALSE. The |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
181 | * first call will be at the end of the first interval. |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
182 | * |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
183 | * This function allows UIs to group timers for better power efficiency. For |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
184 | * this reason, @a interval may be rounded by up to a second. |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
24050
diff
changeset
|
185 | * |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
186 | * @param interval The time between calls of the function, in |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
187 | * seconds. |
| 8273 | 188 | * @param function The function to call. |
|
10071
d2ba11541693
[gaim-migrate @ 11047]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
10023
diff
changeset
|
189 | * @param data data to pass to @a function. |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
24050
diff
changeset
|
190 | * @return A handle to the timer which can be passed to |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
191 | * purple_timeout_remove() to remove the timer. |
|
10071
d2ba11541693
[gaim-migrate @ 11047]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
10023
diff
changeset
|
192 | */ |
|
18075
1e4bb0043a98
It's GLIB_CHECK_VERSION, not GLIB_VERSION_CHECK.
Richard Laager <rlaager@pidgin.im>
parents:
18070
diff
changeset
|
193 | guint purple_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data); |
| 8273 | 194 | |
| 195 | /** | |
| 8287 | 196 | * Removes a timeout handler. |
| 197 | * | |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
198 | * @param handle The handle, as returned by purple_timeout_add(). |
|
8387
381fc8b4f8f7
[gaim-migrate @ 9115]
Christian Hammond <chipx86@chipx86.com>
parents:
8287
diff
changeset
|
199 | * |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
200 | * @return @c TRUE if the handler was successfully removed. |
| 8287 | 201 | */ |
| 15884 | 202 | gboolean purple_timeout_remove(guint handle); |
| 8287 | 203 | |
| 204 | /** | |
| 8273 | 205 | * Adds an input handler. |
| 206 | * | |
| 8280 | 207 | * @param fd The input file descriptor. |
| 8273 | 208 | * @param cond The condition type. |
| 209 | * @param func The callback function for data. | |
| 210 | * @param user_data User-specified data. | |
| 211 | * | |
|
13747
26ce2a14d553
[gaim-migrate @ 16156]
Mark Doliner <markdoliner@pidgin.im>
parents:
10071
diff
changeset
|
212 | * @return The resulting handle (will be greater than 0). |
| 8273 | 213 | * @see g_io_add_watch_full |
| 214 | */ | |
| 15884 | 215 | guint purple_input_add(int fd, PurpleInputCondition cond, |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
216 | PurpleInputFunction func, gpointer user_data); |
| 8273 | 217 | |
| 218 | /** | |
| 219 | * Removes an input handler. | |
| 220 | * | |
| 8280 | 221 | * @param handle The handle of the input handler. Note that this is the return |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
222 | * value from purple_input_add(), <i>not</i> the file descriptor. |
| 8273 | 223 | */ |
| 15884 | 224 | gboolean purple_input_remove(guint handle); |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
225 | |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
226 | /** |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
227 | * Get the current error status for an input. |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
228 | * |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
229 | * The return value and error follow getsockopt() with a level of SOL_SOCKET and an |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
230 | * option name of SO_ERROR, and this is how the error is determined if the UI does not |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
231 | * implement the input_get_error UI op. |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
232 | * |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
233 | * @param fd The input file descriptor. |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
234 | * @param error A pointer to an @c int which on return will have the error, or |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
235 | * @c 0 if no error. |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
236 | * |
|
22526
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
237 | * @return @c 0 if there is no error; @c -1 if there is an error, in which case |
|
4223bc1ce147
Document PurpleEventLoopUiOps and associated misc.
Will Thompson <resiak@pidgin.im>
parents:
20940
diff
changeset
|
238 | * @a errno will be set. |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
239 | */ |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
240 | int |
| 15884 | 241 | purple_input_get_error(int fd, int *error); |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
242 | |
| 8273 | 243 | |
| 244 | /*@}*/ | |
| 245 | ||
| 246 | ||
| 247 | /**************************************************************************/ | |
| 248 | /** @name UI Registration Functions */ | |
| 249 | /**************************************************************************/ | |
| 250 | /*@{*/ | |
| 251 | /** | |
| 252 | * Sets the UI operations structure to be used for accounts. | |
| 253 | * | |
| 254 | * @param ops The UI operations structure. | |
| 255 | */ | |
| 15884 | 256 | void purple_eventloop_set_ui_ops(PurpleEventLoopUiOps *ops); |
| 8273 | 257 | |
| 258 | /** | |
| 259 | * Returns the UI operations structure used for accounts. | |
| 260 | * | |
| 261 | * @return The UI operations structure in use. | |
| 262 | */ | |
| 15884 | 263 | PurpleEventLoopUiOps *purple_eventloop_get_ui_ops(void); |
| 8273 | 264 | |
| 265 | /*@}*/ | |
| 266 | ||
|
32787
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
267 | G_END_DECLS |
| 8273 | 268 | |
| 15884 | 269 | #endif /* _PURPLE_EVENTLOOP_H_ */ |