[Commit] grrobot/src grrobot.c,1.3,1.4
Keith Packard
commit at keithp.com
Sat Jun 14 03:05:02 PDT 2003
- Previous message: [Commit]
grrobot/src Makefile.am,1.1.1.1,1.2 grr_board_view.c,1.3,1.4
grr_board_view.h,1.2,1.3 grrobot.c,1.2,1.3
- Next message: [Commit] librr/src rr_client.c,1.5,1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Committed by: keithp
Update of /local/src/CVS/grrobot/src
In directory home.keithp.com:/tmp/cvs-serv20344
Modified Files:
grrobot.c
Log Message:
Use raw g_source APIs to track rr connection
Index: grrobot.c
===================================================================
RCS file: /local/src/CVS/grrobot/src/grrobot.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- grrobot.c 14 Jun 2003 08:17:41 -0000 1.3
+++ grrobot.c 14 Jun 2003 09:04:59 -0000 1.4
@@ -51,19 +51,18 @@
grr_game_start_gui (grr_game_t *game);
static void
-grr_game_read_callback (gpointer data,
- gint fd,
- GdkInputCondition condition);
-
-static void
grr_game_read_notices (grr_game_t *game);
+static GSource *
+grr_game_notices_source_new (grr_game_t *game);
+
int
main (int argc, char **argv)
{
args_t args;
rr_status_t status;
grr_game_t game;
+ GSource *source;
char *diagram;
@@ -85,10 +84,10 @@
game.board = rr_board_create (16, 16);
- gdk_input_add (rr_client_fd (game.client),
- GDK_INPUT_READ,
- grr_game_read_callback,
- &game);
+ source = grr_game_notices_source_new (&game);
+ g_source_set_priority (source, GDK_PRIORITY_EVENTS);
+ g_source_attach (source, NULL);
+ g_source_unref (source);
rr_client_show (game.client, &diagram);
rr_board_parse (game.board, diagram);
@@ -97,14 +96,68 @@
return grr_game_start_gui (&game);
}
-static void
-grr_game_read_callback (gpointer data,
- gint fd,
- GdkInputCondition condition)
+typedef struct _GrrNoticeSource {
+ GSource source;
+ grr_game_t *game;
+} GrrNoticeSource;
+
+static gboolean
+grr_game_notices_prepare (GSource *source,
+ gint *timeout)
{
- grr_game_t *game = data;
+ GrrNoticeSource *src = (GrrNoticeSource*)source;
+ grr_game_t *game = src->game;
+ gboolean retval;
+ GDK_THREADS_ENTER ();
+ *timeout = -1;
+ retval = rr_client_notice_pending (game->client);
+ GDK_THREADS_LEAVE ();
+
+ return retval;
+}
+
+static gboolean
+grr_game_notices_check (GSource *source)
+{
+ GrrNoticeSource *src = (GrrNoticeSource*)source;
+ grr_game_t *game = src->game;
+ gboolean retval;
+
+ GDK_THREADS_ENTER ();
+ retval = rr_client_notice_pending (game->client);
+ GDK_THREADS_LEAVE ();
+
+ return retval;
+}
+
+static gboolean
+grr_game_notices_dispatch (GSource *source,
+ GSourceFunc callback,
+ gpointer user_data)
+{
+ GrrNoticeSource *src = (GrrNoticeSource*)source;
+ grr_game_t *game = src->game;
+
grr_game_read_notices (game);
+
+ return TRUE;
+}
+
+static GSourceFuncs game_notices_funcs = {
+ grr_game_notices_prepare,
+ grr_game_notices_check,
+ grr_game_notices_dispatch,
+ NULL
+};
+
+static GSource *
+grr_game_notices_source_new (grr_game_t *game)
+{
+ GSource *source = g_source_new (&game_notices_funcs, sizeof (GrrNoticeSource));
+ GrrNoticeSource *src = (GrrNoticeSource*)source;
+ src->game = game;
+ return source;
}
static void
@@ -206,8 +259,6 @@
gtk_entry_set_text (GTK_ENTRY (game->command_entry), "");
- grr_game_read_notices (game);
-
/* XXX: Huh? Why is this triggering valgrind?
free (response);
*/
@@ -283,8 +334,6 @@
gtk_widget_show (window);
- grr_game_read_notices (game);
-
gtk_main ();
return 0;
- Previous message: [Commit]
grrobot/src Makefile.am,1.1.1.1,1.2 grr_board_view.c,1.3,1.4
grr_board_view.h,1.2,1.3 grrobot.c,1.2,1.3
- Next message: [Commit] librr/src rr_client.c,1.5,1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Commit
mailing list