src/gtkeventloop.c

Sat, 08 May 2004 23:34:30 +0000

author
Gary Kramlich <grim@pidgin.im>
date
Sat, 08 May 2004 23:34:30 +0000
changeset 8907
17b9da22de1e
parent 8807
128d3dae0196
child 11065
895342350443
permissions
-rw-r--r--

[gaim-migrate @ 9677]
" Fixes a few warnings on 64bit machines. Also fixes
yahoo auth on 64bit machines which would have taken me
awhile if marv didn't point me in the right direction.
I've applied to my local 32bit copy and everything
seems to be working fine." --Gary Kramlich

committer: Luke Schierer <lschiere@pidgin.im>

8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
1 /**
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
2 * @file gtk_eventloop.c Gaim Event Loop API (gtk implementation)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
3 * @ingroup gtkui
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
4 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
5 * gaim
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
6 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
9 * source distribution.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
10 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
14 * (at your option) any later version.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
15 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
19 * GNU General Public License for more details.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
20 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
24 */
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
25
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
26 #include <glib.h>
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
27 #include "gtkeventloop.h"
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
28 #include "eventloop.h"
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
29
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
30 #define GAIM_GTK_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
31 #define GAIM_GTK_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
32
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
33 typedef struct _GaimGtkIOClosure {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
34 GaimInputFunction function;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
35 guint result;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
36 gpointer data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
37
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
38 } GaimGtkIOClosure;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
39
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
40 static void gaim_gtk_io_destroy(gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
41 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
42 g_free(data);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
43 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
44
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
45 static gboolean gaim_gtk_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
46 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
47 GaimGtkIOClosure *closure = data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
48 GaimInputCondition gaim_cond = 0;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
49
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
50 if (condition & GAIM_GTK_READ_COND)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
51 gaim_cond |= GAIM_INPUT_READ;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
52 if (condition & GAIM_GTK_WRITE_COND)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
53 gaim_cond |= GAIM_INPUT_WRITE;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
54
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
55 #if 0
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
56 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
57 "CLOSURE: callback for %d, fd is %d\n",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
58 closure->result, g_io_channel_unix_get_fd(source));
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
59 #endif
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
60
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
61 closure->function(closure->data, g_io_channel_unix_get_fd(source), gaim_cond);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
62
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
63 return TRUE;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
64 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
65
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
66 static guint gaim_gtk_input_add(gint fd, GaimInputCondition condition, GaimInputFunction function,
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
67 gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
68 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
69 GaimGtkIOClosure *closure = g_new0(GaimGtkIOClosure, 1);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
70 GIOChannel *channel;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
71 GIOCondition cond = 0;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
72
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
73 closure->function = function;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
74 closure->data = data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
75
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
76 if (condition & GAIM_INPUT_READ)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
77 cond |= GAIM_GTK_READ_COND;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
78 if (condition & GAIM_INPUT_WRITE)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
79 cond |= GAIM_GTK_WRITE_COND;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
80
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
81 channel = g_io_channel_unix_new(fd);
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
82 closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond,
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
83 gaim_gtk_io_invoke, closure, gaim_gtk_io_destroy);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
84
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
85 #if 0
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
86 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
87 "CLOSURE: adding input watcher %d for fd %d\n",
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
88 closure->result, fd);
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
89 #endif
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
90
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
91 g_io_channel_unref(channel);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
92 return closure->result;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
93 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
94
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
95 static GaimEventLoopUiOps eventloop_ops =
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
96 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
97 g_timeout_add,
8470
100fc1feea95 [gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents: 8287
diff changeset
98 (guint (*)(guint))g_source_remove,
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
99 gaim_gtk_input_add,
8807
128d3dae0196 [gaim-migrate @ 9569]
Jon Oberheide
parents: 8470
diff changeset
100 (guint (*)(guint))g_source_remove
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
101 };
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
102
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
103 GaimEventLoopUiOps *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
104 gaim_gtk_eventloop_get_ui_ops(void)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
105 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
106 return &eventloop_ops;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
107 }

mercurial