From 1eece68489c3dfe05ec448fce8f7179074281224 Mon Sep 17 00:00:00 2001 From: Akira TAGOH <akira@tagoh.org> Date: Tue, 4 Sep 2012 14:03:14 +0900 Subject: [PATCH 1/2] Add the MATE-Desktop support --- README | 4 ++ backends/Makefile.am | 9 ++- backends/mateconf/Makefile.am | 47 +++++++++++++++ backends/mateconf/mateconf-module.c | 117 ++++++++++++++++++++++++++++++++++++ configure.ac | 25 ++++++-- data/xinput.sh.in.in | 8 +++ 6 files changed, 201 insertions(+), 9 deletions(-) create mode 100644 backends/mateconf/Makefile.am create mode 100644 backends/mateconf/mateconf-module.c diff --git a/README b/README index 34c4fb0..58248a0 100644 --- a/README +++ b/README @@ -49,6 +49,7 @@ Supported Toolkits ====================== * GTK+ * LXDE +* MATE * Qt * XFCE * X (with IMSettings XIM server; require libgxim) @@ -231,6 +232,9 @@ Backend modules * libimsettings-lxde.so: A LXDE backend to support LXDE Desktop. +* libimsettings-mateconf.so: + A mateconf backend to support MATE Desktop. + * libimsettings-qt.so: A Qt backend to support Qt applications. diff --git a/backends/Makefile.am b/backends/Makefile.am index 1b470b9..e60905c 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -7,15 +7,18 @@ endif if ENABLE_GSETTINGS SUBDIRS += gsettings endif +if ENABLE_LXDE +SUBDIRS += lxde +endif +if ENABLE_MATE +SUBDIRS += mateconf +endif if ENABLE_QT SUBDIRS += qt endif if ENABLE_XFCE SUBDIRS += xfce endif -if ENABLE_LXDE -SUBDIRS += lxde -endif if ENABLE_XIM SUBDIRS += xim endif diff --git a/backends/mateconf/Makefile.am b/backends/mateconf/Makefile.am new file mode 100644 index 0000000..670e8e7 --- /dev/null +++ b/backends/mateconf/Makefile.am @@ -0,0 +1,47 @@ +## +# Global definitions +NULL = +INCLUDES = \ + -DIMSETTINGS_LOCALEDIR="\"$(datadir)/locale\"" \ + -I$(top_srcdir)/imsettings \ + $(MATE_CFLAGS) \ + $(NULL) +LIBS = \ + @LDFLAGS@ \ + $(top_builddir)/imsettings/libimsettings.la \ + $(MATE_LIBS) \ + $(NULL) +EXTRA_DIST = \ + $(NULL) + + +## +# Local definitions + +## +# Local Rules + +## +# Target platform +imsettingsdir = $(IMSETTINGS_MODULEDIR) +imsettings_LTLIBRARIES = \ + libimsettings-mateconf.la \ + $(NULL) +# +libimsettings_mateconf_la_SOURCES = \ + mateconf-module.c \ + $(NULL) +libimsettings_mateconf_la_CFLAGS = \ + -DG_LOG_DOMAIN="\"IMSettings-MATE-Conf backend\"" \ + $(CFLAGS) \ + $(NULL) +libimsettings_mateconf_la_LDFLAGS = \ + -avoid-version \ + -module \ + $(LDFLAGS) \ + $(NULL) +libimsettings_mateconf_la_LIBADD = \ + $(LDADDS) \ + $(NULL) + +-include $(top_srcdir)/git.mk diff --git a/backends/mateconf/mateconf-module.c b/backends/mateconf/mateconf-module.c new file mode 100644 index 0000000..bbbde21 --- /dev/null +++ b/backends/mateconf/mateconf-module.c @@ -0,0 +1,117 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * mateconf-module.c + * Copyright (C) 2008-2012 Red Hat, Inc. All rights reserved. + * + * Authors: + * Akira TAGOH <tagoh@redhat.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <mateconf/mateconf-client.h> +#include "imsettings-info.h" +#include "imsettings-utils.h" + +#define MATECONF_SCHEMA_KEY "/desktop/mate/interface/gtk-im-module" + +void module_switch_im(IMSettingsInfo *info); +gchar *module_dump_im (void); + +/*< private >*/ + +/*< public >*/ +void +module_switch_im(IMSettingsInfo *info) +{ + MateConfEngine *engine; + MateConfValue *val = NULL; + const gchar *gtkimm = imsettings_info_get_gtkimm(info); + GError *err = NULL; + gchar *v = NULL; + + engine = mateconf_engine_get_default(); + if (!engine) { + g_warning("Unable to obtain MateConfEngine instance."); + return; + } + if (!gtkimm || gtkimm[0] == 0) { + g_warning("Invalid gtk immodule in: %s", + imsettings_info_get_filename(info)); + goto finalize; + } + +#ifdef ENABLE_FALLBACK_IM + v = g_strdup_printf("%s:xim", gtkimm); +#else + v = g_strdup(gtkimm); +#endif + val = mateconf_value_new_from_string(MATECONF_VALUE_STRING, + v, &err); + if (err) + goto error; + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, + "Setting up %s as gtk+ immodule", + v); + mateconf_engine_set(engine, MATECONF_SCHEMA_KEY, + val, &err); + if (err) { + error: + g_warning("%s", err->message); + g_error_free(err); + } + finalize: + g_free(v); + if (val) + mateconf_value_free(val); + if (engine) { + mateconf_engine_unref(engine); + } + g_print("%d\n", mateconf_debug_shutdown()); +} + +gchar * +module_dump_im(void) +{ + MateConfEngine *engine; + MateConfValue *val = NULL; + GError *err = NULL; + gchar *retval = NULL; + + engine = mateconf_engine_get_default(); + if (!engine) { + g_warning("Unable to obtain MateConfEngine instance."); + return NULL; + } + val = mateconf_engine_get(engine, MATECONF_SCHEMA_KEY, &err); + if (err) { + g_warning("%s", err->message); + g_error_free(err); + } else { + retval = g_strdup(mateconf_value_get_string(val)); + } + if (val) + mateconf_value_free(val); + if (engine) { + mateconf_engine_unref(engine); + } + g_print("%d\n", mateconf_debug_shutdown()); + + return retval; +} diff --git a/configure.ac b/configure.ac index e1b858e..9241dfc 100644 --- a/configure.ac +++ b/configure.ac @@ -112,6 +112,10 @@ PKG_CHECK_MODULES(GSETTINGS, gio-2.0 >= $GIO_REQUIRED, PKG_CHECK_MODULES(LXDE, glib-2.0, [use_lxde="yes"], [use_lxde="no"]) +# for mate backend +PKG_CHECK_MODULES(MATE, mateconf-2.0, + [use_mate="yes"], + [use_mate="no"]) # for xfce backend PKG_CHECK_MODULES(XFCE, libxfconf-0, [use_xfce="yes"], @@ -143,6 +147,8 @@ AC_SUBST(XFCE_CFLAGS) AC_SUBST(XFCE_LIBS) AC_SUBST(LXDE_CFLAGS) AC_SUBST(LXDE_LIBS) +AC_SUBST(MATE_CFLAGS) +AC_SUBST(MATE_LIBS) AC_SUBST(XIM_CFLAGS) AC_SUBST(XIM_LIBS) AC_SUBST(CHECK_CFLAGS) @@ -153,9 +159,10 @@ AC_SUBST(GTHREAD_LIBS) AM_CONDITIONAL(ENABLE_UNIT_TEST, test x$use_check != xno) AM_CONDITIONAL(ENABLE_GCONF, test x$use_gconf != xno) AM_CONDITIONAL(ENABLE_GSETTINGS, test x$use_gsettings != xno) +AM_CONDITIONAL(ENABLE_LXDE, test x$use_lxde != xno) +AM_CONDITIONAL(ENABLE_MATE, test x$use_mate != xno) AM_CONDITIONAL(ENABLE_QT, test x$use_qt != xno) AM_CONDITIONAL(ENABLE_XFCE, test x$use_xfce != xno) -AM_CONDITIONAL(ENABLE_LXDE, test x$use_lxde != xno) AM_CONDITIONAL(ENABLE_XIM, test x$use_xim != xno) dnl ====================================================================== @@ -306,6 +313,7 @@ AC_CONFIG_FILES([ backends/gconf/Makefile backends/gsettings/Makefile backends/lxde/Makefile + backends/mateconf/Makefile backends/qt/Makefile backends/xfce/Makefile backends/xim/Makefile @@ -343,6 +351,16 @@ if test "x$use_gconf" = "xyes"; then echo " CFLAGS: $GSETTINGS_CFLAGS" echo " LDFLAGS: $GSETTINGS_LIBS" fi +echo " MATE support: $use_mate" +if test "x$use_mate" = "xyes"; then + echo " CFLAGS: $MATE_CFLAGS" + echo " LDFLAGS: $MATE_LIBS" +fi +echo " LXDE support: $use_lxde" +if test "x$use_lxde" = "xyes"; then + echo " CFLAGS: $LXDE_CFLAGS" + echo " LDFLAGS: $LXDE_LIBS" +fi echo " Qt support: $use_qt" if test "x$use_qt" = "xyes"; then echo " CFLAGS: $GLIB_CFLAGS" @@ -353,11 +371,6 @@ if test "x$use_xfce" = "xyes"; then echo " CFLAGS: $XFCE_CFLAGS" echo " LDFLAGS: $XFCE_LIBS" fi -echo " LXDE support: $use_lxde" -if test "x$use_lxde" = "xyes"; then - echo " CFLAGS: $LXDE_CFLAGS" - echo " LDFLAGS: $LXDE_LIBS" -fi echo " XIM support: $use_xim" if test "x$use_xim" = "xyes"; then echo " CFLAGS: $XIM_CFLAGS" diff --git a/data/xinput.sh.in.in b/data/xinput.sh.in.in index 4f4baad..a402c26 100755 --- a/data/xinput.sh.in.in +++ b/data/xinput.sh.in.in @@ -56,6 +56,9 @@ function lookup_desktop() { lxsession*) echo "LXDE" ;; + mate*) + echo "mate" + ;; xfce*) echo "xfce" ;; @@ -105,6 +108,11 @@ function is_gtk_supported() { return 0 fi ;; + mate) + if check_imsettings_capability mateconf; then + return 0 + fi + ;; xfce*) if check_imsettings_capability xfce; then return 0 -- 1.7.11.7