Add XML layout engine (WIP).
This commit is contained in:
@ -87,8 +87,8 @@ AM_CONDITIONAL([HAVE_GTK_3],[test "$with_gtk" = "3.0"])
|
|||||||
AM_PATH_GLIB_2_0
|
AM_PATH_GLIB_2_0
|
||||||
PKG_CHECK_MODULES([GLIB2], [glib-2.0], ,
|
PKG_CHECK_MODULES([GLIB2], [glib-2.0], ,
|
||||||
[AC_MSG_ERROR([GLib2 not found])])
|
[AC_MSG_ERROR([GLib2 not found])])
|
||||||
PKG_CHECK_MODULES([GOBJECT2], [gobject-2.0], ,
|
PKG_CHECK_MODULES([GIO2], [gio-2.0], ,
|
||||||
[AC_MSG_ERROR([GObject2 not found])])
|
[AC_MSG_ERROR([Gio2 not found])])
|
||||||
PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo], ,
|
PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo], ,
|
||||||
[AC_MSG_ERROR([PangoCairo not found])])
|
[AC_MSG_ERROR([PangoCairo not found])])
|
||||||
PKG_CHECK_MODULES([GTK], [
|
PKG_CHECK_MODULES([GTK], [
|
||||||
|
|||||||
@ -102,12 +102,12 @@ expand_content_files=eek-overview.xml
|
|||||||
# signals and properties.
|
# signals and properties.
|
||||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
GTKDOC_CFLAGS = $(GOBJECT2_CFLAGS)
|
GTKDOC_CFLAGS = $(GIO2_CFLAGS)
|
||||||
GTKDOC_LIBS = $(top_srcdir)/eek/libeek.la \
|
GTKDOC_LIBS = $(top_srcdir)/eek/libeek.la \
|
||||||
$(top_srcdir)/eek/libeek-gtk.la \
|
$(top_srcdir)/eek/libeek-gtk.la \
|
||||||
$(top_srcdir)/eek/libeek-xkb.la \
|
$(top_srcdir)/eek/libeek-xkb.la \
|
||||||
$(top_srcdir)/eek/libeek-xkl.la \
|
$(top_srcdir)/eek/libeek-xkl.la \
|
||||||
$(GOBJECT2_LIBS) \
|
$(GIO2_LIBS) \
|
||||||
$(XKB_LIBS)
|
$(XKB_LIBS)
|
||||||
|
|
||||||
if HAVE_CLUTTER
|
if HAVE_CLUTTER
|
||||||
|
|||||||
@ -35,8 +35,17 @@ libeek_public_headers = \
|
|||||||
$(srcdir)/eek-key.h \
|
$(srcdir)/eek-key.h \
|
||||||
$(srcdir)/eek-types.h \
|
$(srcdir)/eek-types.h \
|
||||||
$(srcdir)/eek-keysym.h \
|
$(srcdir)/eek-keysym.h \
|
||||||
|
$(srcdir)/eek-xml.h \
|
||||||
$(srcdir)/eek.h
|
$(srcdir)/eek.h
|
||||||
|
|
||||||
|
libeek_private_headers = \
|
||||||
|
$(srcdir)/eek-renderer.h \
|
||||||
|
$(srcdir)/eek-xml-layout.h \
|
||||||
|
$(srcdir)/eek-special-keysym-labels.h \
|
||||||
|
$(srcdir)/eek-unicode-keysym-labels.h \
|
||||||
|
$(srcdir)/eek-keyname-keysym-labels.h \
|
||||||
|
$(srcdir)/eek-marshallers.h
|
||||||
|
|
||||||
libeek_sources = \
|
libeek_sources = \
|
||||||
$(srcdir)/eek-layout.c \
|
$(srcdir)/eek-layout.c \
|
||||||
$(srcdir)/eek-element.c \
|
$(srcdir)/eek-element.c \
|
||||||
@ -46,6 +55,8 @@ libeek_sources = \
|
|||||||
$(srcdir)/eek-key.c \
|
$(srcdir)/eek-key.c \
|
||||||
$(srcdir)/eek-types.c \
|
$(srcdir)/eek-types.c \
|
||||||
$(srcdir)/eek-keysym.c \
|
$(srcdir)/eek-keysym.c \
|
||||||
|
$(srcdir)/eek-xml.c \
|
||||||
|
$(srcdir)/eek-xml-layout.c \
|
||||||
$(srcdir)/eek-renderer.c \
|
$(srcdir)/eek-renderer.c \
|
||||||
$(srcdir)/eek-keyboard-drawing.c
|
$(srcdir)/eek-keyboard-drawing.c
|
||||||
|
|
||||||
@ -62,13 +73,6 @@ libeek_marshallers_sources = \
|
|||||||
$(srcdir)/eek-marshallers.c \
|
$(srcdir)/eek-marshallers.c \
|
||||||
$(srcdir)/eek-marshallers.h
|
$(srcdir)/eek-marshallers.h
|
||||||
|
|
||||||
libeek_private_headers = \
|
|
||||||
$(srcdir)/eek-renderer.h \
|
|
||||||
$(srcdir)/eek-special-keysym-labels.h \
|
|
||||||
$(srcdir)/eek-unicode-keysym-labels.h \
|
|
||||||
$(srcdir)/eek-keyname-keysym-labels.h \
|
|
||||||
$(srcdir)/eek-marshallers.h
|
|
||||||
|
|
||||||
BUILT_SOURCES = \
|
BUILT_SOURCES = \
|
||||||
$(libeek_keysym_sources) \
|
$(libeek_keysym_sources) \
|
||||||
$(libeek_marshallers_sources)
|
$(libeek_marshallers_sources)
|
||||||
@ -77,8 +81,8 @@ libeek_la_SOURCES = \
|
|||||||
$(libeek_sources) \
|
$(libeek_sources) \
|
||||||
$(srcdir)/eek-marshallers.c
|
$(srcdir)/eek-marshallers.c
|
||||||
|
|
||||||
libeek_la_CFLAGS = $(GOBJECT2_CFLAGS) $(PANGOCAIRO_CFLAGS)
|
libeek_la_CFLAGS = $(GIO2_CFLAGS) $(PANGOCAIRO_CFLAGS)
|
||||||
libeek_la_LIBADD = $(GOBJECT2_LIBS) $(PANGOCAIRO_LIBS) -lm
|
libeek_la_LIBADD = $(GIO2_LIBS) $(PANGOCAIRO_LIBS) -lm
|
||||||
|
|
||||||
if HAVE_CLUTTER
|
if HAVE_CLUTTER
|
||||||
libeek_clutter_public_headers = \
|
libeek_clutter_public_headers = \
|
||||||
@ -198,7 +202,7 @@ if HAVE_INTROSPECTION
|
|||||||
|
|
||||||
Eek@EEK_LIBRARY_SUFFIX@.gir: libeek.la
|
Eek@EEK_LIBRARY_SUFFIX@.gir: libeek.la
|
||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eek --pkg=glib-2.0
|
Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eek --pkg=glib-2.0
|
||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GLib-2.0 GObject-2.0
|
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_CFLAGS = $(libeek_la_CFLAGS)
|
||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la
|
Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la
|
||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers)
|
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers)
|
||||||
|
|||||||
@ -83,9 +83,12 @@ validate (const gchar *element_name,
|
|||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
gchar *element_path;
|
gchar *element_path;
|
||||||
|
GSList *head;
|
||||||
|
|
||||||
|
head = g_slist_prepend (element_stack, element_name);
|
||||||
|
element_path = join_element_names (head);
|
||||||
|
g_slist_free1 (head);
|
||||||
|
|
||||||
element_stack = g_slist_prepend (element_stack, element_name);
|
|
||||||
element_path = join_element_names (element_stack);
|
|
||||||
for (i = 0; i < G_N_ELEMENTS(valid_path_list); i++) {
|
for (i = 0; i < G_N_ELEMENTS(valid_path_list); i++) {
|
||||||
if (*valid_path_list[i] == '@')
|
if (*valid_path_list[i] == '@')
|
||||||
continue;
|
continue;
|
||||||
@ -163,11 +166,11 @@ end_element_callback (GMarkupParseContext *pcontext,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
ParseCallbackData *data = user_data;
|
ParseCallbackData *data = user_data;
|
||||||
|
GSList *head = data->element_stack;
|
||||||
|
|
||||||
g_free (data->element_stack->data);
|
g_free (head->data);
|
||||||
data->element_stack = g_slist_remove_link (data->element_stack,
|
data->element_stack = g_slist_next (data->element_stack);
|
||||||
data->element_stack);
|
g_slist_free1 (head);
|
||||||
g_slist_free1 (data->element_stack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -25,5 +25,6 @@
|
|||||||
#include "eek-key.h"
|
#include "eek-key.h"
|
||||||
#include "eek-layout.h"
|
#include "eek-layout.h"
|
||||||
#include "eek-keysym.h"
|
#include "eek-keysym.h"
|
||||||
|
#include "eek-xml.h"
|
||||||
|
|
||||||
#endif /* EEK_H */
|
#endif /* EEK_H */
|
||||||
|
|||||||
@ -20,7 +20,7 @@ if ENABLE_EEKBOARD
|
|||||||
bin_PROGRAMS = eekboard
|
bin_PROGRAMS = eekboard
|
||||||
eekboard_CFLAGS = \
|
eekboard_CFLAGS = \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
$(GOBJECT2_CFLAGS) \
|
$(GIO2_CFLAGS) \
|
||||||
$(GTK_CFLAGS) \
|
$(GTK_CFLAGS) \
|
||||||
$(GCONF2_CFLAGS) \
|
$(GCONF2_CFLAGS) \
|
||||||
$(XKB_CFLAGS) \
|
$(XKB_CFLAGS) \
|
||||||
@ -33,7 +33,7 @@ eekboard_LDFLAGS = \
|
|||||||
$(top_builddir)/eek/libeek.la \
|
$(top_builddir)/eek/libeek.la \
|
||||||
$(top_builddir)/eek/libeek-xkl.la \
|
$(top_builddir)/eek/libeek-xkl.la \
|
||||||
$(top_builddir)/eek/libeek-gtk.la \
|
$(top_builddir)/eek/libeek-gtk.la \
|
||||||
$(GOBJECT2_LIBS) \
|
$(GIO2_LIBS) \
|
||||||
$(GTK_LIBS) \
|
$(GTK_LIBS) \
|
||||||
$(GCONF2_LIBS) \
|
$(GCONF2_LIBS) \
|
||||||
$(XKB_LIBS) \
|
$(XKB_LIBS) \
|
||||||
|
|||||||
@ -209,6 +209,7 @@ static gboolean opt_version = FALSE;
|
|||||||
static gboolean opt_popup = FALSE;
|
static gboolean opt_popup = FALSE;
|
||||||
static gchar *opt_config = NULL;
|
static gchar *opt_config = NULL;
|
||||||
static gboolean opt_fullscreen = FALSE;
|
static gboolean opt_fullscreen = FALSE;
|
||||||
|
static gboolean opt_xml = FALSE;
|
||||||
|
|
||||||
static const GOptionEntry options[] = {
|
static const GOptionEntry options[] = {
|
||||||
{"model", 'M', 0, G_OPTION_ARG_STRING, &opt_model,
|
{"model", 'M', 0, G_OPTION_ARG_STRING, &opt_model,
|
||||||
@ -229,6 +230,8 @@ static const GOptionEntry options[] = {
|
|||||||
N_("Start in fullscreen mode")},
|
N_("Start in fullscreen mode")},
|
||||||
{"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
|
{"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
|
||||||
N_("Specify configuration file")},
|
N_("Specify configuration file")},
|
||||||
|
{"xml", '\0', 0, G_OPTION_ARG_NONE, &opt_xml,
|
||||||
|
N_("Dump the keyboard in XML")},
|
||||||
{"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
|
{"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
|
||||||
N_("Display version")},
|
N_("Display version")},
|
||||||
{NULL}
|
{NULL}
|
||||||
@ -1024,6 +1027,22 @@ on_allocation_changed (ClutterActor *stage,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static EekKeyboard *
|
||||||
|
create_keyboard (Eekboard *eekboard,
|
||||||
|
gint initial_width,
|
||||||
|
gint initial_height)
|
||||||
|
{
|
||||||
|
EekKeyboard *keyboard;
|
||||||
|
|
||||||
|
keyboard = eek_keyboard_new (eekboard->layout,
|
||||||
|
initial_width,
|
||||||
|
initial_height);
|
||||||
|
eek_keyboard_set_modifier_behavior (keyboard,
|
||||||
|
EEK_MODIFIER_BEHAVIOR_LATCH);
|
||||||
|
|
||||||
|
return keyboard;
|
||||||
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_widget (Eekboard *eekboard,
|
create_widget (Eekboard *eekboard,
|
||||||
gint initial_width,
|
gint initial_width,
|
||||||
@ -1035,11 +1054,9 @@ create_widget (Eekboard *eekboard,
|
|||||||
#endif
|
#endif
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
eekboard->keyboard = eek_keyboard_new (eekboard->layout,
|
eekboard->keyboard = create_keyboard (eekboard,
|
||||||
initial_width,
|
initial_width,
|
||||||
initial_height);
|
initial_height);
|
||||||
eek_keyboard_set_modifier_behavior (eekboard->keyboard,
|
|
||||||
EEK_MODIFIER_BEHAVIOR_LATCH);
|
|
||||||
eekboard->on_key_pressed_id =
|
eekboard->on_key_pressed_id =
|
||||||
g_signal_connect (eekboard->keyboard, "key-pressed",
|
g_signal_connect (eekboard->keyboard, "key-pressed",
|
||||||
G_CALLBACK(on_key_pressed), eekboard);
|
G_CALLBACK(on_key_pressed), eekboard);
|
||||||
@ -1175,6 +1192,18 @@ eekboard_new (gboolean accessibility_enabled)
|
|||||||
eek_xkl_layout_set_options (EEK_XKL_LAYOUT(eekboard->layout), options);
|
eek_xkl_layout_set_options (EEK_XKL_LAYOUT(eekboard->layout), options);
|
||||||
g_strfreev (options);
|
g_strfreev (options);
|
||||||
}
|
}
|
||||||
|
if (opt_xml) {
|
||||||
|
EekKeyboard *keyboard;
|
||||||
|
GString *output;
|
||||||
|
|
||||||
|
output = g_string_sized_new (BUFSIZ);
|
||||||
|
keyboard = create_keyboard (eekboard, CSW, CSH);
|
||||||
|
eek_keyboard_output (keyboard, output, 0);
|
||||||
|
fwrite (output->str, output->len, 1, stdout);
|
||||||
|
g_string_free (output, TRUE);
|
||||||
|
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
g_signal_connect (eekboard->layout, "changed",
|
g_signal_connect (eekboard->layout, "changed",
|
||||||
G_CALLBACK(on_changed), eekboard);
|
G_CALLBACK(on_changed), eekboard);
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
# 02110-1301 USA
|
# 02110-1301 USA
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir) $(GOBJECT2_CFLAGS) $(GTK_CFLAGS) $(XKB_CFLAGS)
|
INCLUDES = -I$(top_srcdir) $(GIO2_CFLAGS) $(GTK_CFLAGS) $(XKB_CFLAGS)
|
||||||
|
|
||||||
TESTS = eek-simple-test eek-xkb-test
|
TESTS = eek-simple-test eek-xkb-test
|
||||||
noinst_PROGRAMS = $(TESTS)
|
noinst_PROGRAMS = $(TESTS)
|
||||||
|
|||||||
Reference in New Issue
Block a user