From 3d1133cdb5a469c00eb172e1148d19350da484c0 Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Thu, 4 Jul 2019 07:48:46 +0000 Subject: [PATCH 01/25] Fix memory corruption due to a wrong assumption --- src/server-context-service.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server-context-service.c b/src/server-context-service.c index 32e3b078..a3db595c 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -373,6 +373,7 @@ server_context_service_real_hide_keyboard (EekboardContextService *_context) gtk_widget_hide (context->window); gtk_container_remove(GTK_CONTAINER(context->window), context->widget); + context->widget = NULL; // When GTK removes the widget, it doesn't just unlink it, but also frees it destroy_window (context); EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)-> From c1e1ddb73f9b8880ad280f2ded6525651ab9d9e3 Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Thu, 4 Jul 2019 08:27:31 +0000 Subject: [PATCH 02/25] style: Fix right margin For some reason, adjusting the width of the keyboard layout affects the margin when used at 360 width. --- data/keyboards/geometry/compact.xml | 2 +- eek/eek-section.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/eek/eek-section.c b/eek/eek-section.c index 9c6a2f5a..79251f48 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -529,7 +529,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; From c3ffe6ab8b074f23b7b400f01ff5f0d3131f672b Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Thu, 4 Jul 2019 08:48:43 +0000 Subject: [PATCH 03/25] visibility: Handle visibility change no-ops --- eekboard/eekboard-context-service.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 16336818..dce47228 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -569,7 +569,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 +579,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); + } } /** From 7a520809405f611be4b9ed7fb103511037517d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Thu, 4 Jul 2019 14:50:06 +0200 Subject: [PATCH 04/25] Remove automake leftovers --- ChangeLog | 0 Makefile.am | 41 ---- NEWS | 0 bindings/Makefile.am | 21 -- bindings/vala/Makefile.am | 96 --------- configure.ac | 245 ----------------------- data/Makefile.am | 35 ---- data/icons/16x16/Makefile.am | 17 -- data/icons/22x22/Makefile.am | 17 -- data/icons/24x24/Makefile.am | 17 -- data/icons/32x32/Makefile.am | 17 -- data/icons/48x48/Makefile.am | 17 -- data/icons/Makefile.am | 3 - data/icons/scalable/Makefile.am | 15 -- data/keyboards/Makefile.am | 40 ---- data/themes/Makefile.am | 4 - docs/Makefile.am | 21 -- docs/reference/Makefile.am | 21 -- docs/reference/eek/Makefile.am | 133 ------------- docs/reference/eekboard/Makefile.am | 122 ------------ eek/Makefile.am | 298 ---------------------------- eekboard/Makefile.am | 136 ------------- examples/Makefile.am | 3 - examples/simple-client/Makefile.am | 3 - git.mk | 218 -------------------- src/Makefile.am | 96 --------- tests/Makefile.am | 32 --- 27 files changed, 1668 deletions(-) delete mode 100644 ChangeLog delete mode 100644 Makefile.am delete mode 100644 NEWS delete mode 100644 bindings/Makefile.am delete mode 100644 bindings/vala/Makefile.am delete mode 100644 configure.ac delete mode 100644 data/Makefile.am delete mode 100644 data/icons/16x16/Makefile.am delete mode 100644 data/icons/22x22/Makefile.am delete mode 100644 data/icons/24x24/Makefile.am delete mode 100644 data/icons/32x32/Makefile.am delete mode 100644 data/icons/48x48/Makefile.am delete mode 100644 data/icons/Makefile.am delete mode 100644 data/icons/scalable/Makefile.am delete mode 100644 data/keyboards/Makefile.am delete mode 100644 data/themes/Makefile.am delete mode 100644 docs/Makefile.am delete mode 100644 docs/reference/Makefile.am delete mode 100644 docs/reference/eek/Makefile.am delete mode 100644 docs/reference/eekboard/Makefile.am delete mode 100644 eek/Makefile.am delete mode 100644 eekboard/Makefile.am delete mode 100644 examples/Makefile.am delete mode 100644 examples/simple-client/Makefile.am delete mode 100644 git.mk delete mode 100644 src/Makefile.am delete mode 100644 tests/Makefile.am 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/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/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/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/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/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/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/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/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/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/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 From f1d97e396bbc23f5cdf7c6bb6ac9a3fbd70a7dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Thu, 4 Jul 2019 16:25:05 +0200 Subject: [PATCH 05/25] Drop icons They're not being installed and we want ones matching current GNOME design anyway. --- data/icons/16x16/Makefile.am | 17 - data/icons/16x16/eekboard.png | Bin 606 -> 0 bytes data/icons/22x22/Makefile.am | 17 - data/icons/22x22/eekboard.png | Bin 892 -> 0 bytes data/icons/24x24/Makefile.am | 17 - data/icons/24x24/eekboard.png | Bin 957 -> 0 bytes data/icons/32x32/Makefile.am | 17 - data/icons/32x32/eekboard.png | Bin 1529 -> 0 bytes data/icons/48x48/Makefile.am | 17 - data/icons/48x48/eekboard.png | Bin 2746 -> 0 bytes data/icons/Makefile.am | 3 - data/icons/scalable/Makefile.am | 15 - data/icons/scalable/eekboard.svg | 3486 ------------------------------ 13 files changed, 3589 deletions(-) delete mode 100644 data/icons/16x16/Makefile.am delete mode 100644 data/icons/16x16/eekboard.png delete mode 100644 data/icons/22x22/Makefile.am delete mode 100644 data/icons/22x22/eekboard.png delete mode 100644 data/icons/24x24/Makefile.am delete mode 100644 data/icons/24x24/eekboard.png delete mode 100644 data/icons/32x32/Makefile.am delete mode 100644 data/icons/32x32/eekboard.png delete mode 100644 data/icons/48x48/Makefile.am delete mode 100644 data/icons/48x48/eekboard.png delete mode 100644 data/icons/Makefile.am delete mode 100644 data/icons/scalable/Makefile.am delete mode 100644 data/icons/scalable/eekboard.svg 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 1a30f4de9ea41ac11aab407427e6d0b05fb2b318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)*8l(j8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10ozGLK~y-6y^=kP8etTL&--Q^XB;=~j1v+`69^_&qOxT`Y?LXs z2y7J=`~kuA`S=SaZ3s&$1F5xAu(6gPh6uqT#!Y4|gms5#=KH3x2x_oc$c5Wn?max5 zdl(VnI>oPb{a*ztm5Nd-m88u%+vmZ_$#Gf`q=#Zm^aMmd<@0$90BW_G3xM_sL;yq> zV}Y*gS~{J+lSmxSmI$A3CnrID7ZL#>(ZgQaH+62R9Y&*dA^$4oQ*_kwnDh8044)*A3v< zHb!4ZkVF~rxD4Cz=*#EPJz+c^-`6zt12_W*z!*pJmL5GkOvsv=y!(A}ZmFu~Ud(2{ zmez80>0c25P)L~km^=UxZFR5LOEnser>1E-&1Un=G|eL-(su1`y^%2{4h91wm&?83 zoQu=xbhTJ4t^n+Gn{OQRdcFR*P$<0RoJTCn!hAkowOXwifXkhK`Wpv;kj-X~4a4}@ z>2!j2yX{x2)t3OoUHC)=S#iQUy(No0(%bpi>1PkW;J2NHl4!*@yuy#N3J07*qoM6N<$f~f8WO8@`> 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 cb7033231110c07b033b4eed2e35e995d1bcc8ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmV-?1B3jDP)6}N8Pyl$F>4~gVqmML#=&`P365@Sp^41*O4g+J%!=Df?o41h&MNx58px6|n) z-EKFl)oMniQu%;eoO8zBvTetD^yu-oui(3Pzx)`CeH5qZI}jKlNXEIgr*orh4>$#$ zGk@zGb*gzg*W;FP(Da(Fq|DKwJuQ_+evpibA$#EX&YiD*dUfL4U);V?85#M-&^e@% z(76FAQYbJuwhhiXbi;&31f>)XTP+L}93;IS;xvU60zwEVNVE?-jm5>qH3k6HtJPIq z(~)KZLP{h_f?k{;pU)wTA_%FFvn;so+ep(4!^2mQGfg}{YNLB{f;1C=0z@Wp^;+ct z5s^MRI%W?d@xmlau#1H#fhl*XvJ;#p2JL^Ctjw z0LT53KC_63wzjs6<>h6kUavp2ZF`7_syjP7+W-WBp?+vzn1~2~wZ6VSIz2u8z2i7e z6h#PvfZ{l2K@j{7px3w6(^k$x&6$~*`qb3anq^sb6h+W94efS2$mjF1lu`ot>pb|( z6BmocLDzM^-re0z_xJZj7={Rf0KV^sv$L~*xUPG09@-afwOXBpg@w;oR#xswDQRP4 z8hDI!V%bS5SyZiZoqrKP2B#>dCsFO^CmUIce}_@xg3zVFM` z)zu$8&s+06@1bd$IRLS`zz1{Y9G?bg04M^G0NMc3(`E6m;n(n&8OV!Zuh-wmL|l88 S0e{{A0000V^tXb&LcOmO>Z7I%^lmxpg1sXX$HGgXg97( zA>clAX%O5xWL2n(0T&K98$obUP^`2IDYT4qQ`*%?($bwXy3he_I(ay@dEDH4&iUPB z9*arZ2;KR^&sm(G@B5!0BO+X-@he6DpMdr3$_R*vmY0_^gJR^cpsTB^^3m^)Zt{SK z03S-J?x1)!?3(6sxhcnWt{G#P;DQ-?`H~^V1!rW4-MV?}VX;{Jdl-TU00#gA&;?L^ z{;{#KAs#%~{-E1cnkX<*O3`Yytj*0IcV4vU<4->N(2~{{ki15q3@7drbihc8c)}hb zB7Jst-mt8YqXT7#-zNhg8o)2GlH@VXrc!C(kbzK>_;&4v5- z?jLXfNW0_T0-OoULfdP@?*?-!j0>h?*TwE#@L-ZpJuoee{@i*LsiqoqRt3^W5CrX8_&;Fb*IMz(P-EF7m#I)?3pEfJ86je*man=0um2;enUj fTUS0T=&SZG-Gi!!f7B>+00000NkvXXu0mjf2#35r 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 69ef66624745e4dc7cc371f5c9a576d825b22b2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1529 zcmV|Z5Y=IGtCA$k{w?+6y&%~OLyXzP&!#mgO{mSA%Vdi|zd3zxk)3ivHjW_!y=juG~^Z&iiIsfN;Om4HOr9!l4>(Vt&>Vk9X9_XWz!vRj4ZDDK9Tye)w=^ z+O*AY0_d7IzojMid!Nr&uw7RufP<6mIneW`r`1~p*t>UcOY584ZZ2oDqH8*uuA`Jf zi9(d3pj-k)egeg%q>_u&)^5UIGdApayZ!8=M~_6;G@OEsWtv!)g_$!j42y!TC@m{zabc0>rp=_& zY3|&;&GeVkOx>KM$Xi5BO$`l^D6!_v%*`gK3BN`zm&0)!Y^#7{In;z}c&qKL5BvK1 zG+43WyYK#_tLu9^TO)N5Qt2eFQiLk2SWG4fhrsB+A0$$7q^RSrI~jOeTYAndI`h()szs?|@zpfUfJmt_oE< z)zx7{8WGVD5i}7HK}0AiE*8TuRVY*~3k#1`G}@rW<8hTvr`Yt`ChC7sPd2-xyk4)A zwZ4I27|K;H$^~$7l|s1+rCeO)Vw(2PfL>8bAtI$f=~}=1>C>lQ-@kwVgVE8^?;kjD z;2$SXp8QQ&Sy|20)YRwkc>FKj-Q8RF?c4X!v17-+b>+&HFJ@+Dtii#-%o-_8rBu?h zVxugOT?@c44FA~J*kVORMQ&kXL948+{B~1QQ{%mR_w25&E;kSee025dRew=Y(Py2V zojP!PU|?Xal)yUg0uhnn;o(Qyw{LIh>+738ckbNBb#--(wr!*9dfml~7yo$Z(4k3> z$FmK%x8A(#0uT`aJbU)+@m{}vz4_q5gMWxbB8{eLVwxt2L?Y?Bu0A+8_`^&la}}ru z5*q@rBCZ1^4Gj&=J9q9p(a_KkGgmEYns~k5ig-M}+|kkTaUc+=00c;F2*AqwKr9w( zI&tE}*=RKSjc3J8(Y4hJHrwPVMQZ9sk{Zo>gqA()(;yg4#5@_1rmVl1D}UkC2b&CN}nIdkR$ zPi$9EFECy`cO(-L4F~`cU@I^WOamF7lwJS_aK9>m)n?>d0kHvNMfB#WrE9RtjpWK-%Vp zIp9{F&_*}qL(9zN1dE$vDd{eP;T?OpixzqIde6i=AdoDa#8`s^1wr}5l zUenxLCp%uBPBIfgUtgd1$e)kQIePHutn=s3mnLgRT#L)x>#x5)v$wZrr2{CXgb+gI zGa2i^fj^}V9Xiybl(Hsk`YkbRj|-6e*Xb>-E|Sg6Mk5)pgAcg=QAkuU}ueE&_xQ#`5LM*UxO3*%)uAZ*Wn{ zwOz}!P1~^?%XDnZF)h=wOj}l=BQ;GobfH{j7>3m9>SDgSNF?O*`@A!gEiXUy)KkT4 zCSaoI+SN5zTJ9_m{*qY=f~HBOY{Ss)Gw06zU4LJH=0`tzeH(ms0%ikoK-HS4{htQT zUTsikXJ>LSec_ou9yoY-U}#{(DwRrwLZ#rkt|f%<=ssNzemHohSS+3!8}o?*p4swD zyqGSob}cuTOePNw5->fX3d&+^NsW4snpqb2L=XCWeS-M0&!YMS13!~5RFEg zbzT3jU@(YfS;{aBMK#pBmd8@xdGI%Xi6Y$M%Zhm0J$`!x7ICzmuqn7{(_=C8v zOC%B@m&>B-Iv&HraC!uv-wOifwBAHEm!*);qwA8Pp%J2W5yHVRQcBXpgLr&CP=atM zL^Kj%Fg-+}P(Znga3sXY$R(7kaHK&wpCJ$mQK?wCu1QlX!^NIs-7$~XgX_4s%EjmPQ7jfQ3@<_|EYl_s2v8^$(WM|3i(^_Am2#O%rNRxZ zt<0Wv1KC`bQn5rh62fD67#dEKI(3RlslxIVE9pCVf^<5Ku1hpcr&KCo7zU2(;Pd$@ z7fa}dj_W!U^F{7mcdvTmr#o)h`IDW!W1K&diD$RY{?GclXe<^_P+!-8)N~r^V^l1Y zSUiTNNu<<>)ioe*r@`_`@IHr?2k>Cr_Rrb?Ouc{_s9Q ze}KE%?jjHh(A1P55o;t?UynfIF+4=0br`x%B9_2)Y=Yq+!C(-t*T?PucpHZg9~Eow zy5}t+g!q_%rT?@vaM#_dp4s=i-{bfDsjG_;kHsmKi-bdAq!1_t@pz1Up+Kx5PA-?D zxw(aWK1Vi_WBDD+Io{JlHlM@e@zK=S#NF+y35CP7G`DbRWQ5FUhTE3hj#3bb1ZbKu zgT|%=*<1#%*GtQ+W(<#x<0_(&DCJU-a40>OoW0X!Zrwrz6u?0E)09HcRx zKskz1xq<>RnH-^Di0zK{n6UayB>D1<;@StdeC1On5lAf<+7 znkc1km5Wj?j^kE;yVbAby5PDv%E5IN%2j;(*=HZwz59QEHg=g)+rGbjXTa~PSL$-i z2E*ibb?c0|g85wc!S#wWf+qUob zu359DzOAjT@q6Fv?9p|PShsH7j9>g>*SXoPHv|g#f}KtenpGyBJfAy0@(AG``{3B0 ztNoRt7KtRFO{Deq_Qr>XhUNqM=;-LbY~Q}U`OZ7kZYp}PsH*T8dR{?EkXlVZN2&%rKq{pcE2Y|MHkM9h{wY0Zgb*T^ z%V~hIW5xK;*HkC@H(*FJXf7{;PE`c`S_*CY; zjL9medcV<+9Xqyc(;H`TEBk%W0qwJ zDdlDIQc7IcC6~*UpMLu3J-`uQ_>DK-Fo5O2Ibe7yJcMqbv&1c1huUV7=d`|i8% z(J}Ixrd<{wgh10YN~Mwlc<{joLodAWLh{BNZ}b4~1CxFSkH@Dv12ytv0=z)|i!Z+T z?`zkt{iuUN67@wL}pI}wRQ_D>gin3xNRTK~ZF z&p-eC>eZ|NS<^HCT(_Dh$FKgF8)Y&Xv#YDC59kLz_9&k!CVGfvb8~Yzl}cUc?Ckt+ zV1|@3s_T02@y8!;NhA_N*FS2qTrN)=*-yem1vux=pU-r4b^Vg+ySE8QKJdT;>jHtm zEZerpX0yt5U82#b05DBc{7s8f#6Rt?Lt?G7$f7q`R1F~Ynq1RIPBfKcetmg=l8(HUAuOj z^85WA$z(DClxrf!$}HDjz!gw{oHJ)ma?YGN3CD5B<#N3D-h2Cjzfet5{vA7ZoPFq_ zhwcV4RCmt(8#X6}$p{!*MRn%PnS5_=? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 0e8715b4ff2679775380dae59c38316a1a9e7001 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Sun, 7 Jul 2019 11:20:00 +0200 Subject: [PATCH 06/25] Improve key rendering and eliminate two deprecation warnings - Replace two calls to deprecated gdk_cairo_create() - Alleviate asymmetry between rendering pressed and released keys by consistenly clipping the same area up front to avoid artefacts - make sure pressed and released keys are shown immediately by calling gdk_window_invalidate_rect() - improve consistency between render_(pressed|locked|released)_key - improve code flow --- eek/eek-gtk-keyboard.c | 117 ++++++++++++++++++++++++++++++++--------- 1 file changed, 91 insertions(+), 26 deletions(-) diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 51b6a373..47f255fb 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" @@ -479,6 +480,45 @@ 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) @@ -486,16 +526,20 @@ render_pressed_key (GtkWidget *widget, EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); 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,8 +550,12 @@ 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 @@ -516,15 +564,29 @@ render_locked_key (GtkWidget *widget, { EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); 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 @@ -533,26 +595,29 @@ render_released_key (GtkWidget *widget, { EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); 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 From ae5eaeec933e40763c1df990aff5316cc1ac5b30 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Sun, 7 Jul 2019 18:45:56 +0200 Subject: [PATCH 07/25] Fix an uninitialized-variable warning, and fixes gradients --- eek/eek-renderer.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 4494d933..dc200c38 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -246,7 +246,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; From 722d3d1ad456fe4a30b1f00de44e08226b816ee3 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Thu, 4 Jul 2019 21:46:14 +0200 Subject: [PATCH 08/25] Cleanups: fix deprecations gtk_widget_get_root_window() gdk_screen_get_monitor_at_window() gdk_screen_get_monitor_geometry() --- src/server-context-service.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 32e3b078..69b4593d 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -217,16 +217,18 @@ static void set_geometry (ServerContextService *context) { GdkScreen *screen; + GdkDisplay *display; GdkWindow *root; - gint monitor; + GdkMonitor *monitor; 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); + root = gdk_screen_get_root_window (screen); + display = gdk_display_get_default(); + monitor = gdk_display_get_monitor_at_window (display, root); + gdk_monitor_get_geometry (monitor, &rect); keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); From eaf925e30b9cd1af093b0d149d33673b66cf60f9 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Thu, 4 Jul 2019 22:11:24 +0200 Subject: [PATCH 09/25] Cleanups: fix g_type_init() deprecation warning None of this seems necessary anymore. This file could be axed, but leave it for now. --- eek/eek.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 */ } From 094aa872ceb6406b1fcd598089d40a80284f8e16 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Thu, 4 Jul 2019 19:44:12 +0200 Subject: [PATCH 10/25] Cleanups: fix deprecated g_type_class_add_private() - use G_DECLARE_ and G_DEFINE_ macros - move all data into ClassNamePrivate - use _get_instance_private() This should not introduce any functional changes or breakage. Skipped two classes (EekKeyboard and EekboardContextService) for now in order not to break the build. These two classes are used in some very funky WIP code that tries to circumvent encapsulation. (Funky code is in eekboard/key-emitter.c and eekboard/eekboard-context-service.c) --- eek/eek-container.c | 28 +++--- eek/eek-container.h | 17 +--- eek/eek-element.c | 84 ++++++++++------- eek/eek-element.h | 17 +--- eek/eek-gtk-keyboard.c | 81 +++++++++-------- eek/eek-gtk-keyboard.h | 20 +--- eek/eek-key.c | 94 ++++++++++++------- eek/eek-key.h | 26 +----- eek/eek-keysym.c | 32 +++---- eek/eek-keysym.h | 22 +---- eek/eek-layout.c | 2 +- eek/eek-layout.h | 15 +-- eek/eek-renderer.c | 177 +++++++++++++++++++++--------------- eek/eek-renderer.h | 16 +--- eek/eek-section.c | 46 +++++----- eek/eek-section.h | 23 +---- eek/eek-symbol.c | 90 ++++++++---------- eek/eek-symbol.h | 22 +---- eek/eek-text.c | 45 +++++---- eek/eek-text.h | 22 +---- eek/eek-xkb-layout.c | 72 ++++++++------- eek/eek-xkb-layout.h | 18 +--- eek/eek-xkl-layout.c | 55 ++++++----- eek/eek-xkl-layout.h | 18 +--- eek/eek-xml-layout.c | 64 +++++++------ eek/eek-xml-layout.h | 24 +---- eekboard/eekboard-client.c | 39 ++++---- eekboard/eekboard-client.h | 17 +--- eekboard/eekboard-context.c | 82 +++++++++++------ eekboard/eekboard-context.h | 23 +---- eekboard/eekboard-service.c | 90 +++++++++--------- eekboard/eekboard-service.h | 25 +---- 32 files changed, 613 insertions(+), 793 deletions(-) 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 47f255fb..c3907cce 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -47,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; @@ -66,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); @@ -107,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; @@ -149,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, @@ -162,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); @@ -172,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) { @@ -198,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)) { @@ -243,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; } @@ -266,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; @@ -302,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, @@ -323,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 = @@ -359,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); @@ -408,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; @@ -441,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 */ } /** @@ -523,7 +527,8 @@ 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); @@ -562,7 +567,8 @@ 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; GdkWindow *window = gtk_widget_get_window (widget); @@ -593,7 +599,8 @@ 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; GdkWindow *window = gtk_widget_get_window (widget); @@ -624,7 +631,7 @@ 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) @@ -645,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) @@ -668,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) @@ -683,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) @@ -707,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-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 dc200c38..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; @@ -353,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, }; @@ -413,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; @@ -432,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; @@ -605,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; @@ -698,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); @@ -720,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: @@ -748,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: @@ -763,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, @@ -787,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); @@ -801,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; @@ -836,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; @@ -865,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; } } @@ -908,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; @@ -924,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); } } @@ -939,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 @@ -962,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; @@ -1007,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 @@ -1102,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 @@ -1112,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 @@ -1125,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)); } @@ -1143,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)); } @@ -1210,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; @@ -1270,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; @@ -1285,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; @@ -1305,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", @@ -1320,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", @@ -1339,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", @@ -1370,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); @@ -1393,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 79251f48..4da47b7f 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -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); @@ -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; } /** 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-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/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.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: From 1d1829f6648c86dff2274c3d94a075cf9c5d7465 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Mon, 8 Jul 2019 08:56:05 +0200 Subject: [PATCH 11/25] fix accidentally committed line (-Wincompatible-pointer-types) --- eek/eek-section.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eek/eek-section.c b/eek/eek-section.c index 79251f48..d3d69136 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 @@ -129,7 +129,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; From a944bf85b86b9f64827bf6e67a4673e49c39106d Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Mon, 8 Jul 2019 09:02:03 +0200 Subject: [PATCH 12/25] remove stray const (-Wdiscarded-qualifiers) --- src/server-context-service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 69b4593d..a5629e9b 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -221,7 +221,7 @@ set_geometry (ServerContextService *context) GdkWindow *root; GdkMonitor *monitor; GdkRectangle rect; - const EekKeyboard *keyboard; + EekKeyboard *keyboard; EekBounds bounds; screen = gdk_screen_get_default (); From 66ec95ebb0975c79db2f3282ea264ffdb32abf18 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Mon, 8 Jul 2019 09:15:27 +0200 Subject: [PATCH 13/25] fix-up prototypes (-Wincompatible-pointer-types) --- src/imservice.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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) {} From 4d44129b049c0254de519685014293080296fe74 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 00:24:57 +0200 Subject: [PATCH 14/25] Prevent compiler warnings by commenting out unused code --- eekboard/eekboard-context-service.c | 22 +++++++++++----------- eekboard/key-emitter.c | 5 +++-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index dce47228..d935a282 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -84,7 +84,7 @@ struct _EekboardContextServicePrivate { G_DEFINE_TYPE (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, @@ -483,7 +483,7 @@ eekboard_context_service_init (EekboardContextService *self) } } -static gboolean on_repeat_timeout (EekboardContextService *context); +/*static gboolean on_repeat_timeout (EekboardContextService *context); static gboolean on_repeat_timeout (EekboardContextService *context) @@ -505,15 +505,15 @@ on_repeat_timeout (EekboardContextService *context) static gboolean on_repeat_timeout_init (EekboardContextService *context) { - /* FIXME: clear modifiers for further key repeat; better not - depend on modifier behavior is LATCH */ + // 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 */ - /* + // 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; @@ -522,11 +522,11 @@ on_repeat_timeout_init (EekboardContextService *context) g_timeout_add (delay, (GSourceFunc)on_repeat_timeout, context); - } else */ + //} else context->priv->repeat_timeout_id = 0; return FALSE; -} +}*/ /** * eekboard_context_service_enable: 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, From f79b5dadbb3389c3cb3a0f1b578d817faee3746d Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 00:41:25 +0200 Subject: [PATCH 15/25] Use a macro to declare a type with private data --- eek/eek-keyboard.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) 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 */ From e2944ff4a7b998c43f051ccd3dba818940700d13 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 00:46:03 +0200 Subject: [PATCH 16/25] Use a macro to declare a type with private data --- eekboard/eekboard-context-service.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index d935a282..121c9974 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -82,7 +82,7 @@ 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; */ @@ -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; From 4bf4500ae1c17ba240774b96f2fc8c127825ec43 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 8 Jul 2019 21:35:04 +0200 Subject: [PATCH 17/25] Remove unlisted files --- src/client-main.c | 320 ---------- src/client.c | 1166 ------------------------------------- src/client.h | 55 -- src/preferences-dialog.c | 415 ------------- src/preferences-dialog.h | 32 - src/preferences-dialog.ui | 729 ----------------------- src/setup-main.c | 41 -- 7 files changed, 2758 deletions(-) delete mode 100644 src/client-main.c delete mode 100644 src/client.c delete mode 100644 src/client.h delete mode 100644 src/preferences-dialog.c delete mode 100644 src/preferences-dialog.h delete mode 100644 src/preferences-dialog.ui delete mode 100644 src/setup-main.c 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/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/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; -} From c33006bcbc673237f6c02c506ef365ac6f2d2e7e Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Tue, 9 Jul 2019 13:33:49 +0200 Subject: [PATCH 18/25] use g_clear_pointer with gtk_widget_destroy brief, clear, idiomatic and grep friendly --- src/server-context-service.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 2ebc8dc0..dfb17a75 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -109,8 +109,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 */ @@ -323,8 +322,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 @@ -335,10 +335,7 @@ update_widget (ServerContextService *context) gchar *theme_path; EekTheme *theme; - if (context->widget) { - gtk_widget_destroy (context->widget); - context->widget = NULL; - } + g_clear_pointer (&context->widget, gtk_widget_destroy); theme_path = g_build_filename (THEMESDIR, "default.css", NULL); @@ -374,9 +371,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); - context->widget = NULL; // When GTK removes the widget, it doesn't just unlink it, but also frees it - 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); @@ -442,10 +439,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); } From 05c3061f08c11f98fd0fc73491aa3e97ac005fec Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Tue, 9 Jul 2019 13:41:20 +0200 Subject: [PATCH 19/25] Add some FIXME hints for future work --- src/server-context-service.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index dfb17a75..19437f9b 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -146,7 +146,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); @@ -205,7 +205,7 @@ on_realize_set_non_maximizable (GtkWidget *widget, 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 | @@ -308,6 +308,7 @@ make_window (ServerContextService *context) { g_signal_connect (context->window, "notify::visible", 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. @@ -343,12 +344,14 @@ 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); + eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); // <--- FIXME: bounds not used + + 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_object_unref (theme); - gtk_widget_set_has_tooltip (context->widget, TRUE); + 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); } @@ -485,21 +488,21 @@ 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 * From e04276ee38bd07781d3149dbe5faf8bbf694e083 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Tue, 9 Jul 2019 13:46:44 +0200 Subject: [PATCH 20/25] Use properly typed and named variables for user_data --- src/server-context-service.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 19437f9b..8cde11b5 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -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,11 +87,10 @@ 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)); @@ -124,21 +123,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); @@ -197,10 +196,9 @@ 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); From 2f87fd46fb279ce12f105c22c41b864d3f0a9e09 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Tue, 9 Jul 2019 13:50:14 +0200 Subject: [PATCH 21/25] Improve codeflow --- src/server-context-service.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 8cde11b5..8612153e 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -213,20 +213,16 @@ on_realize_set_non_maximizable (GtkWidget *widget, static void set_geometry (ServerContextService *context) { - GdkScreen *screen; - GdkDisplay *display; - GdkWindow *root; - GdkMonitor *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; - EekKeyboard *keyboard; EekBounds bounds; - screen = gdk_screen_get_default (); - root = gdk_screen_get_root_window (screen); - display = gdk_display_get_default(); - monitor = gdk_display_get_monitor_at_window (display, root); gdk_monitor_get_geometry (monitor, &rect); - keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); g_signal_handlers_disconnect_by_func (context->window, @@ -331,23 +327,19 @@ 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; - - g_clear_pointer (&context->widget, gtk_widget_destroy); - - theme_path = g_build_filename (THEMESDIR, "default.css", NULL); theme = eek_theme_new (theme_path, NULL, NULL); - g_free (theme_path); keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); // <--- FIXME: bounds not used 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_object_unref (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); From 89aaf05aff259d174591a7cb32d2fe0f7df6588b Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Tue, 9 Jul 2019 13:52:23 +0200 Subject: [PATCH 22/25] Some minor cleanups --- src/server-context-service.c | 41 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/server-context-service.c b/src/server-context-service.c index 8612153e..c808672c 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 @@ -95,9 +95,8 @@ on_notify_keyboard (GObject *object, 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, @@ -153,7 +152,7 @@ set_dock (GtkWidget *widget, GtkAllocation *allocation) // <--- FIXME: this coul /* 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; @@ -233,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]; } @@ -277,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, @@ -295,12 +294,16 @@ 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. @@ -387,8 +390,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); } } @@ -498,6 +500,5 @@ server_context_service_init (ServerContextService *context) 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)); } From 83b36d07d06b36ae3c65645157f15319925fafae Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 15:28:02 +0200 Subject: [PATCH 23/25] Add note about unused code --- eekboard/eekboard-context-service.c | 1 + 1 file changed, 1 insertion(+) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 121c9974..9688012f 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -480,6 +480,7 @@ eekboard_context_service_init (EekboardContextService *self) } } +/* FIXME These functions should either be implemented or removed. */ /*static gboolean on_repeat_timeout (EekboardContextService *context); static gboolean From eb940bcf52de9dcf0fee092cdb4373a10ffd9794 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 16:34:16 +0200 Subject: [PATCH 24/25] Remove currently unused eekboard code --- eekboard/eekboard-context-service.c | 46 ----------------------------- 1 file changed, 46 deletions(-) diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c index 9688012f..101e834f 100644 --- a/eekboard/eekboard-context-service.c +++ b/eekboard/eekboard-context-service.c @@ -480,52 +480,6 @@ eekboard_context_service_init (EekboardContextService *self) } } -/* FIXME These functions should either be implemented or removed. */ -/*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 From a571bd7dcad75044ec7696400b5a57b716a1f5d9 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jul 2019 17:55:40 +0200 Subject: [PATCH 25/25] Remove unused color definitions --- eek/eek-theme-node.c | 3 --- 1 file changed, 3 deletions(-) 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)