tGet rid of deprecated gdk_input_(add|remove) - vaccinewars - be a doctor and t… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f19f8aaba7004c96d82945b3401c6d22cd1a014b | |
parent f97050905377cdc0ca7d1f49e34f6cb364725766 | |
Author: Ben Webb <[email protected]> | |
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(-) | |
--- | |
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, | |
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_g… | |
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)); | |
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 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); | |
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 */ | |
diff --git a/src/network.c b/src/network.c | |
t@@ -190,6 +190,7 @@ void InitNetworkBuffer(NetworkBuffer *NetBuf, char Termina… | |
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); | |
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 | |
diff --git a/src/serverside.c b/src/serverside.c | |
t@@ -1477,26 +1477,26 @@ void SocketStatus(NetworkBuffer *NetBuf, gboolean Read… | |
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… | |
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); |