gtk/gtkeventloop.c

Tue, 17 Oct 2006 08:13:41 +0000

author
Etan Reisner <deryni@pidgin.im>
date
Tue, 17 Oct 2006 08:13:41 +0000
changeset 14801
6554d4d17db8
parent 14793
66e32c262451
child 18067
ce02548a6b6a
child 20470
77693555855f
permissions
-rw-r--r--

[gaim-migrate @ 17495]
This should fix the statusbox issues that were keeping us from releasing beta
4 (and which were just really annoying). Thakn sadrul for most of this, I just
added the if (index == -1) bit. Anyway, the way this works now is that for
saved/popular statuses the primitive underlying that status is where the
dropdown for the statusbox starts. If we don't like that we can change it but
I'm not sure we'll find something better.

Also, this might plug a couple leaks, I'm not really sure but it certainly
looks right.

Up next, the patch to make the docklet use the per-protocol statuses in the
top section.

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"
14793
66e32c262451 [gaim-migrate @ 17487]
Daniel Atallah <datallah@pidgin.im>
parents: 14792
diff changeset
29 #ifdef _WIN32
14792
02a5df4343f7 [gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
30 #include "win32dep.h"
14793
66e32c262451 [gaim-migrate @ 17487]
Daniel Atallah <datallah@pidgin.im>
parents: 14792
diff changeset
31 #endif
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
32
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
33 #define GAIM_GTK_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
34 #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
35
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
36 typedef struct _GaimGtkIOClosure {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
37 GaimInputFunction function;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
38 guint result;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
39 gpointer data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
40
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
41 } GaimGtkIOClosure;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
42
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
43 static void gaim_gtk_io_destroy(gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
44 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
45 g_free(data);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
46 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
47
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
48 static gboolean gaim_gtk_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
49 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
50 GaimGtkIOClosure *closure = data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
51 GaimInputCondition gaim_cond = 0;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
52
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
53 if (condition & GAIM_GTK_READ_COND)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
54 gaim_cond |= GAIM_INPUT_READ;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
55 if (condition & GAIM_GTK_WRITE_COND)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
56 gaim_cond |= GAIM_INPUT_WRITE;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
57
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
58 #if 0
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
59 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
60 "CLOSURE: callback for %d, fd is %d\n",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
61 closure->result, g_io_channel_unix_get_fd(source));
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
62 #endif
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
63
11065
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
64 #ifdef _WIN32
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
65 if(! gaim_cond) {
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
66 #if DEBUG
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
67 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop",
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
68 "CLOSURE received GIOCondition of 0x%x, which does not"
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
69 " match 0x%x (READ) or 0x%x (WRITE)\n",
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
70 condition, GAIM_GTK_READ_COND, GAIM_GTK_WRITE_COND);
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
71 #endif /* DEBUG */
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
72
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
73 return TRUE;
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
74 }
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
75 #endif /* _WIN32 */
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
76
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
77 closure->function(closure->data, g_io_channel_unix_get_fd(source),
895342350443 [gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents: 8807
diff changeset
78 gaim_cond);
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
79
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
80 return TRUE;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
81 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
82
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
83 static guint gaim_gtk_input_add(gint fd, GaimInputCondition condition, GaimInputFunction function,
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
84 gpointer data)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
85 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
86 GaimGtkIOClosure *closure = g_new0(GaimGtkIOClosure, 1);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
87 GIOChannel *channel;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
88 GIOCondition cond = 0;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
89
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
90 closure->function = function;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
91 closure->data = data;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
92
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
93 if (condition & GAIM_INPUT_READ)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
94 cond |= GAIM_GTK_READ_COND;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
95 if (condition & GAIM_INPUT_WRITE)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
96 cond |= GAIM_GTK_WRITE_COND;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
97
14792
02a5df4343f7 [gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
98 #ifdef _WIN32
02a5df4343f7 [gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
99 channel = wgaim_g_io_channel_win32_new_socket(fd);
02a5df4343f7 [gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
100 #else
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
101 channel = g_io_channel_unix_new(fd);
14792
02a5df4343f7 [gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents: 14253
diff changeset
102 #endif
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
103 closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond,
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
104 gaim_gtk_io_invoke, closure, gaim_gtk_io_destroy);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
105
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
106 #if 0
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
107 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
108 "CLOSURE: adding input watcher %d for fd %d\n",
8280
f448633d3f3a [gaim-migrate @ 9004]
Scott Lamb
parents: 8273
diff changeset
109 closure->result, fd);
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
110 #endif
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
111
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
112 g_io_channel_unref(channel);
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
113 return closure->result;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
114 }
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
115
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
116 static GaimEventLoopUiOps eventloop_ops =
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
117 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
118 g_timeout_add,
8470
100fc1feea95 [gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents: 8287
diff changeset
119 (guint (*)(guint))g_source_remove,
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
120 gaim_gtk_input_add,
8807
128d3dae0196 [gaim-migrate @ 9569]
Jon Oberheide
parents: 8470
diff changeset
121 (guint (*)(guint))g_source_remove
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
122 };
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
123
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
124 GaimEventLoopUiOps *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
125 gaim_gtk_eventloop_get_ui_ops(void)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
126 {
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
127 return &eventloop_ops;
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents:
diff changeset
128 }

mercurial