diff options
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | configure.ac | 28 | ||||
-rw-r--r-- | im/Makefile.am | 1 | ||||
-rw-r--r-- | im/gtk3/Makefile.am | 29 | ||||
-rw-r--r-- | im/gtk3/caribou-im.c | 53 | ||||
-rw-r--r-- | im/gtk3/caribou-imcontext.vala | 51 |
7 files changed, 170 insertions, 3 deletions
@@ -20,27 +20,28 @@ po/Makefile.in.in po/POTFILES po/stamp-it *.gmo +*.la m4/intltool.m4 *.tar.gz data/*.desktop po/.intltool-merge-cache data/*.gschema.* depcomp -libcaribou/.deps/ +.deps/ caribou-enum-types.[ch] caribou-marshal.[ch] libtool ltmain.sh m4 -libcaribou/.libs/ +.libs/ libcaribou/*.gir libcaribou/*.typelib *.lo *.o -libcaribou/libcaribou.la libcaribou/*.[ch] caribou-1.0.vapi caribou-internals-1.0.vapi caribou-internals.h *.stamp data/org.gnome.Caribou.Antler.service +caribou-imcontext.[ch] diff --git a/Makefile.am b/Makefile.am index 8b57e28..5a1866e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,3 +1,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} SUBDIRS = caribou bin data po libcaribou + +if ENABLE_IM_MODULES +SUBDIRS += im +endif
\ No newline at end of file diff --git a/configure.ac b/configure.ac index d8d5af1..8babf66 100644 --- a/configure.ac +++ b/configure.ac @@ -57,6 +57,32 @@ AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The gettext package]) AM_GLIB_GNU_GETTEXT +dnl == IM modules == +AC_ARG_ENABLE(im_modules, + AS_HELP_STRING([--disable-im-modules], + [Do not build im modules]), + [enable_im_modules=$enableval], + [enable_im_modules=yes] +) +AM_CONDITIONAL([ENABLE_IM_MODULES], [test x"$enable_im_modules" = x"yes"]) + +if test x"$enable_im_modules" = x"yes"; then + PKG_CHECK_MODULES(GTK2, [ + gtk+-2.0 + ]) + PKG_CHECK_MODULES(GTK3, [ + gtk+-3.0 + ]) + gtk2_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0` + GTK2_IM_MODULEDIR="$libdir"/gtk-2.0/$gtk2_binary_version/immodules + AC_SUBST(GTK2_IM_MODULEDIR) + + gtk3_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0` + GTK3_IM_MODULEDIR="$libdir"/gtk-3.0/$gtk3_binary_version/immodules + AC_SUBST(GTK3_IM_MODULEDIR) +fi + +dnl == GSettings == GLIB_GSETTINGS dnl == intltool check == @@ -87,4 +113,6 @@ data/layouts/Makefile data/layouts/touch/Makefile data/layouts/scan/Makefile libcaribou/Makefile +im/Makefile +im/gtk3/Makefile ]) diff --git a/im/Makefile.am b/im/Makefile.am new file mode 100644 index 0000000..8c1607e --- /dev/null +++ b/im/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = gtk3 diff --git a/im/gtk3/Makefile.am b/im/gtk3/Makefile.am new file mode 100644 index 0000000..5f2780f --- /dev/null +++ b/im/gtk3/Makefile.am @@ -0,0 +1,29 @@ +immoduledir = @GTK3_IM_MODULEDIR@ +immodule_LTLIBRARIES = im-caribou.la + +im_caribou_la_SOURCES = \ + caribou-im.c \ + caribou-imcontext.vala \ + $(NULL) + +im_caribou_la_VALAFLAGS = \ + -h caribou-imcontext.h \ + --pkg gtk+-3.0 \ + $(VALAGLAFS) + +im_caribou_la_CFLAGS = \ + @GTK3_CFLAGS@ \ + -DG_LOG_DOMAIN=\"CARIBOU\" \ + $(NULL) + +im_caribou_la_LIBADD = \ + @GTK3_LIBS@ \ + $(NULL) + +im_caribou_la_LDFLAGS = \ + -avoid-version \ + -module \ + $(NULL) + +EXTRA_DIST = \ + $(NULL) diff --git a/im/gtk3/caribou-im.c b/im/gtk3/caribou-im.c new file mode 100644 index 0000000..24a3def --- /dev/null +++ b/im/gtk3/caribou-im.c @@ -0,0 +1,53 @@ +#include <gtk/gtk.h> +#include <gtk/gtkimmodule.h> +#include "caribou-imcontext.h" + +#define CARIBOU_LOCALDIR "" +static const GtkIMContextInfo caribou_im_info = { + "caribou", + "Caribou OSK helper module", + "caribou", + "", + "*" +}; + +static const GtkIMContextInfo *info_list[] = { + &caribou_im_info +}; + +G_MODULE_EXPORT const gchar* +g_module_check_init (GModule *module) +{ + return glib_check_version (GLIB_MAJOR_VERSION, + GLIB_MINOR_VERSION, + 0); +} + +G_MODULE_EXPORT void +im_module_init (GTypeModule *type_module) +{ + g_type_module_use (type_module); +} + +G_MODULE_EXPORT void +im_module_exit (void) +{ +} + +G_MODULE_EXPORT GtkIMContext * +im_module_create (const gchar *context_id) +{ + if (g_strcmp0 (context_id, "caribou") == 0) { + CaribouIMContext *context = caribou_im_context_new (); + return (GtkIMContext *) context; + } + return NULL; +} + +G_MODULE_EXPORT void +im_module_list (const GtkIMContextInfo ***contexts, + gint *n_contexts) +{ + *contexts = info_list; + *n_contexts = G_N_ELEMENTS (info_list); +} diff --git a/im/gtk3/caribou-imcontext.vala b/im/gtk3/caribou-imcontext.vala new file mode 100644 index 0000000..170b304 --- /dev/null +++ b/im/gtk3/caribou-imcontext.vala @@ -0,0 +1,51 @@ +namespace Caribou { + [DBus(name = "org.gnome.Caribou.Keyboard")] + interface Keyboard : Object { + public abstract void set_cursor_location (int x, int y, int w, int h) throws IOError; + public abstract void set_entry_location (int x, int y, int w, int h) throws IOError; + public abstract void show () throws IOError; + public abstract void hide () throws IOError; + } + + class IMContext : Gtk.IMContextSimple { + private Gdk.Window window; + private Keyboard keyboard; + + public IMContext () { + } + + public override void focus_in () { + int x, y; + window.get_origin (out x, out y); + stdout.printf ("focus_in %d %d\n", x, y); + try { + keyboard.show (); + keyboard.set_entry_location (x, y, + window.get_width (), + window.get_height ()); + } catch (IOError e) { + stderr.printf ("%s\n", e.message); + } + } + + public override void focus_out () { + try { + keyboard.hide (); + } catch (IOError e) { + stderr.printf ("%s\n", e.message); + } + } + + public override void set_client_window (Gdk.Window window) { + this.window = window; + try { + keyboard = Bus.get_proxy_sync (BusType.SESSION, + "org.gnome.Caribou.Antler", + "/org/gnome/Caribou/Antler"); + } catch (Error e) { + stderr.printf ("%s\n", e.message); + } + stdout.printf ("set_client_window\n"); + } + } +}
\ No newline at end of file |