tGet rid of deprecated gdk_input_(add|remove) - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit f19f8aaba7004c96d82945b3401c6d22cd1a014b
(DIR) parent f97050905377cdc0ca7d1f49e34f6cb364725766
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Mon, 16 Nov 2020 00:19:58 -0800
Get rid of deprecated gdk_input_(add|remove)
Use GIOChannel functions rather than gdk_input_add
and gdk_input_remove, since the old functions are
no longer present in GTK+3. Relates #53.
Diffstat:
M src/gtkport/gtkenums.h | 6 ------
M src/gtkport/gtkport.c | 56 -------------------------------
M src/gtkport/gtkport.h | 5 -----
M src/gui_client/gtk_client.c | 27 ++++++++++++++-------------
M src/network.c | 17 ++++++++++++++++-
M src/network.h | 3 ++-
M src/serverside.c | 27 ++++++++++++++++-----------
7 files changed, 48 insertions(+), 93 deletions(-)
---
(DIR) diff --git a/src/gtkport/gtkenums.h b/src/gtkport/gtkenums.h
t@@ -80,12 +80,6 @@ typedef enum {
} GtkSelectionMode;
typedef enum {
- GDK_INPUT_READ = 1 << 0,
- GDK_INPUT_WRITE = 1 << 1,
- GDK_INPUT_EXCEPTION = 1 << 2
-} GdkInputCondition;
-
-typedef enum {
GTK_SHADOW_NONE,
GTK_SHADOW_IN,
GTK_SHADOW_OUT,
(DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
t@@ -239,15 +239,6 @@ static void gtk_accel_group_set_id(GtkAccelGroup *accel_group, gint ind,
gint ID);
static void EnableParent(GtkWindow *window);
-typedef struct _GdkInput GdkInput;
-
-struct _GdkInput {
- gint source;
- GdkInputCondition condition;
- GdkInputFunction function;
- gpointer data;
-};
-
struct _OurSource {
guint id; /* Unique identifier */
t@@ -646,7 +637,6 @@ HINSTANCE hInst;
HFONT defFont;
static HFONT urlFont;
static GSList *WindowList = NULL;
-static GSList *GdkInputs = NULL;
static GSList *OurSources = NULL;
static HWND TopLevel = NULL;
t@@ -671,20 +661,8 @@ GtkObject *GtkNewObject(GtkClass *klass)
static void DispatchSocketEvent(SOCKET sock, long event)
{
GSList *list;
- GdkInput *input;
OurSource *s;
- for (list = GdkInputs; list; list = g_slist_next(list)) {
- input = (GdkInput *)(list->data);
- if (input->source == sock) {
- (*input->function) (input->data, input->source,
- (event & (FD_READ | FD_CLOSE | FD_ACCEPT) ?
- GDK_INPUT_READ : 0) |
- (event & (FD_WRITE | FD_CONNECT) ?
- GDK_INPUT_WRITE : 0));
- break;
- }
- }
for (list = OurSources; list; list = g_slist_next(list)) {
s = (OurSource *)(list->data);
if (s->socket == sock) {
t@@ -4482,40 +4460,6 @@ void gtk_spin_button_update(GtkSpinButton *spin_button)
{
}
-void gdk_input_remove(gint tag)
-{
- GSList *list;
- GdkInput *input;
-
- for (list = GdkInputs; list; list = g_slist_next(list)) {
- input = (GdkInput *)list->data;
- if (input->source == tag) {
- WSAAsyncSelect(input->source, TopLevel, 0, 0);
- GdkInputs = g_slist_remove(GdkInputs, input);
- g_free(input);
- break;
- }
- }
-}
-
-gint gdk_input_add(gint source, GdkInputCondition condition,
- GdkInputFunction function, gpointer data)
-{
- GdkInput *input;
-
- input = g_new(GdkInput, 1);
- input->source = source;
- input->condition = condition;
- input->function = function;
- input->data = data;
- WSAAsyncSelect(source, TopLevel, MYWM_SOCKETDATA,
- (condition & GDK_INPUT_READ ? FD_READ | FD_CLOSE |
- FD_ACCEPT : 0) | (condition & GDK_INPUT_WRITE ?
- FD_WRITE | FD_CONNECT : 0));
- GdkInputs = g_slist_append(GdkInputs, input);
- return source;
-}
-
GtkWidget *gtk_hseparator_new()
{
return GTK_WIDGET(GtkNewObject(&GtkHSeparatorClass));
(DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h
t@@ -60,8 +60,6 @@ extern HICON mainIcon;
#define GDK_KP_9 0xFFB9
typedef gint (*GtkFunction) (gpointer data);
-typedef void (*GdkInputFunction) (gpointer data, gint source,
- GdkInputCondition condition);
typedef gchar *(*GtkTranslateFunc) (const gchar *path, gpointer func_data);
typedef void (*GtkDestroyNotify) (gpointer data);
t@@ -617,9 +615,6 @@ GtkObject *gtk_adjustment_new(gfloat value, gfloat lower, gfloat upper,
gfloat page_size);
GtkWidget *gtk_spin_button_new(GtkAdjustment *adjustment,
gfloat climb_rate, guint digits);
-void gdk_input_remove(gint tag);
-gint gdk_input_add(gint source, GdkInputCondition condition,
- GdkInputFunction function, gpointer data);
guint dp_g_io_add_watch(GIOChannel *channel, GIOCondition condition,
GIOFunc func, gpointer user_data);
(DIR) diff --git a/src/gui_client/gtk_client.c b/src/gui_client/gtk_client.c
t@@ -105,8 +105,8 @@ static void Jet(GtkWidget *parent);
static void UpdateMenus(void);
#ifdef NETWORKING
-static void GetClientMessage(gpointer data, gint socket,
- GdkInputCondition condition);
+gboolean GetClientMessage(GIOChannel *source, GIOCondition condition,
+ gpointer data);
void SocketStatus(NetworkBuffer *NetBuf, gboolean Read, gboolean Write,
gboolean Exception, gboolean CallNow);
t@@ -358,8 +358,8 @@ void ListInventory(GtkWidget *widget, gpointer data)
}
#ifdef NETWORKING
-void GetClientMessage(gpointer data, gint socket,
- GdkInputCondition condition)
+gboolean GetClientMessage(GIOChannel *source, GIOCondition condition,
+ gpointer data)
{
gchar *pt;
NetworkBuffer *NetBuf;
t@@ -373,9 +373,9 @@ void GetClientMessage(gpointer data, gint socket,
oldsocks = NetBuf->sockstat;
datawaiting =
- PlayerHandleNetwork(ClientData.Play, condition & GDK_INPUT_READ,
- condition & GDK_INPUT_WRITE,
- condition & GDK_INPUT_EXCEPTION, &DoneOK);
+ PlayerHandleNetwork(ClientData.Play, condition & G_IO_IN,
+ condition & G_IO_OUT,
+ condition & G_IO_ERR, &DoneOK);
status = NetBuf->status;
/* Handle pre-game stuff */
t@@ -405,24 +405,25 @@ void GetClientMessage(gpointer data, gint socket,
ShutdownNetworkBuffer(&ClientData.Play->NetBuf);
}
}
+ return TRUE;
}
void SocketStatus(NetworkBuffer *NetBuf, gboolean Read, gboolean Write,
gboolean Exception, gboolean CallNow)
{
if (NetBuf->InputTag)
- gdk_input_remove(NetBuf->InputTag);
+ dp_g_source_remove(NetBuf->InputTag);
NetBuf->InputTag = 0;
if (Read || Write || Exception) {
- NetBuf->InputTag = gdk_input_add(NetBuf->fd,
- (Read ? GDK_INPUT_READ : 0) |
- (Write ? GDK_INPUT_WRITE : 0) |
- (Exception ? GDK_INPUT_EXCEPTION : 0),
+ NetBuf->InputTag = dp_g_io_add_watch(NetBuf->ioch,
+ (Read ? G_IO_IN : 0) |
+ (Write ? G_IO_OUT : 0) |
+ (Exception ? G_IO_ERR : 0),
GetClientMessage,
NetBuf->CallBackData);
}
if (CallNow)
- GetClientMessage(NetBuf->CallBackData, NetBuf->fd, 0);
+ GetClientMessage(NetBuf->ioch, 0, NetBuf->CallBackData);
}
#endif /* NETWORKING */
(DIR) diff --git a/src/network.c b/src/network.c
t@@ -190,6 +190,7 @@ void InitNetworkBuffer(NetworkBuffer *NetBuf, char Terminator,
char StripChar, SocksServer *socks)
{
NetBuf->fd = -1;
+ NetBuf->ioch = NULL;
NetBuf->InputTag = 0;
NetBuf->CallBack = NULL;
NetBuf->CallBackData = NULL;
t@@ -233,6 +234,12 @@ void SetNetworkBufferUserPasswdFunc(NetworkBuffer *NetBuf,
void BindNetworkBufferToSocket(NetworkBuffer *NetBuf, int fd)
{
NetBuf->fd = fd;
+#ifdef CYGIN
+ NetBuf->ioch = g_io_channel_win32_new_socket(fd);
+#else
+ NetBuf->ioch = g_io_channel_unix_new(fd);
+#endif
+
SetBlocking(fd, FALSE); /* We only deal with non-blocking sockets */
NetBuf->status = NBS_CONNECTED; /* Assume the socket is connected */
}
t@@ -266,6 +273,11 @@ gboolean StartNetworkBufferConnect(NetworkBuffer *NetBuf,
if (StartConnect(&NetBuf->fd, bindaddr, realhost, realport, &doneOK,
&NetBuf->error)) {
+#ifdef CYGIN
+ NetBuf->ioch = g_io_channel_win32_new_socket(NetBuf->fd);
+#else
+ NetBuf->ioch = g_io_channel_unix_new(NetBuf->fd);
+#endif
/* If we connected immediately, then set status, otherwise signal that
* we're waiting for the connect to complete */
if (doneOK) {
t@@ -298,8 +310,11 @@ void ShutdownNetworkBuffer(NetworkBuffer *NetBuf)
{
NetBufCallBackStop(NetBuf);
- if (NetBuf->fd >= 0)
+ if (NetBuf->fd >= 0) {
CloseSocket(NetBuf->fd);
+ g_io_channel_unref(NetBuf->ioch);
+ NetBuf->fd = -1;
+ }
FreeConnBuf(&NetBuf->ReadBuf);
FreeConnBuf(&NetBuf->WriteBuf);
(DIR) diff --git a/src/network.h b/src/network.h
t@@ -133,7 +133,8 @@ typedef enum {
/* Handles reading and writing messages from/to a network connection */
struct _NetworkBuffer {
int fd; /* File descriptor of the socket */
- gint InputTag; /* Identifier for gdk_input routines */
+ GIOChannel *ioch; /* GLib representation of the descriptor */
+ gint InputTag; /* Identifier for GLib event routines */
NBCallBack CallBack; /* Function called when the socket
* status changes */
gpointer CallBackData; /* Data accessible to the callback
(DIR) diff --git a/src/serverside.c b/src/serverside.c
t@@ -1477,26 +1477,26 @@ void SocketStatus(NetworkBuffer *NetBuf, gboolean Read, gboolean Write,
gboolean Exception, gboolean CallNow)
{
if (NetBuf->InputTag)
- gdk_input_remove(NetBuf->InputTag);
+ dp_g_source_remove(NetBuf->InputTag);
NetBuf->InputTag = 0;
if (Read || Write) {
- NetBuf->InputTag = gdk_input_add(NetBuf->fd,
- (Read ? GDK_INPUT_READ : 0) |
- (Write ? GDK_INPUT_WRITE : 0) |
- (Exception ? GDK_INPUT_EXCEPTION : 0),
+ NetBuf->InputTag = dp_g_io_add_watch(NetBuf->ioch,
+ (Read ? G_IO_IN : 0) |
+ (Write ? G_IO_OUT : 0) |
+ (Exception ? G_IO_ERR : 0),
GuiHandleSocket,
NetBuf->CallBackData);
}
if (CallNow)
- GuiHandleSocket(NetBuf->CallBackData, NetBuf->fd, 0);
+ GuiHandleSocket(NetBuf->ioch, 0, NetBuf->CallBackData);
}
-static void GuiNewConnect(gpointer data, gint socket,
- GdkInputCondition condition)
+static void GuiNewConnect(GIOChannel *source, GIOCondition condition,
+ gpointer data)
{
Player *Play;
- if (condition & GDK_INPUT_READ) {
+ if (condition & G_IO_IN) {
Play = HandleNewConnection();
SetNetworkBufferCallBack(&Play->NetBuf, SocketStatus, (gpointer)Play);
}
t@@ -1643,6 +1643,7 @@ static void SetupTaskBarIcon(GtkWidget *widget)
void GuiServerLoop(struct CMDLINE *cmdline, gboolean is_service)
{
GtkWidget *window, *text, *hbox, *vbox, *entry, *label;
+ GIOChannel *listench;
if (HaveUnicodeSupport()) {
/* GTK+2 (and the GTK emulation code on WinNT systems) expects all
t@@ -1699,8 +1700,12 @@ void GuiServerLoop(struct CMDLINE *cmdline, gboolean is_service)
if (!StartServer())
return;
- ListenTag =
- gdk_input_add(ListenSock, GDK_INPUT_READ, GuiNewConnect, NULL);
+#ifdef CYGIN
+ listench = g_io_channel_win32_new_socket(ListenSock);
+#else
+ listench = g_io_channel_unix_new(ListenSock);
+#endif
+ ListenTag = dp_g_io_add_watch(listench, G_IO_IN, GuiNewConnect, NULL);
#ifdef CYGWIN
mainhwnd = window->hWnd;
SetupTaskBarIcon(window);