diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index e69de29b..00000000 diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 8ff5e31e..00000000 --- a/Makefile.am +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = eek eekboard src tests bindings docs po data examples -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection -AUTOMAKE_OPTIONS = foreign # allow README.md to exist - - -GITIGNOREFILES = \ - INSTALL \ - aclocal.m4 \ - compile \ - config.guess \ - config.h.in \ - config.sub \ - depcomp \ - gtk-doc.make \ - install-sh \ - ltmain.sh \ - m4 \ - missing \ - mkinstalldirs \ - $(NULL) - --include $(top_srcdir)/git.mk diff --git a/NEWS b/NEWS deleted file mode 100644 index e69de29b..00000000 diff --git a/bindings/Makefile.am b/bindings/Makefile.am deleted file mode 100644 index b6305081..00000000 --- a/bindings/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -SUBDIRS = vala - --include $(top_srcdir)/git.mk diff --git a/bindings/vala/Makefile.am b/bindings/vala/Makefile.am deleted file mode 100644 index 1bbf564d..00000000 --- a/bindings/vala/Makefile.am +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -NULL = - -if ENABLE_VALA -vapidir = $(datadir)/vala/vapi -dist_vapi_DATA = \ - eek-$(EEK_API_VERSION).vapi \ - eek-$(EEK_API_VERSION).deps \ - eek-gtk-$(EEK_API_VERSION).vapi \ - eek-gtk-$(EEK_API_VERSION).deps \ - eek-xkl-$(EEK_API_VERSION).vapi \ - eek-xkl-$(EEK_API_VERSION).deps \ - $(NULL) - -EXTRA_DIST = \ - Eek-$(EEK_API_VERSION).metadata \ - EekGtk-$(EEK_API_VERSION).metadata \ - EekXkl-$(EEK_API_VERSION).metadata \ - $(NULL) - -GITIGNOREFILES = \ - eek-$(EEK_API_VERSION).vapi \ - eek-gtk-$(EEK_API_VERSION).vapi \ - eek-xkl-$(EEK_API_VERSION).vapi \ - $(NULL) - -maintainer-clean-local: - rm -f *.vapi - -eek_vapi_deps = \ - $(srcdir)/Eek-$(EEK_API_VERSION).metadata \ - | \ - $(top_builddir)/eek/Eek-$(EEK_API_VERSION).gir \ - $(NULL) - -eek-$(EEK_API_VERSION).vapi: $(eek_vapi_deps) - $(VAPIGEN_V)$(VAPIGEN) \ - --library eek-$(EEK_API_VERSION) \ - --pkg gio-2.0 \ - --metadatadir=$(srcdir) \ - $(top_builddir)/eek/Eek-$(EEK_API_VERSION).gir - -eek_gtk_vapi_deps = \ - $(srcdir)/EekGtk-$(EEK_API_VERSION).metadata \ - | \ - $(top_builddir)/eek/EekGtk-$(EEK_API_VERSION).gir \ - $(NULL) - -eek-gtk-$(EEK_API_VERSION).vapi: $(eek_gtk_vapi_deps) - $(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \ - --library eek-gtk-$(EEK_API_VERSION) \ - --pkg eek-$(EEK_API_VERSION) \ - --pkg gio-2.0 \ - --pkg gtk+-3.0 \ - --metadatadir=$(srcdir) \ - $(top_builddir)/eek/EekGtk-$(EEK_API_VERSION).gir - -eek_xkl_vapi_deps = \ - $(srcdir)/EekXkl-$(EEK_API_VERSION).metadata \ - | \ - $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir \ - $(NULL) - -eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps) - $(VAPIGEN_V)$(VAPIGEN) \ - --vapidir=$(builddir) \ - --library eek-xkl-$(EEK_API_VERSION) \ - --pkg eek-$(EEK_API_VERSION) \ - --pkg gio-2.0 \ - --metadatadir=$(srcdir) \ - $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir - -# set up the verbosity rules to avoid some build noise -VAPIGEN_V = $(VAPIGEN_V_$(V)) -VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY)) -VAPIGEN_V_0 = @echo " VAPIG " $@; -endif - --include $(top_srcdir)/git.mk diff --git a/configure.ac b/configure.ac deleted file mode 100644 index be57569d..00000000 --- a/configure.ac +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -AC_PREREQ(2.63) -dnl AC_CONFIG_SRCDIR([configure.ac]) -AC_CONFIG_MACRO_DIR([m4]) - -AC_INIT([eekboard], [1.0.8], [ueno@unixuser.org]) - -dnl Init automake -AM_INIT_AUTOMAKE -AM_MAINTAINER_MODE([enable]) -AC_GNU_SOURCE - -dnl Support silent build -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) - -dnl Check for programs -AC_PROG_CC -AM_PROG_CC_C_O -AC_PROG_CC_STDC -AC_PROG_INSTALL -AC_PROG_CXX - -# define PACKAGE_VERSION_* variables -AM_DISABLE_STATIC -AC_ISC_POSIX -AC_HEADER_STDC -LT_INIT -IT_PROG_INTLTOOL([0.35.0]) - -GTK_API_VERSION=3.0 -GTK_REQUIRED=2.91.0 -EEK_API_VERSION=0.90 -EEK_API_MAJOR_VERSION=0 -EEK_API_MINOR_VERSION=90 -EEK_API_PC_VERSION=0.90 -EEK_LIBRARY_SUFFIX="-$EEK_API_VERSION" - -AC_SUBST([GTK_API_VERSION]) -AC_SUBST([EEK_API_VERSION]) -AC_SUBST([EEK_API_MAJOR_VERSION]) -AC_SUBST([EEK_API_MINOR_VERSION]) -AC_SUBST([EEK_API_PC_VERSION]) -AC_SUBST([EEK_LIBRARY_SUFFIX]) -AC_SUBST([EEK_LIBRARY_SUFFIX_U],[AS_TR_SH([$EEK_LIBRARY_SUFFIX])]) - -AM_PATH_GLIB_2_0 -PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.26.0], , - [AC_MSG_ERROR([GLib2 not found])]) -PKG_CHECK_MODULES([GIO2], [gio-2.0], , - [AC_MSG_ERROR([Gio2 not found])]) -GLIB_GSETTINGS - -PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo], , - [AC_MSG_ERROR([PangoCairo not found])]) -PKG_CHECK_MODULES([GTK], [ - gtk+-$GTK_API_VERSION >= $GTK_REQUIRED - gdk-$GTK_API_VERSION >= $GTK_REQUIRED], , - [AC_MSG_ERROR([GTK not found])]) -PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier x11], , - [AC_MSG_ERROR([Libxklavier not found])]) -PKG_CHECK_MODULES([LIBCROCO], [libcroco-0.6], , - [AC_MSG_ERROR([libcroco not found])]) - -dnl use XTest to generate key events -AC_MSG_CHECKING([whether you enable XTest]) -AC_ARG_ENABLE(xtest, - AS_HELP_STRING([--enable-xtest=no/yes], - [Enable XTest default=yes]), - enable_xtest=$enableval, - enable_xtest=yes) - -if test x$enable_xtest = xyes; then - PKG_CHECK_MODULES([XTEST], [xtst], , enable_xtest=no) - if test x$enable_xtest = xyes; then - AC_DEFINE([HAVE_XTEST], [1], [Define if XTest is found]) - fi -fi -AM_CONDITIONAL(ENABLE_XTEST, [test x$enable_xtest = xyes]) -AC_MSG_RESULT($enable_xtest) - -dnl use X to mark the fullscreen window as dock -AC_MSG_CHECKING([whether you enable X dock]) -AC_ARG_ENABLE(x-dock, - AS_HELP_STRING([--enable-x-dock=no/yes], - [Enable X dock default=yes]), - enable_x_dock=$enableval, - enable_x_dock=yes) - -if test x$enable_x_dock = xyes; then - PKG_CHECK_MODULES([XDOCK], [x11], , enable_x_dock=no) - if test x$enable_x_dock = xyes; then - AC_DEFINE([HAVE_XDOCK], [1], [Define if X dock is found]) - fi -fi -AM_CONDITIONAL(ENABLE_XDOCK, [test x$enable_x_dock = xyes]) -AC_MSG_RESULT($enable_x_dock) - -focus_listeners="ibus" -keystroke_listeners="" - -dnl use AT-SPI 2 to capture focus/keystroke events -AC_MSG_CHECKING([whether you enable AT-SPI 2 event handling]) -AC_ARG_ENABLE(atspi, - AS_HELP_STRING([--enable-atspi=no/yes], - [Enable AT-SPI 2 event handling default=yes]), - enable_atspi=$enableval, - enable_atspi=yes) - -if test x$enable_atspi = xyes; then - PKG_CHECK_MODULES([ATSPI2], [atspi-2], , enable_atspi=no) - if test x$enable_atspi = xyes; then - AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found]) - focus_listeners="atspi $focus_listeners" - keystroke_listeners="atspi $keystroke_listeners" - fi -fi -AC_MSG_RESULT($enable_atspi) -AM_CONDITIONAL(ENABLE_ATSPI, [test x$enable_atspi = xyes]) - -if test -n "$focus_listeners"; then - AC_DEFINE(ENABLE_FOCUS_LISTENER, [1], [Define if eekboard can follow focus changes]) -fi - -GOBJECT_INTROSPECTION_CHECK([0.9.0]) - -dnl Vala langauge binding -AC_MSG_CHECKING([whether you enable Vala language support]) -AC_ARG_ENABLE(vala, - AS_HELP_STRING([--enable-vala=no/yes], - [Enable Vala language binding default=yes]), - enable_vala=$enableval, - enable_vala=yes) -if test x$enable_vala = xyes; then - if test "x$INTROSPECTION_SCANNER" = x; then - enable_vala=no - AC_MSG_WARN([GObject-Introspection must be enabled for Vala bindings]) - fi - - AM_PROG_VALAC([0.10.0]) - have_vala=yes - - AC_PATH_PROG(VALAC, valac, valac) - AC_SUBST(VALAC) - AC_SUBST(VALAFLAGS) - - AC_PATH_PROG([VAPIGEN], [vapigen], [false]) - - if test "x$VAPIGEN" = "xfalse"; then - enable_vala=no - AC_MSG_WARN([vapigen not found. Was vala compiled with --enable-vapigen?]) - fi - - AC_SUBST(VAPIGEN) -fi -AC_MSG_RESULT($enable_vala) -AM_CONDITIONAL(ENABLE_VALA, [test x$enable_vala = xyes]) - -dnl libcanberra -AC_MSG_CHECKING([whether you enable libcanberra]) -AC_ARG_ENABLE(libcanberra, - AS_HELP_STRING([--enable-libcanberra=no/yes], - [Enable libcanberra user interface default=no]), - enable_libcanberra=$enableval, - enable_libcanberra=yes) - -if test x$enable_libcanberra = xyes; then - PKG_CHECK_MODULES([LIBCANBERRA], [libcanberra-gtk3], , enable_libcanberra=no) - if test x$enable_libcanberra = xyes; then - AC_DEFINE([HAVE_LIBCANBERRA], [1], [Define if libcanberra is found]) - fi -fi -AM_CONDITIONAL(ENABLE_LIBCANBERRA, [test x$enable_libcanberra = xyes]) -AC_MSG_RESULT($enable_libcanberra) - -GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) - -dnl define GETTEXT_* variables -GETTEXT_PACKAGE=$PACKAGE -AC_SUBST(GETTEXT_PACKAGE) -AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only architecture-independent data directory.]) -AM_GLIB_GNU_GETTEXT -AM_GLIB_DEFINE_LOCALEDIR(EEKBOARD_LOCALEDIR) - -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_FILES([Makefile -eek/Makefile -eekboard/Makefile -src/Makefile -tests/Makefile -bindings/Makefile -bindings/vala/Makefile -docs/Makefile -docs/reference/Makefile -docs/reference/eek/Makefile -docs/reference/eekboard/Makefile -po/Makefile.in -data/Makefile -data/icons/Makefile -data/icons/16x16/Makefile -data/icons/22x22/Makefile -data/icons/24x24/Makefile -data/icons/32x32/Makefile -data/icons/48x48/Makefile -data/icons/scalable/Makefile -data/themes/Makefile -data/keyboards/Makefile -examples/Makefile -examples/simple-client/Makefile -eek/eek-${EEK_API_VERSION}.pc -eek/eek-gtk-${EEK_API_VERSION}.pc -eek/eek-xkl-${EEK_API_VERSION}.pc -eekboard/eekboard-${EEK_API_VERSION}.pc]) -AC_OUTPUT -AC_MSG_RESULT([ -Build options: - Version $VERSION - Install prefix $prefix - Build shared libs $enable_shared - Build static libs $enable_static - CFLAGS $CFLAGS - Build Vala binding $enable_vala - Sound support $enable_libcanberra - Build document $enable_gtk_doc - Focus listeners $focus_listeners - Keystroke listeners $keystroke_listeners -]) - - diff --git a/data/Makefile.am b/data/Makefile.am deleted file mode 100644 index 03712c8c..00000000 --- a/data/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -SUBDIRS = icons themes keyboards - -@GSETTINGS_RULES@ -@INTLTOOL_XML_NOMERGE_RULE@ -gsettings_schemas_in_files = org.fedorahosted.eekboard.gschema.xml.in -gsettings_SCHEMAS = $(gsettings_schemas_in_files:.gschema.xml.in=.gschema.xml) - -servicedir = $(datadir)/dbus-1/services -service_in_files = eekboard-server.service.in -service_DATA = $(service_in_files:.service.in=.service) - -$(service_DATA): $(service_in_files) Makefile - $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@ - -desktopdir = $(datadir)/applications -desktop_in_files = eekboard.desktop.in -desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) - -if ENABLE_ATSPI -autostartdir = $(sysconfdir)/xdg/autostart -autostart_in_files = eekboard-autostart.desktop.in -autostart_DATA = $(autostart_in_files:.desktop.in=.desktop) -endif - -@INTLTOOL_DESKTOP_RULE@ - -CLEANFILES = $(service_DATA) $(desktop_DATA) $(gsettings_SCHEMAS) -EXTRA_DIST = $(service_in_files) $(desktop_in_files) $(gsettings_schemas_in_files) - -if ENABLE_ATSPI -CLEANFILES += $(autostart_DATA) -EXTRA_DIST += $(autostart_in_files) -endif - --include $(top_srcdir)/git.mk diff --git a/data/icons/16x16/Makefile.am b/data/icons/16x16/Makefile.am deleted file mode 100644 index 524bdceb..00000000 --- a/data/icons/16x16/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -size = 16x16 - -icondir = $(datadir)/icons/hicolor/$(size)/apps -dist_icon_DATA = eekboard.png - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/16x16/eekboard.png b/data/icons/16x16/eekboard.png deleted file mode 100644 index 1a30f4de..00000000 Binary files a/data/icons/16x16/eekboard.png and /dev/null differ diff --git a/data/icons/22x22/Makefile.am b/data/icons/22x22/Makefile.am deleted file mode 100644 index 0e18c13d..00000000 --- a/data/icons/22x22/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -size = 22x22 - -icondir = $(datadir)/icons/hicolor/$(size)/apps -dist_icon_DATA = eekboard.png - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/22x22/eekboard.png b/data/icons/22x22/eekboard.png deleted file mode 100644 index cb703323..00000000 Binary files a/data/icons/22x22/eekboard.png and /dev/null differ diff --git a/data/icons/24x24/Makefile.am b/data/icons/24x24/Makefile.am deleted file mode 100644 index 1e9f3cc0..00000000 --- a/data/icons/24x24/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -size = 24x24 - -icondir = $(datadir)/icons/hicolor/$(size)/apps -dist_icon_DATA = eekboard.png - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/24x24/eekboard.png b/data/icons/24x24/eekboard.png deleted file mode 100644 index 01078fcf..00000000 Binary files a/data/icons/24x24/eekboard.png and /dev/null differ diff --git a/data/icons/32x32/Makefile.am b/data/icons/32x32/Makefile.am deleted file mode 100644 index 26ddf91a..00000000 --- a/data/icons/32x32/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -size = 32x32 - -icondir = $(datadir)/icons/hicolor/$(size)/apps -dist_icon_DATA = eekboard.png - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/32x32/eekboard.png b/data/icons/32x32/eekboard.png deleted file mode 100644 index 69ef6662..00000000 Binary files a/data/icons/32x32/eekboard.png and /dev/null differ diff --git a/data/icons/48x48/Makefile.am b/data/icons/48x48/Makefile.am deleted file mode 100644 index f0098267..00000000 --- a/data/icons/48x48/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -size = 48x48 - -icondir = $(datadir)/icons/hicolor/$(size)/apps -dist_icon_DATA = eekboard.png - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/48x48/eekboard.png b/data/icons/48x48/eekboard.png deleted file mode 100644 index dbfe8fb5..00000000 Binary files a/data/icons/48x48/eekboard.png and /dev/null differ diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am deleted file mode 100644 index 014b2e4a..00000000 --- a/data/icons/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable - --include $(top_srcdir)/git.mk diff --git a/data/icons/scalable/Makefile.am b/data/icons/scalable/Makefile.am deleted file mode 100644 index ebd0c67e..00000000 --- a/data/icons/scalable/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -icondir = $(datadir)/icons/hicolor/scalable/apps -dist_icon_DATA = eekboard.svg - -gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor - -install-data-hook: - @-if test -z "$(DESTDIR)"; then \ - echo "Updating Gtk icon cache."; \ - $(gtk_update_icon_cache); \ - else \ - echo "*** Icon cache not updated. After install, run this:"; \ - echo "*** $(gtk_update_icon_cache)"; \ - fi - --include $(top_srcdir)/git.mk diff --git a/data/icons/scalable/eekboard.svg b/data/icons/scalable/eekboard.svg deleted file mode 100644 index 307d2168..00000000 --- a/data/icons/scalable/eekboard.svg +++ /dev/null @@ -1,3486 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/keyboards/Makefile.am b/data/keyboards/Makefile.am deleted file mode 100644 index 42daafc5..00000000 --- a/data/keyboards/Makefile.am +++ /dev/null @@ -1,40 +0,0 @@ -keyboardsdir = $(pkgdatadir)/keyboards - -nobase_dist_keyboards_DATA = \ - keyboards.xml \ - geometry/compact.xml \ - symbols/ar.xml \ - symbols/be.xml \ - symbols/fa.xml \ - symbols/he.xml \ - symbols/ja-kana.xml \ - symbols/kk.xml \ - symbols/ks.xml \ - symbols/my.xml \ - symbols/ru.xml \ - symbols/th.xml \ - symbols/ua.xml \ - symbols/ug.xml \ - symbols/us.xml \ - symbols/zh-bopomofo.xml \ - $(inscript_symbols) \ - $(NULL) - -inscript_symbols = \ - symbols/as-inscript.xml \ - symbols/bn-inscript.xml \ - symbols/gu-inscript.xml \ - symbols/hi-inscript.xml \ - symbols/kn-inscript.xml \ - symbols/ks-inscript.xml \ - symbols/mai-inscript.xml \ - symbols/ml-inscript.xml \ - symbols/mr-inscript.xml \ - symbols/or-inscript.xml \ - symbols/pa-inscript.xml \ - symbols/sd-inscript.xml \ - symbols/ta-inscript.xml \ - symbols/te-inscript.xml \ - $(NULL) - --include $(top_srcdir)/git.mk diff --git a/data/keyboards/geometry/compact.xml b/data/keyboards/geometry/compact.xml index c30831f3..f40c8a95 100644 --- a/data/keyboards/geometry/compact.xml +++ b/data/keyboards/geometry/compact.xml @@ -1,6 +1,6 @@ - +
diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am deleted file mode 100644 index 7d67e703..00000000 --- a/data/themes/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -themedir = $(pkgdatadir)/themes -dist_theme_DATA = default.css - --include $(top_srcdir)/git.mk diff --git a/docs/Makefile.am b/docs/Makefile.am deleted file mode 100644 index 4a0459ba..00000000 --- a/docs/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -SUBDIRS = reference - --include $(top_srcdir)/git.mk diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am deleted file mode 100644 index d3974618..00000000 --- a/docs/reference/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -SUBDIRS = eek eekboard - --include $(top_srcdir)/git.mk diff --git a/docs/reference/eek/Makefile.am b/docs/reference/eek/Makefile.am deleted file mode 100644 index e287c2a0..00000000 --- a/docs/reference/eek/Makefile.am +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -## Process this file with automake to produce Makefile.in - -# We require automake 1.6 at least. -AUTOMAKE_OPTIONS = 1.6 - -# This is a blank Makefile.am for using gtk-doc. -# Copy this to your project's API docs directory and modify the variables to -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples -# of using the various options. - -# The name of the module, e.g. 'glib'. -DOC_MODULE=eek - -# Uncomment for versioned docs and specify the version of the module, e.g. '2'. -#DOC_MODULE_VERSION=2 - - -# The top-level SGML file. You can change this if you want to. -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml - -# The directory containing the source code. Relative to $(srcdir). -# gtk-doc will search all .c & .h files beneath here for inline comments -# documenting the functions and macros. -# e.g. DOC_SOURCE_DIR=../../../gtk -DOC_SOURCE_DIR=../../../eek - -# Extra options to pass to gtkdoc-scangobj. Not normally needed. -SCANGOBJ_OPTIONS= - -# Extra options to supply to gtkdoc-scan. -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" -SCAN_OPTIONS=--rebuild-types --deprecated-guards="EEK_DISABLE_DEPRECATED" - -# Extra options to supply to gtkdoc-mkdb. -# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml -MKDB_OPTIONS=--sgml-mode --output-format=xml - -# Extra options to supply to gtkdoc-mktmpl -# e.g. MKTMPL_OPTIONS=--only-section-tmpl -MKTMPL_OPTIONS= - -# Extra options to supply to gtkdoc-mkhtml -MKHTML_OPTIONS= - -# Extra options to supply to gtkdoc-fixref. Not normally needed. -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html -FIXXREF_OPTIONS= - -# Used for dependencies. The docs will be rebuilt if any of these change. -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c -HFILE_GLOB=$(top_srcdir)/eek/*.h -CFILE_GLOB=$(top_srcdir)/eek/*.c - -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h -EXTRA_HFILES= - -# Header files to ignore when scanning. Use base file name, no paths -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h -IGNORE_HFILES = \ - config.h \ - eek-renderer.h \ - eek-gtk-renderer.h \ - eek-theme.h \ - eek-theme-node.h \ - eek-enumtypes.h - -# Images to copy into HTML directory. -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png -HTML_IMAGES= - -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml -content_files=eek-overview.xml - -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded -# These files must be listed here *and* in content_files -# e.g. expand_content_files=running.sgml -expand_content_files=eek-overview.xml - -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. -# Only needed if you are using gtkdoc-scangobj to dynamically query widget -# signals and properties. -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) -GTKDOC_CFLAGS = $(GIO2_CFLAGS) -GTKDOC_LIBS = $(top_builddir)/eek/libeek.la \ - $(top_builddir)/eek/libeek-gtk.la \ - $(top_builddir)/eek/libeek-xkl.la \ - $(GIO2_LIBS) \ - $(GTK_LIBS) \ - $(LIBXKLAVIER_LIBS) - -# This includes the standard gtk-doc make rules, copied by gtkdocize. -include $(top_srcdir)/gtk-doc.make - -# Other files to distribute -# e.g. EXTRA_DIST += version.xml.in -EXTRA_DIST += - -# Files not to distribute -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt -#DISTCLEANFILES += - -# Comment this out if you want your docs-status tested during 'make check' -if ENABLE_GTK_DOC -#TESTS_ENVIRONMENT = cd $(srcsrc) && -#TESTS = $(GTKDOC_CHECK) -endif - --include $(top_srcdir)/gtk-doc.mk - --include $(top_srcdir)/git.mk diff --git a/docs/reference/eekboard/Makefile.am b/docs/reference/eekboard/Makefile.am deleted file mode 100644 index 4b3b6f89..00000000 --- a/docs/reference/eekboard/Makefile.am +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -## Process this file with automake to produce Makefile.in - -# We require automake 1.6 at least. -AUTOMAKE_OPTIONS = 1.6 - -# This is a blank Makefile.am for using gtk-doc. -# Copy this to your project's API docs directory and modify the variables to -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples -# of using the various options. - -# The name of the module, e.g. 'glib'. -DOC_MODULE=eekboard - -# Uncomment for versioned docs and specify the version of the module, e.g. '2'. -#DOC_MODULE_VERSION=2 - - -# The top-level SGML file. You can change this if you want to. -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml - -# The directory containing the source code. Relative to $(srcdir). -# gtk-doc will search all .c & .h files beneath here for inline comments -# documenting the functions and macros. -# e.g. DOC_SOURCE_DIR=../../../gtk -DOC_SOURCE_DIR=../../../eekboard - -# Extra options to pass to gtkdoc-scangobj. Not normally needed. -SCANGOBJ_OPTIONS= - -# Extra options to supply to gtkdoc-scan. -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" -SCAN_OPTIONS= - -# Extra options to supply to gtkdoc-mkdb. -# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml -MKDB_OPTIONS=--sgml-mode --output-format=xml - -# Extra options to supply to gtkdoc-mktmpl -# e.g. MKTMPL_OPTIONS=--only-section-tmpl -MKTMPL_OPTIONS= - -# Extra options to supply to gtkdoc-mkhtml -MKHTML_OPTIONS= - -# Extra options to supply to gtkdoc-fixref. Not normally needed. -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html -FIXXREF_OPTIONS= - -# Used for dependencies. The docs will be rebuilt if any of these change. -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c -HFILE_GLOB=$(top_srcdir)/eekboard/*.h -CFILE_GLOB=$(top_srcdir)/eekboard/*.c - -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h -EXTRA_HFILES= - -# Header files to ignore when scanning. Use base file name, no paths -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h -IGNORE_HFILES=config.h eekboard.h - -# Images to copy into HTML directory. -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png -HTML_IMAGES= - -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml -# content_files=eekboard-overview.xml - -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded -# These files must be listed here *and* in content_files -# e.g. expand_content_files=running.sgml -# expand_content_files=eekboard-overview.xml - -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. -# Only needed if you are using gtkdoc-scangobj to dynamically query widget -# signals and properties. -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) -GTKDOC_CFLAGS = $(GIO2_CFLAGS) -GTKDOC_LIBS = $(top_builddir)/eekboard/libeekboard.la $(GIO2_LIBS) - -# This includes the standard gtk-doc make rules, copied by gtkdocize. -include $(top_srcdir)/gtk-doc.make - -# Other files to distribute -# e.g. EXTRA_DIST += version.xml.in -# EXTRA_DIST += - -# Files not to distribute -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt -#DISTCLEANFILES += - -# Comment this out if you want your docs-status tested during 'make check' -if ENABLE_GTK_DOC -#TESTS_ENVIRONMENT = cd $(srcsrc) && -#TESTS = $(GTKDOC_CHECK) -endif - --include $(top_srcdir)/gtk-doc.mk - --include $(top_srcdir)/git.mk diff --git a/eek/Makefile.am b/eek/Makefile.am deleted file mode 100644 index 057804ac..00000000 --- a/eek/Makefile.am +++ /dev/null @@ -1,298 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -NULL = - -lib_LTLIBRARIES = \ - libeek.la \ - libeek-gtk.la \ - libeek-xkl.la \ - $(NULL) - -libeek_public_headers = \ - $(srcdir)/eek-layout.h \ - $(srcdir)/eek-element.h \ - $(srcdir)/eek-container.h \ - $(srcdir)/eek-keyboard.h \ - $(srcdir)/eek-section.h \ - $(srcdir)/eek-key.h \ - $(srcdir)/eek-symbol.h \ - $(srcdir)/eek-keysym.h \ - $(srcdir)/eek-text.h \ - $(srcdir)/eek-symbol-matrix.h \ - $(srcdir)/eek-types.h \ - $(srcdir)/eek-xml.h \ - $(srcdir)/eek-xml-layout.h \ - $(srcdir)/eek-serializable.h \ - $(srcdir)/eek-theme.h \ - $(srcdir)/eek.h \ - $(NULL) - -libeek_private_headers = \ - $(srcdir)/eek-renderer.h \ - $(libeek_keysym_headers) \ - $(builddir)/eek-marshalers.h \ - $(srcdir)/eek-theme-context.h \ - $(srcdir)/eek-theme-private.h \ - $(srcdir)/eek-theme-node.h \ - $(NULL) - -libeek_sources = \ - $(srcdir)/eek.c \ - $(srcdir)/eek-layout.c \ - $(srcdir)/eek-element.c \ - $(srcdir)/eek-container.c \ - $(srcdir)/eek-keyboard.c \ - $(srcdir)/eek-section.c \ - $(srcdir)/eek-key.c \ - $(srcdir)/eek-symbol-matrix.c \ - $(srcdir)/eek-symbol.c \ - $(srcdir)/eek-keysym.c \ - $(srcdir)/eek-text.c \ - $(srcdir)/eek-types.c \ - $(srcdir)/eek-serializable.c \ - $(srcdir)/eek-xml.c \ - $(srcdir)/eek-xml-layout.c \ - $(srcdir)/eek-renderer.c \ - $(srcdir)/eek-keyboard-drawing.c \ - $(srcdir)/eek-theme.c \ - $(srcdir)/eek-theme-context.c \ - $(srcdir)/eek-theme-node.c \ - $(NULL) - -libeek_keysym_headers = \ - $(builddir)/eek-special-keysym-entries.h \ - $(builddir)/eek-unicode-keysym-entries.h \ - $(builddir)/eek-xkeysym-keysym-entries.h \ - $(NULL) - -libeek_enumtypes_sources = \ - $(builddir)/eek-enumtypes.c \ - $(builddir)/eek-enumtypes.h \ - $(NULL) - -libeek_marshalers_sources = \ - $(builddir)/eek-marshalers.c \ - $(builddir)/eek-marshalers.h \ - $(NULL) - -BUILT_SOURCES = \ - $(libeek_keysym_headers) \ - $(libeek_enumtypes_sources) \ - $(libeek_marshalers_sources) \ - $(NULL) - -libeek_la_SOURCES = \ - $(libeek_sources) \ - $(builddir)/eek-enumtypes.c \ - $(builddir)/eek-marshalers.c \ - $(NULL) - -libeek_la_CFLAGS = \ - -DEEK_COMPILATION=1 \ - -DKEYBOARDSDIR=\"$(pkgdatadir)/keyboards\" \ - $(GIO2_CFLAGS) \ - $(PANGOCAIRO_CFLAGS) \ - $(LIBCROCO_CFLAGS) \ - $(NULL) - -libeek_la_LIBADD = \ - $(GIO2_LIBS) \ - $(PANGOCAIRO_LIBS) \ - $(LIBCROCO_LIBS) \ - -lm \ - $(NULL) - -libeek_gtk_public_headers = \ - $(srcdir)/eek-gtk-keyboard.h \ - $(srcdir)/eek-gtk.h \ - $(NULL) -libeek_gtk_private_headers = \ - $(srcdir)/eek-gtk-renderer.h \ - $(NULL) -libeek_gtk_sources = \ - $(srcdir)/eek-gtk-keyboard.c \ - $(srcdir)/eek-gtk-renderer.c \ - $(NULL) - -libeek_gtk_la_SOURCES = $(libeek_gtk_sources) -libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS) $(LIBCANBERRA_CFLAGS) -libeek_gtk_la_LIBADD = libeek.la $(GTK_LIBS) $(LIBCANBERRA_LIBS) - -libeek_xkl_public_headers = \ - $(srcdir)/eek-xkl-layout.h \ - $(srcdir)/eek-xkl.h \ - $(srcdir)/eek-xkb-layout.h \ - $(srcdir)/eek-xkb.h \ - $(NULL) - -libeek_xkl_sources = \ - $(srcdir)/eek-xkb-layout.c \ - $(srcdir)/eek-xkl-layout.c \ - $(NULL) - -libeek_xkl_la_SOURCES = $(libeek_xkl_sources) -libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS) -libeek_xkl_la_LIBADD = libeek.la $(LIBXKLAVIER_LIBS) - -eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek -eek_HEADERS = \ - $(libeek_public_headers) \ - $(builddir)/eek-enumtypes.h \ - $(libeek_gtk_public_headers) \ - $(libeek_xkl_public_headers) \ - $(NULL) - -noinst_HEADERS = \ - $(libeek_private_headers) \ - $(libeek_gtk_private_headers) \ - $(libeek_xkl_private_headers) \ - $(NULL) - -eek-special-keysym-entries.h: special-keysym-entries.txt - $(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \ - special_keysym_entries \ - < $< > $@ -eek-unicode-keysym-entries.h: unicode-keysym-entries.txt - $(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \ - unicode_keysym_entries \ - < $< > $@ -eek-xkeysym-keysym-entries.h: xkeysym-keysym-entries.txt - $(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \ - xkeysym_keysym_entries \ - < $< > $@ - -eek-enumtypes.h: $(libeek_public_headers) eek-enumtypes.h.template - $(AM_V_GEN) $(GLIB_MKENUMS) \ - --template $(srcdir)/eek-enumtypes.h.template \ - $(libeek_public_headers) > eek-enumtypes.h.tmp && \ - mv eek-enumtypes.h.tmp eek-enumtypes.h - -eek-enumtypes.c: $(libeek_public_headers) eek-enumtypes.c.template - $(AM_V_GEN) $(GLIB_MKENUMS) \ - --template $(srcdir)/eek-enumtypes.c.template \ - $(libeek_public_headers) > eek-enumtypes.c.tmp && \ - mv eek-enumtypes.c.tmp eek-enumtypes.c - -# gen marshal -eek-marshalers.h: eek-marshalers.list - $(AM_V_GEN) $(GLIB_GENMARSHAL) \ - --prefix=_eek_marshal $(srcdir)/eek-marshalers.list \ - --header --internal > $@.tmp && \ - mv $@.tmp $@ - -eek-marshalers.c: eek-marshalers.list eek-marshalers.h - $(AM_V_GEN) (echo "#include \"eek-marshalers.h\""; \ - $(GLIB_GENMARSHAL) --prefix=_eek_marshal \ - $(srcdir)/eek-marshalers.list --body --internal) > $@.tmp && \ - mv $@.tmp $@ - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = \ - eek-$(EEK_API_VERSION).pc \ - eek-gtk-$(EEK_API_VERSION).pc \ - eek-xkl-$(EEK_API_VERSION).pc \ - $(NULL) - -CLEANFILES = - -DISTCLEANFILES = \ - $(BUILT_SOURCES) \ - $(pkgconfig_DATA) \ - $(NULL) - -EXTRA_DIST = \ - gen-keysym-entries.py \ - special-keysym-entries.txt \ - unicode-keysym-entries.txt \ - xkeysym-keysym-entries.txt \ - eek-enumtypes.h.template \ - eek-enumtypes.c.template \ - eek-marshalers.list \ - $(NULL) - --include $(INTROSPECTION_MAKEFILE) -INTROSPECTION_GIRS = -INTROSPECTION_SCANNER_ARGS = --add-include-path=$(builddir) -INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) - -if HAVE_INTROSPECTION - -Eek@EEK_LIBRARY_SUFFIX@.gir: libeek.la -Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = \ - --identifier-prefix=Eek \ - --symbol-prefix=eek \ - --pkg=glib-2.0 \ - --pkg-export=eek-$(EEK_API_VERSION) \ - $(NULL) -Eek@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GLib-2.0 GObject-2.0 Gio-2.0 -Eek@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_la_CFLAGS) -Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la -Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \ - $(libeek_sources) \ - $(libeek_public_headers) \ - $(builddir)/eek-enumtypes.h \ - $(NULL) - -EekGtk@EEK_LIBRARY_SUFFIX@.gir: libeek-gtk.la Eek@EEK_LIBRARY_SUFFIX@.gir -EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = \ - --identifier-prefix=Eek \ - --symbol-prefix=eek \ - --pkg-export=eek-gtk-$(EEK_API_VERSION) \ - $(NULL) -EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = \ - GObject-2.0 \ - Gtk-@GTK_API_VERSION@ \ - Eek@EEK_LIBRARY_SUFFIX@ \ - $(NULL) -EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_gtk_la_CFLAGS) -EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-gtk.la -EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \ - $(libeek_gtk_sources) \ - $(libeek_gtk_public_headers) \ - $(NULL) - -EekXkl@EEK_LIBRARY_SUFFIX@.gir: libeek-xkl.la Eek@EEK_LIBRARY_SUFFIX@.gir -EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = \ - --identifier-prefix=Eek \ - --symbol-prefix=eek \ - $(NULL) -EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Eek@EEK_LIBRARY_SUFFIX@ -EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_xkl_la_CFLAGS) -EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-xkl.la -EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \ - $(libeek_xkl_sources) \ - $(libeek_xkl_public_headers) \ - $(NULL) - -INTROSPECTION_GIRS += \ - Eek@EEK_LIBRARY_SUFFIX@.gir \ - EekGtk@EEK_LIBRARY_SUFFIX@.gir \ - EekXkl@EEK_LIBRARY_SUFFIX@.gir \ - $(NULL) - -girdir = $(datadir)/gir-1.0 -gir_DATA = $(INTROSPECTION_GIRS) - -typelibdir = $(libdir)/girepository-1.0 -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) - -CLEANFILES += $(gir_DATA) $(typelib_DATA) -endif - --include $(top_srcdir)/git.mk diff --git a/eek/eek-container.c b/eek/eek-container.c index 9637e3eb..042005bd 100644 --- a/eek/eek-container.c +++ b/eek/eek-container.c @@ -40,23 +40,19 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_ABSTRACT_TYPE (EekContainer, eek_container, EEK_TYPE_ELEMENT); - -#define EEK_CONTAINER_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CONTAINER, EekContainerPrivate)) - - -struct _EekContainerPrivate +typedef struct _EekContainerPrivate { GList *head; GList *last; -}; +} EekContainerPrivate; + +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekContainer, eek_container, EEK_TYPE_ELEMENT) static void eek_container_real_add_child (EekContainer *self, EekElement *child) { - EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self); + EekContainerPrivate *priv = eek_container_get_instance_private (self); g_return_if_fail (EEK_IS_ELEMENT(child)); g_object_ref (child); @@ -75,7 +71,7 @@ static void eek_container_real_remove_child (EekContainer *self, EekElement *child) { - EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self); + EekContainerPrivate *priv = eek_container_get_instance_private (self); GList *head; g_return_if_fail (EEK_IS_ELEMENT(child)); @@ -94,7 +90,7 @@ eek_container_real_foreach_child (EekContainer *self, EekCallback callback, gpointer user_data) { - EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self); + EekContainerPrivate *priv = eek_container_get_instance_private (self); GList *head; for (head = priv->head; head; head = g_list_next (head)) @@ -106,7 +102,7 @@ eek_container_real_find (EekContainer *self, EekCompareFunc func, gpointer user_data) { - EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self); + EekContainerPrivate *priv = eek_container_get_instance_private (self); GList *head; head = g_list_find_custom (priv->head, user_data, (GCompareFunc)func); @@ -118,7 +114,8 @@ eek_container_real_find (EekContainer *self, static void eek_container_dispose (GObject *object) { - EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(object); + EekContainer *self = EEK_CONTAINER (object); + EekContainerPrivate *priv = eek_container_get_instance_private (self); GList *head; for (head = priv->head; head; head = priv->head) { @@ -134,9 +131,6 @@ eek_container_class_init (EekContainerClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (gobject_class, - sizeof (EekContainerPrivate)); - klass->add_child = eek_container_real_add_child; klass->remove_child = eek_container_real_remove_child; klass->foreach_child = eek_container_real_foreach_child; @@ -189,7 +183,7 @@ eek_container_class_init (EekContainerClass *klass) static void eek_container_init (EekContainer *self) { - self->priv = EEK_CONTAINER_GET_PRIVATE(self); + /* void */ } /** diff --git a/eek/eek-container.h b/eek/eek-container.h index 76602881..b246d9e2 100644 --- a/eek/eek-container.h +++ b/eek/eek-container.h @@ -30,14 +30,7 @@ G_BEGIN_DECLS #define EEK_TYPE_CONTAINER (eek_container_get_type()) -#define EEK_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CONTAINER, EekContainer)) -#define EEK_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CONTAINER, EekContainerClass)) -#define EEK_IS_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CONTAINER)) -#define EEK_IS_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CONTAINER)) -#define EEK_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CONTAINER, EekContainerClass)) - -typedef struct _EekContainerClass EekContainerClass; -typedef struct _EekContainerPrivate EekContainerPrivate; +G_DECLARE_DERIVABLE_TYPE (EekContainer, eek_container, EEK, CONTAINER, EekElement) /** * EekCallback: @@ -50,14 +43,6 @@ typedef struct _EekContainerPrivate EekContainerPrivate; typedef void (*EekCallback) (EekElement *element, gpointer user_data); typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data); -struct _EekContainer -{ - /*< private >*/ - EekElement parent; - - EekContainerPrivate *priv; -}; - /** * EekContainerClass: * @foreach_child: virtual function for iterating over the container's children diff --git a/eek/eek-element.c b/eek/eek-element.c index d08af0c7..8e42a015 100644 --- a/eek/eek-element.c +++ b/eek/eek-element.c @@ -52,20 +52,16 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_ABSTRACT_TYPE (EekElement, eek_element, G_TYPE_OBJECT); - -#define EEK_ELEMENT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_ELEMENT, EekElementPrivate)) - - -struct _EekElementPrivate +typedef struct _EekElementPrivate { gchar *name; EekBounds bounds; EekElement *parent; gint group; gint level; -}; +} EekElementPrivate; + +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT) static void eek_element_real_symbol_index_changed (EekElement *self, @@ -78,7 +74,8 @@ eek_element_real_symbol_index_changed (EekElement *self, static void eek_element_finalize (GObject *object) { - EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(object); + EekElement *self = EEK_ELEMENT (object); + EekElementPrivate *priv = eek_element_get_instance_private (self); g_free (priv->name); G_OBJECT_CLASS (eek_element_parent_class)->finalize (object); @@ -146,9 +143,6 @@ eek_element_class_init (EekElementClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekElementPrivate)); - /* signals */ klass->symbol_index_changed = eek_element_real_symbol_index_changed; @@ -238,9 +232,8 @@ eek_element_class_init (EekElementClass *klass) static void eek_element_init (EekElement *self) { - EekElementPrivate *priv; + EekElementPrivate *priv = eek_element_get_instance_private (self); - priv = self->priv = EEK_ELEMENT_GET_PRIVATE(self); priv->group = -1; priv->level = -1; } @@ -259,10 +252,12 @@ eek_element_set_parent (EekElement *element, g_return_if_fail (EEK_IS_ELEMENT(element)); g_return_if_fail (parent == NULL || EEK_IS_ELEMENT(parent)); - if (element->priv->parent == parent) + EekElementPrivate *priv = eek_element_get_instance_private (element); + + if (priv->parent == parent) return; - if (element->priv->parent != NULL) { + if (priv->parent != NULL) { /* release self-reference acquired when setting parent */ g_object_unref (element); } @@ -271,7 +266,7 @@ eek_element_set_parent (EekElement *element, g_object_ref (element); } - element->priv->parent = parent; + priv->parent = parent; } /** @@ -285,7 +280,10 @@ EekElement * eek_element_get_parent (EekElement *element) { g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL); - return element->priv->parent; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + return priv->parent; } /** @@ -300,8 +298,11 @@ eek_element_set_name (EekElement *element, const gchar *name) { g_return_if_fail (EEK_IS_ELEMENT(element)); - g_free (element->priv->name); - element->priv->name = g_strdup (name); + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + g_free (priv->name); + priv->name = g_strdup (name); } /** @@ -315,7 +316,10 @@ const gchar * eek_element_get_name (EekElement *element) { g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL); - return element->priv->name; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + return priv->name; } /** @@ -332,7 +336,10 @@ eek_element_set_bounds (EekElement *element, EekBounds *bounds) { g_return_if_fail (EEK_IS_ELEMENT(element)); - memcpy (&element->priv->bounds, bounds, sizeof(EekBounds)); + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + memcpy (&priv->bounds, bounds, sizeof(EekBounds)); } /** @@ -350,7 +357,10 @@ eek_element_get_bounds (EekElement *element, { g_return_if_fail (EEK_IS_ELEMENT(element)); g_return_if_fail (bounds != NULL); - memcpy (bounds, &element->priv->bounds, sizeof(EekBounds)); + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + memcpy (bounds, &priv->bounds, sizeof(EekBounds)); } /** @@ -486,11 +496,14 @@ eek_element_set_group (EekElement *element, gint group) { g_return_if_fail (EEK_IS_ELEMENT(element)); - if (element->priv->group != group) { - element->priv->group = group; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + if (priv->group != group) { + priv->group = group; g_object_notify (G_OBJECT(element), "group"); g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0, - group, element->priv->level); + group, priv->level); } } @@ -509,11 +522,14 @@ eek_element_set_level (EekElement *element, gint level) { g_return_if_fail (EEK_IS_ELEMENT(element)); - if (element->priv->level != level) { - element->priv->level = level; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + if (priv->level != level) { + priv->level = level; g_object_notify (G_OBJECT(element), "level"); g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0, - element->priv->group, level); + priv->group, level); } } @@ -530,7 +546,10 @@ gint eek_element_get_group (EekElement *element) { g_return_val_if_fail (EEK_IS_ELEMENT(element), -1); - return element->priv->group; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + return priv->group; } /** @@ -546,5 +565,8 @@ gint eek_element_get_level (EekElement *element) { g_return_val_if_fail (EEK_IS_ELEMENT(element), -1); - return element->priv->level; + + EekElementPrivate *priv = eek_element_get_instance_private (element); + + return priv->level; } diff --git a/eek/eek-element.h b/eek/eek-element.h index fd1efc03..084d7b5f 100644 --- a/eek/eek-element.h +++ b/eek/eek-element.h @@ -30,22 +30,7 @@ G_BEGIN_DECLS #define EEK_TYPE_ELEMENT (eek_element_get_type()) -#define EEK_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_ELEMENT, EekElement)) -#define EEK_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_ELEMENT, EekElementClass)) -#define EEK_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_ELEMENT)) -#define EEK_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_ELEMENT)) -#define EEK_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_ELEMENT, EekElementClass)) - -typedef struct _EekElementClass EekElementClass; -typedef struct _EekElementPrivate EekElementPrivate; - -struct _EekElement -{ - /*< private >*/ - GObject parent; - - EekElementPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekElement, eek_element, EEK, ELEMENT, GObject) struct _EekElementClass { diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 51b6a373..c3907cce 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -31,6 +31,7 @@ #include #endif +#include #include #include "eek-gtk-keyboard.h" @@ -46,18 +47,13 @@ enum { PROP_LAST }; -G_DEFINE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA); - -#define EEK_GTK_KEYBOARD_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardPrivate)) - /* since 2.91.5 GDK_DRAWABLE was removed and gdk_cairo_create takes GdkWindow as the argument */ #ifndef GDK_DRAWABLE #define GDK_DRAWABLE(x) (x) #endif -struct _EekGtkKeyboardPrivate +typedef struct _EekGtkKeyboardPrivate { EekRenderer *renderer; EekKeyboard *keyboard; @@ -65,7 +61,11 @@ struct _EekGtkKeyboardPrivate gulong key_unlocked_handler; gulong symbol_index_changed_handler; EekTheme *theme; -}; + + GdkEventSequence *sequence; // unowned reference +} EekGtkKeyboardPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA) static void on_key_pressed (EekKey *key, EekGtkKeyboard *self); @@ -106,7 +106,8 @@ static gboolean eek_gtk_keyboard_real_draw (GtkWidget *self, cairo_t *cr) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = + eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self)); GtkAllocation allocation; GList *list, *head; @@ -148,7 +149,8 @@ static void eek_gtk_keyboard_real_size_allocate (GtkWidget *self, GtkAllocation *allocation) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = + eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self)); if (priv->renderer) eek_renderer_set_allocation_size (priv->renderer, @@ -161,7 +163,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self, static void depress(EekGtkKeyboard *self, gdouble x, gdouble y, guint32 time) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y); if (key) { eek_keyboard_press_key(priv->keyboard, key, time); @@ -171,7 +173,7 @@ static void depress(EekGtkKeyboard *self, static void drag(EekGtkKeyboard *self, gdouble x, gdouble y, guint32 time) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y); if (key) { @@ -197,7 +199,7 @@ static void drag(EekGtkKeyboard *self, } static void release(EekGtkKeyboard *self, guint32 time) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); GList *list = eek_keyboard_get_pressed_keys (priv->keyboard); for (GList *head = list; head; head = g_list_next (head)) { @@ -242,20 +244,23 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget *self, // Only one touch stream at a time allowed. Others will be completely ignored. static gboolean -handle_touch_event (GtkWidget *widget, - GdkEventTouch *event) { - EekGtkKeyboard *self = EEK_GTK_KEYBOARD(widget); +handle_touch_event (GtkWidget *widget, + GdkEventTouch *event) +{ + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); + if (event->type == GDK_TOUCH_BEGIN) { - if (self->sequence) { + if (priv->sequence) { // Ignore second and following touch points return FALSE; } - self->sequence = event->sequence; + priv->sequence = event->sequence; depress(self, event->x, event->y, event->time); return TRUE; } - if (self->sequence != event->sequence) { + if (priv->sequence != event->sequence) { return FALSE; } @@ -265,16 +270,16 @@ handle_touch_event (GtkWidget *widget, if (event->type == GDK_TOUCH_END || event->type == GDK_TOUCH_CANCEL) { // TODO: can the event have different coords than the previous update event? release(self, event->time); - self->sequence = NULL; + priv->sequence = NULL; } return TRUE; } - static void eek_gtk_keyboard_real_unmap (GtkWidget *self) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = + eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self)); if (priv->keyboard) { GList *list, *head; @@ -301,7 +306,9 @@ eek_gtk_keyboard_real_query_tooltip (GtkWidget *widget, gboolean keyboard_tooltip, GtkTooltip *tooltip) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); + EekKey *key; key = eek_renderer_find_key_by_position (priv->renderer, @@ -322,7 +329,7 @@ static void eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self, EekKeyboard *keyboard) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); priv->keyboard = g_object_ref (keyboard); priv->key_locked_handler = @@ -358,7 +365,8 @@ eek_gtk_keyboard_set_property (GObject *object, static void eek_gtk_keyboard_dispose (GObject *object) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object); + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (object); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); if (priv->renderer) { g_object_unref (priv->renderer); @@ -407,9 +415,6 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekGtkKeyboardPrivate)); - widget_class->realize = eek_gtk_keyboard_real_realize; widget_class->unmap = eek_gtk_keyboard_real_unmap; widget_class->draw = eek_gtk_keyboard_real_draw; @@ -440,7 +445,7 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass) static void eek_gtk_keyboard_init (EekGtkKeyboard *self) { - self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + /* void */ } /** @@ -479,23 +484,67 @@ magnify_bounds (GtkWidget *self, large_bounds->y = CLAMP(y, 0, allocation.height - large_bounds->height); } +/* + * Alleviate the asymmetry between drawing a pressed key and a released key, + * and consistently draw to the exact same area. + * + * By saving the dirty rectangle we can limit drawing of the backbuffer to + * the screen as well, eg gdk_window_invalidate_rect() instead of + * gtk_widget_queue_draw() which redraws the entire widget. + * + * b1 is mandatory, b2 is optional + */ +static GdkRectangle +clip_bounds_to_dirty_rectangle (cairo_t *cr, EekBounds *b1, EekBounds *b2) +{ + if (b2) + cairo_rectangle (cr, b2->x, b2->y, b2->width, b2->height); + + cairo_rectangle (cr, b1->x, b1->y, b1->width, b1->height); + cairo_clip (cr); + + /* + * save the clipped region to a bounding box so we can limit + * the drawing of the backbuffer to the screen to the same area + */ + cairo_rectangle_t bbox; + + cairo_clip_extents (cr, &bbox.x, &bbox.y, &bbox.width, &bbox.height); + + /* convert double to int, making sure r strictly covers bbox to avoid + * artefacts. floor() is unnecessary, ceil() is not */ + GdkRectangle r = { + floor (bbox.x), + floor (bbox.y), + ceil (bbox.width), + ceil (bbox.height) + }; + + return r; +} + static void render_pressed_key (GtkWidget *widget, EekKey *key) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekBounds bounds, large_bounds; + GdkWindow *window = gtk_widget_get_window (widget); + cairo_region_t *region = gdk_window_get_clip_region (window); + GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); + cairo_t *cr = gdk_drawing_context_get_cairo_context (context); + eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); magnify_bounds (widget, &bounds, &large_bounds, 1.5); - GdkWindow *window = GDK_DRAWABLE (gtk_widget_get_window (widget)); - cairo_region_t *region = gdk_window_get_clip_region (window); + /* + * clip to limit drawing to backbuffer and save clip region to dirty_rect + * to limit redrawing of the backbuffer to the same area + */ + GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle (cr, &bounds, &large_bounds); - GdkDrawingContext *context = gdk_window_begin_draw_frame( - window, region - ); - cairo_t *cr = gdk_drawing_context_get_cairo_context(context); cairo_save (cr); cairo_translate (cr, bounds.x, bounds.y); eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE); @@ -506,60 +555,83 @@ render_pressed_key (GtkWidget *widget, eek_renderer_render_key (priv->renderer, cr, key, 1.5, TRUE); cairo_restore (cr); - gdk_window_end_draw_frame(window, context); - cairo_region_destroy(region); + gdk_window_end_draw_frame (window, context); + + cairo_region_destroy (region); + + /* force immediate drawing of the backbuffer to the screen */ + gdk_window_invalidate_rect (window, &dirty_rect, FALSE); } static void render_locked_key (GtkWidget *widget, EekKey *key) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekBounds bounds; - cairo_t *cr; - cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget))); + GdkWindow *window = gtk_widget_get_window (widget); + cairo_region_t *region = gdk_window_get_clip_region (window); + GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); + cairo_t *cr = gdk_drawing_context_get_cairo_context (context); eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); + + /* + * clip to limit drawing to backbuffer and save clip region to dirty_rect + * to limit redrawing of the backbuffer to the same area + */ + GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle (cr, &bounds, NULL); + cairo_translate (cr, bounds.x, bounds.y); eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE); - cairo_destroy (cr); + gdk_window_end_draw_frame (window, context); + + cairo_region_destroy (region); + + /* force immediate drawing of the backbuffer to the screen */ + gdk_window_invalidate_rect (window, &dirty_rect, FALSE); } static void render_released_key (GtkWidget *widget, EekKey *key) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekBounds bounds, large_bounds; - cairo_t *cr; - cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget))); + GdkWindow *window = gtk_widget_get_window (widget); + cairo_region_t *region = gdk_window_get_clip_region (window); + GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region); + cairo_t *cr = gdk_drawing_context_get_cairo_context (context); eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE); - magnify_bounds (widget, &bounds, &large_bounds, 2.0); - cairo_rectangle (cr, - large_bounds.x, - large_bounds.y, - large_bounds.width, - large_bounds.height); - cairo_rectangle (cr, - bounds.x, - bounds.y, - bounds.width, - bounds.height); - cairo_clip (cr); + magnify_bounds (widget, &bounds, &large_bounds, 1.5); + + /* + * clip to limit drawing to backbuffer and save clip region to dirty_rect + * to limit redrawing of the backbuffer to the same area + */ + GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle(cr, &bounds, &large_bounds); eek_renderer_render_keyboard (priv->renderer, cr); - cairo_destroy (cr); + + gdk_window_end_draw_frame (window, context); + + cairo_region_destroy (region); + + /* force immediate drawing of the backbuffer to the screen */ + gdk_window_invalidate_rect (window, &dirty_rect, FALSE); } static void on_key_pressed (EekKey *key, EekGtkKeyboard *self) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); /* renderer may have not been set yet if the widget is a popup */ if (!priv->renderer) @@ -580,7 +652,7 @@ static void on_key_released (EekKey *key, EekGtkKeyboard *self) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); /* renderer may have not been set yet if the widget is a popup */ if (!priv->renderer) @@ -603,7 +675,7 @@ on_key_locked (EekKeyboard *keyboard, gpointer user_data) { GtkWidget *widget = user_data; - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data); /* renderer may have not been set yet if the widget is a popup */ if (!priv->renderer) @@ -618,7 +690,7 @@ on_key_unlocked (EekKeyboard *keyboard, gpointer user_data) { GtkWidget *widget = user_data; - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data); /* renderer may have not been set yet if the widget is a popup */ if (!priv->renderer) @@ -642,11 +714,9 @@ void eek_gtk_keyboard_set_theme (EekGtkKeyboard *keyboard, EekTheme *theme) { - EekGtkKeyboardPrivate *priv; - g_return_if_fail (EEK_IS_GTK_KEYBOARD(keyboard)); g_return_if_fail (EEK_IS_THEME(theme)); - priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (keyboard); priv->theme = g_object_ref (theme); } diff --git a/eek/eek-gtk-keyboard.h b/eek/eek-gtk-keyboard.h index 14210701..ad602b66 100644 --- a/eek/eek-gtk-keyboard.h +++ b/eek/eek-gtk-keyboard.h @@ -32,25 +32,7 @@ G_BEGIN_DECLS #define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type()) -#define EEK_GTK_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboard)) -#define EEK_GTK_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardClass)) -#define EEK_IS_GTK_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_GTK_KEYBOARD)) -#define EEK_IS_GTK_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_GTK_KEYBOARD)) -#define EEK_GTK_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardClass)) - -typedef struct _EekGtkKeyboard EekGtkKeyboard; -typedef struct _EekGtkKeyboardClass EekGtkKeyboardClass; -typedef struct _EekGtkKeyboardPrivate EekGtkKeyboardPrivate; - -struct _EekGtkKeyboard -{ - /*< private >*/ - GtkDrawingArea parent; - - GdkEventSequence *sequence; // unowned reference - - EekGtkKeyboardPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, EEK, GTK_KEYBOARD, GtkDrawingArea) struct _EekGtkKeyboardClass { diff --git a/eek/eek-key.c b/eek/eek-key.c index a3cada98..4a57bb84 100644 --- a/eek/eek-key.c +++ b/eek/eek-key.c @@ -54,13 +54,7 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_TYPE (EekKey, eek_key, EEK_TYPE_ELEMENT); - -#define EEK_KEY_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEY, EekKeyPrivate)) - - -struct _EekKeyPrivate +typedef struct _EekKeyPrivate { guint keycode; EekSymbolMatrix *symbol_matrix; @@ -69,12 +63,14 @@ struct _EekKeyPrivate gulong oref; // UI outline reference gboolean is_pressed; gboolean is_locked; -}; +} EekKeyPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT) static void eek_key_real_locked (EekKey *self) { - EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); + EekKeyPrivate *priv = eek_key_get_instance_private (self); priv->is_locked = TRUE; #if DEBUG @@ -85,7 +81,7 @@ eek_key_real_locked (EekKey *self) static void eek_key_real_unlocked (EekKey *self) { - EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); + EekKeyPrivate *priv = eek_key_get_instance_private (self); priv->is_locked = FALSE; #if DEBUG @@ -96,8 +92,11 @@ eek_key_real_unlocked (EekKey *self) static void eek_key_finalize (GObject *object) { - EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(object); + EekKey *self = EEK_KEY (object); + EekKeyPrivate *priv = eek_key_get_instance_private (self); + eek_symbol_matrix_free (priv->symbol_matrix); + G_OBJECT_CLASS (eek_key_parent_class)->finalize (object); } @@ -174,9 +173,6 @@ eek_key_class_init (EekKeyClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekKeyPrivate)); - gobject_class->set_property = eek_key_set_property; gobject_class->get_property = eek_key_get_property; gobject_class->finalize = eek_key_finalize; @@ -285,9 +281,7 @@ eek_key_class_init (EekKeyClass *klass) static void eek_key_init (EekKey *self) { - EekKeyPrivate *priv; - - priv = self->priv = EEK_KEY_GET_PRIVATE(self); + EekKeyPrivate *priv = eek_key_get_instance_private (self); priv->symbol_matrix = eek_symbol_matrix_new (0, 0); } @@ -307,7 +301,10 @@ eek_key_set_keycode (EekKey *key, guint keycode) { g_return_if_fail (EEK_IS_KEY (key)); - key->priv->keycode = keycode; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + priv->keycode = keycode; } /** @@ -321,7 +318,10 @@ guint eek_key_get_keycode (EekKey *key) { g_return_val_if_fail (EEK_IS_KEY (key), EEK_INVALID_KEYCODE); - return key->priv->keycode; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + return priv->keycode; } /** @@ -337,8 +337,10 @@ eek_key_set_symbol_matrix (EekKey *key, { g_return_if_fail (EEK_IS_KEY(key)); - eek_symbol_matrix_free (key->priv->symbol_matrix); - key->priv->symbol_matrix = eek_symbol_matrix_copy (matrix); + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + eek_symbol_matrix_free (priv->symbol_matrix); + priv->symbol_matrix = eek_symbol_matrix_copy (matrix); } /** @@ -352,7 +354,10 @@ EekSymbolMatrix * eek_key_get_symbol_matrix (EekKey *key) { g_return_val_if_fail (EEK_IS_KEY(key), NULL); - return key->priv->symbol_matrix; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + return priv->symbol_matrix; } /** @@ -440,7 +445,7 @@ eek_key_get_symbol_at_index (EekKey *key, gint fallback_group, gint fallback_level) { - EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(key); + EekKeyPrivate *priv = eek_key_get_instance_private (key); gint num_symbols; g_return_val_if_fail (fallback_group >= 0, NULL); @@ -492,12 +497,14 @@ eek_key_set_index (EekKey *key, g_return_if_fail (0 <= column); g_return_if_fail (0 <= row); - if (key->priv->column != column) { - key->priv->column = column; + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + if (priv->column != column) { + priv->column = column; g_object_notify (G_OBJECT(key), "column"); } - if (key->priv->row != row) { - key->priv->row = row; + if (priv->row != row) { + priv->row = row; g_object_notify (G_OBJECT(key), "row"); } } @@ -518,10 +525,12 @@ eek_key_get_index (EekKey *key, g_return_if_fail (EEK_IS_KEY(key)); g_return_if_fail (column != NULL || row != NULL); + EekKeyPrivate *priv = eek_key_get_instance_private (key); + if (column != NULL) - *column = key->priv->column; + *column = priv->column; if (row != NULL) - *row = key->priv->row; + *row = priv->row; } /** @@ -536,8 +545,11 @@ eek_key_set_oref (EekKey *key, guint oref) { g_return_if_fail (EEK_IS_KEY(key)); - if (key->priv->oref != oref) { - key->priv->oref = oref; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + if (priv->oref != oref) { + priv->oref = oref; g_object_notify (G_OBJECT(key), "oref"); } } @@ -553,7 +565,10 @@ guint eek_key_get_oref (EekKey *key) { g_return_val_if_fail (EEK_IS_KEY (key), 0); - return key->priv->oref; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + return priv->oref; } /** @@ -566,7 +581,10 @@ gboolean eek_key_is_pressed (EekKey *key) { g_return_val_if_fail (EEK_IS_KEY(key), FALSE); - return key->priv->is_pressed; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + return priv->is_pressed; } /** @@ -579,11 +597,17 @@ gboolean eek_key_is_locked (EekKey *key) { g_return_val_if_fail (EEK_IS_KEY(key), FALSE); - return key->priv->is_locked; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + return priv->is_locked; } void eek_key_set_pressed(EekKey *key, gboolean value) { g_return_if_fail (EEK_IS_KEY(key)); - key->priv->is_pressed = value; + + EekKeyPrivate *priv = eek_key_get_instance_private (key); + + priv->is_pressed = value; } diff --git a/eek/eek-key.h b/eek/eek-key.h index d6c78ce7..31d8b65b 100644 --- a/eek/eek-key.h +++ b/eek/eek-key.h @@ -31,31 +31,7 @@ G_BEGIN_DECLS #define EEK_TYPE_KEY (eek_key_get_type()) -#define EEK_KEY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEY, EekKey)) -#define EEK_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_KEY, EekKeyClass)) -#define EEK_IS_KEY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_KEY)) -#define EEK_IS_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_KEY)) -#define EEK_KEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_KEY, EekKeyClass)) - -typedef struct _EekKeyClass EekKeyClass; -typedef struct _EekKeyPrivate EekKeyPrivate; - -/** - * EekKey: - * - * Contains information about the state of a key. - * TODO: rewrite as a plain struct - * - * The #EekKey structure contains only private data and should only be - * accessed using the provided API. - */ -struct _EekKey -{ - /*< private >*/ - EekElement parent; - - EekKeyPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE(EekKey, eek_key, EEK, KEY, EekElement) /** * EekKeyClass: diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index cbfca496..d67a13da 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -55,8 +55,6 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_TYPE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER); - #define EEK_KEYBOARD_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYBOARD, EekKeyboardPrivate)) @@ -75,6 +73,8 @@ struct _EekKeyboardPrivate EekModifierType alt_gr_mask; }; +G_DEFINE_TYPE_WITH_PRIVATE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER); + G_DEFINE_BOXED_TYPE(EekModifierKey, eek_modifier_key, eek_modifier_key_copy, eek_modifier_key_free); @@ -390,9 +390,6 @@ eek_keyboard_class_init (EekKeyboardClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekKeyboardPrivate)); - klass->create_section = eek_keyboard_real_create_section; /* signals */ diff --git a/eek/eek-keysym.c b/eek/eek-keysym.c index 12b8e0d7..bde422d4 100644 --- a/eek/eek-keysym.c +++ b/eek/eek-keysym.c @@ -50,9 +50,10 @@ #define EEK_KEYSYM_Hyper_L 0xffed #define EEK_KEYSYM_Hyper_R 0xffee -struct _EekKeysymPrivate { +typedef struct _EekKeysymPrivate +{ guint xkeysym; -}; +} EekKeysymPrivate; struct _EekKeysymEntry { guint xkeysym; @@ -68,12 +69,11 @@ typedef struct _EekKeysymEntry EekKeysymEntry; static void eek_serializable_iface_init (EekSerializableIface *iface); -G_DEFINE_TYPE_WITH_CODE (EekKeysym, eek_keysym, EEK_TYPE_SYMBOL, - G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, - eek_serializable_iface_init)); - -#define EEK_KEYSYM_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYSYM, EekKeysymPrivate)) +G_DEFINE_TYPE_EXTENDED (EekKeysym, eek_keysym, EEK_TYPE_SYMBOL, + 0, /* GTypeFlags */ + G_ADD_PRIVATE (EekKeysym) + G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, + eek_serializable_iface_init)) static EekSerializableIface *eek_keysym_parent_serializable_iface; @@ -81,7 +81,8 @@ static void eek_keysym_real_serialize (EekSerializable *self, GVariantBuilder *builder) { - EekKeysymPrivate *priv = EEK_KEYSYM_GET_PRIVATE(self); + EekKeysymPrivate *priv = eek_keysym_get_instance_private ( + EEK_KEYSYM(self)); eek_keysym_parent_serializable_iface->serialize (self, builder); @@ -93,7 +94,8 @@ eek_keysym_real_deserialize (EekSerializable *self, GVariant *variant, gsize index) { - EekKeysymPrivate *priv = EEK_KEYSYM_GET_PRIVATE(self); + EekKeysymPrivate *priv = eek_keysym_get_instance_private ( + EEK_KEYSYM(self)); index = eek_keysym_parent_serializable_iface->deserialize (self, variant, @@ -200,15 +202,13 @@ get_modifier_mask (guint xkeysym) static void eek_keysym_class_init (EekKeysymClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (gobject_class, sizeof (EekKeysymPrivate)); + /* void */ } static void eek_keysym_init (EekKeysym *self) { - self->priv = EEK_KEYSYM_GET_PRIVATE(self); + /* void */ } /** @@ -291,7 +291,7 @@ eek_keysym_new_with_modifier (guint xkeysym, g_slice_free (EekKeysymEntry, unichar_entry); } - priv = EEK_KEYSYM_GET_PRIVATE(keysym); + priv = eek_keysym_get_instance_private (keysym); priv->xkeysym = xkeysym; return keysym; @@ -345,6 +345,6 @@ eek_keysym_get_xkeysym (EekKeysym *keysym) EekKeysymPrivate *priv; g_assert (EEK_IS_KEYSYM(keysym)); - priv = EEK_KEYSYM_GET_PRIVATE(keysym); + priv = eek_keysym_get_instance_private (keysym); return priv->xkeysym; } diff --git a/eek/eek-keysym.h b/eek/eek-keysym.h index a30092e4..73430b07 100644 --- a/eek/eek-keysym.h +++ b/eek/eek-keysym.h @@ -38,27 +38,7 @@ G_BEGIN_DECLS #define EEK_INVALID_KEYSYM (0) #define EEK_TYPE_KEYSYM (eek_keysym_get_type()) -#define EEK_KEYSYM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEYSYM, EekKeysym)) -#define EEK_KEYSYM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_KEYSYM, EekKeysymClass)) -#define EEK_IS_KEYSYM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_KEYSYM)) -#define EEK_IS_KEYSYM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_KEYSYM)) -#define EEK_KEYSYM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_KEYSYM, EekKeysymClass)) - -typedef struct _EekKeysymClass EekKeysymClass; -typedef struct _EekKeysymPrivate EekKeysymPrivate; - -/** - * EekKeysym: - * - * The #EekKeysym structure contains only private data and should only - * be accessed using the provided API. - */ -struct _EekKeysym { - /*< private >*/ - EekSymbol parent; - - EekKeysymPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekKeysym, eek_keysym, EEK, KEYSYM, EekSymbol) struct _EekKeysymClass { /*< private >*/ diff --git a/eek/eek-layout.c b/eek/eek-layout.c index d2e2780b..23bb2600 100644 --- a/eek/eek-layout.c +++ b/eek/eek-layout.c @@ -34,7 +34,7 @@ #include "eek-keyboard.h" #include "eekboard/eekboard-context-service.h" -G_DEFINE_ABSTRACT_TYPE (EekLayout, eek_layout, G_TYPE_OBJECT); +G_DEFINE_ABSTRACT_TYPE (EekLayout, eek_layout, G_TYPE_OBJECT) static void eek_layout_class_init (EekLayoutClass *klass) diff --git a/eek/eek-layout.h b/eek/eek-layout.h index 1cf44cf7..308e0aae 100644 --- a/eek/eek-layout.h +++ b/eek/eek-layout.h @@ -31,20 +31,7 @@ G_BEGIN_DECLS #define EEK_TYPE_LAYOUT (eek_layout_get_type()) -#define EEK_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_LAYOUT, EekLayout)) -#define EEK_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_LAYOUT, EekLayoutClass)) -#define EEK_IS_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_LAYOUT)) -#define EEK_IS_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_LAYOUT)) -#define EEK_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_LAYOUT, EekLayoutClass)) - -typedef struct _EekLayoutClass EekLayoutClass; -typedef struct _EekLayout EekLayout; - -struct _EekLayout -{ - /*< private >*/ - GObject parent; -}; +G_DECLARE_DERIVABLE_TYPE (EekLayout, eek_layout, EEK, LAYOUT, GObject) /** * EekLayoutClass: diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 4494d933..073b8eee 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -36,12 +36,7 @@ enum { PROP_LAST }; -G_DEFINE_TYPE (EekRenderer, eek_renderer, G_TYPE_OBJECT); - -#define EEK_RENDERER_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_RENDERER, EekRendererPrivate)) - -struct _EekRendererPrivate +typedef struct _EekRendererPrivate { EekKeyboard *keyboard; PangoContext *pcontext; @@ -62,7 +57,9 @@ struct _EekRendererPrivate gulong symbol_index_changed_handler; EekTheme *theme; -}; +} EekRendererPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT) static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0}; static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0}; @@ -106,7 +103,7 @@ create_keyboard_surface_key_callback (EekElement *element, gpointer user_data) { CreateKeyboardSurfaceCallbackData *data = user_data; - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); EekBounds bounds; cairo_save (data->cr); @@ -129,7 +126,7 @@ create_keyboard_surface_section_callback (EekElement *element, gpointer user_data) { CreateKeyboardSurfaceCallbackData *data = user_data; - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); EekBounds bounds; gint angle; @@ -151,7 +148,7 @@ create_keyboard_surface_section_callback (EekElement *element, static cairo_surface_t * create_keyboard_surface (EekRenderer *renderer) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); EekBounds bounds; cairo_surface_t *keyboard_surface; CreateKeyboardSurfaceCallbackData data; @@ -202,7 +199,7 @@ render_key_outline (EekRenderer *renderer, EekKey *key, gboolean active) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); EekOutline *outline; EekBounds bounds; guint oref; @@ -246,7 +243,9 @@ render_key_outline (EekRenderer *renderer, border_color.alpha = foreground.alpha; } + eek_element_get_bounds(EEK_ELEMENT(key), &bounds); outline = eek_outline_copy (outline); + for (guint i = 0; i < outline->num_points; i++) { outline->points[i].x *= priv->scale; outline->points[i].y *= priv->scale; @@ -351,7 +350,7 @@ static void calculate_font_size_key_callback (EekElement *element, gpointer user_data) { CalculateFontSizeCallbackData *data = user_data; - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); gdouble sx, sy; PangoFontDescription *font; PangoRectangle extents = { 0, }; @@ -411,7 +410,7 @@ calculate_font_size (EekRenderer *renderer, const PangoFontDescription *base_font, gboolean ascii) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); CalculateFontSizeCallbackData data; data.size = G_MAXDOUBLE; @@ -430,7 +429,7 @@ render_key (EekRenderer *self, EekKey *key, gboolean active) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self); + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); EekOutline *outline; cairo_surface_t *outline_surface; EekBounds bounds; @@ -603,7 +602,7 @@ eek_renderer_real_render_key_label (EekRenderer *self, PangoLayout *layout, EekKey *key) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self); + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); EekSymbol *symbol; EekSymbolCategory category; const gchar *label; @@ -696,7 +695,7 @@ static void eek_renderer_real_render_keyboard (EekRenderer *self, cairo_t *cr) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self); + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); cairo_pattern_t *source; g_return_if_fail (priv->keyboard); @@ -718,7 +717,8 @@ eek_renderer_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object); + EekRendererPrivate *priv = eek_renderer_get_instance_private ( + EEK_RENDERER(object)); switch (prop_id) { case PROP_KEYBOARD: @@ -746,7 +746,8 @@ eek_renderer_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object); + EekRendererPrivate *priv = eek_renderer_get_instance_private ( + EEK_RENDERER(object)); switch (prop_id) { case PROP_KEYBOARD: @@ -761,7 +762,8 @@ eek_renderer_get_property (GObject *object, static void eek_renderer_dispose (GObject *object) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object); + EekRenderer *self = EEK_RENDERER (object); + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); if (priv->keyboard) { if (g_signal_handler_is_connected (priv->keyboard, @@ -785,7 +787,9 @@ eek_renderer_dispose (GObject *object) static void eek_renderer_finalize (GObject *object) { - EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object); + EekRenderer *self = EEK_RENDERER(object); + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); + g_hash_table_destroy (priv->outline_surface_cache); g_hash_table_destroy (priv->active_outline_surface_cache); pango_font_description_free (priv->ascii_font); @@ -799,9 +803,6 @@ eek_renderer_class_init (EekRendererClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekRendererPrivate)); - klass->render_key_label = eek_renderer_real_render_key_label; klass->render_key_outline = eek_renderer_real_render_key_outline; klass->render_key = eek_renderer_real_render_key; @@ -834,9 +835,8 @@ eek_renderer_class_init (EekRendererClass *klass) static void eek_renderer_init (EekRenderer *self) { - EekRendererPrivate *priv; + EekRendererPrivate *priv = eek_renderer_get_instance_private (self); - priv = self->priv = EEK_RENDERER_GET_PRIVATE(self); priv->keyboard = NULL; priv->pcontext = NULL; priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR; @@ -863,15 +863,17 @@ eek_renderer_init (EekRenderer *self) static void invalidate (EekRenderer *renderer) { - if (renderer->priv->outline_surface_cache) - g_hash_table_remove_all (renderer->priv->outline_surface_cache); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); - if (renderer->priv->active_outline_surface_cache) - g_hash_table_remove_all (renderer->priv->active_outline_surface_cache); + if (priv->outline_surface_cache) + g_hash_table_remove_all (priv->outline_surface_cache); - if (renderer->priv->keyboard_surface) { - cairo_surface_destroy (renderer->priv->keyboard_surface); - renderer->priv->keyboard_surface = NULL; + if (priv->active_outline_surface_cache) + g_hash_table_remove_all (priv->active_outline_surface_cache); + + if (priv->keyboard_surface) { + cairo_surface_destroy (priv->keyboard_surface); + priv->keyboard_surface = NULL; } } @@ -906,10 +908,12 @@ eek_renderer_set_allocation_size (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (width > 0.0 && height > 0.0); - renderer->priv->allocation_width = width; - renderer->priv->allocation_height = height; + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); - eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds); + priv->allocation_width = width; + priv->allocation_height = height; + + eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds); if (bounds.height * width / bounds.width <= height) scale = width / bounds.width; @@ -922,8 +926,8 @@ eek_renderer_set_allocation_size (EekRenderer *renderer, scale = bounds.height / height; } - if (scale != renderer->priv->scale) { - renderer->priv->scale = scale; + if (scale != priv->scale) { + priv->scale = scale; invalidate (renderer); } } @@ -937,11 +941,13 @@ eek_renderer_get_size (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); - eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds); if (width) - *width = bounds.width * renderer->priv->scale; + *width = bounds.width * priv->scale; if (height) - *height = bounds.height * renderer->priv->scale; + *height = bounds.height * priv->scale; } void @@ -960,20 +966,22 @@ eek_renderer_get_key_bounds (EekRenderer *renderer, g_return_if_fail (EEK_IS_KEY(key)); g_return_if_fail (bounds != NULL); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + section = eek_element_get_parent (EEK_ELEMENT(key)); eek_element_get_bounds (EEK_ELEMENT(key), bounds); eek_element_get_bounds (section, §ion_bounds); - eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), + eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &keyboard_bounds); if (!rotate) { bounds->x += keyboard_bounds.x + section_bounds.x; bounds->y += keyboard_bounds.y + section_bounds.y; - bounds->x *= renderer->priv->scale; - bounds->y *= renderer->priv->scale; - bounds->width *= renderer->priv->scale; - bounds->height *= renderer->priv->scale; + bounds->x *= priv->scale; + bounds->y *= priv->scale; + bounds->width *= priv->scale; + bounds->height *= priv->scale; return; } points[0].x = bounds->x; @@ -1005,24 +1013,30 @@ eek_renderer_get_key_bounds (EekRenderer *renderer, bounds->y = keyboard_bounds.y + section_bounds.y + min.y; bounds->width = (max.x - min.x); bounds->height = (max.y - min.y); - bounds->x *= renderer->priv->scale; - bounds->y *= renderer->priv->scale; - bounds->width *= renderer->priv->scale; - bounds->height *= renderer->priv->scale; + bounds->x *= priv->scale; + bounds->y *= priv->scale; + bounds->width *= priv->scale; + bounds->height *= priv->scale; } gdouble eek_renderer_get_scale (EekRenderer *renderer) { g_return_val_if_fail (EEK_IS_RENDERER(renderer), 0); - return renderer->priv->scale; + + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + return priv->scale; } PangoLayout * eek_renderer_create_pango_layout (EekRenderer *renderer) { g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL); - return pango_layout_new (renderer->priv->pcontext); + + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + return pango_layout_new (priv->pcontext); } void @@ -1100,7 +1114,9 @@ eek_renderer_set_default_foreground_color (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (color); - memcpy (&renderer->priv->default_foreground_color, color, sizeof(EekColor)); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + memcpy (&priv->default_foreground_color, color, sizeof(EekColor)); } void @@ -1110,7 +1126,9 @@ eek_renderer_set_default_background_color (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (color); - memcpy (&renderer->priv->default_background_color, color, sizeof(EekColor)); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + memcpy (&priv->default_background_color, color, sizeof(EekColor)); } void @@ -1123,11 +1141,13 @@ eek_renderer_get_foreground_color (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (color); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + theme_node = g_object_get_data (G_OBJECT(element), "theme-node"); if (theme_node) eek_theme_node_get_foreground_color (theme_node, color); else - memcpy (color, &renderer->priv->default_foreground_color, + memcpy (color, &priv->default_foreground_color, sizeof(EekColor)); } @@ -1141,11 +1161,13 @@ eek_renderer_get_background_color (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (color); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + theme_node = g_object_get_data (G_OBJECT(element), "theme-node"); if (theme_node) eek_theme_node_get_background_color (theme_node, color); else - memcpy (color, &renderer->priv->default_background_color, + memcpy (color, &priv->default_background_color, sizeof(EekColor)); } @@ -1208,12 +1230,14 @@ find_key_by_position_key_callback (EekElement *element, points[3].x = points[0].x; points[3].y = points[2].y; + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); + for (i = 0; i < G_N_ELEMENTS(points); i++) { eek_point_rotate (&points[i], data->angle); points[i].x += data->origin.x; points[i].y += data->origin.y; - points[i].x *= data->renderer->priv->scale; - points[i].y *= data->renderer->priv->scale; + points[i].x *= priv->scale; + points[i].y *= priv->scale; } b1 = sign (&data->point, &points[0], &points[1]) < 0.0; @@ -1268,12 +1292,14 @@ eek_renderer_find_key_by_position (EekRenderer *renderer, g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL); - eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); - if (x < bounds.x * renderer->priv->scale || - y < bounds.y * renderer->priv->scale || - x > bounds.width * renderer->priv->scale || - y > bounds.height * renderer->priv->scale) + eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds); + + if (x < bounds.x * priv->scale || + y < bounds.y * priv->scale || + x > bounds.width * priv->scale || + y > bounds.height * priv->scale) return NULL; data.point.x = x; @@ -1283,7 +1309,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer, data.key = NULL; data.renderer = renderer; - eek_container_find (EEK_CONTAINER(renderer->priv->keyboard), + eek_container_find (EEK_CONTAINER(priv->keyboard), find_key_by_position_section_callback, &data); return data.key; @@ -1303,9 +1329,11 @@ create_theme_node_key_callback (EekElement *element, CreateThemeNodeData *data = user_data; EekThemeNode *theme_node; + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); + theme_node = eek_theme_node_new (data->context, data->parent, - data->renderer->priv->theme, + priv->theme, EEK_TYPE_KEY, eek_element_get_name (element), "key", @@ -1318,7 +1346,7 @@ create_theme_node_key_callback (EekElement *element, theme_node = eek_theme_node_new (data->context, data->parent, - data->renderer->priv->theme, + priv->theme, EEK_TYPE_KEY, eek_element_get_name (element), "key", @@ -1337,9 +1365,11 @@ create_theme_node_section_callback (EekElement *element, CreateThemeNodeData *data = user_data; EekThemeNode *theme_node, *parent; + EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer); + theme_node = eek_theme_node_new (data->context, data->parent, - data->renderer->priv->theme, + priv->theme, EEK_TYPE_SECTION, eek_element_get_name (element), "section", @@ -1368,22 +1398,25 @@ eek_renderer_set_theme (EekRenderer *renderer, g_return_if_fail (EEK_IS_RENDERER(renderer)); g_return_if_fail (EEK_IS_THEME(theme)); - g_return_if_fail (renderer->priv->keyboard); - if (renderer->priv->theme) - g_object_unref (renderer->priv->theme); - renderer->priv->theme = g_object_ref (theme); + EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer); + + g_return_if_fail (priv->keyboard); + + if (priv->theme) + g_object_unref (priv->theme); + priv->theme = g_object_ref (theme); theme_context = eek_theme_context_new (); theme_node = eek_theme_node_new (theme_context, NULL, - renderer->priv->theme, + priv->theme, EEK_TYPE_KEYBOARD, "keyboard", "keyboard", NULL, NULL); - g_object_set_data_full (G_OBJECT(renderer->priv->keyboard), + g_object_set_data_full (G_OBJECT(priv->keyboard), "theme-node", theme_node, (GDestroyNotify)g_object_unref); @@ -1391,7 +1424,7 @@ eek_renderer_set_theme (EekRenderer *renderer, data.context = theme_context; data.parent = theme_node; data.renderer = renderer; - eek_container_foreach_child (EEK_CONTAINER(renderer->priv->keyboard), + eek_container_foreach_child (EEK_CONTAINER(priv->keyboard), create_theme_node_section_callback, &data); } diff --git a/eek/eek-renderer.h b/eek/eek-renderer.h index 86d10042..0b97b38c 100644 --- a/eek/eek-renderer.h +++ b/eek/eek-renderer.h @@ -31,21 +31,7 @@ G_BEGIN_DECLS #define EEK_TYPE_RENDERER (eek_renderer_get_type()) -#define EEK_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_RENDERER, EekRenderer)) -#define EEK_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_RENDERER, EekRendererClass)) -#define EEK_IS_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_RENDERER)) -#define EEK_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_RENDERER)) -#define EEK_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_RENDERER, EekRendererClass)) - -typedef struct _EekRenderer EekRenderer; -typedef struct _EekRendererClass EekRendererClass; -typedef struct _EekRendererPrivate EekRendererPrivate; - -struct _EekRenderer { - GObject parent; - - EekRendererPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekRenderer, eek_renderer, EEK, RENDERER, GObject) struct _EekRendererClass { diff --git a/eek/eek-section.c b/eek/eek-section.c index 9c6a2f5a..5a04619c 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -1,17 +1,17 @@ -/* +/* * Copyright (C) 2010-2011 Daiki Ueno * Copyright (C) 2010-2011 Red Hat, Inc. - * + * * 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., 51 Franklin Street, Fifth Floor, Boston, MA @@ -52,11 +52,6 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_TYPE (EekSection, eek_section, EEK_TYPE_CONTAINER); - -#define EEK_SECTION_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SECTION, EekSectionPrivate)) - struct _EekRow { gint num_columns; @@ -65,17 +60,19 @@ struct _EekRow typedef struct _EekRow EekRow; -struct _EekSectionPrivate +typedef struct _EekSectionPrivate { gint angle; GSList *rows; EekModifierType modifiers; -}; +} EekSectionPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekSection, eek_section, EEK_TYPE_CONTAINER) static gint eek_section_real_get_n_rows (EekSection *self) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); return g_slist_length (priv->rows); } @@ -85,7 +82,7 @@ eek_section_real_add_row (EekSection *self, gint num_columns, EekOrientation orientation) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); EekRow *row; row = g_slice_new (EekRow); @@ -100,7 +97,7 @@ eek_section_real_get_row (EekSection *self, gint *num_columns, EekOrientation *orientation) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); EekRow *row; row = g_slist_nth_data (priv->rows, index); @@ -129,7 +126,7 @@ static EekKey * eek_section_real_create_key (EekSection *self, guint keycode, gint column_index, - guint row_index) + gint row_index) { EekKey *key; gint num_rows; @@ -138,7 +135,9 @@ eek_section_real_create_key (EekSection *self, num_rows = eek_section_get_n_rows (self); g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL); - row = g_slist_nth_data (self->priv->rows, row_index); + EekSectionPrivate *priv = eek_section_get_instance_private (self); + + row = g_slist_nth_data (priv->rows, row_index); if (row->num_columns < column_index + 1) row->num_columns = column_index + 1; @@ -158,7 +157,7 @@ eek_section_real_create_key (EekSection *self, static void set_level_from_modifiers (EekSection *self) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); EekKeyboard *keyboard; EekModifierType num_lock_mask; gint level = -1; @@ -173,7 +172,7 @@ set_level_from_modifiers (EekSection *self) static void eek_section_real_key_pressed (EekSection *self, EekKey *key) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); EekSymbol *symbol; EekKeyboard *keyboard; EekModifierBehavior behavior; @@ -195,7 +194,7 @@ eek_section_real_key_pressed (EekSection *self, EekKey *key) static void eek_section_real_key_released (EekSection *self, EekKey *key) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self); + EekSectionPrivate *priv = eek_section_get_instance_private (self); EekSymbol *symbol; EekKeyboard *keyboard; EekModifierBehavior behavior; @@ -225,7 +224,8 @@ eek_section_real_key_released (EekSection *self, EekKey *key) static void eek_section_finalize (GObject *object) { - EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(object); + EekSection *self = EEK_SECTION (object); + EekSectionPrivate *priv = eek_section_get_instance_private (self); GSList *head; for (head = priv->rows; head; head = g_slist_next (head)) @@ -291,8 +291,6 @@ eek_section_class_init (EekSectionClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekSectionPrivate)); - klass->get_n_rows = eek_section_real_get_n_rows; klass->add_row = eek_section_real_add_row; klass->get_row = eek_section_real_get_row; @@ -367,7 +365,7 @@ eek_section_class_init (EekSectionClass *klass) static void eek_section_init (EekSection *self) { - self->priv = EEK_SECTION_GET_PRIVATE (self); + /* void */ } /** @@ -382,8 +380,11 @@ eek_section_set_angle (EekSection *section, gint angle) { g_return_if_fail (EEK_IS_SECTION(section)); - if (section->priv->angle != angle) { - section->priv->angle = angle; + + EekSectionPrivate *priv = eek_section_get_instance_private (section); + + if (priv->angle != angle) { + priv->angle = angle; g_object_notify (G_OBJECT(section), "angle"); } } @@ -398,7 +399,10 @@ gint eek_section_get_angle (EekSection *section) { g_return_val_if_fail (EEK_IS_SECTION(section), -1); - return section->priv->angle; + + EekSectionPrivate *priv = eek_section_get_instance_private (section); + + return priv->angle; } /** @@ -529,7 +533,7 @@ static void keycounter (EekElement *element, gpointer user_data) { } } -const double keyspacing = 3.0; +const double keyspacing = 4.0; static void keyplacer(EekElement *element, gpointer user_data) { double *current_offset = user_data; diff --git a/eek/eek-section.h b/eek/eek-section.h index 77694a49..f4335ade 100644 --- a/eek/eek-section.h +++ b/eek/eek-section.h @@ -32,28 +32,7 @@ G_BEGIN_DECLS #define EEK_TYPE_SECTION (eek_section_get_type()) -#define EEK_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SECTION, EekSection)) -#define EEK_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_SECTION, EekSectionClass)) -#define EEK_IS_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_SECTION)) -#define EEK_IS_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_SECTION)) -#define EEK_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_SECTION, EekSectionClass)) - -typedef struct _EekSectionClass EekSectionClass; -typedef struct _EekSectionPrivate EekSectionPrivate; - -/** - * EekSection: - * - * The #EekSection structure contains only private data and should - * only be accessed using the provided API. - */ -struct _EekSection -{ - /*< private >*/ - EekContainer parent; - - EekSectionPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE(EekSection, eek_section, EEK, SECTION, EekContainer) /** * EekSectionClass: diff --git a/eek/eek-symbol.c b/eek/eek-symbol.c index c23fbab5..846f9fd1 100644 --- a/eek/eek-symbol.c +++ b/eek/eek-symbol.c @@ -44,29 +44,31 @@ enum { PROP_LAST }; -struct _EekSymbolPrivate { +typedef struct _EekSymbolPrivate +{ gchar *name; gchar *label; EekSymbolCategory category; EekModifierType modifier_mask; gchar *icon_name; gchar *tooltip; -}; +} EekSymbolPrivate; static void eek_serializable_iface_init (EekSerializableIface *iface); -G_DEFINE_TYPE_WITH_CODE (EekSymbol, eek_symbol, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, - eek_serializable_iface_init)); - -#define EEK_SYMBOL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SYMBOL, EekSymbolPrivate)) +G_DEFINE_TYPE_EXTENDED (EekSymbol, + eek_symbol, + G_TYPE_OBJECT, + 0, /* GTypeFlags */ + G_ADD_PRIVATE (EekSymbol) + G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, + eek_serializable_iface_init)) static void eek_symbol_real_serialize (EekSerializable *self, GVariantBuilder *builder) { - EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(self); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self)); #define NOTNULL(s) ((s) != NULL ? (s) : "") g_variant_builder_add (builder, "s", NOTNULL(priv->name)); g_variant_builder_add (builder, "s", NOTNULL(priv->label)); @@ -82,7 +84,7 @@ eek_symbol_real_deserialize (EekSerializable *self, GVariant *variant, gsize index) { - EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(self); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self)); g_variant_get_child (variant, index++, "s", &priv->name); g_variant_get_child (variant, index++, "s", &priv->label); @@ -172,7 +174,8 @@ eek_symbol_get_property (GObject *object, static void eek_symbol_finalize (GObject *object) { - EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(object); + EekSymbol *self = EEK_SYMBOL (object); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (self); g_free (priv->name); g_free (priv->label); @@ -187,8 +190,6 @@ eek_symbol_class_init (EekSymbolClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekSymbolPrivate)); - gobject_class->set_property = eek_symbol_set_property; gobject_class->get_property = eek_symbol_get_property; gobject_class->finalize = eek_symbol_finalize; @@ -241,9 +242,8 @@ eek_symbol_class_init (EekSymbolClass *klass) static void eek_symbol_init (EekSymbol *self) { - EekSymbolPrivate *priv; + EekSymbolPrivate *priv = eek_symbol_get_instance_private (self); - priv = self->priv = EEK_SYMBOL_GET_PRIVATE(self); priv->category = EEK_SYMBOL_CATEGORY_UNKNOWN; } @@ -270,11 +270,10 @@ void eek_symbol_set_name (EekSymbol *symbol, const gchar *name) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + g_free (priv->name); priv->name = g_strdup (name); } @@ -288,11 +287,10 @@ eek_symbol_set_name (EekSymbol *symbol, const gchar * eek_symbol_get_name (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + if (priv->name == NULL || *priv->name == '\0') return NULL; return priv->name; @@ -309,11 +307,10 @@ void eek_symbol_set_label (EekSymbol *symbol, const gchar *label) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + g_free (priv->label); priv->label = g_strdup (label); } @@ -327,11 +324,10 @@ eek_symbol_set_label (EekSymbol *symbol, const gchar * eek_symbol_get_label (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + if (priv->label == NULL || *priv->label == '\0') return NULL; return priv->label; @@ -348,11 +344,10 @@ void eek_symbol_set_category (EekSymbol *symbol, EekSymbolCategory category) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + priv->category = category; } @@ -365,11 +360,10 @@ eek_symbol_set_category (EekSymbol *symbol, EekSymbolCategory eek_symbol_get_category (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), EEK_SYMBOL_CATEGORY_UNKNOWN); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + return priv->category; } @@ -384,11 +378,10 @@ void eek_symbol_set_modifier_mask (EekSymbol *symbol, EekModifierType mask) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + priv->modifier_mask = mask; } @@ -401,11 +394,10 @@ eek_symbol_set_modifier_mask (EekSymbol *symbol, EekModifierType eek_symbol_get_modifier_mask (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), 0); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + return priv->modifier_mask; } @@ -433,11 +425,10 @@ void eek_symbol_set_icon_name (EekSymbol *symbol, const gchar *icon_name) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + g_free (priv->icon_name); priv->icon_name = g_strdup (icon_name); } @@ -451,11 +442,10 @@ eek_symbol_set_icon_name (EekSymbol *symbol, const gchar * eek_symbol_get_icon_name (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + if (priv->icon_name == NULL || *priv->icon_name == '\0') return NULL; return priv->icon_name; @@ -472,11 +462,10 @@ void eek_symbol_set_tooltip (EekSymbol *symbol, const gchar *tooltip) { - EekSymbolPrivate *priv; - g_return_if_fail (EEK_IS_SYMBOL(symbol)); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + g_free (priv->tooltip); priv->tooltip = g_strdup (tooltip); } @@ -490,11 +479,10 @@ eek_symbol_set_tooltip (EekSymbol *symbol, const gchar * eek_symbol_get_tooltip (EekSymbol *symbol) { - EekSymbolPrivate *priv; - g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL); - priv = EEK_SYMBOL_GET_PRIVATE(symbol); + EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol); + if (priv->tooltip == NULL || *priv->tooltip == '\0') return NULL; return priv->tooltip; diff --git a/eek/eek-symbol.h b/eek/eek-symbol.h index 4906483a..88ac8f0f 100644 --- a/eek/eek-symbol.h +++ b/eek/eek-symbol.h @@ -59,27 +59,7 @@ typedef enum { } EekSymbolCategory; #define EEK_TYPE_SYMBOL (eek_symbol_get_type()) -#define EEK_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SYMBOL, EekSymbol)) -#define EEK_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_SYMBOL, EekSymbolClass)) -#define EEK_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_SYMBOL)) -#define EEK_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_SYMBOL)) -#define EEK_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_SYMBOL, EekSymbolClass)) - -typedef struct _EekSymbolClass EekSymbolClass; -typedef struct _EekSymbolPrivate EekSymbolPrivate; - -/** - * EekSymbol: - * - * The #EekSymbol structure contains only private data and should only - * be accessed using the provided API. - */ -struct _EekSymbol { - /*< private >*/ - GObject parent; - - EekSymbolPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE(EekSymbol, eek_symbol, EEK, SYMBOL, GObject) /** * EekSymbolClass: diff --git a/eek/eek-text.c b/eek/eek-text.c index ad11265c..258e9e97 100644 --- a/eek/eek-text.c +++ b/eek/eek-text.c @@ -36,18 +36,20 @@ enum { PROP_LAST }; -struct _EekTextPrivate { +typedef struct _EekTextPrivate +{ gchar *text; -}; +} EekTextPrivate; static void eek_serializable_iface_init (EekSerializableIface *iface); -G_DEFINE_TYPE_WITH_CODE (EekText, eek_text, EEK_TYPE_SYMBOL, - G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, - eek_serializable_iface_init)); - -#define EEK_TEXT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_TEXT, EekTextPrivate)) +G_DEFINE_TYPE_EXTENDED (EekText, + eek_text, + EEK_TYPE_SYMBOL, + 0, /* GTypeFlags */ + G_ADD_PRIVATE (EekText) + G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE, + eek_serializable_iface_init)) static EekSerializableIface *eek_text_parent_serializable_iface; @@ -55,7 +57,7 @@ static void eek_text_real_serialize (EekSerializable *self, GVariantBuilder *builder) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(self); + EekTextPrivate *priv = eek_text_get_instance_private (EEK_TEXT (self)); eek_text_parent_serializable_iface->serialize (self, builder); @@ -67,7 +69,7 @@ eek_text_real_deserialize (EekSerializable *self, GVariant *variant, gsize index) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(self); + EekTextPrivate *priv = eek_text_get_instance_private (EEK_TEXT (self)); index = eek_text_parent_serializable_iface->deserialize (self, variant, @@ -93,7 +95,9 @@ eek_text_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object); + EekText *self = EEK_TEXT (object); + EekTextPrivate *priv = eek_text_get_instance_private (self); + switch (prop_id) { case PROP_TEXT: g_free (priv->text); @@ -107,11 +111,13 @@ eek_text_set_property (GObject *object, static void eek_text_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) + guint prop_id, + GValue *value, + GParamSpec *pspec) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object); + EekText *self = EEK_TEXT (object); + EekTextPrivate *priv = eek_text_get_instance_private (self); + switch (prop_id) { case PROP_TEXT: g_value_set_string (value, priv->text); @@ -125,7 +131,8 @@ eek_text_get_property (GObject *object, static void eek_text_finalize (GObject *object) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object); + EekText *self = EEK_TEXT (object); + EekTextPrivate *priv = eek_text_get_instance_private (self); g_free (priv->text); G_OBJECT_CLASS (eek_text_parent_class)->finalize (object); @@ -137,8 +144,6 @@ eek_text_class_init (EekTextClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekTextPrivate)); - gobject_class->set_property = eek_text_set_property; gobject_class->get_property = eek_text_get_property; gobject_class->finalize = eek_text_finalize; @@ -154,7 +159,7 @@ eek_text_class_init (EekTextClass *klass) static void eek_text_init (EekText *self) { - self->priv = EEK_TEXT_GET_PRIVATE(self); + /* void */ } EekText * @@ -176,7 +181,7 @@ eek_text_new (const gchar *text) const gchar * eek_text_get_text (EekText *text) { - EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(text); + EekTextPrivate *priv = eek_text_get_instance_private (text); return priv->text; } diff --git a/eek/eek-text.h b/eek/eek-text.h index 6fb21fd2..68183548 100644 --- a/eek/eek-text.h +++ b/eek/eek-text.h @@ -30,27 +30,7 @@ G_BEGIN_DECLS #define EEK_TYPE_TEXT (eek_text_get_type()) -#define EEK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_TEXT, EekText)) -#define EEK_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_TEXT, EekTextClass)) -#define EEK_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_TEXT)) -#define EEK_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_TEXT)) -#define EEK_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_TEXT, EekTextClass)) - -typedef struct _EekTextClass EekTextClass; -typedef struct _EekTextPrivate EekTextPrivate; - -/** - * EekText: - * - * The #EekText structure contains only private data and should only - * be accessed using the provided API. - */ -struct _EekText { - /*< private >*/ - EekSymbol parent; - - EekTextPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE(EekText, eek_text, EEK, TEXT, EekSymbol) struct _EekTextClass { /*< private >*/ diff --git a/eek/eek-theme-node.c b/eek/eek-theme-node.c index 4722cbf7..33c089ad 100644 --- a/eek/eek-theme-node.c +++ b/eek/eek-theme-node.c @@ -89,9 +89,6 @@ static void eek_theme_node_finalize (GObject *object); static const EekColor BLACK_COLOR = { 0, 0, 0, 0xff }; static const EekColor TRANSPARENT_COLOR = { 0, 0, 0, 0 }; -static const EekColor DEFAULT_SUCCESS_COLOR = { 0x4e, 0x9a, 0x06, 0xff }; -static const EekColor DEFAULT_WARNING_COLOR = { 0xf5, 0x79, 0x3e, 0xff }; -static const EekColor DEFAULT_ERROR_COLOR = { 0xcc, 0x00, 0x00, 0xff }; static void eek_theme_node_init (EekThemeNode *self) diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c index f4da4cf1..dd30aaf1 100644 --- a/eek/eek-xkb-layout.c +++ b/eek/eek-xkb-layout.c @@ -52,20 +52,13 @@ static void initable_iface_init (GInitableIface *initable_iface); -G_DEFINE_TYPE_WITH_CODE (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT, - G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, - initable_iface_init)); - -#define EEK_XKB_LAYOUT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutPrivate)) - enum { PROP_0, PROP_DISPLAY, PROP_LAST }; -struct _EekXkbLayoutPrivate +typedef struct _EekXkbLayoutPrivate { /* Configuration names that should synch'ed to the symbolic names in priv->xkb->names. Since we use GLib's memory allocator, @@ -82,7 +75,13 @@ struct _EekXkbLayoutPrivate gint scale_numerator; gint scale_denominator; -}; +} EekXkbLayoutPrivate; + +G_DEFINE_TYPE_EXTENDED (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT, + 0, /* GTypeFlags */ + G_ADD_PRIVATE(EekXkbLayout) + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, + initable_iface_init)) static guint find_keycode (EekXkbLayout *layout, gchar *key_name); @@ -101,7 +100,7 @@ G_INLINE_FUNC gint xkb_to_pixmap_coord (EekXkbLayout *layout, gint n) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); return n * priv->scale_numerator / priv->scale_denominator; } @@ -109,7 +108,7 @@ G_INLINE_FUNC gdouble xkb_to_pixmap_double (EekXkbLayout *layout, gdouble d) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); return d * priv->scale_numerator / priv->scale_denominator; } @@ -127,7 +126,7 @@ create_key (EekXkbLayout *layout, XkbBoundsRec *xkbbounds; XkbShapeRec *xkbshape; XkbOutlineRec *xkboutline; - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); EekKey *key; EekBounds bounds; EekSymbolMatrix *matrix = NULL; @@ -237,7 +236,7 @@ create_section (EekXkbLayout *layout, XkbSectionRec *xkbsection) { XkbGeometryRec *xkbgeometry; - EekXkbLayoutPrivate *priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); EekSection *section; EekBounds bounds; gchar *name; @@ -249,7 +248,6 @@ create_section (EekXkbLayout *layout, bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width); bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height); - priv = layout->priv; xkbgeometry = priv->xkb->geom; section = eek_keyboard_create_section (keyboard); name = XGetAtomName (priv->display, xkbsection->name); @@ -293,7 +291,7 @@ create_section (EekXkbLayout *layout, static void create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); XkbGeometryRec *xkbgeometry; EekBounds bounds; gint i; @@ -337,7 +335,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager, eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds); /* resolve modifiers dynamically assigned at run time */ - EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self); + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private ( + EEK_XKB_LAYOUT(self)); eek_keyboard_set_num_lock_mask (keyboard, XkbKeysymToModifiers (priv->display, XK_Num_Lock)); @@ -358,7 +357,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager, static void eek_xkb_layout_finalize (GObject *object) { - EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (object); + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private ( + EEK_XKB_LAYOUT (object)); g_free (priv->names.keycodes); g_free (priv->names.geometry); @@ -374,10 +374,11 @@ eek_xkb_layout_set_property (GObject *object, GParamSpec *pspec) { EekXkbLayout *layout = EEK_XKB_LAYOUT (object); + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); switch (prop_id) { case PROP_DISPLAY: - layout->priv->display = g_value_get_pointer (value); + priv->display = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -392,10 +393,11 @@ eek_xkb_layout_get_property (GObject *object, GParamSpec *pspec) { EekXkbLayout *layout = EEK_XKB_LAYOUT (object); + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); switch (prop_id) { case PROP_DISPLAY: - g_value_set_pointer (value, layout->priv->display); + g_value_set_pointer (value, priv->display); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -410,8 +412,6 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate)); - layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard; gobject_class->finalize = eek_xkb_layout_finalize; @@ -429,14 +429,14 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass) static void eek_xkb_layout_init (EekXkbLayout *self) { - self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self); + /* void */ } static gboolean get_names_from_server (EekXkbLayout *layout, GError **error) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); gchar *name; XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb); @@ -516,19 +516,21 @@ eek_xkb_layout_set_names (EekXkbLayout *layout, XkbComponentNamesRec *names, GError **error) { - if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) { - g_free (layout->priv->names.keycodes); - layout->priv->names.keycodes = g_strdup (names->keycodes); + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); + + if (g_strcmp0 (names->keycodes, priv->names.keycodes)) { + g_free (priv->names.keycodes); + priv->names.keycodes = g_strdup (names->keycodes); } - if (g_strcmp0 (names->geometry, layout->priv->names.geometry)) { - g_free (layout->priv->names.geometry); - layout->priv->names.geometry = g_strdup (names->geometry); + if (g_strcmp0 (names->geometry, priv->names.geometry)) { + g_free (priv->names.geometry); + priv->names.geometry = g_strdup (names->geometry); } - if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) { - g_free (layout->priv->names.symbols); - layout->priv->names.symbols = g_strdup (names->symbols); + if (g_strcmp0 (names->symbols, priv->names.symbols)) { + g_free (priv->names.symbols); + priv->names.symbols = g_strdup (names->symbols); } return get_keyboard_from_server (layout, error); @@ -538,7 +540,7 @@ static gboolean get_keyboard_from_server (EekXkbLayout *layout, GError **error) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); if (priv->xkb) { XkbFreeKeyboard (priv->xkb, 0, True); @@ -589,7 +591,7 @@ find_keycode (EekXkbLayout *layout, gchar *key_name) XkbKeyAliasPtr palias; guint is_name_matched; gchar *src, *dst; - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); if (!priv->xkb) return EEK_INVALID_KEYCODE; @@ -642,7 +644,7 @@ setup_scaling (EekXkbLayout *layout, gdouble width, gdouble height) { - EekXkbLayoutPrivate *priv = layout->priv; + EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout); g_return_if_fail (priv->xkb); diff --git a/eek/eek-xkb-layout.h b/eek/eek-xkb-layout.h index f715fb72..2361575c 100644 --- a/eek/eek-xkb-layout.h +++ b/eek/eek-xkb-layout.h @@ -31,23 +31,7 @@ G_BEGIN_DECLS #define EEK_TYPE_XKB_LAYOUT (eek_xkb_layout_get_type()) -#define EEK_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayout)) -#define EEK_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass)) -#define EEK_IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKB_LAYOUT)) -#define EEK_IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKB_LAYOUT)) -#define EEK_XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass)) - -typedef struct _EekXkbLayout EekXkbLayout; -typedef struct _EekXkbLayoutClass EekXkbLayoutClass; -typedef struct _EekXkbLayoutPrivate EekXkbLayoutPrivate; - -struct _EekXkbLayout -{ - /*< private >*/ - EekLayout parent; - - EekXkbLayoutPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekXkbLayout, eek_xkb_layout, EEK, XKB_LAYOUT, EekLayout) struct _EekXkbLayoutClass { diff --git a/eek/eek-xkl-layout.c b/eek/eek-xkl-layout.c index a38873e5..b3d26145 100644 --- a/eek/eek-xkl-layout.c +++ b/eek/eek-xkl-layout.c @@ -42,13 +42,6 @@ static GInitableIface *parent_initable_iface; static void initable_iface_init (GInitableIface *initable_iface); -G_DEFINE_TYPE_WITH_CODE (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT, - G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, - initable_iface_init)); - -#define EEK_XKL_LAYOUT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutPrivate)) - enum { PROP_0, PROP_MODEL, @@ -58,11 +51,17 @@ enum { PROP_LAST }; -struct _EekXklLayoutPrivate +typedef struct _EekXklLayoutPrivate { XklEngine *engine; XklConfigRec *config; -}; +} EekXklLayoutPrivate; + +G_DEFINE_TYPE_EXTENDED (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT, + 0, /* GTypeFlags */ + G_ADD_PRIVATE (EekXklLayout) + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, + initable_iface_init)) /* from gnome-keyboard-properties-xkbpv.c: * BAD STYLE: Taken from xklavier_private_xkb.h @@ -83,7 +82,8 @@ static gboolean set_xkb_component_names (EekXklLayout *layout, static void eek_xkl_layout_dispose (GObject *object) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private ( + EEK_XKL_LAYOUT (object)); if (priv->config) { g_object_unref (priv->config); @@ -157,8 +157,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate)); - gobject_class->dispose = eek_xkl_layout_dispose; gobject_class->set_property = eek_xkl_layout_set_property; gobject_class->get_property = eek_xkl_layout_get_property; @@ -215,7 +213,7 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass) static void eek_xkl_layout_init (EekXklLayout *self) { - self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self); + /* void */ } /** @@ -266,7 +264,7 @@ gboolean eek_xkl_layout_set_config (EekXklLayout *layout, XklConfigRec *config) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XklConfigRec *c; gboolean retval; @@ -329,7 +327,7 @@ gboolean eek_xkl_layout_set_model (EekXklLayout *layout, const gchar *model) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XklConfigRec *config; gboolean retval; @@ -357,7 +355,7 @@ gboolean eek_xkl_layout_set_layouts (EekXklLayout *layout, gchar **layouts) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XklConfigRec *config; gboolean retval; @@ -385,7 +383,7 @@ gboolean eek_xkl_layout_set_variants (EekXklLayout *layout, gchar **variants) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XklConfigRec *config; gboolean retval; @@ -413,7 +411,7 @@ gboolean eek_xkl_layout_set_options (EekXklLayout *layout, gchar **options) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XklConfigRec *config; gboolean retval; @@ -497,7 +495,7 @@ eek_xkl_layout_disable_option (EekXklLayout *layout, gchar * eek_xkl_layout_get_model (EekXklLayout *layout) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); g_return_val_if_fail (priv, NULL); return g_strdup (priv->config->model); @@ -513,7 +511,7 @@ eek_xkl_layout_get_model (EekXklLayout *layout) gchar ** eek_xkl_layout_get_layouts (EekXklLayout *layout) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); g_return_val_if_fail (priv, NULL); return g_strdupv (priv->config->layouts); @@ -529,7 +527,7 @@ eek_xkl_layout_get_layouts (EekXklLayout *layout) gchar ** eek_xkl_layout_get_variants (EekXklLayout *layout) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); g_return_val_if_fail (priv, NULL); return g_strdupv (priv->config->variants); @@ -545,7 +543,7 @@ eek_xkl_layout_get_variants (EekXklLayout *layout) gchar ** eek_xkl_layout_get_options (EekXklLayout *layout) { - EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); g_return_val_if_fail (priv, NULL); return g_strdupv (priv->config->options); @@ -554,7 +552,7 @@ eek_xkl_layout_get_options (EekXklLayout *layout) static gboolean set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config) { - EekXklLayoutPrivate *priv = layout->priv; + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); XkbComponentNamesRec names; gboolean retval = FALSE; @@ -628,21 +626,22 @@ initable_init (GInitable *initable, GError **error) { EekXklLayout *layout = EEK_XKL_LAYOUT (initable); + EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout); Display *display; if (!parent_initable_iface->init (initable, cancellable, error)) return FALSE; - layout->priv->config = xkl_config_rec_new (); + priv->config = xkl_config_rec_new (); g_object_get (G_OBJECT (initable), "display", &display, NULL); - layout->priv->engine = xkl_engine_get_instance (display); + priv->engine = xkl_engine_get_instance (display); - if (!xkl_config_rec_get_from_server (layout->priv->config, - layout->priv->engine)) { + if (!xkl_config_rec_get_from_server (priv->config, + priv->engine)) { g_set_error (error, EEK_ERROR, EEK_ERROR_LAYOUT_ERROR, @@ -650,7 +649,7 @@ initable_init (GInitable *initable, return FALSE; } - set_xkb_component_names (layout, layout->priv->config); + set_xkb_component_names (layout, priv->config); return TRUE; } diff --git a/eek/eek-xkl-layout.h b/eek/eek-xkl-layout.h index 966b2918..be91fea8 100644 --- a/eek/eek-xkl-layout.h +++ b/eek/eek-xkl-layout.h @@ -31,23 +31,7 @@ G_BEGIN_DECLS #define EEK_TYPE_XKL_LAYOUT (eek_xkl_layout_get_type()) -#define EEK_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayout)) -#define EEK_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass)) -#define EEK_IS_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKL_LAYOUT)) -#define EEK_IS_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKL_LAYOUT)) -#define EEK_XKL_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass)) - -typedef struct _EekXklLayout EekXklLayout; -typedef struct _EekXklLayoutClass EekXklLayoutClass; -typedef struct _EekXklLayoutPrivate EekXklLayoutPrivate; - -struct _EekXklLayout -{ - /*< private >*/ - EekXkbLayout parent; - - EekXklLayoutPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekXklLayout, eek_xkl_layout, EEK, XKL_LAYOUT, EekLayout) struct _EekXklLayoutClass { diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c index b165f166..0d99965d 100644 --- a/eek/eek-xml-layout.c +++ b/eek/eek-xml-layout.c @@ -43,19 +43,18 @@ enum { static void initable_iface_init (GInitableIface *initable_iface); -G_DEFINE_TYPE_WITH_CODE (EekXmlLayout, eek_xml_layout, EEK_TYPE_LAYOUT, - G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, - initable_iface_init)); - -#define EEK_XML_LAYOUT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayoutPrivate)) - -struct _EekXmlLayoutPrivate +typedef struct _EekXmlLayoutPrivate { gchar *id; gchar *keyboards_dir; EekXmlKeyboardDesc *desc; -}; +} EekXmlLayoutPrivate; + +G_DEFINE_TYPE_EXTENDED (EekXmlLayout, eek_xml_layout, EEK_TYPE_LAYOUT, + 0, /* GTypeFlags */ + G_ADD_PRIVATE(EekXmlLayout) + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, + initable_iface_init)) G_DEFINE_BOXED_TYPE(EekXmlKeyboardDesc, eek_xml_keyboard_desc, eek_xml_keyboard_desc_copy, eek_xml_keyboard_desc_free); @@ -903,6 +902,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager, gdouble initial_height) { EekXmlLayout *layout = EEK_XML_LAYOUT (self); + EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout); gboolean retval; /* Create an empty keyboard to which geometry and symbols @@ -911,8 +911,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager, keyboard->manager = manager; /* Read geometry information. */ - gchar *filename = g_strdup_printf ("%s.xml", layout->priv->desc->geometry); - gchar *path = g_build_filename (layout->priv->keyboards_dir, "geometry", filename, NULL); + gchar *filename = g_strdup_printf ("%s.xml", priv->desc->geometry); + gchar *path = g_build_filename (priv->keyboards_dir, "geometry", filename, NULL); g_free (filename); GError *error = NULL; @@ -921,7 +921,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager, if (!retval) { g_object_unref (keyboard); g_warning ("can't parse geometry file %s: %s", - layout->priv->desc->geometry, + priv->desc->geometry, error->message); g_error_free (error); return NULL; @@ -929,8 +929,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager, /* Read symbols information. */ GList *loaded = NULL; - retval = parse_symbols_with_prerequisites (layout->priv->keyboards_dir, - layout->priv->desc->symbols, + retval = parse_symbols_with_prerequisites (priv->keyboards_dir, + priv->desc->symbols, keyboard, &loaded, &error); @@ -938,7 +938,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager, if (!retval) { g_object_unref (keyboard); g_warning ("can't parse symbols file %s: %s", - layout->priv->desc->symbols, + priv->desc->symbols, error->message); g_error_free (error); return NULL; @@ -961,10 +961,12 @@ eek_xml_layout_set_property (GObject *object, GParamSpec *pspec) { EekXmlLayout *layout = EEK_XML_LAYOUT (object); + EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout); + switch (prop_id) { case PROP_ID: - g_free (layout->priv->id); - layout->priv->id = g_value_dup_string (value); + g_free (priv->id); + priv->id = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -979,9 +981,11 @@ eek_xml_layout_get_property (GObject *object, GParamSpec *pspec) { EekXmlLayout *layout = EEK_XML_LAYOUT (object); + EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout); + switch (prop_id) { case PROP_ID: - g_value_set_string (value, layout->priv->id); + g_value_set_string (value, priv->id); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -992,7 +996,8 @@ eek_xml_layout_get_property (GObject *object, static void eek_xml_layout_finalize (GObject *object) { - EekXmlLayoutPrivate *priv = EEK_XML_LAYOUT_GET_PRIVATE (object); + EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private ( + EEK_XML_LAYOUT (object)); g_free (priv->id); @@ -1011,8 +1016,6 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, sizeof (EekXmlLayoutPrivate)); - layout_class->create_keyboard = eek_xml_layout_real_create_keyboard; gobject_class->set_property = eek_xml_layout_set_property; @@ -1031,7 +1034,7 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass) static void eek_xml_layout_init (EekXmlLayout *self) { - self->priv = EEK_XML_LAYOUT_GET_PRIVATE (self); + /* void */ } EekLayout * @@ -1050,16 +1053,17 @@ initable_init (GInitable *initable, GError **error) { EekXmlLayout *layout = EEK_XML_LAYOUT (initable); + EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout); GList *keyboards, *p; gchar *path; EekXmlKeyboardDesc *desc; - layout->priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR"); - if (layout->priv->keyboards_dir == NULL) - layout->priv->keyboards_dir = KEYBOARDSDIR; - layout->priv->keyboards_dir = g_strdup (layout->priv->keyboards_dir); + priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR"); + if (priv->keyboards_dir == NULL) + priv->keyboards_dir = KEYBOARDSDIR; + priv->keyboards_dir = g_strdup (priv->keyboards_dir); - path = g_build_filename (layout->priv->keyboards_dir, "keyboards.xml", NULL); + path = g_build_filename (priv->keyboards_dir, "keyboards.xml", NULL); keyboards = parse_keyboards (path, error); g_free (path); if (error && *error) @@ -1067,7 +1071,7 @@ initable_init (GInitable *initable, for (p = keyboards; p; p = p->next) { desc = p->data; - if (g_strcmp0 (desc->id, layout->priv->id) == 0) + if (g_strcmp0 (desc->id, priv->id) == 0) break; } if (p == NULL) { @@ -1075,12 +1079,12 @@ initable_init (GInitable *initable, EEK_ERROR, EEK_ERROR_LAYOUT_ERROR, "no such keyboard %s", - layout->priv->id); + priv->id); return FALSE; } keyboards = g_list_remove_link (keyboards, p); - layout->priv->desc = p->data; + priv->desc = p->data; g_list_free_1 (p); g_list_free_full (keyboards, (GDestroyNotify) keyboard_desc_free); diff --git a/eek/eek-xml-layout.h b/eek/eek-xml-layout.h index 7220d72a..1210ff17 100644 --- a/eek/eek-xml-layout.h +++ b/eek/eek-xml-layout.h @@ -29,29 +29,7 @@ G_BEGIN_DECLS #define EEK_TYPE_XML_LAYOUT (eek_xml_layout_get_type()) -#define EEK_XML_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayout)) -#define EEK_XML_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XML_LAYOUT, EekXmlLayoutClass)) -#define EEK_IS_XML_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XML_LAYOUT)) -#define EEK_IS_XML_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XML_LAYOUT)) -#define EEK_XML_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayoutClass)) - -typedef struct _EekXmlLayout EekXmlLayout; -typedef struct _EekXmlLayoutClass EekXmlLayoutClass; -typedef struct _EekXmlLayoutPrivate EekXmlLayoutPrivate; - -/** - * EekXmlLayout: - * - * The #EekXmlLayout structure contains only private data and should - * only be accessed using the provided API. - */ -struct _EekXmlLayout -{ - /*< private >*/ - EekLayout parent; - - EekXmlLayoutPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekXmlLayout, eek_xml_layout, EEK, XML_LAYOUT, EekLayout) /** * EekXmlLayoutClass: diff --git a/eek/eek.c b/eek/eek.c index 8c037163..6524b387 100644 --- a/eek/eek.c +++ b/eek/eek.c @@ -38,9 +38,5 @@ void eek_init (void) { - g_type_init (); - - g_type_class_ref (EEK_TYPE_SYMBOL); - g_type_class_ref (EEK_TYPE_KEYSYM); - g_type_class_ref (EEK_TYPE_TEXT); + /* void */ } diff --git a/eekboard/Makefile.am b/eekboard/Makefile.am deleted file mode 100644 index 0e02690e..00000000 --- a/eekboard/Makefile.am +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (C) 2011 Daiki Ueno -# Copyright (C) 2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -NULL = - -lib_LTLIBRARIES = libeekboard.la - -libeekboard_headers = \ - $(srcdir)/eekboard-service.h \ - $(srcdir)/eekboard-context-service.h \ - $(srcdir)/eekboard-client.h \ - $(srcdir)/eekboard-context.h \ - $(srcdir)/eekboard-xklutil.h \ - $(NULL) - -libeekboard_private_headers = \ - $(builddir)/eekboard-marshalers.h \ - $(NULL) - -libeekboard_sources = \ - $(srcdir)/eekboard-service.c \ - $(srcdir)/eekboard-context-service.c \ - $(srcdir)/eekboard-client.c \ - $(srcdir)/eekboard-context.c \ - $(srcdir)/eekboard-xklutil.c \ - $(NULL) - -libeekboard_marshalers_sources = \ - $(builddir)/eekboard-marshalers.c \ - $(builddir)/eekboard-marshalers.h \ - $(NULL) - -BUILT_SOURCES = \ - $(libeekboard_marshalers_sources) \ - $(NULL) - -libeekboard_la_SOURCES = \ - $(libeekboard_sources) \ - $(builddir)/eekboard-marshalers.c \ - $(NULL) - -libeekboard_la_CFLAGS = \ - -DEEKBOARD_COMPILATION=1 \ - -DKEYBOARDDIR=\"$(pkgdatadir)/keyboards\" \ - -I$(top_srcdir) \ - $(GIO2_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ - $(NULL) -libeekboard_la_LIBADD = \ - $(top_builddir)/eek/libeek.la \ - $(top_builddir)/eek/libeek-xkl.la \ - $(GIO2_LIBS) \ - $(LIBXKLAVIER_LIBS) \ - $(NULL) - -eekboarddir = $(includedir)/eekboard-$(EEK_API_VERSION)/eekboard -eekboard_HEADERS = $(libeekboard_headers) - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = \ - eekboard-$(EEK_API_VERSION).pc \ - $(NULL) -DISTCLEANFILES = \ - $(BUILT_SOURCES) \ - $(pkgconfig_DATA) \ - $(NULL) - -CLEANFILES = - -EXTRA_DIST = eekboard-marshalers.list - -# gen marshal -eekboard-marshalers.h: eekboard-marshalers.list - $(AM_V_GEN) $(GLIB_GENMARSHAL) \ - --prefix=_eekboard_marshal \ - $(srcdir)/eekboard-marshalers.list --header --internal \ - > $@.tmp && \ - mv $@.tmp $@ - -eekboard-marshalers.c: eekboard-marshalers.list eekboard-marshalers.h - $(AM_V_GEN) (echo "#include \"eekboard-marshalers.h\""; \ - $(GLIB_GENMARSHAL) \ - --prefix=_eekboard_marshal \ - $(srcdir)/eekboard-marshalers.list --body --internal) \ - > $@.tmp && \ - mv $@.tmp $@ - --include $(INTROSPECTION_MAKEFILE) -INTROSPECTION_GIRS = -INTROSPECTION_SCANNER_ARGS = \ - --add-include-path=$(builddir) \ - --add-include-path=$(top_builddir)/eek \ - $(NULL) -INTROSPECTION_COMPILER_ARGS = \ - --includedir=$(builddir) \ - --includedir=$(top_builddir)/eek \ - $(NULL) - -if HAVE_INTROSPECTION -Eekboard@EEK_LIBRARY_SUFFIX@.gir: libeekboard.la -Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = \ - --identifier-prefix=Eekboard \ - --symbol-prefix=eekboard \ - $(NULL) -Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = Eek@EEK_LIBRARY_SUFFIX@ -Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeekboard_la_CFLAGS) -Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeekboard.la -Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeekboard_sources) $(libeekboard_headers) - -INTROSPECTION_GIRS += Eekboard@EEK_LIBRARY_SUFFIX@.gir - -girdir = $(datadir)/gir-1.0 -gir_DATA = $(INTROSPECTION_GIRS) - -typelibdir = $(libdir)/girepository-1.0 -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) - -CLEANFILES += $(gir_DATA) $(typelib_DATA) -endif - --include $(top_srcdir)/git.mk diff --git a/eekboard/eekboard-client.c b/eekboard/eekboard-client.c index b853ae9d..2d703646 100644 --- a/eekboard/eekboard-client.c +++ b/eekboard/eekboard-client.c @@ -36,15 +36,12 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -G_DEFINE_TYPE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY); - -#define EEKBOARD_CLIENT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CLIENT, EekboardClientPrivate)) - -struct _EekboardClientPrivate +typedef struct _EekboardClientPrivate { GHashTable *context_hash; -}; +} EekboardClientPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY) static void send_destroy_context (EekboardClient *client, EekboardContext *context, @@ -53,7 +50,7 @@ static void send_destroy_context (EekboardClient *client, static void eekboard_client_real_destroyed (EekboardClient *self) { - EekboardClientPrivate *priv = EEKBOARD_CLIENT_GET_PRIVATE(self); + EekboardClientPrivate *priv = eekboard_client_get_instance_private (self); // g_debug ("eekboard_client_real_destroyed"); g_hash_table_remove_all (priv->context_hash); @@ -63,7 +60,7 @@ static void eekboard_client_dispose (GObject *object) { EekboardClient *client = EEKBOARD_CLIENT(object); - EekboardClientPrivate *priv = EEKBOARD_CLIENT_GET_PRIVATE(client); + EekboardClientPrivate *priv = eekboard_client_get_instance_private (client); if (priv->context_hash) { GHashTableIter iter; @@ -86,9 +83,6 @@ eekboard_client_class_init (EekboardClientClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (gobject_class, - sizeof (EekboardClientPrivate)); - klass->destroyed = eekboard_client_real_destroyed; gobject_class->dispose = eekboard_client_dispose; @@ -115,8 +109,9 @@ eekboard_client_class_init (EekboardClientClass *klass) static void eekboard_client_init (EekboardClient *self) { - self->priv = EEKBOARD_CLIENT_GET_PRIVATE(self); - self->priv->context_hash = + EekboardClientPrivate *priv = eekboard_client_get_instance_private (self); + + priv->context_hash = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify)g_free, @@ -189,7 +184,9 @@ on_context_destroyed (EekboardContext *context, gpointer user_data) { EekboardClient *client = user_data; - g_hash_table_remove (client->priv->context_hash, + EekboardClientPrivate *priv = eekboard_client_get_instance_private (client); + + g_hash_table_remove (priv->context_hash, g_dbus_proxy_get_object_path (G_DBUS_PROXY(context))); } @@ -239,7 +236,9 @@ eekboard_client_create_context (EekboardClient *client, return NULL; } - g_hash_table_insert (client->priv->context_hash, + EekboardClientPrivate *priv = eekboard_client_get_instance_private (client); + + g_hash_table_insert (priv->context_hash, g_strdup (object_path), g_object_ref (context)); g_signal_connect (context, "destroyed", @@ -284,9 +283,11 @@ eekboard_client_push_context (EekboardClient *client, g_return_if_fail (EEKBOARD_IS_CLIENT(client)); g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); + EekboardClientPrivate *priv = eekboard_client_get_instance_private (client); + object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context)); - context = g_hash_table_lookup (client->priv->context_hash, + context = g_hash_table_lookup (priv->context_hash, object_path); if (!context) return; @@ -394,8 +395,10 @@ eekboard_client_destroy_context (EekboardClient *client, g_return_if_fail (EEKBOARD_IS_CLIENT(client)); g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); + EekboardClientPrivate *priv = eekboard_client_get_instance_private (client); + object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context)); - g_hash_table_remove (client->priv->context_hash, object_path); + g_hash_table_remove (priv->context_hash, object_path); send_destroy_context (client, context, cancellable); } diff --git a/eekboard/eekboard-client.h b/eekboard/eekboard-client.h index b09db298..acbb59e4 100644 --- a/eekboard/eekboard-client.h +++ b/eekboard/eekboard-client.h @@ -26,22 +26,7 @@ G_BEGIN_DECLS #define EEKBOARD_TYPE_CLIENT (eekboard_client_get_type()) -#define EEKBOARD_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CLIENT, EekboardClient)) -#define EEKBOARD_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_CLIENT, EekboardClientClass)) -#define EEKBOARD_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_CLIENT)) -#define EEKBOARD_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_CLIENT)) -#define EEKBOARD_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_CLIENT, EekboardClientClass)) - -typedef struct _EekboardClient EekboardClient; -typedef struct _EekboardClientClass EekboardClientClass; -typedef struct _EekboardClientPrivate EekboardClientPrivate; - -struct _EekboardClient { - /*< private >*/ - GDBusProxy parent; - - EekboardClientPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekboardClient, eekboard_client, EEKBOARD, CLIENT, GDBusProxy) struct _EekboardClientClass { /*< private >*/ diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 16336818..101e834f 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -82,9 +82,9 @@ struct _EekboardContextServicePrivate { GSettings *settings; }; -G_DEFINE_TYPE (EekboardContextService, eekboard_context_service, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (EekboardContextService, eekboard_context_service, G_TYPE_OBJECT); -static Display *display = NULL; +/*static Display *display = NULL; */ static EekKeyboard * eekboard_context_service_real_create_keyboard (EekboardContextService *self, @@ -356,9 +356,6 @@ eekboard_context_service_class_init (EekboardContextServiceClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekboardContextServicePrivate)); - klass->create_keyboard = eekboard_context_service_real_create_keyboard; klass->show_keyboard = eekboard_context_service_real_show_keyboard; klass->hide_keyboard = eekboard_context_service_real_hide_keyboard; @@ -483,51 +480,6 @@ eekboard_context_service_init (EekboardContextService *self) } } -static gboolean on_repeat_timeout (EekboardContextService *context); - -static gboolean -on_repeat_timeout (EekboardContextService *context) -{ - guint delay = 500; // ms - - // hardcoding; needs to connect to yet another settings path because - // org.gnome.desktop.input-sources doesn't control repeating - //g_settings_get (context->priv->settings, "repeat-interval", "u", &delay); - - context->priv->repeat_timeout_id = - g_timeout_add (delay, - (GSourceFunc)on_repeat_timeout, - context); - - return FALSE; -} - -static gboolean -on_repeat_timeout_init (EekboardContextService *context) -{ - /* FIXME: clear modifiers for further key repeat; better not - depend on modifier behavior is LATCH */ - eek_keyboard_set_modifiers (context->priv->keyboard, 0); - - /* reschedule repeat timeout only when "repeat" option is set */ - /* TODO: org.gnome.desktop.input-sources doesn't have repeat info. - * In addition, repeat is only useful when the keyboard is not in text - * input mode */ - /* - if (g_settings_get_boolean (context->priv->settings, "repeat")) { - guint delay; - - g_settings_get (context->priv->settings, "repeat-interval", "u", &delay); - context->priv->repeat_timeout_id = - g_timeout_add (delay, - (GSourceFunc)on_repeat_timeout, - context); - } else */ - context->priv->repeat_timeout_id = 0; - - return FALSE; -} - /** * eekboard_context_service_enable: * @context: an #EekboardContextService @@ -569,7 +521,9 @@ eekboard_context_service_show_keyboard (EekboardContextService *context) { g_return_if_fail (EEKBOARD_IS_CONTEXT_SERVICE(context)); - EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->show_keyboard (context); + if (!context->priv->visible) { + EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->show_keyboard (context); + } } void @@ -577,7 +531,9 @@ eekboard_context_service_hide_keyboard (EekboardContextService *context) { g_return_if_fail (EEKBOARD_IS_CONTEXT_SERVICE(context)); - EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->hide_keyboard (context); + if (context->priv->visible) { + EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->hide_keyboard (context); + } } /** diff --git a/eekboard/eekboard-context.c b/eekboard/eekboard-context.c index f3d6cd8e..f63f649a 100644 --- a/eekboard/eekboard-context.c +++ b/eekboard/eekboard-context.c @@ -49,18 +49,15 @@ enum { PROP_LAST }; -G_DEFINE_TYPE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY); - -#define EEKBOARD_CONTEXT_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContextPrivate)) - -struct _EekboardContextPrivate +typedef struct _EekboardContextPrivate { gboolean visible; gboolean enabled; gboolean fullscreen; gint group; -}; +} EekboardContextPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY) static void eekboard_context_real_g_signal (GDBusProxy *self, @@ -69,6 +66,7 @@ eekboard_context_real_g_signal (GDBusProxy *self, GVariant *parameters) { EekboardContext *context = EEKBOARD_CONTEXT (self); + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); if (g_strcmp0 (signal_name, "Enabled") == 0) { g_signal_emit (context, signals[ENABLED], 0); @@ -111,8 +109,8 @@ eekboard_context_real_g_signal (GDBusProxy *self, gboolean visible = FALSE; g_variant_get (parameters, "(b)", &visible); - if (visible != context->priv->visible) { - context->priv->visible = visible; + if (visible != priv->visible) { + priv->visible = visible; g_object_notify (G_OBJECT(context), "visible"); } return; @@ -122,8 +120,8 @@ eekboard_context_real_g_signal (GDBusProxy *self, gint group = 0; g_variant_get (parameters, "(i)", &group); - if (group != context->priv->group) { - context->priv->group = group; + if (group != priv->group) { + priv->group = group; /* g_object_notify (G_OBJECT(context), "group"); */ } return; @@ -135,13 +133,17 @@ eekboard_context_real_g_signal (GDBusProxy *self, static void eekboard_context_real_enabled (EekboardContext *self) { - self->priv->enabled = TRUE; + EekboardContextPrivate *priv = eekboard_context_get_instance_private (self); + + priv->enabled = TRUE; } static void eekboard_context_real_disabled (EekboardContext *self) { - self->priv->enabled = FALSE; + EekboardContextPrivate *priv = eekboard_context_get_instance_private (self); + + priv->enabled = FALSE; } static void @@ -164,9 +166,11 @@ eekboard_context_get_property (GObject *object, GParamSpec *pspec) { EekboardContext *context = EEKBOARD_CONTEXT(object); + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + switch (prop_id) { case PROP_VISIBLE: - g_value_set_boolean (value, context->priv->visible); + g_value_set_boolean (value, priv->visible); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -181,9 +185,6 @@ eekboard_context_class_init (EekboardContextClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekboardContextPrivate)); - klass->enabled = eekboard_context_real_enabled; klass->disabled = eekboard_context_real_disabled; klass->destroyed = eekboard_context_real_destroyed; @@ -288,7 +289,7 @@ eekboard_context_class_init (EekboardContextClass *klass) static void eekboard_context_init (EekboardContext *self) { - self->priv = EEKBOARD_CONTEXT_GET_PRIVATE(self); + /* void */ } static void @@ -485,7 +486,9 @@ eekboard_context_set_group (EekboardContext *context, { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->group != group) { + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->group != group) { g_dbus_proxy_call (G_DBUS_PROXY(context), "SetGroup", g_variant_new ("(i)", group), @@ -509,7 +512,10 @@ eekboard_context_get_group (EekboardContext *context, GCancellable *cancellable) { g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), 0); - return context->priv->group; + + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + return priv->group; } /** @@ -526,7 +532,9 @@ eekboard_context_show_keyboard (EekboardContext *context, { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->enabled) { + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->enabled) { g_dbus_proxy_call (G_DBUS_PROXY(context), "ShowKeyboard", NULL, @@ -551,7 +559,9 @@ eekboard_context_hide_keyboard (EekboardContext *context, { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->enabled) { + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->enabled) { g_dbus_proxy_call (G_DBUS_PROXY(context), "HideKeyboard", NULL, @@ -578,7 +588,9 @@ eekboard_context_press_keycode (EekboardContext *context, { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->enabled) { + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->enabled) { g_dbus_proxy_call (G_DBUS_PROXY(context), "PressKeycode", g_variant_new ("(u)", keycode), @@ -605,7 +617,9 @@ eekboard_context_release_keycode (EekboardContext *context, { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->enabled) { + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->enabled) { g_dbus_proxy_call (G_DBUS_PROXY(context), "ReleaseKeycode", g_variant_new ("(u)", keycode), @@ -627,7 +641,10 @@ gboolean eekboard_context_is_visible (EekboardContext *context) { g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE); - return context->priv->enabled && context->priv->visible; + + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + return priv->enabled && priv->visible; } /** @@ -644,7 +661,10 @@ eekboard_context_set_enabled (EekboardContext *context, gboolean enabled) { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - context->priv->enabled = enabled; + + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + priv->enabled = enabled; } /** @@ -657,7 +677,10 @@ gboolean eekboard_context_is_enabled (EekboardContext *context) { g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE); - return context->priv->enabled; + + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + return priv->enabled; } /** @@ -674,7 +697,10 @@ eekboard_context_set_fullscreen (EekboardContext *context, GCancellable *cancellable) { g_return_if_fail (EEKBOARD_IS_CONTEXT(context)); - if (context->priv->fullscreen != fullscreen) { + + EekboardContextPrivate *priv = eekboard_context_get_instance_private (context); + + if (priv->fullscreen != fullscreen) { g_dbus_proxy_call (G_DBUS_PROXY(context), "SetFullscreen", g_variant_new ("(b)", fullscreen), diff --git a/eekboard/eekboard-context.h b/eekboard/eekboard-context.h index 70f2158a..8eda6c30 100644 --- a/eekboard/eekboard-context.h +++ b/eekboard/eekboard-context.h @@ -28,28 +28,7 @@ G_BEGIN_DECLS #define EEKBOARD_TYPE_CONTEXT (eekboard_context_get_type()) -#define EEKBOARD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContext)) -#define EEKBOARD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_CONTEXT, EekboardContextClass)) -#define EEKBOARD_IS_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_CONTEXT)) -#define EEKBOARD_IS_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_CONTEXT)) -#define EEKBOARD_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContextClass)) - -typedef struct _EekboardContext EekboardContext; -typedef struct _EekboardContextClass EekboardContextClass; -typedef struct _EekboardContextPrivate EekboardContextPrivate; - -/** - * EekboardContext: - * - * The #EekboardContext structure contains only private data and - * should only be accessed using the provided API. - */ -struct _EekboardContext { - /*< private >*/ - GDBusProxy parent; - - EekboardContextPrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekboardContext, eekboard_context, EEKBOARD, CONTEXT, GDBusProxy) /** * EekboardContextClass: diff --git a/eekboard/eekboard-service.c b/eekboard/eekboard-service.c index 89a12b54..07406df2 100644 --- a/eekboard/eekboard-service.c +++ b/eekboard/eekboard-service.c @@ -50,10 +50,8 @@ enum { static guint signals[LAST_SIGNAL] = { 0, }; -#define EEKBOARD_SERVICE_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_SERVICE, EekboardServicePrivate)) - -struct _EekboardServicePrivate { +typedef struct _EekboardServicePrivate +{ GDBusConnection *connection; SmPuriOSK0 *dbus_interface; GDBusNodeInfo *introspection_data; @@ -61,9 +59,9 @@ struct _EekboardServicePrivate { char *object_path; EekboardContextService *context; // unowned reference -}; +} EekboardServicePrivate; -G_DEFINE_TYPE (EekboardService, eekboard_service, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (EekboardService, eekboard_service, G_TYPE_OBJECT) static void eekboard_service_set_property (GObject *object, @@ -72,19 +70,20 @@ eekboard_service_set_property (GObject *object, GParamSpec *pspec) { EekboardService *service = EEKBOARD_SERVICE(object); + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); GDBusConnection *connection; switch (prop_id) { case PROP_OBJECT_PATH: - if (service->priv->object_path) - g_free (service->priv->object_path); - service->priv->object_path = g_value_dup_string (value); + if (priv->object_path) + g_free (priv->object_path); + priv->object_path = g_value_dup_string (value); break; case PROP_CONNECTION: connection = g_value_get_object (value); - if (service->priv->connection) - g_object_unref (service->priv->connection); - service->priv->connection = g_object_ref (connection); + if (priv->connection) + g_object_unref (priv->connection); + priv->connection = g_object_ref (connection); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -99,13 +98,14 @@ eekboard_service_get_property (GObject *object, GParamSpec *pspec) { EekboardService *service = EEKBOARD_SERVICE(object); + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); switch (prop_id) { case PROP_OBJECT_PATH: - g_value_set_string (value, service->priv->object_path); + g_value_set_string (value, priv->object_path); break; case PROP_CONNECTION: - g_value_set_object (value, service->priv->connection); + g_value_set_object (value, priv->connection); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -117,20 +117,22 @@ static void eekboard_service_dispose (GObject *object) { EekboardService *service = EEKBOARD_SERVICE(object); - if (service->priv->connection) { - if (service->priv->registration_id > 0) { - g_dbus_connection_unregister_object (service->priv->connection, - service->priv->registration_id); - service->priv->registration_id = 0; + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); + + if (priv->connection) { + if (priv->registration_id > 0) { + g_dbus_connection_unregister_object (priv->connection, + priv->registration_id); + priv->registration_id = 0; } - g_object_unref (service->priv->connection); - service->priv->connection = NULL; + g_object_unref (priv->connection); + priv->connection = NULL; } - if (service->priv->introspection_data) { - g_dbus_node_info_unref (service->priv->introspection_data); - service->priv->introspection_data = NULL; + if (priv->introspection_data) { + g_dbus_node_info_unref (priv->introspection_data); + priv->introspection_data = NULL; } G_OBJECT_CLASS (eekboard_service_parent_class)->dispose (object); @@ -140,8 +142,9 @@ static void eekboard_service_finalize (GObject *object) { EekboardService *service = EEKBOARD_SERVICE(object); + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); - g_free (service->priv->object_path); + g_free (priv->object_path); G_OBJECT_CLASS (eekboard_service_parent_class)->finalize (object); } @@ -150,11 +153,13 @@ static gboolean handle_set_visible(SmPuriOSK0 *object, GDBusMethodInvocation *invocation, gboolean arg_visible, gpointer user_data) { EekboardService *service = user_data; - if (service->priv->context) { + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); + + if (priv->context) { if (arg_visible) { - eekboard_context_service_show_keyboard (service->priv->context); + eekboard_context_service_show_keyboard (priv->context); } else { - eekboard_context_service_hide_keyboard (service->priv->context); + eekboard_context_service_hide_keyboard (priv->context); } } sm_puri_osk0_complete_set_visible(object, invocation); @@ -165,18 +170,19 @@ static void eekboard_service_constructed (GObject *object) { EekboardService *service = EEKBOARD_SERVICE(object); + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); - service->priv->dbus_interface = sm_puri_osk0_skeleton_new(); - sm_puri_osk0_set_visible(service->priv->dbus_interface, FALSE); // TODO: use actual value - g_signal_connect(service->priv->dbus_interface, "handle-set-visible", + priv->dbus_interface = sm_puri_osk0_skeleton_new(); + sm_puri_osk0_set_visible(priv->dbus_interface, FALSE); // TODO: use actual value + g_signal_connect(priv->dbus_interface, "handle-set-visible", G_CALLBACK(handle_set_visible), service); - if (service->priv->connection && service->priv->object_path) { + if (priv->connection && priv->object_path) { GError *error = NULL; - if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(service->priv->dbus_interface), - service->priv->connection, - service->priv->object_path, + if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(priv->dbus_interface), + priv->connection, + priv->object_path, &error)) { g_warning("Error registering dbus object: %s\n", error->message); g_clear_error(&error); @@ -190,9 +196,6 @@ eekboard_service_class_init (EekboardServiceClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; - g_type_class_add_private (gobject_class, - sizeof (EekboardServicePrivate)); - klass->create_context = NULL; gobject_class->constructed = eekboard_service_constructed; @@ -250,8 +253,9 @@ eekboard_service_class_init (EekboardServiceClass *klass) static void eekboard_service_init (EekboardService *self) { - self->priv = EEKBOARD_SERVICE_GET_PRIVATE(self); - self->priv->context = NULL; + EekboardServicePrivate *priv = eekboard_service_get_instance_private (self); + + priv->context = NULL; } /** @@ -271,7 +275,9 @@ eekboard_service_new (GDBusConnection *connection, void eekboard_service_set_context(EekboardService *service, + EekboardContextService *context) +{ + EekboardServicePrivate *priv = eekboard_service_get_instance_private (service); - EekboardContextService *context) { - service->priv->context = context; + priv->context = context; } diff --git a/eekboard/eekboard-service.h b/eekboard/eekboard-service.h index 05f63ae1..58984bfb 100644 --- a/eekboard/eekboard-service.h +++ b/eekboard/eekboard-service.h @@ -28,30 +28,7 @@ G_BEGIN_DECLS #define EEKBOARD_SERVICE_INTERFACE "sm.puri.OSK0" #define EEKBOARD_TYPE_SERVICE (eekboard_service_get_type()) -#define EEKBOARD_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_SERVICE, EekboardService)) -#define EEKBOARD_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_SERVICE, EekboardServiceClass)) -#define EEKBOARD_IS_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_SERVICE)) -#define EEKBOARD_IS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_SERVICE)) -#define EEKBOARD_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_SERVICE, EekboardServiceClass)) - -typedef struct _EekboardService EekboardService; -typedef struct _EekboardServiceClass EekboardServiceClass; -typedef struct _EekboardServicePrivate EekboardServicePrivate; - -/** - * EekboardService: - * - * Manages DBus interaction. - * - * The #EekboardService structure contains only private data and - * should only be accessed using the provided API. - */ -struct _EekboardService { - /*< private >*/ - GObject parent; - - EekboardServicePrivate *priv; -}; +G_DECLARE_DERIVABLE_TYPE (EekboardService, eekboard_service, EEKBOARD, SERVICE, GObject) /** * EekboardServiceClass: diff --git a/eekboard/key-emitter.c b/eekboard/key-emitter.c index 344c2ed7..539c2331 100644 --- a/eekboard/key-emitter.c +++ b/eekboard/key-emitter.c @@ -78,11 +78,12 @@ replace_keycode (SeatEmitter *emitter, guint keycode, guint *keysym) { - GdkDisplay *display = gdk_display_get_default (); - //Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); +/* GdkDisplay *display = gdk_display_get_default (); + Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); guint old_keysym; int keysyms_per_keycode; KeySym *syms; +*/ return TRUE; // FIXME: no xkb allocated at the moment, pretending all is fine g_return_val_if_fail (emitter->xkb->min_key_code <= keycode && keycode <= emitter->xkb->max_key_code, diff --git a/examples/Makefile.am b/examples/Makefile.am deleted file mode 100644 index 4a32b9e5..00000000 --- a/examples/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -SUBDIRS = simple-client - --include $(top_srcdir)/git.mk diff --git a/examples/simple-client/Makefile.am b/examples/simple-client/Makefile.am deleted file mode 100644 index 9d10bc6b..00000000 --- a/examples/simple-client/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -EXTRA_DIST = simple-client - --include $(top_srcdir)/git.mk diff --git a/git.mk b/git.mk deleted file mode 100644 index 53133583..00000000 --- a/git.mk +++ /dev/null @@ -1,218 +0,0 @@ -# git.mk -# -# Copyright 2009, Red Hat, Inc. -# Copyright 2010,2011 Behdad Esfahbod -# Written by Behdad Esfahbod -# -# Copying and distribution of this file, with or without modification, -# is permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# -# The canonical source for this file is https://github.com/behdad/git.mk. -# -# To use in your project, import this file in your git repo's toplevel, -# then do "make -f git.mk". This modifies all Makefile.am files in -# your project to -include git.mk. Remember to add that line to new -# Makefile.am files you create in your project, or just rerun the -# "make -f git.mk". -# -# This enables automatic .gitignore generation. If you need to ignore -# more files, add them to the GITIGNOREFILES variable in your Makefile.am. -# But think twice before doing that. If a file has to be in .gitignore, -# chances are very high that it's a generated file and should be in one -# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES. -# -# The only case that you need to manually add a file to GITIGNOREFILES is -# when remove files in one of mostlyclean-local, clean-local, distclean-local, -# or maintainer-clean-local make targets. -# -# Note that for files like editor backup, etc, there are better places to -# ignore them. See "man gitignore". -# -# If "make maintainer-clean" removes the files but they are not recognized -# by this script (that is, if "git status" shows untracked files still), send -# me the output of "git status" as well as your Makefile.am and Makefile for -# the directories involved and I'll diagnose. -# -# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see -# Makefile.am.sample in the git.mk git repo. -# -# Don't EXTRA_DIST this file. It is supposed to only live in git clones, -# not tarballs. It serves no useful purpose in tarballs and clutters the -# build dir. -# -# This file knows how to handle autoconf, automake, libtool, gtk-doc, -# gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu. -# -# -# KNOWN ISSUES: -# -# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the -# submodule doesn't find us. If you have configure.{in,ac} files in -# subdirs, add a proxy git.mk file in those dirs that simply does: -# "include $(top_srcdir)/../git.mk". Add more ..'s to your taste. -# And add those files to git. See vte/gnome-pty-helper/git.mk for -# example. -# - -git-all: git-mk-install - -git-mk-install: - @echo Installing git makefile - @any_failed=; \ - find "`test -z "$(top_srcdir)" && echo . || echo "$(top_srcdir)"`" -name Makefile.am | while read x; do \ - if grep 'include .*/git.mk' $$x >/dev/null; then \ - echo $$x already includes git.mk; \ - else \ - failed=; \ - echo "Updating $$x"; \ - { cat $$x; \ - echo ''; \ - echo '-include $$(top_srcdir)/git.mk'; \ - } > $$x.tmp || failed=1; \ - if test x$$failed = x; then \ - mv $$x.tmp $$x || failed=1; \ - fi; \ - if test x$$failed = x; then : else \ - echo Failed updating $$x; >&2 \ - any_failed=1; \ - fi; \ - fi; done; test -z "$$any_failed" - -.PHONY: git-all git-mk-install - - -### .gitignore generation - -$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk - $(AM_V_GEN) \ - { \ - if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \ - for x in \ - $(DOC_MODULE)-decl-list.txt \ - $(DOC_MODULE)-decl.txt \ - tmpl/$(DOC_MODULE)-unused.sgml \ - "tmpl/*.bak" \ - xml html \ - ; do echo /$$x; done; \ - fi; \ - if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \ - for lc in $(DOC_LINGUAS); do \ - for x in \ - $(if $(DOC_MODULE),$(DOC_MODULE).xml) \ - $(DOC_PAGES) \ - $(DOC_INCLUDES) \ - ; do echo /$$lc/$$x; done; \ - done; \ - for x in \ - $(_DOC_OMF_ALL) \ - $(_DOC_DSK_ALL) \ - $(_DOC_HTML_ALL) \ - $(_DOC_MOFILES) \ - $(DOC_H_FILE) \ - "*/.xml2po.mo" \ - "*/*.omf.out" \ - ; do echo /$$x; done; \ - fi; \ - if test "x$(HELP_ID)" = x -o "x$(HELP_LINGUAS)" = x; then :; else \ - for lc in $(HELP_LINGUAS); do \ - for x in \ - $(HELP_FILES) \ - "$$lc.stamp" \ - "$$lc.mo" \ - ; do echo /$$lc/$$x; done; \ - done; \ - fi; \ - if test "x$(gsettings_SCHEMAS)" = x; then :; else \ - for x in \ - $(gsettings_SCHEMAS:.xml=.valid) \ - $(gsettings__enum_file) \ - ; do echo /$$x; done; \ - fi; \ - if test -f $(srcdir)/po/Makefile.in.in; then \ - for x in \ - po/Makefile.in.in \ - po/Makefile.in \ - po/Makefile \ - po/POTFILES \ - po/stamp-it \ - po/.intltool-merge-cache \ - "po/*.gmo" \ - "po/*.mo" \ - po/$(GETTEXT_PACKAGE).pot \ - intltool-extract.in \ - intltool-merge.in \ - intltool-update.in \ - ; do echo /$$x; done; \ - fi; \ - if test -f $(srcdir)/configure; then \ - for x in \ - autom4te.cache \ - configure \ - config.h \ - stamp-h1 \ - libtool \ - config.lt \ - ; do echo /$$x; done; \ - fi; \ - if test "x$(DEJATOOL)" = x; then :; else \ - for x in \ - $(DEJATOOL) \ - ; do echo /$$x.sum; echo /$$x.log; done; \ - echo /site.exp; \ - fi; \ - for x in \ - .gitignore \ - $(GITIGNOREFILES) \ - $(CLEANFILES) \ - $(PROGRAMS) \ - $(check_PROGRAMS) \ - $(EXTRA_PROGRAMS) \ - $(LTLIBRARIES) \ - so_locations \ - .libs _libs \ - $(MOSTLYCLEANFILES) \ - "*.$(OBJEXT)" \ - "*.lo" \ - $(DISTCLEANFILES) \ - $(am__CONFIG_DISTCLEAN_FILES) \ - $(CONFIG_CLEAN_FILES) \ - TAGS ID GTAGS GRTAGS GSYMS GPATH tags \ - "*.tab.c" \ - $(MAINTAINERCLEANFILES) \ - $(BUILT_SOURCES) \ - $(DEPDIR) \ - Makefile \ - Makefile.in \ - "*.orig" \ - "*.rej" \ - "*.bak" \ - "*~" \ - ".*.sw[nop]" \ - ".dirstamp" \ - ; do echo /$$x; done; \ - } | \ - sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \ - sed 's@/[.]/@/@g' | \ - LC_ALL=C sort | uniq > $@.tmp && \ - mv $@.tmp $@; - -all: $(srcdir)/.gitignore gitignore-recurse-maybe -gitignore-recurse-maybe: - @if test "x$(SUBDIRS)" = "x$(DIST_SUBDIRS)"; then :; else \ - $(MAKE) $(AM_MAKEFLAGS) gitignore-recurse; \ - fi; -gitignore-recurse: - @for subdir in $(DIST_SUBDIRS); do \ - case " $(SUBDIRS) " in \ - *" $$subdir "*) :;; \ - *) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir");; \ - esac; \ - done -gitignore: $(srcdir)/.gitignore gitignore-recurse - -maintainer-clean: gitignore-clean -gitignore-clean: - -rm -f $(srcdir)/.gitignore - -.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 3637f541..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -bin_PROGRAMS = \ - eekboard \ - $(NULL) - -libexec_PROGRAMS = \ - eekboard-setup \ - $(NULL) - -eekboard_CFLAGS = \ - -I$(top_srcdir) \ - $(GIO2_CFLAGS) \ - $(GTK_CFLAGS) \ - $(XKB_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ - -DLIBEXECDIR=\"$(libexecdir)\" \ - $(NULL) - -eekboard_LDADD = \ - $(top_builddir)/eekboard/libeekboard.la \ - $(top_builddir)/eek/libeek.la \ - $(top_builddir)/eek/libeek-xkl.la \ - $(GIO2_LIBS) \ - $(GTK_LIBS) \ - $(XKB_LIBS) \ - $(LIBXKLAVIER_LIBS) \ - $(NULL) - -if ENABLE_XTEST -eekboard_CFLAGS += $(XTEST_CFLAGS) -eekboard_LDADD += $(XTEST_LIBS) -endif - -if ENABLE_ATSPI -eekboard_CFLAGS += $(ATSPI2_CFLAGS) -eekboard_LDADD += $(ATSPI2_LIBS) -endif - -eekboard_headers = \ - client.h \ - $(NULL) - -eekboard_SOURCES = \ - client.c \ - client-main.c \ - $(NULL) - -eekboard_setup_CFLAGS = \ - -I$(top_srcdir) \ - $(GIO2_CFLAGS) \ - $(GTK_CFLAGS) \ - $(XKB_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ - -DPKGDATADIR=\"$(pkgdatadir)\" \ - $(NULL) - -eekboard_setup_headers = \ - preferences-dialog.h \ - $(NULL) - -eekboard_setup_SOURCES = \ - preferences-dialog.c \ - setup-main.c \ - $(NULL) - -eekboard_setup_LDADD = \ - $(top_builddir)/eek/libeek.la \ - $(GIO2_LIBS) \ - $(GTK_LIBS) \ - $(NULL) - -dist_pkgdata_DATA = preferences-dialog.ui - -noinst_HEADERS = \ - $(eekboard_headers) \ - $(eekboard_setup_headers) \ - $(NULL) - --include $(top_srcdir)/git.mk diff --git a/src/client-main.c b/src/client-main.c deleted file mode 100644 index d6e04115..00000000 --- a/src/client-main.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright (C) 2010-2011 Daiki Ueno - * Copyright (C) 2010-2011 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#include -#ifdef HAVE_ATSPI -#include -#include -#endif /* HAVE_ATSPI */ -#ifdef HAVE_IBUS -#include -#endif /* HAVE_IBUS */ -#include -#include -#include "eekboard/eekboard-client.h" -#include "client.h" - -static gboolean opt_system = FALSE; -static gboolean opt_session = FALSE; -static gchar *opt_address = NULL; - -static gboolean opt_focus = FALSE; -#ifdef HAVE_ATSPI -static gboolean opt_keystroke = FALSE; -#endif /* HAVE_ATSPI */ - -static gchar *opt_keyboards = NULL; - -static gboolean opt_fullscreen = FALSE; - -static const GOptionEntry options[] = { - {"system", 'y', 0, G_OPTION_ARG_NONE, &opt_system, - N_("Connect to the system bus")}, - {"session", 'e', 0, G_OPTION_ARG_NONE, &opt_session, - N_("Connect to the session bus")}, - {"address", 'a', 0, G_OPTION_ARG_STRING, &opt_address, - N_("Connect to the given D-Bus address")}, -#if ENABLE_FOCUS_LISTENER - {"listen-focus", 'f', 0, G_OPTION_ARG_NONE, &opt_focus, - N_("Listen focus change events")}, -#endif /* ENABLE_FOCUS_LISTENER */ -#ifdef HAVE_ATSPI - {"listen-keystroke", 's', 0, G_OPTION_ARG_NONE, &opt_keystroke, - N_("Listen keystroke events with AT-SPI")}, -#endif /* HAVE_ATSPI */ - {"keyboards", 'k', 0, G_OPTION_ARG_STRING, &opt_keyboards, - N_("Specify keyboards (comma separated)")}, - {"fullscreen", 'F', 0, G_OPTION_ARG_NONE, &opt_fullscreen, - N_("Create window in fullscreen mode")}, - {NULL} -}; - -static void -on_context_destroyed (EekboardContext *context, - gpointer user_data) -{ - gtk_main_quit (); -} - -static void -on_destroyed (EekboardClient *eekboard, - gpointer user_data) -{ - gtk_main_quit (); -} - -enum FocusListenerType { - FOCUS_NONE, - FOCUS_ATSPI, - FOCUS_IBUS -}; - -static gboolean -set_keyboards (SeatEmitter *client, - const gchar * const *keyboards) -{ - if (g_strv_length ((gchar **)keyboards) == 0) { - if (!client_enable_xkl (client)) { - g_printerr ("Can't register xklavier event listeners\n"); - return FALSE; - } - } else { - if (!client_set_keyboards (client, keyboards)) { - gchar *str = g_strjoinv (", ", (gchar **)keyboards); - g_printerr ("Can't set keyboards \"%s\"\n", str); - g_free (str); - return FALSE; - } - } - return TRUE; -} - -int -main (int argc, char **argv) -{ - SeatEmitter *client = NULL; - EekboardClient *eekboard; - EekboardContext *context; - GBusType bus_type; - GDBusConnection *connection; - GError *error; - GOptionContext *option_context; - gint focus; - GSettings *settings = NULL; - gchar **keyboards = NULL; - gint retval = 0; - - if (!gtk_init_check (&argc, &argv)) { - g_printerr ("Can't init GTK\n"); - exit (1); - } - - eek_init (); - - option_context = g_option_context_new ("eekboard-desktop-client"); - g_option_context_add_main_entries (option_context, options, NULL); - g_option_context_parse (option_context, &argc, &argv, NULL); - g_option_context_free (option_context); - - if (opt_system) - bus_type = G_BUS_TYPE_SYSTEM; - else if (opt_address) - bus_type = G_BUS_TYPE_NONE; - else - bus_type = G_BUS_TYPE_SESSION; - - switch (bus_type) { - case G_BUS_TYPE_SYSTEM: - error = NULL; - connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); - if (connection == NULL) { - g_printerr ("Can't connect to the system bus: %s\n", - error->message); - g_error_free (error); - exit (1); - } - break; - case G_BUS_TYPE_SESSION: - error = NULL; - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - if (connection == NULL) { - g_printerr ("Can't connect to the session bus: %s\n", - error->message); - g_error_free (error); - exit (1); - } - break; - case G_BUS_TYPE_NONE: - error = NULL; - connection = g_dbus_connection_new_for_address_sync (opt_address, - 0, - NULL, - NULL, - &error); - if (connection == NULL) { - g_printerr ("Can't connect to the bus at %s: %s\n", - opt_address, - error->message); - g_error_free (error); - exit (1); - } - break; - default: - g_assert_not_reached (); - break; - } - - client = client_new (connection); - g_object_unref (connection); - - if (client == NULL) { - g_printerr ("Can't create a client\n"); - exit (1); - } - - settings = g_settings_new ("org.fedorahosted.eekboard"); - focus = FOCUS_NONE; - if (opt_focus) { - gchar *focus_listener = g_settings_get_string (settings, - "focus-listener"); - const struct { - const gchar *name; - enum FocusListenerType type; - } focus_listeners[] = { -#ifdef HAVE_ATSPI - { "atspi", FOCUS_ATSPI }, -#endif -#ifdef HAVE_IBUS - { "ibus", FOCUS_IBUS }, -#endif - { NULL } - }; - gint i; - - focus = FOCUS_NONE; - for (i = 0; focus_listeners[i].name; i++) { - if (g_strcmp0 (focus_listener, focus_listeners[i].name) == 0) - focus = focus_listeners[i].type; - } - if (focus == FOCUS_NONE) { - g_printerr ("Unknown focus listener \"%s\". " - "Try \"atspi\" or \"ibus\"\n", focus_listener); - retval = 1; - goto out; - } - } - -#ifdef HAVE_ATSPI - if (focus == FOCUS_ATSPI || opt_keystroke) { - GSettings *desktop_settings = - g_settings_new ("org.gnome.desktop.interface"); - gboolean accessibility_enabled = - g_settings_get_boolean (desktop_settings, "toolkit-accessibility"); - g_object_unref (desktop_settings); - - if (accessibility_enabled) { - if (atspi_init () != 0) { - g_printerr ("Can't init AT-SPI 2\n"); - retval = 1; - goto out; - } - - if (focus == FOCUS_ATSPI && - !client_enable_atspi_focus (client)) { - g_printerr ("Can't register AT-SPI focus change event listeners\n"); - retval = 1; - goto out; - } - - if (opt_keystroke && - !client_enable_atspi_keystroke (client)) { - g_printerr ("Can't register AT-SPI keystroke event listeners\n"); - retval = 1; - goto out; - } - } else { - g_printerr ("Desktop accessibility support is disabled\n"); - retval = 1; - goto out; - } - } -#endif /* HAVE_ATSPI */ - -#ifdef HAVE_IBUS - if (focus == FOCUS_IBUS) { - ibus_init (); - - if (!client_enable_ibus_focus (client)) { - g_printerr ("Can't register IBus focus change event listeners\n"); - retval = 1; - goto out; - } - } -#endif /* HAVE_IBUS */ - -//#ifdef HAVE_XTEST - if (!client_enable_xtest (client)) { - g_printerr ("Can't init xtest\n"); - g_object_unref (client); - exit (1); - } -//#endif /* HAVE_XTEST */ - - if (!opt_focus) { - g_object_get (client, "context", &context, NULL); - g_signal_connect (context, "destroyed", - G_CALLBACK(on_context_destroyed), NULL); - g_object_unref (context); - } - - if (opt_fullscreen || - g_settings_get_boolean (settings, "start-fullscreen")) { - g_object_get (client, "context", &context, NULL); - eekboard_context_set_fullscreen (context, TRUE, NULL); - g_object_unref (context); - } - - g_object_get (client, "eekboard", &eekboard, NULL); - g_signal_connect (eekboard, "destroyed", - G_CALLBACK(on_destroyed), NULL); - g_object_unref (eekboard); - - if (opt_keyboards != NULL) { - keyboards = g_strsplit (opt_keyboards, ",", -1); - - if (!set_keyboards (client, (const gchar * const *)keyboards)) { - g_strfreev (keyboards); - retval = 1; - goto out; - } - g_strfreev (keyboards); - } - - gtk_main (); - - out: - if (client) - g_object_unref (client); - if (settings) - g_object_unref (settings); - - return retval; -} diff --git a/src/client.c b/src/client.c deleted file mode 100644 index 106e26ca..00000000 --- a/src/client.c +++ /dev/null @@ -1,1166 +0,0 @@ -/* - * Copyright (C) 2010-2011 Daiki Ueno - * Copyright (C) 2010-2011 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#include - -#ifdef HAVE_ATSPI -#include -#include -#endif /* HAVE_ATSPI */ - -#include - -#ifdef HAVE_XTEST -#include -#include -#endif /* HAVE_XTEST */ - -#include "eek/eek.h" -#include "eek/eek-xkl.h" -#include "eekboard/eekboard-client.h" -#include "eekboard/eekboard-xklutil.h" -#include "client.h" - -#include - -#define CSW 640 -#define CSH 480 - -#define DEFAULT_KEYBOARD "us" -static gchar *default_keyboards[2] = { - DEFAULT_KEYBOARD, - NULL -}; - -#define IBUS_INTERFACE_PANEL "org.freedesktop.IBus.Panel" - -enum { - PROP_0, - PROP_CONNECTION, - PROP_EEKBOARD, - PROP_CONTEXT, - PROP_KEYBOARDS, - PROP_LAST -}; - -typedef struct _ClientClass ClientClass; - -struct _Client { - GObject parent; - - EekboardClient *eekboard; - EekboardContext *context; - - GSList *keyboards; - GSList *keyboards_head; - - XklEngine *xkl_engine; - XklConfigRegistry *xkl_config_registry; - - gulong xkl_config_changed_handler; - gulong xkl_state_changed_handler; - - gulong key_activated_handler; - - gboolean follows_focus; - guint hide_keyboard_timeout_id; - - GDBusConnection *ibus_connection; - guint ibus_focus_message_filter; - -#ifdef HAVE_ATSPI - AtspiAccessible *acc; - AtspiDeviceListener *keystroke_listener; -#endif /* HAVE_ATSPI */ - - guint modifier_keycodes[8]; - XkbDescRec *xkb; - - GSettings *settings; -}; - -struct _ClientClass { - GObjectClass parent_class; -}; - -G_DEFINE_TYPE (SeatEmitter, client, G_TYPE_OBJECT); - -#if ENABLE_FOCUS_LISTENER -#define IS_KEYBOARD_VISIBLE(client) (!client->follows_focus) -#else /* ENABLE_FOCUS_LISTENER */ -#define IS_KEYBOARD_VISIBLE(client) TRUE -#endif /* !ENABLE_FOCUS_LISTENER */ - -static GdkFilterReturn filter_xkl_event (GdkXEvent *xev, - GdkEvent *event, - gpointer user_data); -static void on_xkl_config_changed (XklEngine *xklengine, - gpointer user_data); - -static void on_xkl_state_changed (XklEngine *xklengine, - XklEngineStateChange type, - gint value, - gboolean restore, - gpointer user_data); - -#ifdef HAVE_ATSPI -static void focus_listener_cb (const AtspiEvent *event, - void *user_data); - -static gboolean keystroke_listener_cb (const AtspiDeviceEvent *stroke, - void *user_data); -#endif /* HAVE_ATSPI */ -static gboolean set_keyboards (SeatEmitter *client, - const gchar * const *keyboard); -static gboolean set_keyboards_from_xkl - (SeatEmitter *client); -#ifdef HAVE_XTEST -static void update_modifier_keycodes - (Client *client); -#endif /* HAVE_XTEST */ - -static void -client_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - SeatEmitter *client = CLIENT(object); - GDBusConnection *connection; - gchar **keyboards; - - switch (prop_id) { - case PROP_CONNECTION: - connection = g_value_get_object (value); - - client->eekboard = eekboard_client_new (connection, NULL); - if (client->eekboard != NULL) { - client->context = - eekboard_client_create_context (client->eekboard, - "eekboard", - NULL); - if (client->context == NULL) { - g_object_unref (client->eekboard); - client->eekboard = NULL; - } else { - eekboard_client_push_context (client->eekboard, - client->context, - NULL); - g_settings_bind (client->settings, "keyboards", - client, "keyboards", - G_SETTINGS_BIND_GET); - } - } - break; - case PROP_KEYBOARDS: - keyboards = g_value_get_boxed (value); - if (g_strv_length (keyboards) == 0) - keyboards = default_keyboards; - client_set_keyboards (client, (const gchar * const *)keyboards); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -client_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - SeatEmitter *client = CLIENT(object); - - switch (prop_id) { - case PROP_EEKBOARD: - g_value_set_object (value, client->eekboard); - break; - case PROP_CONTEXT: - g_value_set_object (value, client->context); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -client_dispose (GObject *object) -{ - SeatEmitter *client = CLIENT(object); - - client_disable_xkl (client); - -#ifdef HAVE_ATSPI - client_disable_atspi_focus (client); - client_disable_atspi_keystroke (client); -#endif /* HAVE_ATSPI */ - - client_disable_ibus_focus (client); - if (client->ibus_connection) { - g_object_unref (client->ibus_connection); - client->ibus_connection = NULL; - } - -#ifdef HAVE_XTEST - client_disable_xtest (client); -#endif /* HAVE_XTEST */ - - if (client->context) { - g_object_unref (client->context); - client->context = NULL; - } - - if (client->eekboard) { - g_object_unref (client->eekboard); - client->eekboard = NULL; - } - - if (client->settings) { - g_object_unref (client->settings); - client->settings = NULL; - } - - G_OBJECT_CLASS (client_parent_class)->dispose (object); -} - -static void -client_finalize (GObject *object) -{ - SeatEmitter *client = CLIENT(object); - - g_slist_free (client->keyboards); - G_OBJECT_CLASS (client_parent_class)->finalize (object); -} - -static void -client_class_init (ClientClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - gobject_class->set_property = client_set_property; - gobject_class->get_property = client_get_property; - gobject_class->dispose = client_dispose; - gobject_class->finalize = client_finalize; - - pspec = g_param_spec_object ("connection", - "Connection", - "Connection", - G_TYPE_DBUS_CONNECTION, - G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE); - g_object_class_install_property (gobject_class, - PROP_CONNECTION, - pspec); - - pspec = g_param_spec_object ("eekboard", - "Eekboard", - "Eekboard", - EEKBOARD_TYPE_CLIENT, - G_PARAM_READABLE); - g_object_class_install_property (gobject_class, - PROP_EEKBOARD, - pspec); - - pspec = g_param_spec_object ("context", - "Context", - "Context", - EEKBOARD_TYPE_CONTEXT, - G_PARAM_READABLE); - g_object_class_install_property (gobject_class, - PROP_CONTEXT, - pspec); - - pspec = g_param_spec_boxed ("keyboards", - "Keyboards", - "Keyboards", - G_TYPE_STRV, - G_PARAM_WRITABLE); - g_object_class_install_property (gobject_class, - PROP_KEYBOARDS, - pspec); -} - -static void -client_init (SeatEmitter *client) -{ - client->settings = g_settings_new ("org.fedorahosted.eekboard"); -} - -gboolean -client_set_keyboards (SeatEmitter *client, - const gchar * const *keyboards) -{ - gboolean retval; - retval = set_keyboards (client, keyboards); - if (retval && IS_KEYBOARD_VISIBLE (client)) - eekboard_client_show_keyboard (client->eekboard, NULL); - return retval; -} - -gboolean -client_enable_xkl (SeatEmitter *client) -{ - GdkDisplay *display = gdk_display_get_default (); - gboolean retval; - - g_assert (display); - - if (!client->xkl_engine) { - client->xkl_engine = - xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (display)); - } - g_assert (client->xkl_engine); - - if (!client->xkl_config_registry) { - client->xkl_config_registry = - xkl_config_registry_get_instance (client->xkl_engine); - xkl_config_registry_load (client->xkl_config_registry, FALSE); - } - - client->xkl_config_changed_handler = - g_signal_connect (client->xkl_engine, "X-config-changed", - G_CALLBACK(on_xkl_config_changed), client); - client->xkl_state_changed_handler = - g_signal_connect (client->xkl_engine, "X-state-changed", - G_CALLBACK(on_xkl_state_changed), client); - - gdk_window_add_filter (NULL, - (GdkFilterFunc) filter_xkl_event, - client); - gdk_window_add_filter (gdk_get_default_root_window (), - (GdkFilterFunc) filter_xkl_event, - client); - - xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE); - - retval = set_keyboards_from_xkl (client); - if (IS_KEYBOARD_VISIBLE (client)) - eekboard_client_show_keyboard (client->eekboard, NULL); - - return retval; -} - -void -client_disable_xkl (SeatEmitter *client) -{ - if (client->xkl_engine) { - xkl_engine_stop_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE); - - if (g_signal_handler_is_connected (client->xkl_engine, - client->xkl_config_changed_handler)) - g_signal_handler_disconnect (client->xkl_engine, - client->xkl_config_changed_handler); - if (g_signal_handler_is_connected (client->xkl_engine, - client->xkl_state_changed_handler)) - g_signal_handler_disconnect (client->xkl_engine, - client->xkl_state_changed_handler); - client->xkl_engine = NULL; - } -} - -#ifdef HAVE_ATSPI -gboolean -client_enable_atspi_focus (Client *client) -{ - GError *error; - - error = NULL; - if (!atspi_event_listener_register_from_callback - ((AtspiEventListenerCB)focus_listener_cb, - client, - NULL, - "object:state-changed:focused", - &error)) { - g_warning ("can't register object:state-changed:focused handler: %s", - error->message); - g_error_free (error); - return FALSE; - } - - error = NULL; - if (!atspi_event_listener_register_from_callback - ((AtspiEventListenerCB)focus_listener_cb, - client, - NULL, - "focus:", - &error)) { - g_warning ("can't register focus: handler: %s", - error->message); - g_error_free (error); - return FALSE; - } - - client->follows_focus = TRUE; - return TRUE; -} - -void -client_disable_atspi_focus (Client *client) -{ - GError *error; - - client->follows_focus = FALSE; - - error = NULL; - if (!atspi_event_listener_deregister_from_callback - ((AtspiEventListenerCB)focus_listener_cb, - client, - "object:state-changed:focused", - &error)) { - g_warning ("can't deregister object:state-changed:focused handler: %s", - error->message); - g_error_free (error); - } - - error = NULL; - if (!atspi_event_listener_deregister_from_callback - ((AtspiEventListenerCB)focus_listener_cb, - client, - "focus:", - &error)) { - g_warning ("can't deregister focus: handler: %s", - error->message); - g_error_free (error); - } -} - -gboolean -client_enable_atspi_keystroke (Client *client) -{ - GError *error; - - client->keystroke_listener = - atspi_device_listener_new ((AtspiDeviceListenerCB)keystroke_listener_cb, - client, - NULL); - - error = NULL; - if (!atspi_register_keystroke_listener - (client->keystroke_listener, - NULL, - 0, - ATSPI_KEY_PRESSED, - ATSPI_KEYLISTENER_NOSYNC, - &error)) { - g_warning ("can't register keystroke listener for key press: %s", - error->message); - g_error_free (error); - return FALSE; - } - - error = NULL; - if (!atspi_register_keystroke_listener - (client->keystroke_listener, - NULL, - 0, - ATSPI_KEY_RELEASED, - ATSPI_KEYLISTENER_NOSYNC, - &error)) { - g_warning ("can't register keystroke listener for key release: %s", - error->message); - g_error_free (error); - return FALSE; - } - return TRUE; -} - -void -client_disable_atspi_keystroke (Client *client) -{ - if (client->keystroke_listener) { - GError *error; - - error = NULL; - if (!atspi_deregister_keystroke_listener - (client->keystroke_listener, - NULL, - 0, - ATSPI_KEY_PRESSED, - &error)) { - g_warning ("can't deregister keystroke listener for key press: %s", - error->message); - g_error_free (error); - } - - error = NULL; - if (!atspi_deregister_keystroke_listener (client->keystroke_listener, - NULL, - 0, - ATSPI_KEY_RELEASED, - &error)) { - g_warning ("can't deregister keystroke listener for key release: %s", - error->message); - g_error_free (error); - } - - g_object_unref (client->keystroke_listener); - client->keystroke_listener = NULL; - } -} - -static void -focus_listener_cb (const AtspiEvent *event, - void *user_data) -{ - Client *client = user_data; - AtspiAccessible *accessible = event->source; - AtspiStateSet *state_set = atspi_accessible_get_state_set (accessible); - AtspiRole role; - GError *error; - - error = NULL; - role = atspi_accessible_get_role (accessible, &error); - if (role == ATSPI_ROLE_INVALID) { - g_warning ("can't get accessible role: %s", - error->message); - g_error_free (error); - return; - } - - if (atspi_state_set_contains (state_set, ATSPI_STATE_EDITABLE) || - role == ATSPI_ROLE_TERMINAL) { - switch (role) { - case ATSPI_ROLE_TEXT: - case ATSPI_ROLE_PARAGRAPH: - case ATSPI_ROLE_PASSWORD_TEXT: - case ATSPI_ROLE_TERMINAL: - if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) { - client->acc = accessible; - eekboard_client_show_keyboard (client->eekboard, NULL); - } else if (g_settings_get_boolean (client->settings, "auto-hide") && - event->detail1 == 0 && accessible == client->acc) { - client->acc = NULL; - eekboard_client_hide_keyboard (client->eekboard, NULL); - } - break; - case ATSPI_ROLE_ENTRY: - if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) { - client->acc = accessible; - eekboard_client_show_keyboard (client->eekboard, NULL); - } else if (g_settings_get_boolean (client->settings, "auto-hide") && - event->detail1 == 0) { - client->acc = NULL; - eekboard_client_hide_keyboard (client->eekboard, NULL); - } - break; - - default: - ; - } - } else { - eekboard_client_hide_keyboard (client->eekboard, NULL); - } -} - -static gboolean -keystroke_listener_cb (const AtspiDeviceEvent *stroke, - void *user_data) -{ - Client *client = user_data; - - switch (stroke->type) { - case ATSPI_KEY_PRESSED: - eekboard_context_press_keycode (client->context, stroke->hw_code, NULL); - break; - case ATSPI_KEY_RELEASED: - eekboard_context_release_keycode (client->context, stroke->hw_code, NULL); - break; - default: - g_return_val_if_reached (FALSE); - } - return TRUE; -} -#endif /* HAVE_ATSPI */ - -static void -add_match_rule (GDBusConnection *connection, - const gchar *match_rule) -{ - GError *error; - GDBusMessage *message; - - message = g_dbus_message_new_method_call ("org.freedesktop.DBus", /* name */ - "/org/freedesktop/DBus", /* path */ - "org.freedesktop.DBus", /* interface */ - "AddMatch"); - g_dbus_message_set_body (message, g_variant_new ("(s)", match_rule)); - error = NULL; - if (!g_dbus_connection_send_message (connection, - message, - G_DBUS_SEND_MESSAGE_FLAGS_NONE, - NULL, - &error)) { - g_warning ("can't register match rule %s: %s", - match_rule, error->message); - g_error_free (error); - } - g_object_unref (message); -} - -static gboolean -on_hide_keyboard_timeout (SeatEmitter *client) -{ - eekboard_client_hide_keyboard (client->eekboard, NULL); - client->hide_keyboard_timeout_id = 0; - return FALSE; -} - -static GDBusMessage * -focus_message_filter (GDBusConnection *connection, - GDBusMessage *message, - gboolean incoming, - gpointer user_data) -{ - SeatEmitter *client = user_data; - - if (incoming && - g_strcmp0 (g_dbus_message_get_interface (message), - IBUS_INTERFACE_PANEL) == 0) { - const gchar *member = g_dbus_message_get_member (message); - - if (g_strcmp0 (member, "FocusIn") == 0) { - if (client->hide_keyboard_timeout_id > 0) { - g_source_remove (client->hide_keyboard_timeout_id); - client->hide_keyboard_timeout_id = 0; - } - eekboard_client_show_keyboard (client->eekboard, NULL); - } else if (g_settings_get_boolean (client->settings, "auto-hide") && - g_strcmp0 (member, "FocusOut") == 0) { - guint delay; - g_settings_get (client->settings, "auto-hide-delay", "u", &delay); - client->hide_keyboard_timeout_id = - g_timeout_add (delay, - (GSourceFunc)on_hide_keyboard_timeout, - client); - } - } - - return message; -} - -static void -_ibus_connect_focus_handlers (GDBusConnection *connection, gpointer user_data) -{ - SeatEmitter *client = user_data; - - add_match_rule (connection, - "type='method_call'," - "interface='" IBUS_INTERFACE_PANEL "'," - "member='FocusIn'"); - add_match_rule (connection, - "type='method_call'," - "interface='" IBUS_INTERFACE_PANEL "'," - "member='FocusOut'"); - client->ibus_focus_message_filter = - g_dbus_connection_add_filter (connection, - focus_message_filter, - client, - NULL); -} - -gboolean -client_enable_ibus_focus (SeatEmitter *client) -{ - if (client->ibus_connection == NULL) { - const gchar *ibus_address; - GError *error; - - ibus_address = g_getenv ("IBUS_ADDRESS"); - if (ibus_address == NULL) { - g_warning ("Can't get IBus address; set IBUS_ADDRESS"); - return FALSE; - } - - error = NULL; - client->ibus_connection = - g_dbus_connection_new_for_address_sync (ibus_address, - G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION, - NULL, - NULL, - &error); - if (client->ibus_connection == NULL) { - g_warning ("Can't open connection to IBus: %s", error->message); - g_error_free (error); - return FALSE; - } - } - _ibus_connect_focus_handlers (client->ibus_connection, client); - - client->follows_focus = TRUE; - return TRUE; -} - -void -client_disable_ibus_focus (SeatEmitter *client) -{ - client->follows_focus = FALSE; - - if (client->ibus_connection) { - if (client->ibus_focus_message_filter != 0) { - g_dbus_connection_remove_filter (client->ibus_connection, - client->ibus_focus_message_filter); - } - g_object_unref (client->ibus_connection); - client->ibus_connection = NULL; - } -} - -SeatEmitter * -client_new (GDBusConnection *connection) -{ - SeatEmitter *client = g_object_new (TYPE_CLIENT, - "connection", connection, - NULL); - if (client->context) - return client; - return NULL; -} - -static GdkFilterReturn -filter_xkl_event (GdkXEvent *xev, - GdkEvent *event, - gpointer user_data) -{ - SeatEmitter *client = user_data; - XEvent *xevent = (XEvent *)xev; - - xkl_engine_filter_events (client->xkl_engine, xevent); - return GDK_FILTER_CONTINUE; -} - -static void -on_xkl_config_changed (XklEngine *xklengine, - gpointer user_data) -{ - SeatEmitter *client = user_data; - gboolean retval; - - retval = set_keyboards_from_xkl (client); - g_return_if_fail (retval); - -#ifdef HAVE_XTEST - update_modifier_keycodes (client); -#endif /* HAVE_XTEST */ -} - -static gboolean -set_keyboards (SeatEmitter *client, - const gchar * const *keyboards) -{ - guint keyboard_id; - const gchar * const *p; - GSList *head; - - g_return_val_if_fail (keyboards != NULL, FALSE); - g_return_val_if_fail (client->context, FALSE); - - if (client->keyboards) { - for (head = client->keyboards; head; head = head->next) { - eekboard_context_remove_keyboard (client->context, - GPOINTER_TO_UINT(head->data), - NULL); - } - g_slist_free (client->keyboards); - client->keyboards = NULL; - } - - for (p = keyboards; *p != NULL; p++) { - keyboard_id = eekboard_context_add_keyboard (client->context, *p, NULL); - if (keyboard_id == 0) { - g_warning ("can't add keyboard %s", *p); - continue; - } - client->keyboards = g_slist_prepend (client->keyboards, - GUINT_TO_POINTER(keyboard_id)); - } - - client->keyboards = g_slist_reverse (client->keyboards); - client->keyboards_head = client->keyboards; - - /* select the first keyboard */ - eekboard_context_set_keyboard (client->context, - GPOINTER_TO_UINT(client->keyboards_head->data), - NULL); - return TRUE; -} - -static gboolean -set_keyboards_from_xkl (SeatEmitter *client) -{ - XklConfigRec *rec; - gchar *layout, *keyboard; - guint keyboard_id; - - rec = xkl_config_rec_new (); - xkl_config_rec_get_from_server (rec, client->xkl_engine); - layout = eekboard_xkl_config_rec_to_string (rec); - g_object_unref (rec); - - keyboard = g_strdup_printf ("xkb:%s", layout); - g_free (layout); - - keyboard_id = eekboard_context_add_keyboard (client->context, - keyboard, - NULL); - g_free (keyboard); - if (keyboard_id == 0) - return FALSE; - eekboard_context_set_keyboard (client->context, keyboard_id, NULL); - - return TRUE; -} - -static void -on_xkl_state_changed (XklEngine *xklengine, - XklEngineStateChange type, - gint value, - gboolean restore, - gpointer user_data) -{ - SeatEmitter *client = user_data; - - if (type == GROUP_CHANGED) - eekboard_context_set_group (client->context, value, NULL); -} - -/* The following functions for keyboard mapping change are direct - translation of the code in Caribou (in libcaribou/xadapter.vala): - - - get_replaced_keycode (Caribou: get_reserved_keycode) - - replace_keycode - - get_keycode_from_gdk_keymap (Caribou: best_keycode_keyval_match) -*/ -static guint -get_replaced_keycode (SeatEmitter *client) -{ - guint keycode; - - for (keycode = client->xkb->max_key_code; - keycode >= client->xkb->min_key_code; - --keycode) { - guint offset = client->xkb->map->key_sym_map[keycode].offset; - if (client->xkb->map->key_sym_map[keycode].kt_index[0] == XkbOneLevelIndex && - client->xkb->map->syms[offset] != NoSymbol) { - return keycode; - } - } - - return 0; -} - -/* Replace keysym assigned to KEYCODE to KEYSYM. Both args are used - as in-out. If KEYCODE points to 0, this function picks a keycode - from the current map and replace the associated keysym to KEYSYM. - In that case, the replaced keycode is stored in KEYCODE and the old - keysym is stored in KEYSYM. If otherwise (KEYCODE points to - non-zero keycode), it simply changes the current map with the - specified KEYCODE and KEYSYM. */ -static gboolean -replace_keycode (SeatEmitter *client, - guint keycode, - guint *keysym) -{ - GdkDisplay *display = gdk_display_get_default (); - Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - guint old_keysym; - int keysyms_per_keycode; - KeySym *syms; -return TRUE; // FIXME: no xkb allocated at the moment, pretending all is fine - g_return_val_if_fail (client->xkb->min_key_code <= keycode && - keycode <= client->xkb->max_key_code, - FALSE); - g_return_val_if_fail (keysym != NULL, FALSE); -/* - * Switch keyboard mapping? - syms = XGetKeyboardMapping (xdisplay, keycode, 1, &keysyms_per_keycode); - old_keysym = syms[0]; - syms[0] = *keysym; - XChangeKeyboardMapping (xdisplay, keycode, 1, syms, 1); - XSync (xdisplay, False); - XFree (syms); - *keysym = old_keysym; -*/ - return TRUE; -} - -static gboolean -get_keycode_from_gdk_keymap (SeatEmitter *client, - guint keysym, - guint *keycode, - guint *modifiers) -{ - GdkKeymap *keymap = gdk_keymap_get_default (); - GdkKeymapKey *keys, *best_match = NULL; - gint n_keys, i; - - if (!gdk_keymap_get_entries_for_keyval (keymap, keysym, &keys, &n_keys)) - return FALSE; - - for (i = 0; i < n_keys; i++) - if (keys[i].group == eekboard_context_get_group (client->context, NULL)) - best_match = &keys[i]; - - if (!best_match) { - g_free (keys); - return FALSE; - } - - *keycode = best_match->keycode; - *modifiers = best_match->level == 1 ? EEK_SHIFT_MASK : 0; - - g_free (keys); - return TRUE; -} - -int send_virtual_keyboard_key( - Display* dpy, - unsigned int keycode, - Bool is_press, - unsigned long delay -) { - printf("Sending fake event %d press %d delay %d\n", keycode, is_press, delay); -} - -/* never actually used? */ -static void -send_fake_modifier_key_event (SeatEmitter *client, - EekModifierType modifiers, - gboolean is_pressed) -{ - GdkDisplay *display = gdk_display_get_default (); - Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - gint i; - - for (i = 0; i < G_N_ELEMENTS(client->modifier_keycodes); i++) { - if (modifiers & (1 << i)) { - guint keycode = client->modifier_keycodes[i]; - printf("Trying to send a modifier %d press %d\n", i, is_pressed); - g_return_if_fail (keycode > 0); - - send_virtual_keyboard_key (xdisplay, - keycode, - is_pressed, - CurrentTime); - //XSync (xdisplay, False); - } - } -} - -static void -send_fake_key_event (SeatEmitter *client, - guint xkeysym, - guint keyboard_modifiers) -{ - GdkDisplay *display = gdk_display_get_default (); - Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - EekModifierType modifiers; - guint keycode; - guint old_keysym = xkeysym; - - g_return_if_fail (xkeysym > 0); - - modifiers = 0; - if (!get_keycode_from_gdk_keymap (client, xkeysym, &keycode, &modifiers)) { - keycode = get_replaced_keycode (client); - if (keycode == 0) { - g_warning ("no available keycode to replace"); - return; - } - - if (!replace_keycode (client, keycode, &old_keysym)) { - g_warning ("failed to lookup X keysym %X", xkeysym); - return; - } - } - - /* Clear level shift modifiers */ - keyboard_modifiers &= ~EEK_SHIFT_MASK; - keyboard_modifiers &= ~EEK_LOCK_MASK; - /* FIXME: may need to remap ISO_Level3_Shift and NumLock */ -#if 0 - keyboard_modifiers &= ~EEK_MOD5_MASK; - keyboard_modifiers &= ~client->alt_gr_mask; - keyboard_modifiers &= ~client->num_lock_mask; -#endif - - modifiers |= keyboard_modifiers; - - send_fake_modifier_key_event (client, modifiers, TRUE); - send_virtual_keyboard_key (xdisplay, keycode, TRUE, 20); - //XSync (xdisplay, False); - send_virtual_keyboard_key (xdisplay, keycode, FALSE, 20); - // XSync (xdisplay, False); - send_fake_modifier_key_event (client, modifiers, FALSE); - - if (old_keysym != xkeysym) - replace_keycode (client, keycode, &old_keysym); -} - -static void -send_fake_key_events (SeatEmitter *client, - EekSymbol *symbol, - guint keyboard_modifiers) -{ - /* Ignore modifier keys */ - if (eek_symbol_is_modifier (symbol)) - return; - - /* If symbol is a text, convert chars in it to keysym */ - if (EEK_IS_TEXT(symbol)) { - const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol)); - glong items_written; - gunichar *ucs4 = g_utf8_to_ucs4_fast (utf8, -1, &items_written); - gint i; - - for (i = 0; i < items_written; i++) { - guint xkeysym; - EekKeysym *keysym; - gchar *name; - - name = g_strdup_printf ("U%04X", ucs4[i]); - xkeysym = XStringToKeysym (name); - g_free (name); - - keysym = eek_keysym_new (xkeysym); - send_fake_key_events (client, - EEK_SYMBOL(keysym), - keyboard_modifiers); - } - g_free (ucs4); - return; - } - - if (EEK_IS_KEYSYM(symbol)) { - guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); - send_fake_key_event (client, xkeysym, keyboard_modifiers); - } -} - -static void -on_key_activated (EekboardContext *context, - guint keycode, - EekSymbol *symbol, - guint modifiers, - gpointer user_data) -{ - SeatEmitter *client = user_data; - - if (g_strcmp0 (eek_symbol_get_name (symbol), "cycle-keyboard") == 0) { - client->keyboards_head = g_slist_next (client->keyboards_head); - if (client->keyboards_head == NULL) - client->keyboards_head = client->keyboards; - eekboard_context_set_keyboard (client->context, - GPOINTER_TO_UINT(client->keyboards_head->data), - NULL); - return; - } - - if (g_strcmp0 (eek_symbol_get_name (symbol), "preferences") == 0) { - gchar *argv[2]; - GError *error; - - argv[0] = g_build_filename (LIBEXECDIR, "eekboard-setup", NULL); - argv[1] = NULL; - - error = NULL; - if (!g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, &error)) { - g_warning ("can't spawn %s: %s", argv[0], error->message); - g_error_free (error); - } - g_free (argv[0]); - return; - } - - send_fake_key_events (client, symbol, modifiers); -} - -#if 0 -/* Finds the first key code for each modifier and saves it in modifier_keycodes */ -static void -update_modifier_keycodes (Client *client) -{ - GdkDisplay *display = gdk_display_get_default (); - Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - XModifierKeymap *mods; - gint i, j; - - mods = XGetModifierMapping (xdisplay); - for (i = 0; i < 8; i++) { - client->modifier_keycodes[i] = 0; - for (j = 0; j < mods->max_keypermod; j++) { - KeyCode keycode = mods->modifiermap[mods->max_keypermod * i + j]; - if (keycode != 0) { - client->modifier_keycodes[i] = keycode; - break; - } - } - } - XFreeModifiermap (mods); -} -#endif -gboolean -client_enable_xtest (SeatEmitter *client) -{ - //GdkDisplay *display = gdk_display_get_default (); - //Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - int opcode, event_base, error_base, major_version, minor_version; - - /* FIXME: need at least to fetch an xkb keymap (but what for?) - g_assert (display); - - if (!XTestQueryExtension (xdisplay, - &event_base, &error_base, - &major_version, &minor_version)) { - g_warning ("XTest extension is not available"); - return FALSE; - } - - if (!XkbQueryExtension (xdisplay, - &opcode, &event_base, &error_base, - &major_version, &minor_version)) { - g_warning ("Xkb extension is not available"); - return FALSE; - } - - if (!client->xkb) - client->xkb = XkbGetMap (xdisplay, XkbKeySymsMask, XkbUseCoreKbd); - g_assert (client->xkb); - - update_modifier_keycodes (client); -*/ - client->key_activated_handler = - g_signal_connect (client->context, "key-activated", - G_CALLBACK(on_key_activated), client); - - return TRUE; -} - -void -client_disable_xtest (SeatEmitter *client) -{ - //if (client->xkb) { - // XkbFreeKeyboard (client->xkb, 0, TRUE); /* free_all = TRUE */ - //client->xkb = NULL; - //} -} -//#endif /* HAVE_XTEST */ diff --git a/src/client.h b/src/client.h deleted file mode 100644 index 749b779d..00000000 --- a/src/client.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2010-2011 Daiki Ueno - * Copyright (C) 2010-2011 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef CLIENT_H -#define CLIENT_H 1 - -#include - -G_BEGIN_DECLS - -#define TYPE_CLIENT (client_get_type()) -#define CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIENT, Client)) -#define CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIENT, ClientClass)) -#define IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIENT)) -#define IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIENT)) -#define CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIENT, ClientClass)) - -typedef struct _Client SeatEmitter; - -SeatEmitter *client_new (GDBusConnection *connection); - -gboolean client_set_keyboards (SeatEmitter *client, - const gchar * const *keyboard); - -gboolean client_enable_xkl (SeatEmitter *client); -void client_disable_xkl (SeatEmitter *client); - -gboolean client_enable_atspi_focus (SeatEmitter *client); -void client_disable_atspi_focus (SeatEmitter *client); - -gboolean client_enable_atspi_keystroke (SeatEmitter *client); -void client_disable_atspi_keystroke (SeatEmitter *client); - -gboolean client_enable_xtest (SeatEmitter *client); -void client_disable_xtest (SeatEmitter *client); - -gboolean client_enable_ibus_focus (SeatEmitter *client); -void client_disable_ibus_focus (SeatEmitter *client); - -G_END_DECLS -#endif /* CLIENT_H */ diff --git a/src/imservice.c b/src/imservice.c index aed73222..4ee756ce 100644 --- a/src/imservice.c +++ b/src/imservice.c @@ -5,8 +5,8 @@ #include "eekboard/eekboard-context-service.h" -void imservice_handle_text_change_cause(void *data, struct zwp_input_method_v2 *input_method) {} -void imservice_handle_content_type(void *data, struct zwp_input_method_v2 *input_method) {} +void imservice_handle_text_change_cause(void *data, struct zwp_input_method_v2 *input_method, uint32_t cause) {} +void imservice_handle_content_type(void *data, struct zwp_input_method_v2 *input_method, uint32_t hint, uint32_t purpose) {} void imservice_handle_unavailable(void *data, struct zwp_input_method_v2 *input_method) {} diff --git a/src/preferences-dialog.c b/src/preferences-dialog.c deleted file mode 100644 index 084941a8..00000000 --- a/src/preferences-dialog.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (C) 2011 Daiki Ueno - * Copyright (C) 2011 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#include -#include "preferences-dialog.h" -#include - -struct _PreferencesDialog { - GtkWidget *dialog; - GtkWidget *repeat_toggle; - GtkWidget *repeat_delay_scale; - GtkWidget *repeat_speed_scale; - GtkWidget *auto_hide_toggle; - GtkWidget *auto_hide_delay_scale; - GtkWidget *selected_keyboards_treeview; - GtkWidget *up_button; - GtkWidget *down_button; - GtkWidget *add_button; - GtkWidget *remove_button; - - GtkWidget *new_keyboard_dialog; - GtkWidget *available_keyboards_treeview; - - GList *available_keyboards; - GSettings *settings; -}; - -static gboolean -get_rate (GValue *value, - GVariant *variant, - gpointer user_data) -{ - int rate; - gdouble fraction; - - rate = g_variant_get_uint32 (variant); - fraction = 1.0 / ((gdouble) rate / 1000.0); - g_value_set_double (value, fraction); - return TRUE; -} - -static GVariant * -set_rate (const GValue *value, - const GVariantType *expected_type, - gpointer user_data) -{ - gdouble rate; - int msecs; - - rate = g_value_get_double (value); - msecs = (1 / rate) * 1000; - return g_variant_new_uint32 (msecs); -} - -static void -add_keyboard_to_treeview (GtkTreeView *treeview, - const gchar *id, - const gchar *longname) -{ - GtkTreeModel *model = gtk_tree_view_get_model (treeview); - GtkTreeIter iter; - - if (gtk_tree_model_get_iter_first (model, &iter)) { - do { - gchar *_id; - gtk_tree_model_get (model, &iter, 0, &_id, -1); - if (g_strcmp0 (id, _id) == 0) { - g_free (_id); - return; - } - g_free (_id); - } while (gtk_tree_model_iter_next (model, &iter)); - } - - gtk_list_store_append (GTK_LIST_STORE(model), - &iter); - gtk_list_store_set (GTK_LIST_STORE(model), - &iter, - 0, id, - 1, longname, - -1); -} - -static void -add_keyboard (GtkWidget *button, PreferencesDialog *dialog) -{ - gint retval = gtk_dialog_run (GTK_DIALOG(dialog->new_keyboard_dialog)); - if (retval == GTK_RESPONSE_OK) { - GtkTreeSelection *selection; - GtkTreeModel *model; - GList *rows, *p; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->available_keyboards_treeview)); - rows = gtk_tree_selection_get_selected_rows (selection, &model); - for (p = rows; p; p = p->next) { - GtkTreeIter iter; - if (gtk_tree_model_get_iter (model, &iter, p->data)) { - gchar *id, *longname; - gtk_tree_model_get (model, &iter, 0, &id, 1, &longname, -1); - add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->selected_keyboards_treeview), - id, - longname); - g_free (id); - g_free (longname); - } - } - } - gtk_widget_hide (dialog->new_keyboard_dialog); -} - -static void -remove_keyboard (GtkWidget *button, PreferencesDialog *dialog) -{ - GtkTreeSelection *selection; - GtkTreeModel *model; - GList *rows, *p; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview)); - rows = gtk_tree_selection_get_selected_rows (selection, &model); - for (p = rows; p; p = p->next) { - GtkTreeIter iter; - if (gtk_tree_model_get_iter (model, &iter, p->data)) - gtk_list_store_remove (GTK_LIST_STORE(model), &iter); - } -} - -static void -up_keyboard (GtkWidget *button, PreferencesDialog *dialog) -{ - GtkTreeSelection *selection; - GtkTreeModel *model; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview)); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - GtkTreeIter prev = iter; - if (gtk_tree_model_iter_previous (model, &prev)) - gtk_list_store_swap (GTK_LIST_STORE(model), &iter, &prev); - } -} - -static void -down_keyboard (GtkWidget *button, PreferencesDialog *dialog) -{ - GtkTreeSelection *selection; - GtkTreeModel *model; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dialog->selected_keyboards_treeview)); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - GtkTreeIter next = iter; - if (gtk_tree_model_iter_next (model, &next)) - gtk_list_store_swap (GTK_LIST_STORE(model), &iter, &next); - } -} - -static void -selection_changed_cb (GtkTreeSelection *selection, PreferencesDialog *dialog) -{ - gint count = gtk_tree_selection_count_selected_rows (selection); - if (count > 0) { - gtk_widget_set_sensitive (dialog->remove_button, TRUE); - gtk_widget_set_sensitive (dialog->up_button, TRUE); - gtk_widget_set_sensitive (dialog->down_button, TRUE); - } else { - gtk_widget_set_sensitive (dialog->remove_button, FALSE); - gtk_widget_set_sensitive (dialog->up_button, FALSE); - gtk_widget_set_sensitive (dialog->down_button, FALSE); - } -} - -static gint -compare_keyboard_id (const EekXmlKeyboardDesc *desc, const char *id) -{ - return g_strcmp0 (desc->id, id); -} - -static void -populate_selected_keyboards (PreferencesDialog *dialog) -{ - gchar **strv, **p; - - strv = g_settings_get_strv (dialog->settings, "keyboards"); - for (p = strv; *p != NULL; p++) { - GList *head = g_list_find_custom (dialog->available_keyboards, - *p, - (GCompareFunc) compare_keyboard_id); - if (head == NULL) { - g_warning ("unknown keyboard %s", *p); - } else { - EekXmlKeyboardDesc *desc = head->data; - add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->selected_keyboards_treeview), - desc->id, - desc->longname); - } - } - g_strfreev (strv); -} - -static void -populate_available_keyboards (PreferencesDialog *dialog) -{ - GList *p; - - for (p = dialog->available_keyboards; p; p = p->next) { - EekXmlKeyboardDesc *desc = p->data; - add_keyboard_to_treeview (GTK_TREE_VIEW(dialog->available_keyboards_treeview), - desc->id, - desc->longname); - } -} - -static void -save_keyboards (PreferencesDialog *dialog) -{ - GtkTreeModel *model; - GtkTreeIter iter; - GList *list = NULL, *head; - gchar **strv, **p; - - model = gtk_tree_view_get_model (GTK_TREE_VIEW(dialog->selected_keyboards_treeview)); - if (gtk_tree_model_get_iter_first (model, &iter)) { - do { - gchar *id; - gtk_tree_model_get (model, &iter, 0, &id, -1); - list = g_list_prepend (list, id); - } while (gtk_tree_model_iter_next (model, &iter)); - } - list = g_list_reverse (list); - - strv = g_new0 (gchar *, g_list_length (list) + 1); - for (head = list, p = strv; head; head = head->next, p++) { - *p = head->data; - } - g_settings_set_strv (dialog->settings, - "keyboards", - (const gchar * const *)strv); - g_strfreev (strv); - g_list_free (list); -} - -PreferencesDialog * -preferences_dialog_new (void) -{ - PreferencesDialog *dialog; - gchar *ui_path; - GtkBuilder *builder; - GObject *object; - GError *error; - GtkListStore *store; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - GtkTreeSelection *selection; - - dialog = g_slice_new0 (PreferencesDialog); - dialog->settings = g_settings_new ("org.fedorahosted.eekboard"); - - builder = gtk_builder_new (); - gtk_builder_set_translation_domain (builder, "eekboard"); - ui_path = g_build_filename (PKGDATADIR, - "preferences-dialog.ui", - NULL); - error = NULL; - if (gtk_builder_add_from_file (builder, ui_path, &error) == 0) { - g_warning ("can't load %s: %s", ui_path, error->message); - g_error_free (error); - } - g_free (ui_path); - - object = gtk_builder_get_object (builder, "dialog"); - dialog->dialog = GTK_WIDGET(object); - - object = gtk_builder_get_object (builder, "repeat_toggle"); - dialog->repeat_toggle = GTK_WIDGET(object); - - g_settings_bind (dialog->settings, "repeat", - dialog->repeat_toggle, "active", - G_SETTINGS_BIND_DEFAULT); - - object = gtk_builder_get_object (builder, "repeat_delay_scale"); - dialog->repeat_delay_scale = GTK_WIDGET(object); - - g_settings_bind (dialog->settings, "repeat-delay", - gtk_range_get_adjustment (GTK_RANGE (dialog->repeat_delay_scale)), "value", - G_SETTINGS_BIND_DEFAULT); - - object = gtk_builder_get_object (builder, "repeat_speed_scale"); - dialog->repeat_speed_scale = GTK_WIDGET(object); - - g_settings_bind_with_mapping (dialog->settings, "repeat-interval", - gtk_range_get_adjustment (GTK_RANGE (gtk_builder_get_object (builder, "repeat_speed_scale"))), "value", - G_SETTINGS_BIND_DEFAULT, - get_rate, set_rate, NULL, NULL); - - object = gtk_builder_get_object (builder, "auto_hide_toggle"); - dialog->auto_hide_toggle = GTK_WIDGET(object); - - g_settings_bind (dialog->settings, "auto-hide", - dialog->auto_hide_toggle, "active", - G_SETTINGS_BIND_DEFAULT); - - object = gtk_builder_get_object (builder, "auto_hide_delay_scale"); - dialog->auto_hide_delay_scale = GTK_WIDGET(object); - - g_settings_bind (dialog->settings, "auto-hide-delay", - gtk_range_get_adjustment (GTK_RANGE (dialog->auto_hide_delay_scale)), "value", - G_SETTINGS_BIND_DEFAULT); - - object = gtk_builder_get_object (builder, - "selected_keyboards_treeview"); - dialog->selected_keyboards_treeview = GTK_WIDGET(object); - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object)); - g_signal_connect (G_OBJECT(selection), "changed", - G_CALLBACK(selection_changed_cb), dialog); - - renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new ()); - column = gtk_tree_view_column_new_with_attributes ("Keyboard", - renderer, - "text", - 1, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (object), column); - - object = gtk_builder_get_object (builder, "up_button"); - dialog->up_button = GTK_WIDGET(object); - g_signal_connect (object, "clicked", - G_CALLBACK(up_keyboard), dialog); - - object = gtk_builder_get_object (builder, "down_button"); - dialog->down_button = GTK_WIDGET(object); - g_signal_connect (object, "clicked", - G_CALLBACK(down_keyboard), dialog); - - object = gtk_builder_get_object (builder, "add_button"); - dialog->add_button = GTK_WIDGET(object); - g_signal_connect (object, "clicked", - G_CALLBACK(add_keyboard), dialog); - - object = gtk_builder_get_object (builder, "remove_button"); - dialog->remove_button = GTK_WIDGET(object); - g_signal_connect (object, "clicked", - G_CALLBACK(remove_keyboard), dialog); - - object = gtk_builder_get_object (builder, "new_keyboard_dialog"); - dialog->new_keyboard_dialog = GTK_WIDGET(object); - - object = gtk_builder_get_object (builder, - "available_keyboards_treeview"); - dialog->available_keyboards_treeview = GTK_WIDGET(object); - - renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new ()); - column = gtk_tree_view_column_new_with_attributes ("Keyboard", - renderer, - "text", - 1, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (object), column); - - object = gtk_builder_get_object (builder, - "available_keyboards_liststore"); - store = GTK_LIST_STORE(object); - - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store), - 1, - GTK_SORT_ASCENDING); - - dialog->available_keyboards = eek_xml_list_keyboards (); - - populate_selected_keyboards (dialog); - populate_available_keyboards (dialog); - - g_object_unref (builder); - - return dialog; -} - -void -preferences_dialog_run (PreferencesDialog *dialog) -{ - gtk_window_present (GTK_WINDOW(dialog->dialog)); - gtk_dialog_run (GTK_DIALOG(dialog->dialog)); - save_keyboards (dialog); -} - -void -preferences_dialog_free (PreferencesDialog *dialog) -{ - gtk_widget_destroy (dialog->dialog); - // gtk_widget_destroy (dialog->new_keyboard_dialog); - - g_object_unref (dialog->settings); - g_list_free_full (dialog->available_keyboards, - (GDestroyNotify) eek_xml_keyboard_desc_free); - - g_slice_free (PreferencesDialog, dialog); -} diff --git a/src/preferences-dialog.h b/src/preferences-dialog.h deleted file mode 100644 index 85ee8f7a..00000000 --- a/src/preferences-dialog.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2011 Daiki Ueno - * Copyright (C) 2011 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef PREFERENCES_DIALOG_H -#define PREFERENCES_DIALOG_H 1 - -#include - -G_BEGIN_DECLS - -typedef struct _PreferencesDialog PreferencesDialog; - -PreferencesDialog *preferences_dialog_new (void); -void preferences_dialog_run (PreferencesDialog *dialog); -void preferences_dialog_free (PreferencesDialog *dialog); - -G_END_DECLS -#endif /* PREFERENCES_DIALOG_H */ diff --git a/src/preferences-dialog.ui b/src/preferences-dialog.ui deleted file mode 100644 index 3caf4150..00000000 --- a/src/preferences-dialog.ui +++ /dev/null @@ -1,729 +0,0 @@ - - - - - gtk-close - - - gtk-cancel - - - Select - gtk-ok - - - 100 - 2000 - 500 - 10 - 10 - - - - - - - - - - - False - 5 - Keyboard - True - dialog - - - True - False - vertical - 2 - - - True - False - end - - - - - - - - - - - - True - True - True - action1 - - - False - True - 3 - - - - - False - True - end - 0 - - - - - True - True - 10 - - - True - False - 12 - 18 - - - True - False - 6 - - - True - False - 0 - Repeat Keys - - - - - - False - False - 0 - - - - - True - False - - - True - False - - - - False - False - 0 - - - - - True - False - 6 - - - Key presses _repeat when key is held down - True - True - False - False - True - 0 - True - - - False - False - 0 - - - - - True - False - 2 - 4 - - - True - False - 0 - _Speed: - True - center - repeat_speed_scale - - - 1 - 2 - GTK_SHRINK - - - - - - True - False - 1 - 10 - Short - - - - - - - 1 - 2 - GTK_SHRINK - - - - - - True - False - 1 - 10 - Slow - - - - - - - 1 - 2 - 1 - 2 - GTK_SHRINK - - - - - - True - True - repeat_delay_adjustment - False - - - 2 - 3 - - - - - - True - True - repeat_speed_adjustment - False - - - Repeat keys speed - - - - - 2 - 3 - 1 - 2 - - - - - - True - False - 0 - Long - - - - - - - 3 - 4 - GTK_SHRINK - - - - - - True - False - 0 - Fast - - - - - - - 3 - 4 - 1 - 2 - GTK_SHRINK - - - - - - True - False - 0 - _Delay: - True - center - repeat_delay_scale - - - GTK_SHRINK - - - - - - False - False - 1 - - - - - True - True - 1 - - - - - False - False - 1 - - - - - False - False - 0 - - - - - True - False - 6 - - - True - False - 0 - Focus following - - - - - - False - False - 0 - - - - - True - False - - - True - False - - - - False - False - 0 - - - - - True - False - 6 - - - Auto hide window when focus is out - True - True - False - False - True - 0 - True - - - False - False - 0 - - - - - True - False - 4 - - - True - False - 0 - _Delay: - True - center - auto_hide_delay_scale - - - GTK_SHRINK - - - - - - True - False - 1 - 10 - Short - - - - - - - 1 - 2 - GTK_SHRINK - - - - - - True - True - auto_hide_delay_adjustment - False - - - 2 - 3 - - - - - - True - False - 0 - Long - - - - - - - 3 - 4 - GTK_SHRINK - - - - - - False - False - 1 - - - - - True - True - 1 - - - - - False - False - 1 - - - - - False - False - 1 - - - - - - - True - False - Typing - - - False - - - - - True - False - 12 - 18 - - - True - True - selected_keyboards_liststore - False - False - - - - - - True - True - 0 - - - - - True - False - 2 - end - - - gtk-go-up - True - False - True - True - False - True - - - False - True - 0 - - - - - gtk-go-down - True - False - True - True - False - True - - - False - True - 1 - - - - - gtk-add - True - True - True - False - True - - - False - True - 2 - - - - - gtk-remove - True - False - True - True - False - True - - - False - True - 3 - - - - - False - False - 1 - - - - - 1 - - - - - True - False - Keyboards - - - 1 - False - - - - - - - - - - - True - True - 1 - - - - - - button1 - - - - False - 5 - 430 - True - dialog - dialog - - - False - vertical - 2 - - - False - end - - - True - True - True - action2 - - - False - True - 0 - - - - - True - True - True - action3 - - - False - True - 1 - - - - - False - True - end - 0 - - - - - True - True - in - - - True - True - available_keyboards_liststore - False - False - - - - - - - - True - True - 1 - - - - - - button2 - button3 - - - - 100 - 2000 - 500 - 10 - 10 - - - 0.5 - 50 - 33.299999999999997 - 1 - 1 - - - - - - - - - - diff --git a/src/server-context-service.c b/src/server-context-service.c index 90371257..69d9df95 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -1,7 +1,7 @@ -/* +/* * Copyright (C) 2010-2011 Daiki Ueno * Copyright (C) 2010-2011 Red Hat, Inc. - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or @@ -65,10 +65,10 @@ static void set_dock (GtkWidget *widget, GtkAllocation *allocation); static void -on_monitors_changed (GdkScreen *screen, - gpointer user_data) +on_monitors_changed (GdkScreen *screen, + ServerContextService *context) + { - ServerContextService *context = user_data; if (context->window) set_geometry (context); } @@ -87,18 +87,16 @@ on_destroy (GtkWidget *widget, gpointer user_data) } static void -on_notify_keyboard (GObject *object, - GParamSpec *spec, - gpointer user_data) +on_notify_keyboard (GObject *object, + GParamSpec *spec, + ServerContextService *context) { - ServerContextService *context = user_data; const EekKeyboard *keyboard; keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); - if (!keyboard) { + if (!keyboard) g_error("Programmer error: keyboard layout was unset!"); - } // The keymap will get set even if the window is hidden. // It's not perfect, @@ -109,8 +107,7 @@ on_notify_keyboard (GObject *object, if (context->window) { if (keyboard == NULL) { gtk_widget_hide (context->window); - gtk_widget_destroy (context->widget); - context->widget = NULL; + g_clear_pointer (&context->widget, gtk_widget_destroy); } else { gboolean was_visible = gtk_widget_get_visible (context->window); /* avoid to send KeyboardVisibilityChanged */ @@ -125,21 +122,21 @@ on_notify_keyboard (GObject *object, } } } - + static void -on_notify_fullscreen (GObject *object, - GParamSpec *spec, - gpointer user_data) +on_notify_fullscreen (GObject *object, // <--- context + GParamSpec *spec, + ServerContextService *context) // <--- more context { - ServerContextService *context = user_data; if (context->window) set_geometry (context); } static void -on_notify_visible (GObject *object, GParamSpec *spec, gpointer user_data) +on_notify_visible (GObject *object, // <--- context + GParamSpec *spec, + ServerContextService *context) // <--- more context { - ServerContextService *context = user_data; gboolean visible; g_object_get (object, "visible", &visible, NULL); @@ -147,7 +144,7 @@ on_notify_visible (GObject *object, GParamSpec *spec, gpointer user_data) } static void -set_dock (GtkWidget *widget, GtkAllocation *allocation) +set_dock (GtkWidget *widget, GtkAllocation *allocation) // <--- FIXME: this could go { #ifdef HAVE_XDOCK GdkWindow *window = gtk_widget_get_window (widget); @@ -155,7 +152,7 @@ set_dock (GtkWidget *widget, GtkAllocation *allocation) /* set window type to dock */ gdk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK); - + vals[0] = 0; vals[1] = 0; vals[2] = 0; @@ -198,15 +195,14 @@ on_size_allocate_set_dock (GtkWidget *widget, } static void -on_realize_set_non_maximizable (GtkWidget *widget, - gpointer user_data) +on_realize_set_non_maximizable (GtkWidget *widget, + ServerContextService *context) { - ServerContextService *context = user_data; g_assert (context && context->window == widget); /* make the window not maximizable */ - gdk_window_set_functions (gtk_widget_get_window (widget), + gdk_window_set_functions (gtk_widget_get_window (widget), // FIXME: This seems to affect #22 GDK_FUNC_RESIZE | GDK_FUNC_MOVE | GDK_FUNC_MINIMIZE | @@ -216,18 +212,16 @@ on_realize_set_non_maximizable (GtkWidget *widget, static void set_geometry (ServerContextService *context) { - GdkScreen *screen; - GdkWindow *root; - gint monitor; + GdkScreen *screen = gdk_screen_get_default (); + GdkWindow *root = gdk_screen_get_root_window (screen); + GdkDisplay *display = gdk_display_get_default (); + GdkMonitor *monitor = gdk_display_get_monitor_at_window (display, root); + EekKeyboard *keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); + GdkRectangle rect; - const EekKeyboard *keyboard; EekBounds bounds; - screen = gdk_screen_get_default (); - root = gtk_widget_get_root_window (context->window); - monitor = gdk_screen_get_monitor_at_window (screen, root); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); - keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); + gdk_monitor_get_geometry (monitor, &rect); eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); g_signal_handlers_disconnect_by_func (context->window, @@ -238,14 +232,14 @@ set_geometry (ServerContextService *context) context); if (eekboard_context_service_get_fullscreen (EEKBOARD_CONTEXT_SERVICE(context))) { - gint width = rect.width; + gint width = rect.width; gint height = rect.height; if (width > height) { - width *= context->size_constraint_landscape[0]; + width *= context->size_constraint_landscape[0]; height *= context->size_constraint_landscape[1]; } else { - width *= context->size_constraint_portrait[0]; + width *= context->size_constraint_portrait[0]; height *= context->size_constraint_portrait[1]; } @@ -282,12 +276,12 @@ set_geometry (ServerContextService *context) } static void -make_window (ServerContextService *context) { - if (context->window) { +make_window (ServerContextService *context) +{ + if (context->window) g_error("Window already present"); - return; - } - context->window = GTK_WIDGET(g_object_new ( + + context->window = g_object_new ( PHOSH_TYPE_LAYER_SURFACE, "layer-shell", squeek_wayland->layer_shell, "wl-output", g_ptr_array_index(squeek_wayland->outputs, 0), // TODO: select output as needed, @@ -300,13 +294,18 @@ make_window (ServerContextService *context) { "exclusive-zone", 200, //"namespace", "phosh home", NULL - )); + ); + g_signal_connect (context->window, "destroy", - G_CALLBACK(on_destroy), context); + G_CALLBACK(on_destroy), + context); + context->notify_visible_handler = g_signal_connect (context->window, "notify::visible", - G_CALLBACK(on_notify_visible), context); + G_CALLBACK(on_notify_visible), + context); + // FIXME: these properties could all be set in g_object_new() // The properties below are just to make hacking easier. // The way we use layer-shell overrides some, // and there's no space in the protocol for others. @@ -321,8 +320,9 @@ make_window (ServerContextService *context) { } static void -destroy_window (ServerContextService *context) { - context->window = NULL; +destroy_window (ServerContextService *context) +{ + context->window = NULL; // FIXME: doesn't destroy much } static void @@ -330,7 +330,7 @@ update_widget (ServerContextService *context) { EekKeyboard *keyboard; EekBounds bounds; - gchar *theme_path; + g_autofree gchar *theme_path = g_build_filename (THEMESDIR, "default.css", NULL); EekTheme *theme; if (context->widget) { @@ -344,12 +344,15 @@ update_widget (ServerContextService *context) g_free (theme_path); keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); - eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); - context->widget = eek_gtk_keyboard_new (keyboard); - eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme); - g_object_unref (theme); + eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); // <--- FIXME: bounds not used - gtk_widget_set_has_tooltip (context->widget, TRUE); + g_clear_pointer (&context->widget, gtk_widget_destroy); + context->widget = eek_gtk_keyboard_new (keyboard); + + eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme); + g_clear_object (&theme); + + gtk_widget_set_has_tooltip (context->widget, TRUE); // <--- FIXME: I've never seen one gtk_container_add (GTK_CONTAINER(context->window), context->widget); set_geometry (context); } @@ -372,8 +375,9 @@ server_context_service_real_hide_keyboard (EekboardContextService *_context) ServerContextService *context = SERVER_CONTEXT_SERVICE(_context); gtk_widget_hide (context->window); - gtk_container_remove(GTK_CONTAINER(context->window), context->widget); - destroy_window (context); + g_clear_pointer (&context->widget, gtk_widget_destroy); + + destroy_window (context); // <--- FIXME: looks suspect EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)-> hide_keyboard (_context); @@ -394,8 +398,7 @@ server_context_service_real_disabled (EekboardContextService *_context) ServerContextService *context = SERVER_CONTEXT_SERVICE(_context); if (context->window) { - context->was_visible = - gtk_widget_get_visible (context->window); + context->was_visible = gtk_widget_get_visible (context->window); gtk_widget_hide (context->window); } } @@ -439,10 +442,8 @@ server_context_service_dispose (GObject *object) { ServerContextService *context = SERVER_CONTEXT_SERVICE(object); - if (context->window) { - gtk_widget_destroy (context->window); - context->window = NULL; - } + g_clear_pointer (&context->window, gtk_widget_destroy); + context->widget = NULL; G_OBJECT_CLASS (server_context_service_parent_class)->dispose (object); } @@ -487,26 +488,25 @@ server_context_service_class_init (ServerContextServiceClass *klass) static void server_context_service_init (ServerContextService *context) { - GdkScreen *screen; + GdkScreen *screen = gdk_screen_get_default (); - screen = gdk_screen_get_default (); g_signal_connect (screen, "monitors-changed", G_CALLBACK(on_monitors_changed), context); - g_signal_connect (context, + g_signal_connect (context, // <--- FIXME; here "notify::keyboard", G_CALLBACK(on_notify_keyboard), - context); - g_signal_connect (context, + context); // <--- FIXME: they try to confuse us + + g_signal_connect (context, // <--- FIXME; here "notify::fullscreen", G_CALLBACK(on_notify_fullscreen), - context); + context); // <--- FIXME: they try to confuse us } EekboardContextService * server_context_service_new () { - return EEKBOARD_CONTEXT_SERVICE(g_object_new (SERVER_TYPE_CONTEXT_SERVICE, - NULL)); + return EEKBOARD_CONTEXT_SERVICE(g_object_new (SERVER_TYPE_CONTEXT_SERVICE, NULL)); } diff --git a/src/setup-main.c b/src/setup-main.c deleted file mode 100644 index c2afbccc..00000000 --- a/src/setup-main.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2012 Daiki Ueno - * Copyright (C) 2012 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include "preferences-dialog.h" -#include -#include - -int -main (int argc, char **argv) -{ - PreferencesDialog *dialog; - - if (!gtk_init_check (&argc, &argv)) { - g_printerr ("Can't init GTK\n"); - return EXIT_FAILURE; - } - - dialog = preferences_dialog_new (); - preferences_dialog_run (dialog); - preferences_dialog_free (dialog); - - return EXIT_SUCCESS; -} diff --git a/tests/Makefile.am b/tests/Makefile.am deleted file mode 100644 index bc07b387..00000000 --- a/tests/Makefile.am +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2010-2011 Daiki Ueno -# Copyright (C) 2010-2011 Red Hat, Inc. - -# 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -INCLUDES = -I$(top_srcdir) $(GIO2_CFLAGS) $(GTK_CFLAGS) $(LIBXKLAVIER_CFLAGS) - -TESTS_ENVIRONMENT = EEKBOARD_KEYBOARDSDIR=$(top_srcdir)/data/keyboards - -TESTS = eek-simple-test eek-xml-test -noinst_PROGRAMS = $(TESTS) - -eek_simple_test_SOURCES = eek-simple-test.c -eek_simple_test_LDADD = $(top_builddir)/eek/libeek.la $(GIO2_LIBS) - -eek_xml_test_SOURCES = eek-xml-test.c -eek_xml_test_LDADD = $(top_builddir)/eek/libeek.la $(top_builddir)/eek/libeek-xkl.la $(GIO2_LIBS) $(GTK_LIBS) - --include $(top_srcdir)/git.mk