diff --git a/ipc.c b/ipc.c index d3219b5..2ea9267 100644 --- a/ipc.c +++ b/ipc.c @@ -39,8 +39,6 @@ static Window root_win = None; static Window comms_win = None; static Window my_msg_win = None; static Client *e_client = NULL; -static GdkWindow *gdkwin = NULL; -static GdkWindow *gdkwin2 = NULL; static void (*msg_receive_callback)(char *msg) = NULL; static unsigned int Atom_ENL_MSG; @@ -180,17 +178,34 @@ CommsGet(XEvent *ev) } static GdkFilterReturn -CommsFilter(GdkXEvent *gdk_xevent, GdkEvent *event __UNUSED__, - void *data __UNUSED__) +FilterCommsWin(GdkXEvent *gdk_xevent, GdkEvent *event __UNUSED__, + void *data __UNUSED__) { - XEvent *xevent; - char *msg; + XEvent *xevent = gdk_xevent; - xevent = (XEvent *) gdk_xevent; switch (xevent->type) { + default: + break; + case DestroyNotify: exit(1); + } + + return GDK_FILTER_REMOVE; +} + +static GdkFilterReturn +FilterMyMsgWin(GdkXEvent *gdk_xevent, GdkEvent *event __UNUSED__, + void *data __UNUSED__) +{ + XEvent *xevent = gdk_xevent; + char *msg; + + switch (xevent->type) + { + default: + break; case ClientMessage: if (xevent->xclient.message_type != Atom_ENL_MSG) @@ -204,17 +219,17 @@ CommsFilter(GdkXEvent *gdk_xevent, GdkEvent *event __UNUSED__, free(msg); } break; - - default: - break; } + return GDK_FILTER_REMOVE; } int CommsInit(void (*msg_receive_func)(char *msg)) { - if(CommsSetup()) + GdkWindow *gdkwin; + + if (CommsSetup()) return 1; comms_win = CommsFindCommsWindow(); @@ -224,10 +239,12 @@ CommsInit(void (*msg_receive_func)(char *msg)) e_client = ClientCreate(comms_win); gdkwin = gdk_window_foreign_new(comms_win); - gdk_window_add_filter(gdkwin, CommsFilter, NULL); - gdkwin2 = gdk_window_foreign_new(my_msg_win); - gdk_window_add_filter(gdkwin2, CommsFilter, NULL); gdk_window_set_events(gdkwin, GDK_STRUCTURE_MASK); + gdk_window_add_filter(gdkwin, FilterCommsWin, NULL); + + gdkwin = gdk_window_foreign_new(my_msg_win); + gdk_window_add_filter(gdkwin, FilterMyMsgWin, NULL); + msg_receive_callback = msg_receive_func; return 0;