#!/bin/sh
mkdir -p gtk3-im
cp -a gtk-im/Makefile gtk-im/config.h gtk-im/gtkimcontextgcin.c gtk-im/gtkimcontextgcin.h gtk-im/gtkintl.h gtk-im/imgcin.c gtk3-im/
exec patch -p1 < $0
--- a/gtk3-im/Makefile
+++ b/gtk3-im/Makefile
@@ -1,9 +1,11 @@
 include ../config.mak
 
 OBJS = imgcin.o gtkimcontextgcin.o
-GTK2IM=gtk-2.0/immodules
-IMMODULES=$(libdir)/$(GTK2IM)
-IMMODULES_LOCAL=/usr/$(LIB)/$(GTK2IM)
+GTK3IM=gtk-3.0/immodules
+GTKINC=`pkg-config --cflags gtk+-3.0`
+LDFLAGS=`pkg-config --libs gtk+-3.0`
+IMMODULES=$(libdir)/$(GTK3IM)
+IMMODULES_LOCAL=/usr/$(LIB)/$(GTK3IM)
 
 
 ifeq ($(MAC_OS),1)
@@ -37,7 +39,7 @@
 	if [ $(prefix) = /usr/local ]; then \
 		install -d $(IMMODULES_LOCAL); \
 		install -m 755 im-gcin.so $(IMMODULES_LOCAL); \
-		cd /etc/gtk-2.0; gtk-query-immodules-2.0 > gtk.immodules.lib; \
+		gtk-query-immodules-3.0 --update-cache; \
 	else \
 		install -d $(IMMODULES); \
 		install -m 755 im-gcin.so $(IMMODULES); \
--- a/gtk3-im/gtkimcontextgcin.c
+++ b/gtk3-im/gtkimcontextgcin.c
@@ -22,9 +22,7 @@
 #include <stdlib.h>
 
 //#include "gtkintl.h"
-#include "gtk/gtklabel.h"
-#include "gtk/gtksignal.h"
-#include "gtk/gtkwindow.h"
+#include <gtk/gtk.h>
 #include "gtkimcontextgcin.h"
 // #include "gcin.h"  // for debug only
 #include "gcin-im-client.h"
@@ -128,10 +126,10 @@
 get_im (GtkIMContextGCIN *context_xim)
 {
   GdkWindow *client_window = context_xim->client_window;
-  GdkScreen *screen = gdk_drawable_get_screen (client_window);
+  GdkScreen *screen = gdk_window_get_screen (client_window);
   GdkDisplay *display = gdk_screen_get_display (screen);
   if (!context_xim->gcin_ch) {
-    if (!(context_xim->gcin_ch = gcin_im_client_open(GDK_DISPLAY())))
+    if (!(context_xim->gcin_ch = gcin_im_client_open(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()))))
       perror("cannot open gcin_ch");
 #if 1
     context_xim->timeout_handle = 0;
@@ -239,7 +237,7 @@
   if (context_xim->client_window) {
     get_im (context_xim);
     if (context_xim->gcin_ch) {
-      gcin_im_client_set_window(context_xim->gcin_ch, GDK_DRAWABLE_XID(client_window));
+      gcin_im_client_set_window(context_xim->gcin_ch, GDK_WINDOW_XID(client_window));
     }
   }
 }
@@ -298,15 +296,15 @@
   KeySym keysym = 0;
   Status status;
   gboolean result = FALSE;
-  GdkWindow *root_window = gdk_screen_get_root_window (gdk_drawable_get_screen (event->window));
+  GdkWindow *root_window = gdk_screen_get_root_window (gdk_window_get_screen (event->window));
 
   XKeyPressedEvent xevent;
   xevent.type = (event->type == GDK_KEY_PRESS) ? KeyPress : KeyRelease;
   xevent.serial = 0;            /* hope it doesn't matter */
   xevent.send_event = event->send_event;
-  xevent.display = GDK_DRAWABLE_XDISPLAY (event->window);
-  xevent.window = GDK_DRAWABLE_XID (event->window);
-  xevent.root = GDK_DRAWABLE_XID (root_window);
+  xevent.display = GDK_WINDOW_XDISPLAY (event->window);
+  xevent.window = GDK_WINDOW_XID (event->window);
+  xevent.root = GDK_WINDOW_XID (root_window);
   xevent.subwindow = xevent.window;
   xevent.time = event->time;
   xevent.x = xevent.x_root = 0;
--- a/gtk3-im/gtkimcontextgcin.h
+++ b/gtk3-im/gtkimcontextgcin.h
@@ -20,7 +20,7 @@
 #ifndef __GTK_IM_CONTEXT_GCIN_H__
 #define __GTK_IM_CONTEXT_GCIN_H__
 
-#include <gtk/gtkimcontext.h>
+#include <gtk/gtk.h>
 #include "gdk/gdkx.h"
 
 #ifdef __cplusplus
@@ -31,7 +31,7 @@
 extern GType gtk_type_im_context_gcin;
 
 #define GTK_TYPE_IM_CONTEXT_GCIN              gtk_type_im_context_gcin
-#define GTK_IM_CONTEXT_GCIN(obj)              (GTK_CHECK_CAST ((obj), GTK_TYPE_IM_CONTEXT_GCIN, GtkIMContextGCIN))
+#define GTK_IM_CONTEXT_GCIN(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IM_CONTEXT_GCIN, GtkIMContextGCIN))
 #define GTK_IM_CONTEXT_GCIN_CLASS(klass)      (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_IM_CONTEXT_GCIN, GtkIMContextGCINClass))
 #define GTK_IS_IM_CONTEXT_GCIN(obj)           (GTK_CHECK_TYPE ((obj), GTK_TYPE_IM_CONTEXT_GCIN))
 #define GTK_IS_IM_CONTEXT_GCIN_CLASS(klass)   (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IM_CONTEXT_GCIN))
