Merge branch 'master' into 'use_gresource'
# Conflicts: # src/server-context-service.c
This commit is contained in:
298
eek/Makefile.am
298
eek/Makefile.am
@ -1,298 +0,0 @@
|
||||
# Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
|
||||
# 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
|
||||
@ -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 */
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
#include <canberra-gtk.h>
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "eek-gtk-keyboard.h"
|
||||
@ -46,18 +47,13 @@ enum {
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA);
|
||||
|
||||
#define EEK_GTK_KEYBOARD_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardPrivate))
|
||||
|
||||
/* since 2.91.5 GDK_DRAWABLE was removed and gdk_cairo_create takes
|
||||
GdkWindow as the argument */
|
||||
#ifndef GDK_DRAWABLE
|
||||
#define GDK_DRAWABLE(x) (x)
|
||||
#endif
|
||||
|
||||
struct _EekGtkKeyboardPrivate
|
||||
typedef struct _EekGtkKeyboardPrivate
|
||||
{
|
||||
EekRenderer *renderer;
|
||||
EekKeyboard *keyboard;
|
||||
@ -65,7 +61,11 @@ struct _EekGtkKeyboardPrivate
|
||||
gulong key_unlocked_handler;
|
||||
gulong symbol_index_changed_handler;
|
||||
EekTheme *theme;
|
||||
};
|
||||
|
||||
GdkEventSequence *sequence; // unowned reference
|
||||
} EekGtkKeyboardPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA)
|
||||
|
||||
static void on_key_pressed (EekKey *key,
|
||||
EekGtkKeyboard *self);
|
||||
@ -106,7 +106,8 @@ static gboolean
|
||||
eek_gtk_keyboard_real_draw (GtkWidget *self,
|
||||
cairo_t *cr)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv =
|
||||
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||
GtkAllocation allocation;
|
||||
GList *list, *head;
|
||||
|
||||
@ -148,7 +149,8 @@ static void
|
||||
eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv =
|
||||
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||
|
||||
if (priv->renderer)
|
||||
eek_renderer_set_allocation_size (priv->renderer,
|
||||
@ -161,7 +163,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
|
||||
|
||||
static void depress(EekGtkKeyboard *self,
|
||||
gdouble x, gdouble y, guint32 time) {
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
||||
if (key) {
|
||||
eek_keyboard_press_key(priv->keyboard, key, time);
|
||||
@ -171,7 +173,7 @@ static void depress(EekGtkKeyboard *self,
|
||||
|
||||
static void drag(EekGtkKeyboard *self,
|
||||
gdouble x, gdouble y, guint32 time) {
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
||||
|
||||
if (key) {
|
||||
@ -197,7 +199,7 @@ static void drag(EekGtkKeyboard *self,
|
||||
}
|
||||
|
||||
static void release(EekGtkKeyboard *self, guint32 time) {
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
GList *list = eek_keyboard_get_pressed_keys (priv->keyboard);
|
||||
for (GList *head = list; head; head = g_list_next (head)) {
|
||||
@ -242,20 +244,23 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget *self,
|
||||
|
||||
// Only one touch stream at a time allowed. Others will be completely ignored.
|
||||
static gboolean
|
||||
handle_touch_event (GtkWidget *widget,
|
||||
GdkEventTouch *event) {
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD(widget);
|
||||
handle_touch_event (GtkWidget *widget,
|
||||
GdkEventTouch *event)
|
||||
{
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
if (event->type == GDK_TOUCH_BEGIN) {
|
||||
if (self->sequence) {
|
||||
if (priv->sequence) {
|
||||
// Ignore second and following touch points
|
||||
return FALSE;
|
||||
}
|
||||
self->sequence = event->sequence;
|
||||
priv->sequence = event->sequence;
|
||||
depress(self, event->x, event->y, event->time);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (self->sequence != event->sequence) {
|
||||
if (priv->sequence != event->sequence) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -265,16 +270,16 @@ handle_touch_event (GtkWidget *widget,
|
||||
if (event->type == GDK_TOUCH_END || event->type == GDK_TOUCH_CANCEL) {
|
||||
// TODO: can the event have different coords than the previous update event?
|
||||
release(self, event->time);
|
||||
self->sequence = NULL;
|
||||
priv->sequence = NULL;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
eek_gtk_keyboard_real_unmap (GtkWidget *self)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv =
|
||||
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||
|
||||
if (priv->keyboard) {
|
||||
GList *list, *head;
|
||||
@ -301,7 +306,9 @@ eek_gtk_keyboard_real_query_tooltip (GtkWidget *widget,
|
||||
gboolean keyboard_tooltip,
|
||||
GtkTooltip *tooltip)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
EekKey *key;
|
||||
|
||||
key = eek_renderer_find_key_by_position (priv->renderer,
|
||||
@ -322,7 +329,7 @@ static void
|
||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
|
||||
EekKeyboard *keyboard)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
priv->keyboard = g_object_ref (keyboard);
|
||||
|
||||
priv->key_locked_handler =
|
||||
@ -358,7 +365,8 @@ eek_gtk_keyboard_set_property (GObject *object,
|
||||
static void
|
||||
eek_gtk_keyboard_dispose (GObject *object)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object);
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (object);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
if (priv->renderer) {
|
||||
g_object_unref (priv->renderer);
|
||||
@ -407,9 +415,6 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (gobject_class,
|
||||
sizeof (EekGtkKeyboardPrivate));
|
||||
|
||||
widget_class->realize = eek_gtk_keyboard_real_realize;
|
||||
widget_class->unmap = eek_gtk_keyboard_real_unmap;
|
||||
widget_class->draw = eek_gtk_keyboard_real_draw;
|
||||
@ -440,7 +445,7 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
|
||||
static void
|
||||
eek_gtk_keyboard_init (EekGtkKeyboard *self)
|
||||
{
|
||||
self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
/* void */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -479,23 +484,67 @@ magnify_bounds (GtkWidget *self,
|
||||
large_bounds->y = CLAMP(y, 0, allocation.height - large_bounds->height);
|
||||
}
|
||||
|
||||
/*
|
||||
* Alleviate the asymmetry between drawing a pressed key and a released key,
|
||||
* and consistently draw to the exact same area.
|
||||
*
|
||||
* By saving the dirty rectangle we can limit drawing of the backbuffer to
|
||||
* the screen as well, eg gdk_window_invalidate_rect() instead of
|
||||
* gtk_widget_queue_draw() which redraws the entire widget.
|
||||
*
|
||||
* b1 is mandatory, b2 is optional
|
||||
*/
|
||||
static GdkRectangle
|
||||
clip_bounds_to_dirty_rectangle (cairo_t *cr, EekBounds *b1, EekBounds *b2)
|
||||
{
|
||||
if (b2)
|
||||
cairo_rectangle (cr, b2->x, b2->y, b2->width, b2->height);
|
||||
|
||||
cairo_rectangle (cr, b1->x, b1->y, b1->width, b1->height);
|
||||
cairo_clip (cr);
|
||||
|
||||
/*
|
||||
* save the clipped region to a bounding box so we can limit
|
||||
* the drawing of the backbuffer to the screen to the same area
|
||||
*/
|
||||
cairo_rectangle_t bbox;
|
||||
|
||||
cairo_clip_extents (cr, &bbox.x, &bbox.y, &bbox.width, &bbox.height);
|
||||
|
||||
/* convert double to int, making sure r strictly covers bbox to avoid
|
||||
* artefacts. floor() is unnecessary, ceil() is not */
|
||||
GdkRectangle r = {
|
||||
floor (bbox.x),
|
||||
floor (bbox.y),
|
||||
ceil (bbox.width),
|
||||
ceil (bbox.height)
|
||||
};
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static void
|
||||
render_pressed_key (GtkWidget *widget,
|
||||
EekKey *key)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
EekBounds bounds, large_bounds;
|
||||
|
||||
GdkWindow *window = gtk_widget_get_window (widget);
|
||||
cairo_region_t *region = gdk_window_get_clip_region (window);
|
||||
GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region);
|
||||
cairo_t *cr = gdk_drawing_context_get_cairo_context (context);
|
||||
|
||||
eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
|
||||
magnify_bounds (widget, &bounds, &large_bounds, 1.5);
|
||||
|
||||
GdkWindow *window = GDK_DRAWABLE (gtk_widget_get_window (widget));
|
||||
cairo_region_t *region = gdk_window_get_clip_region (window);
|
||||
/*
|
||||
* clip to limit drawing to backbuffer and save clip region to dirty_rect
|
||||
* to limit redrawing of the backbuffer to the same area
|
||||
*/
|
||||
GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle (cr, &bounds, &large_bounds);
|
||||
|
||||
GdkDrawingContext *context = gdk_window_begin_draw_frame(
|
||||
window, region
|
||||
);
|
||||
cairo_t *cr = gdk_drawing_context_get_cairo_context(context);
|
||||
cairo_save (cr);
|
||||
cairo_translate (cr, bounds.x, bounds.y);
|
||||
eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE);
|
||||
@ -506,60 +555,83 @@ render_pressed_key (GtkWidget *widget,
|
||||
eek_renderer_render_key (priv->renderer, cr, key, 1.5, TRUE);
|
||||
cairo_restore (cr);
|
||||
|
||||
gdk_window_end_draw_frame(window, context);
|
||||
cairo_region_destroy(region);
|
||||
gdk_window_end_draw_frame (window, context);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
|
||||
/* force immediate drawing of the backbuffer to the screen */
|
||||
gdk_window_invalidate_rect (window, &dirty_rect, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_locked_key (GtkWidget *widget,
|
||||
EekKey *key)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
EekBounds bounds;
|
||||
cairo_t *cr;
|
||||
|
||||
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
|
||||
GdkWindow *window = gtk_widget_get_window (widget);
|
||||
cairo_region_t *region = gdk_window_get_clip_region (window);
|
||||
GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region);
|
||||
cairo_t *cr = gdk_drawing_context_get_cairo_context (context);
|
||||
|
||||
eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
|
||||
|
||||
/*
|
||||
* clip to limit drawing to backbuffer and save clip region to dirty_rect
|
||||
* to limit redrawing of the backbuffer to the same area
|
||||
*/
|
||||
GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle (cr, &bounds, NULL);
|
||||
|
||||
cairo_translate (cr, bounds.x, bounds.y);
|
||||
eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE);
|
||||
|
||||
cairo_destroy (cr);
|
||||
gdk_window_end_draw_frame (window, context);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
|
||||
/* force immediate drawing of the backbuffer to the screen */
|
||||
gdk_window_invalidate_rect (window, &dirty_rect, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_released_key (GtkWidget *widget,
|
||||
EekKey *key)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
EekBounds bounds, large_bounds;
|
||||
cairo_t *cr;
|
||||
|
||||
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
|
||||
GdkWindow *window = gtk_widget_get_window (widget);
|
||||
cairo_region_t *region = gdk_window_get_clip_region (window);
|
||||
GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region);
|
||||
cairo_t *cr = gdk_drawing_context_get_cairo_context (context);
|
||||
|
||||
eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
|
||||
magnify_bounds (widget, &bounds, &large_bounds, 2.0);
|
||||
cairo_rectangle (cr,
|
||||
large_bounds.x,
|
||||
large_bounds.y,
|
||||
large_bounds.width,
|
||||
large_bounds.height);
|
||||
cairo_rectangle (cr,
|
||||
bounds.x,
|
||||
bounds.y,
|
||||
bounds.width,
|
||||
bounds.height);
|
||||
cairo_clip (cr);
|
||||
magnify_bounds (widget, &bounds, &large_bounds, 1.5);
|
||||
|
||||
/*
|
||||
* clip to limit drawing to backbuffer and save clip region to dirty_rect
|
||||
* to limit redrawing of the backbuffer to the same area
|
||||
*/
|
||||
GdkRectangle dirty_rect = clip_bounds_to_dirty_rectangle(cr, &bounds, &large_bounds);
|
||||
|
||||
eek_renderer_render_keyboard (priv->renderer, cr);
|
||||
cairo_destroy (cr);
|
||||
|
||||
gdk_window_end_draw_frame (window, context);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
|
||||
/* force immediate drawing of the backbuffer to the screen */
|
||||
gdk_window_invalidate_rect (window, &dirty_rect, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
on_key_pressed (EekKey *key,
|
||||
EekGtkKeyboard *self)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
/* renderer may have not been set yet if the widget is a popup */
|
||||
if (!priv->renderer)
|
||||
@ -580,7 +652,7 @@ static void
|
||||
on_key_released (EekKey *key,
|
||||
EekGtkKeyboard *self)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||
|
||||
/* renderer may have not been set yet if the widget is a popup */
|
||||
if (!priv->renderer)
|
||||
@ -603,7 +675,7 @@ on_key_locked (EekKeyboard *keyboard,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *widget = user_data;
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data);
|
||||
|
||||
/* renderer may have not been set yet if the widget is a popup */
|
||||
if (!priv->renderer)
|
||||
@ -618,7 +690,7 @@ on_key_unlocked (EekKeyboard *keyboard,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *widget = user_data;
|
||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data);
|
||||
|
||||
/* renderer may have not been set yet if the widget is a popup */
|
||||
if (!priv->renderer)
|
||||
@ -642,11 +714,9 @@ void
|
||||
eek_gtk_keyboard_set_theme (EekGtkKeyboard *keyboard,
|
||||
EekTheme *theme)
|
||||
{
|
||||
EekGtkKeyboardPrivate *priv;
|
||||
|
||||
g_return_if_fail (EEK_IS_GTK_KEYBOARD(keyboard));
|
||||
g_return_if_fail (EEK_IS_THEME(theme));
|
||||
|
||||
priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (keyboard);
|
||||
priv->theme = g_object_ref (theme);
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 >*/
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -36,12 +36,7 @@ enum {
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (EekRenderer, eek_renderer, G_TYPE_OBJECT);
|
||||
|
||||
#define EEK_RENDERER_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_RENDERER, EekRendererPrivate))
|
||||
|
||||
struct _EekRendererPrivate
|
||||
typedef struct _EekRendererPrivate
|
||||
{
|
||||
EekKeyboard *keyboard;
|
||||
PangoContext *pcontext;
|
||||
@ -62,7 +57,9 @@ struct _EekRendererPrivate
|
||||
gulong symbol_index_changed_handler;
|
||||
|
||||
EekTheme *theme;
|
||||
};
|
||||
} EekRendererPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT)
|
||||
|
||||
static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0};
|
||||
static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
|
||||
@ -106,7 +103,7 @@ create_keyboard_surface_key_callback (EekElement *element,
|
||||
gpointer user_data)
|
||||
{
|
||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
EekBounds bounds;
|
||||
|
||||
cairo_save (data->cr);
|
||||
@ -129,7 +126,7 @@ create_keyboard_surface_section_callback (EekElement *element,
|
||||
gpointer user_data)
|
||||
{
|
||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
EekBounds bounds;
|
||||
gint angle;
|
||||
|
||||
@ -151,7 +148,7 @@ create_keyboard_surface_section_callback (EekElement *element,
|
||||
static cairo_surface_t *
|
||||
create_keyboard_surface (EekRenderer *renderer)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
EekBounds bounds;
|
||||
cairo_surface_t *keyboard_surface;
|
||||
CreateKeyboardSurfaceCallbackData data;
|
||||
@ -202,7 +199,7 @@ render_key_outline (EekRenderer *renderer,
|
||||
EekKey *key,
|
||||
gboolean active)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
EekOutline *outline;
|
||||
EekBounds bounds;
|
||||
guint oref;
|
||||
@ -246,7 +243,9 @@ render_key_outline (EekRenderer *renderer,
|
||||
border_color.alpha = foreground.alpha;
|
||||
}
|
||||
|
||||
eek_element_get_bounds(EEK_ELEMENT(key), &bounds);
|
||||
outline = eek_outline_copy (outline);
|
||||
|
||||
for (guint i = 0; i < outline->num_points; i++) {
|
||||
outline->points[i].x *= priv->scale;
|
||||
outline->points[i].y *= priv->scale;
|
||||
@ -351,7 +350,7 @@ static void
|
||||
calculate_font_size_key_callback (EekElement *element, gpointer user_data)
|
||||
{
|
||||
CalculateFontSizeCallbackData *data = user_data;
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
gdouble sx, sy;
|
||||
PangoFontDescription *font;
|
||||
PangoRectangle extents = { 0, };
|
||||
@ -411,7 +410,7 @@ calculate_font_size (EekRenderer *renderer,
|
||||
const PangoFontDescription *base_font,
|
||||
gboolean ascii)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
CalculateFontSizeCallbackData data;
|
||||
|
||||
data.size = G_MAXDOUBLE;
|
||||
@ -430,7 +429,7 @@ render_key (EekRenderer *self,
|
||||
EekKey *key,
|
||||
gboolean active)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
EekOutline *outline;
|
||||
cairo_surface_t *outline_surface;
|
||||
EekBounds bounds;
|
||||
@ -603,7 +602,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
||||
PangoLayout *layout,
|
||||
EekKey *key)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
EekSymbol *symbol;
|
||||
EekSymbolCategory category;
|
||||
const gchar *label;
|
||||
@ -696,7 +695,7 @@ static void
|
||||
eek_renderer_real_render_keyboard (EekRenderer *self,
|
||||
cairo_t *cr)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
cairo_pattern_t *source;
|
||||
|
||||
g_return_if_fail (priv->keyboard);
|
||||
@ -718,7 +717,8 @@ eek_renderer_set_property (GObject *object,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (
|
||||
EEK_RENDERER(object));
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_KEYBOARD:
|
||||
@ -746,7 +746,8 @@ eek_renderer_get_property (GObject *object,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (
|
||||
EEK_RENDERER(object));
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_KEYBOARD:
|
||||
@ -761,7 +762,8 @@ eek_renderer_get_property (GObject *object,
|
||||
static void
|
||||
eek_renderer_dispose (GObject *object)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
||||
EekRenderer *self = EEK_RENDERER (object);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
|
||||
if (priv->keyboard) {
|
||||
if (g_signal_handler_is_connected (priv->keyboard,
|
||||
@ -785,7 +787,9 @@ eek_renderer_dispose (GObject *object)
|
||||
static void
|
||||
eek_renderer_finalize (GObject *object)
|
||||
{
|
||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
||||
EekRenderer *self = EEK_RENDERER(object);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
|
||||
g_hash_table_destroy (priv->outline_surface_cache);
|
||||
g_hash_table_destroy (priv->active_outline_surface_cache);
|
||||
pango_font_description_free (priv->ascii_font);
|
||||
@ -799,9 +803,6 @@ eek_renderer_class_init (EekRendererClass *klass)
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (gobject_class,
|
||||
sizeof (EekRendererPrivate));
|
||||
|
||||
klass->render_key_label = eek_renderer_real_render_key_label;
|
||||
klass->render_key_outline = eek_renderer_real_render_key_outline;
|
||||
klass->render_key = eek_renderer_real_render_key;
|
||||
@ -834,9 +835,8 @@ eek_renderer_class_init (EekRendererClass *klass)
|
||||
static void
|
||||
eek_renderer_init (EekRenderer *self)
|
||||
{
|
||||
EekRendererPrivate *priv;
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
|
||||
priv = self->priv = EEK_RENDERER_GET_PRIVATE(self);
|
||||
priv->keyboard = NULL;
|
||||
priv->pcontext = NULL;
|
||||
priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR;
|
||||
@ -863,15 +863,17 @@ eek_renderer_init (EekRenderer *self)
|
||||
static void
|
||||
invalidate (EekRenderer *renderer)
|
||||
{
|
||||
if (renderer->priv->outline_surface_cache)
|
||||
g_hash_table_remove_all (renderer->priv->outline_surface_cache);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
if (renderer->priv->active_outline_surface_cache)
|
||||
g_hash_table_remove_all (renderer->priv->active_outline_surface_cache);
|
||||
if (priv->outline_surface_cache)
|
||||
g_hash_table_remove_all (priv->outline_surface_cache);
|
||||
|
||||
if (renderer->priv->keyboard_surface) {
|
||||
cairo_surface_destroy (renderer->priv->keyboard_surface);
|
||||
renderer->priv->keyboard_surface = NULL;
|
||||
if (priv->active_outline_surface_cache)
|
||||
g_hash_table_remove_all (priv->active_outline_surface_cache);
|
||||
|
||||
if (priv->keyboard_surface) {
|
||||
cairo_surface_destroy (priv->keyboard_surface);
|
||||
priv->keyboard_surface = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -906,10 +908,12 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (width > 0.0 && height > 0.0);
|
||||
|
||||
renderer->priv->allocation_width = width;
|
||||
renderer->priv->allocation_height = height;
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
||||
priv->allocation_width = width;
|
||||
priv->allocation_height = height;
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||
|
||||
if (bounds.height * width / bounds.width <= height)
|
||||
scale = width / bounds.width;
|
||||
@ -922,8 +926,8 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
|
||||
scale = bounds.height / height;
|
||||
}
|
||||
|
||||
if (scale != renderer->priv->scale) {
|
||||
renderer->priv->scale = scale;
|
||||
if (scale != priv->scale) {
|
||||
priv->scale = scale;
|
||||
invalidate (renderer);
|
||||
}
|
||||
}
|
||||
@ -937,11 +941,13 @@ eek_renderer_get_size (EekRenderer *renderer,
|
||||
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||
if (width)
|
||||
*width = bounds.width * renderer->priv->scale;
|
||||
*width = bounds.width * priv->scale;
|
||||
if (height)
|
||||
*height = bounds.height * renderer->priv->scale;
|
||||
*height = bounds.height * priv->scale;
|
||||
}
|
||||
|
||||
void
|
||||
@ -960,20 +966,22 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_KEY(key));
|
||||
g_return_if_fail (bounds != NULL);
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
section = eek_element_get_parent (EEK_ELEMENT(key));
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(key), bounds);
|
||||
eek_element_get_bounds (section, §ion_bounds);
|
||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard),
|
||||
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard),
|
||||
&keyboard_bounds);
|
||||
|
||||
if (!rotate) {
|
||||
bounds->x += keyboard_bounds.x + section_bounds.x;
|
||||
bounds->y += keyboard_bounds.y + section_bounds.y;
|
||||
bounds->x *= renderer->priv->scale;
|
||||
bounds->y *= renderer->priv->scale;
|
||||
bounds->width *= renderer->priv->scale;
|
||||
bounds->height *= renderer->priv->scale;
|
||||
bounds->x *= priv->scale;
|
||||
bounds->y *= priv->scale;
|
||||
bounds->width *= priv->scale;
|
||||
bounds->height *= priv->scale;
|
||||
return;
|
||||
}
|
||||
points[0].x = bounds->x;
|
||||
@ -1005,24 +1013,30 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
||||
bounds->y = keyboard_bounds.y + section_bounds.y + min.y;
|
||||
bounds->width = (max.x - min.x);
|
||||
bounds->height = (max.y - min.y);
|
||||
bounds->x *= renderer->priv->scale;
|
||||
bounds->y *= renderer->priv->scale;
|
||||
bounds->width *= renderer->priv->scale;
|
||||
bounds->height *= renderer->priv->scale;
|
||||
bounds->x *= priv->scale;
|
||||
bounds->y *= priv->scale;
|
||||
bounds->width *= priv->scale;
|
||||
bounds->height *= priv->scale;
|
||||
}
|
||||
|
||||
gdouble
|
||||
eek_renderer_get_scale (EekRenderer *renderer)
|
||||
{
|
||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), 0);
|
||||
return renderer->priv->scale;
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
return priv->scale;
|
||||
}
|
||||
|
||||
PangoLayout *
|
||||
eek_renderer_create_pango_layout (EekRenderer *renderer)
|
||||
{
|
||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
||||
return pango_layout_new (renderer->priv->pcontext);
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
return pango_layout_new (priv->pcontext);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1100,7 +1114,9 @@ eek_renderer_set_default_foreground_color (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (color);
|
||||
|
||||
memcpy (&renderer->priv->default_foreground_color, color, sizeof(EekColor));
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
memcpy (&priv->default_foreground_color, color, sizeof(EekColor));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1110,7 +1126,9 @@ eek_renderer_set_default_background_color (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (color);
|
||||
|
||||
memcpy (&renderer->priv->default_background_color, color, sizeof(EekColor));
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
memcpy (&priv->default_background_color, color, sizeof(EekColor));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1123,11 +1141,13 @@ eek_renderer_get_foreground_color (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (color);
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
||||
if (theme_node)
|
||||
eek_theme_node_get_foreground_color (theme_node, color);
|
||||
else
|
||||
memcpy (color, &renderer->priv->default_foreground_color,
|
||||
memcpy (color, &priv->default_foreground_color,
|
||||
sizeof(EekColor));
|
||||
}
|
||||
|
||||
@ -1141,11 +1161,13 @@ eek_renderer_get_background_color (EekRenderer *renderer,
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (color);
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
||||
if (theme_node)
|
||||
eek_theme_node_get_background_color (theme_node, color);
|
||||
else
|
||||
memcpy (color, &renderer->priv->default_background_color,
|
||||
memcpy (color, &priv->default_background_color,
|
||||
sizeof(EekColor));
|
||||
}
|
||||
|
||||
@ -1208,12 +1230,14 @@ find_key_by_position_key_callback (EekElement *element,
|
||||
points[3].x = points[0].x;
|
||||
points[3].y = points[2].y;
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(points); i++) {
|
||||
eek_point_rotate (&points[i], data->angle);
|
||||
points[i].x += data->origin.x;
|
||||
points[i].y += data->origin.y;
|
||||
points[i].x *= data->renderer->priv->scale;
|
||||
points[i].y *= data->renderer->priv->scale;
|
||||
points[i].x *= priv->scale;
|
||||
points[i].y *= priv->scale;
|
||||
}
|
||||
|
||||
b1 = sign (&data->point, &points[0], &points[1]) < 0.0;
|
||||
@ -1268,12 +1292,14 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
|
||||
|
||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
if (x < bounds.x * renderer->priv->scale ||
|
||||
y < bounds.y * renderer->priv->scale ||
|
||||
x > bounds.width * renderer->priv->scale ||
|
||||
y > bounds.height * renderer->priv->scale)
|
||||
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||
|
||||
if (x < bounds.x * priv->scale ||
|
||||
y < bounds.y * priv->scale ||
|
||||
x > bounds.width * priv->scale ||
|
||||
y > bounds.height * priv->scale)
|
||||
return NULL;
|
||||
|
||||
data.point.x = x;
|
||||
@ -1283,7 +1309,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
|
||||
data.key = NULL;
|
||||
data.renderer = renderer;
|
||||
|
||||
eek_container_find (EEK_CONTAINER(renderer->priv->keyboard),
|
||||
eek_container_find (EEK_CONTAINER(priv->keyboard),
|
||||
find_key_by_position_section_callback,
|
||||
&data);
|
||||
return data.key;
|
||||
@ -1303,9 +1329,11 @@ create_theme_node_key_callback (EekElement *element,
|
||||
CreateThemeNodeData *data = user_data;
|
||||
EekThemeNode *theme_node;
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
|
||||
theme_node = eek_theme_node_new (data->context,
|
||||
data->parent,
|
||||
data->renderer->priv->theme,
|
||||
priv->theme,
|
||||
EEK_TYPE_KEY,
|
||||
eek_element_get_name (element),
|
||||
"key",
|
||||
@ -1318,7 +1346,7 @@ create_theme_node_key_callback (EekElement *element,
|
||||
|
||||
theme_node = eek_theme_node_new (data->context,
|
||||
data->parent,
|
||||
data->renderer->priv->theme,
|
||||
priv->theme,
|
||||
EEK_TYPE_KEY,
|
||||
eek_element_get_name (element),
|
||||
"key",
|
||||
@ -1337,9 +1365,11 @@ create_theme_node_section_callback (EekElement *element,
|
||||
CreateThemeNodeData *data = user_data;
|
||||
EekThemeNode *theme_node, *parent;
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||
|
||||
theme_node = eek_theme_node_new (data->context,
|
||||
data->parent,
|
||||
data->renderer->priv->theme,
|
||||
priv->theme,
|
||||
EEK_TYPE_SECTION,
|
||||
eek_element_get_name (element),
|
||||
"section",
|
||||
@ -1368,22 +1398,25 @@ eek_renderer_set_theme (EekRenderer *renderer,
|
||||
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
g_return_if_fail (EEK_IS_THEME(theme));
|
||||
g_return_if_fail (renderer->priv->keyboard);
|
||||
|
||||
if (renderer->priv->theme)
|
||||
g_object_unref (renderer->priv->theme);
|
||||
renderer->priv->theme = g_object_ref (theme);
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
g_return_if_fail (priv->keyboard);
|
||||
|
||||
if (priv->theme)
|
||||
g_object_unref (priv->theme);
|
||||
priv->theme = g_object_ref (theme);
|
||||
|
||||
theme_context = eek_theme_context_new ();
|
||||
theme_node = eek_theme_node_new (theme_context,
|
||||
NULL,
|
||||
renderer->priv->theme,
|
||||
priv->theme,
|
||||
EEK_TYPE_KEYBOARD,
|
||||
"keyboard",
|
||||
"keyboard",
|
||||
NULL,
|
||||
NULL);
|
||||
g_object_set_data_full (G_OBJECT(renderer->priv->keyboard),
|
||||
g_object_set_data_full (G_OBJECT(priv->keyboard),
|
||||
"theme-node",
|
||||
theme_node,
|
||||
(GDestroyNotify)g_object_unref);
|
||||
@ -1391,7 +1424,7 @@ eek_renderer_set_theme (EekRenderer *renderer,
|
||||
data.context = theme_context;
|
||||
data.parent = theme_node;
|
||||
data.renderer = renderer;
|
||||
eek_container_foreach_child (EEK_CONTAINER(renderer->priv->keyboard),
|
||||
eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
|
||||
create_theme_node_section_callback,
|
||||
&data);
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
|
||||
* Copyright (C) 2010-2011 Red Hat, Inc.
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
@ -52,11 +52,6 @@ enum {
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0, };
|
||||
|
||||
G_DEFINE_TYPE (EekSection, eek_section, EEK_TYPE_CONTAINER);
|
||||
|
||||
#define EEK_SECTION_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SECTION, EekSectionPrivate))
|
||||
|
||||
struct _EekRow
|
||||
{
|
||||
gint num_columns;
|
||||
@ -65,17 +60,19 @@ struct _EekRow
|
||||
|
||||
typedef struct _EekRow EekRow;
|
||||
|
||||
struct _EekSectionPrivate
|
||||
typedef struct _EekSectionPrivate
|
||||
{
|
||||
gint angle;
|
||||
GSList *rows;
|
||||
EekModifierType modifiers;
|
||||
};
|
||||
} EekSectionPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (EekSection, eek_section, EEK_TYPE_CONTAINER)
|
||||
|
||||
static gint
|
||||
eek_section_real_get_n_rows (EekSection *self)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
|
||||
return g_slist_length (priv->rows);
|
||||
}
|
||||
@ -85,7 +82,7 @@ eek_section_real_add_row (EekSection *self,
|
||||
gint num_columns,
|
||||
EekOrientation orientation)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
EekRow *row;
|
||||
|
||||
row = g_slice_new (EekRow);
|
||||
@ -100,7 +97,7 @@ eek_section_real_get_row (EekSection *self,
|
||||
gint *num_columns,
|
||||
EekOrientation *orientation)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
EekRow *row;
|
||||
|
||||
row = g_slist_nth_data (priv->rows, index);
|
||||
@ -129,7 +126,7 @@ static EekKey *
|
||||
eek_section_real_create_key (EekSection *self,
|
||||
guint keycode,
|
||||
gint column_index,
|
||||
guint row_index)
|
||||
gint row_index)
|
||||
{
|
||||
EekKey *key;
|
||||
gint num_rows;
|
||||
@ -138,7 +135,9 @@ eek_section_real_create_key (EekSection *self,
|
||||
num_rows = eek_section_get_n_rows (self);
|
||||
g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL);
|
||||
|
||||
row = g_slist_nth_data (self->priv->rows, row_index);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
|
||||
row = g_slist_nth_data (priv->rows, row_index);
|
||||
if (row->num_columns < column_index + 1)
|
||||
row->num_columns = column_index + 1;
|
||||
|
||||
@ -158,7 +157,7 @@ eek_section_real_create_key (EekSection *self,
|
||||
static void
|
||||
set_level_from_modifiers (EekSection *self)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
EekKeyboard *keyboard;
|
||||
EekModifierType num_lock_mask;
|
||||
gint level = -1;
|
||||
@ -173,7 +172,7 @@ set_level_from_modifiers (EekSection *self)
|
||||
static void
|
||||
eek_section_real_key_pressed (EekSection *self, EekKey *key)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
EekSymbol *symbol;
|
||||
EekKeyboard *keyboard;
|
||||
EekModifierBehavior behavior;
|
||||
@ -195,7 +194,7 @@ eek_section_real_key_pressed (EekSection *self, EekKey *key)
|
||||
static void
|
||||
eek_section_real_key_released (EekSection *self, EekKey *key)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
EekSymbol *symbol;
|
||||
EekKeyboard *keyboard;
|
||||
EekModifierBehavior behavior;
|
||||
@ -225,7 +224,8 @@ eek_section_real_key_released (EekSection *self, EekKey *key)
|
||||
static void
|
||||
eek_section_finalize (GObject *object)
|
||||
{
|
||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(object);
|
||||
EekSection *self = EEK_SECTION (object);
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||
GSList *head;
|
||||
|
||||
for (head = priv->rows; head; head = g_slist_next (head))
|
||||
@ -291,8 +291,6 @@ eek_section_class_init (EekSectionClass *klass)
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (EekSectionPrivate));
|
||||
|
||||
klass->get_n_rows = eek_section_real_get_n_rows;
|
||||
klass->add_row = eek_section_real_add_row;
|
||||
klass->get_row = eek_section_real_get_row;
|
||||
@ -367,7 +365,7 @@ eek_section_class_init (EekSectionClass *klass)
|
||||
static void
|
||||
eek_section_init (EekSection *self)
|
||||
{
|
||||
self->priv = EEK_SECTION_GET_PRIVATE (self);
|
||||
/* void */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -382,8 +380,11 @@ eek_section_set_angle (EekSection *section,
|
||||
gint angle)
|
||||
{
|
||||
g_return_if_fail (EEK_IS_SECTION(section));
|
||||
if (section->priv->angle != angle) {
|
||||
section->priv->angle = angle;
|
||||
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (section);
|
||||
|
||||
if (priv->angle != angle) {
|
||||
priv->angle = angle;
|
||||
g_object_notify (G_OBJECT(section), "angle");
|
||||
}
|
||||
}
|
||||
@ -398,7 +399,10 @@ gint
|
||||
eek_section_get_angle (EekSection *section)
|
||||
{
|
||||
g_return_val_if_fail (EEK_IS_SECTION(section), -1);
|
||||
return section->priv->angle;
|
||||
|
||||
EekSectionPrivate *priv = eek_section_get_instance_private (section);
|
||||
|
||||
return priv->angle;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -529,7 +533,7 @@ static void keycounter (EekElement *element, gpointer user_data) {
|
||||
}
|
||||
}
|
||||
|
||||
const double keyspacing = 3.0;
|
||||
const double keyspacing = 4.0;
|
||||
|
||||
static void keyplacer(EekElement *element, gpointer user_data) {
|
||||
double *current_offset = user_data;
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 >*/
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
Reference in New Issue
Block a user