Sat, 15 Feb 2014 22:09:55 +0530
Box the *UiOps structures
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1 | /* purple |
| 8273 | 2 | * |
| 15884 | 3 | * Purple is the legal property of its developers, whose names are too numerous |
| 8273 | 4 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 5 | * source distribution. | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * 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:
19733
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8273 | 20 | */ |
|
28981
4e3922ab4844
Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <darkrain42@pidgin.im>
parents:
20147
diff
changeset
|
21 | #include "internal.h" |
| 8273 | 22 | #include "eventloop.h" |
| 23 | ||
| 15884 | 24 | static PurpleEventLoopUiOps *eventloop_ui_ops = NULL; |
| 8273 | 25 | |
| 26 | guint | |
| 15884 | 27 | purple_timeout_add(guint interval, GSourceFunc function, gpointer data) |
| 8273 | 28 | { |
| 15884 | 29 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
| 8273 | 30 | |
| 31 | return ops->timeout_add(interval, function, data); | |
| 32 | } | |
| 33 | ||
|
8387
381fc8b4f8f7
[gaim-migrate @ 9115]
Christian Hammond <chipx86@chipx86.com>
parents:
8287
diff
changeset
|
34 | guint |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
35 | purple_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data) |
|
18067
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
36 | { |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
37 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
|
18067
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
38 | |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
39 | if (ops->timeout_add_seconds) |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
40 | return ops->timeout_add_seconds(interval, function, data); |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
41 | else |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
42 | return ops->timeout_add(1000 * interval, function, data); |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
43 | } |
|
ce02548a6b6a
The second_add_timeout patch from Arjan.
Richard Laager <rlaager@pidgin.im>
parents:
14254
diff
changeset
|
44 | |
|
15729
6932ac4e5b3d
Change out source_remove and input_remove eventloop functions to return
Mark Doliner <markdoliner@pidgin.im>
parents:
15435
diff
changeset
|
45 | gboolean |
| 15884 | 46 | purple_timeout_remove(guint tag) |
| 8287 | 47 | { |
| 15884 | 48 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
| 8287 | 49 | |
| 50 | return ops->timeout_remove(tag); | |
| 51 | } | |
| 52 | ||
| 8280 | 53 | guint |
| 15884 | 54 | purple_input_add(int source, PurpleInputCondition condition, PurpleInputFunction func, gpointer user_data) |
| 8273 | 55 | { |
| 15884 | 56 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
| 8273 | 57 | |
| 58 | return ops->input_add(source, condition, func, user_data); | |
| 59 | } | |
| 60 | ||
|
15729
6932ac4e5b3d
Change out source_remove and input_remove eventloop functions to return
Mark Doliner <markdoliner@pidgin.im>
parents:
15435
diff
changeset
|
61 | gboolean |
| 15884 | 62 | purple_input_remove(guint tag) |
| 8273 | 63 | { |
| 15884 | 64 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
| 8273 | 65 | |
| 66 | return ops->input_remove(tag); | |
| 67 | } | |
| 68 | ||
|
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
|
69 | int |
| 15884 | 70 | 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
|
71 | { |
| 15884 | 72 | PurpleEventLoopUiOps *ops = purple_eventloop_get_ui_ops(); |
|
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
|
73 | |
|
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
|
74 | if (ops->input_get_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
|
75 | { |
|
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
|
76 | int ret = ops->input_get_error(fd, 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
|
77 | errno = *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
|
78 | return ret; |
|
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
|
79 | } |
|
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
|
80 | else |
|
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
|
81 | { |
|
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
|
82 | socklen_t len; |
|
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
|
83 | len = sizeof(*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
|
84 | |
|
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
|
85 | return getsockopt(fd, SOL_SOCKET, SO_ERROR, error, &len); |
|
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
|
86 | } |
|
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
|
87 | } |
|
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
|
88 | |
|
33291
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
89 | int |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
90 | purple_input_pipe(int pipefd[2]) |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
91 | { |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
92 | #ifdef _WIN32 |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
93 | return wpurple_input_pipe(pipefd); |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
94 | #else |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
95 | return pipe(pipefd); |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
96 | #endif |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
97 | } |
|
b70ab10887a7
New custom resolver, that uses libpurple for DNS queries. Get rid of old win32 resolver. Refs#343. Fixes #6263
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
28981
diff
changeset
|
98 | |
| 8273 | 99 | void |
| 15884 | 100 | purple_eventloop_set_ui_ops(PurpleEventLoopUiOps *ops) |
| 8273 | 101 | { |
| 102 | eventloop_ui_ops = ops; | |
| 103 | } | |
| 104 | ||
| 15884 | 105 | PurpleEventLoopUiOps * |
| 106 | purple_eventloop_get_ui_ops(void) | |
| 8273 | 107 | { |
|
11291
5441d2419942
[gaim-migrate @ 13491]
Mark Doliner <markdoliner@pidgin.im>
parents:
10566
diff
changeset
|
108 | g_return_val_if_fail(eventloop_ui_ops != NULL, NULL); |
| 8273 | 109 | |
| 110 | return eventloop_ui_ops; | |
| 111 | } | |
| 35572 | 112 | |
| 113 | /************************************************************************** | |
| 114 | * GBoxed code | |
| 115 | **************************************************************************/ | |
| 116 | static PurpleEventLoopUiOps * | |
| 117 | purple_eventloop_ui_ops_copy(PurpleEventLoopUiOps *ops) | |
| 118 | { | |
| 119 | PurpleEventLoopUiOps *ops_new; | |
| 120 | ||
| 121 | g_return_val_if_fail(ops != NULL, NULL); | |
| 122 | ||
| 123 | ops_new = g_new(PurpleEventLoopUiOps, 1); | |
| 124 | *ops_new = *ops; | |
| 125 | ||
| 126 | return ops_new; | |
| 127 | } | |
| 128 | ||
| 129 | static void | |
| 130 | purple_eventloop_ui_ops_free(PurpleEventLoopUiOps *ops) | |
| 131 | { | |
| 132 | g_return_if_fail(ops != NULL); | |
| 133 | ||
| 134 | g_free(ops); | |
| 135 | } | |
| 136 | ||
| 137 | GType | |
| 138 | purple_eventloop_ui_ops_get_type(void) | |
| 139 | { | |
| 140 | static GType type = 0; | |
| 141 | ||
| 142 | if (type == 0) { | |
| 143 | type = g_boxed_type_register_static("PurpleEventLoopUiOps", | |
| 144 | (GBoxedCopyFunc)purple_eventloop_ui_ops_copy, | |
| 145 | (GBoxedFreeFunc)purple_eventloop_ui_ops_free); | |
| 146 | } | |
| 147 | ||
| 148 | return type; | |
| 149 | } |